diff --git a/.gitignore b/.gitignore index c0df48e..4703478 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,3 @@ firmware local.mk local.h screenlog.* -*.swp diff --git a/.gitmodules b/.gitmodules index 5647056..fe22af1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "lwip/lwip"] path = lwip/lwip - url = https://github.com/ourairquality/lwip.git + url = https://github.com/SuperHouse/esp-lwip.git [submodule "extras/mbedtls/mbedtls"] path = extras/mbedtls/mbedtls url = https://github.com/ARMmbed/mbedtls.git @@ -10,39 +10,6 @@ [submodule "bootloader/rboot"] path = bootloader/rboot url = https://github.com/raburton/rboot.git -[submodule "extras/spiffs/spiffs"] - path = extras/spiffs/spiffs - url = https://github.com/pellepl/spiffs.git -[submodule "tests/unity"] - path = tests/unity - url = https://github.com/ThrowTheSwitch/Unity.git -[submodule "tests/fs-test"] - path = tests/fs-test - url = https://github.com/sheinz/fs-test -[submodule "extras/bearssl/BearSSL"] - path = extras/bearssl/BearSSL - url = https://www.bearssl.org/git/BearSSL -[submodule "extras/http-parser/http-parser"] - path = extras/http-parser/http-parser - url = https://github.com/nodejs/http-parser -[submodule "extras/crc_generic/crc_lib"] - path = extras/crc_generic/crc_lib - url = https://github.com/Zaltora/crc_generic_lib.git -[submodule "extras/libesphttpd/libesphttpd"] - path = extras/libesphttpd/libesphttpd - url = https://github.com/nochkin/libesphttpd -[submodule "extras/libesphttpd/libesphttpd/lib/heatshrink"] - path = extras/libesphttpd/libesphttpd/lib/heatshrink - url = https://github.com/atomicobject/heatshrink -[submodule "extras/multipwm"] - path = extras/multipwm - url = https://github.com/nochkin/multipwm -[submodule "lvgl/lvgl"] - path = lvgl/lvgl - url = https://github.com/littlevgl/lvgl.git -[submodule "lvgl/lv_drivers"] - path = lvgl/lv_drivers - url = https://github.com/littlevgl/lv_drivers.git -[submodule "lvgl/lv_examples"] - path = lvgl/lv_examples - url = https://github.com/littlevgl/lv_examples.git +[submodule "extras/paho_mqtt_c/org.eclipse.paho.mqtt.embedded-c"] + path = extras/paho_mqtt_c/org.eclipse.paho.mqtt.embedded-c + url = https://git.eclipse.org/r/paho/org.eclipse.paho.mqtt.embedded-c diff --git a/.travis.yml b/.travis.yml index 4d2597d..4bd0884 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: c sudo: false env: # Target commit for https://github.com/pfalcon/esp-open-sdk/ - OPENSDK_COMMIT=b069537 + OPENSDK_COMMIT=a48b12f CROSS_ROOT="${HOME}/toolchain-${OPENSDK_COMMIT}" CROSS_BINDIR="${CROSS_ROOT}/bin" CROSS="ccache xtensa-lx106-elf-" @@ -29,21 +29,18 @@ addons: - libncurses5-dev - libexpat1-dev - python - - python-pip + - python-serial - sed - git - - help2man - vim-common - - zlib1g-dev before_install: - - pip install --user pyserial - travis_wait 30 utils/travis_build/install_toolchain.sh script: - cd ${TRAVIS_BUILD_DIR} # Remove ssid_config requirement for examples - - echo -e '#define WIFI_SSID "mywifissid"\n#define WIFI_PASS "my secret password"\n' > include/private_ssid_config.h + - sed -i "s%#error%//#error%" include/ssid_config.h # Don't verbose-build all examples (too much output), only verbose-build errors - ( ${MAKE_CMD} ) || ( ${MAKE_CMD} V=1 ) # build bootloader diff --git a/FreeRTOS/License/license.txt b/FreeRTOS/License/license.txt index 2977d52..e48ed80 100644 --- a/FreeRTOS/License/license.txt +++ b/FreeRTOS/License/license.txt @@ -1,37 +1,440 @@ -The FreeRTOS kernel is released under the MIT open source license, the text of -which is provided below. +The FreeRTOS.org source code is licensed by the *modified* GNU General Public +License (GPL), text provided below. A special exception to the GPL is +included to allow you to distribute a combined work that includes FreeRTOS +without being obliged to provide the source code for any proprietary +components. See the licensing section of http://www.FreeRTOS.org for full +details. The exception text is also included at the bottom of this file. -This license covers the FreeRTOS kernel source files, which are located in the -/FreeRTOS/Source directory of the official FreeRTOS kernel download. It also -covers most of the source files in the demo application projects, which are -located in the /FreeRTOS/Demo directory of the official FreeRTOS download. The -demo projects may also include third party software that is not part of FreeRTOS -and is licensed separately to FreeRTOS. Examples of third party software -includes header files provided by chip or tools vendors, linker scripts, -peripheral drivers, etc. All the software in subdirectories of the /FreeRTOS -directory is either open source or distributed with permission, and is free for -use. For the avoidance of doubt, refer to the comments at the top of each -source file. +The FreeRTOS download also includes demo application source code, some of +which is provided by third parties AND IS LICENSED SEPARATELY FROM FREERTOS. + +For the avoidance of any doubt refer to the comment included at the top +of each source and header file for license and copyright information. + +This is a list of files for which Real Time Engineers Ltd are not the +copyright owner and are NOT COVERED BY THE GPL. -License text: -------------- +1) Various header files provided by silicon manufacturers and tool vendors + that define processor specific memory addresses and utility macros. + Permission has been granted by the various copyright holders for these + files to be included in the FreeRTOS download. Users must ensure license + conditions are adhered to for any use other than compilation of the + FreeRTOS demo applications. -Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: +2) The uIP TCP/IP stack the copyright of which is held by Adam Dunkels. + Users must ensure the open source license conditions stated at the top + of each uIP source file is understood and adhered to. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +3) The lwIP TCP/IP stack the copyright of which is held by the Swedish + Institute of Computer Science. Users must ensure the open source license + conditions stated at the top of each lwIP source file is understood and + adhered to. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +4) Various peripheral driver source files and binaries provided by silicon + manufacturers and tool vendors. Permission has been granted by the + various copyright holders for these files to be included in the FreeRTOS + download. Users must ensure license conditions are adhered to for any + use other than compilation of the FreeRTOS demo applications. +5) The files contained within FreeRTOS\Demo\WizNET_DEMO_TERN_186\tern_code, + which are slightly modified versions of code provided by and copyright to + Tern Inc. + +Errors and omissions should be reported to Richard Barry, contact details for +whom can be obtained from http://www.FreeRTOS.org. + + + + + +The GPL license text follows. + +A special exception to the GPL is included to allow you to distribute a +combined work that includes FreeRTOS without being obliged to provide +the source code for any proprietary components. See the licensing section +of http://www.FreeRTOS.org for full details. The exception text is also +included at the bottom of this file. + +-------------------------------------------------------------------- + + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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 2 of the License, or + (at your option) any later version. + + This program 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, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +---------------------------------------------------------------------------- + +The FreeRTOS GPL Exception Text: + +Any FreeRTOS source code, whether modified or in it's original release form, +or whether in whole or in part, can only be distributed by you under the terms +of the GNU General Public License plus this exception. An independent module is +a module which is not derived from or based on FreeRTOS. + +Clause 1: + +Linking FreeRTOS statically or dynamically with other modules is making a +combined work based on FreeRTOS. Thus, the terms and conditions of the GNU +General Public License cover the whole combination. + +As a special exception, the copyright holder of FreeRTOS gives you permission +to link FreeRTOS with independent modules that communicate with FreeRTOS +solely through the FreeRTOS API interface, regardless of the license terms of +these independent modules, and to copy and distribute the resulting combined +work under terms of your choice, provided that + + + Every copy of the combined work is accompanied by a written statement that + details to the recipient the version of FreeRTOS used and an offer by yourself + to provide the FreeRTOS source code (including any modifications you may have + made) should the recipient request it. + + + The combined work is not itself an RTOS, scheduler, kernel or related product. + + + The independent modules add significant and primary functionality to FreeRTOS + and do not merely extend the existing functionality already present in FreeRTOS. + +Clause 2: + +FreeRTOS may not be used for any competitive or comparative purpose, including the +publication of any form of run time or compile time metric, without the express +permission of Real Time Engineers Ltd. (this is the norm within the industry and +is intended to ensure information accuracy). diff --git a/FreeRTOS/Source/croutine.c b/FreeRTOS/Source/croutine.c index 33d4fb3..b95ff45 100644 --- a/FreeRTOS/Source/croutine.c +++ b/FreeRTOS/Source/croutine.c @@ -1,37 +1,71 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #include "FreeRTOS.h" #include "task.h" #include "croutine.h" -/* Remove the whole file is co-routines are not being used. */ -#if( configUSE_CO_ROUTINES != 0 ) - /* * Some kernel aware debuggers require data to be viewed to be global, rather * than file scope. @@ -42,17 +76,17 @@ /* Lists for ready and blocked co-routines. --------------------*/ -static List_t pxReadyCoRoutineLists[ configMAX_CO_ROUTINE_PRIORITIES ]; /*< Prioritised ready co-routines. */ -static List_t xDelayedCoRoutineList1; /*< Delayed co-routines. */ -static List_t xDelayedCoRoutineList2; /*< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */ -static List_t * pxDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used. */ -static List_t * pxOverflowDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */ -static List_t xPendingReadyCoRoutineList; /*< Holds co-routines that have been readied by an external event. They cannot be added directly to the ready lists as the ready lists cannot be accessed by interrupts. */ +static xList pxReadyCoRoutineLists[ configMAX_CO_ROUTINE_PRIORITIES ]; /*< Prioritised ready co-routines. */ +static xList xDelayedCoRoutineList1; /*< Delayed co-routines. */ +static xList xDelayedCoRoutineList2; /*< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */ +static xList * pxDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used. */ +static xList * pxOverflowDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */ +static xList xPendingReadyCoRoutineList; /*< Holds co-routines that have been readied by an external event. They cannot be added directly to the ready lists as the ready lists cannot be accessed by interrupts. */ /* Other file private variables. --------------------------------*/ -CRCB_t * pxCurrentCoRoutine = NULL; -static UBaseType_t uxTopCoRoutineReadyPriority = 0; -static TickType_t xCoRoutineTickCount = 0, xLastTickCount = 0, xPassedTicks = 0; +corCRCB * pxCurrentCoRoutine = NULL; +static unsigned portBASE_TYPE uxTopCoRoutineReadyPriority = 0; +static portTickType xCoRoutineTickCount = 0, xLastTickCount = 0, xPassedTicks = 0; /* The initial state of the co-routine when it is created. */ #define corINITIAL_STATE ( 0 ) @@ -70,7 +104,7 @@ static TickType_t xCoRoutineTickCount = 0, xLastTickCount = 0, xPassedTicks = 0; { \ uxTopCoRoutineReadyPriority = pxCRCB->uxPriority; \ } \ - vListInsertEnd( ( List_t * ) &( pxReadyCoRoutineLists[ pxCRCB->uxPriority ] ), &( pxCRCB->xGenericListItem ) ); \ + vListInsertEnd( ( xList * ) &( pxReadyCoRoutineLists[ pxCRCB->uxPriority ] ), &( pxCRCB->xGenericListItem ) ); \ } /* @@ -99,13 +133,13 @@ static void prvCheckDelayedList( void ); /*-----------------------------------------------------------*/ -BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex ) +signed portBASE_TYPE xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, unsigned portBASE_TYPE uxPriority, unsigned portBASE_TYPE uxIndex ) { -BaseType_t xReturn; -CRCB_t *pxCoRoutine; +signed portBASE_TYPE xReturn; +corCRCB *pxCoRoutine; /* Allocate the memory that will store the co-routine control block. */ - pxCoRoutine = ( CRCB_t * ) pvPortMalloc( sizeof( CRCB_t ) ); + pxCoRoutine = ( corCRCB * ) pvPortMalloc( sizeof( corCRCB ) ); if( pxCoRoutine ) { /* If pxCurrentCoRoutine is NULL then this is the first co-routine to @@ -132,14 +166,14 @@ CRCB_t *pxCoRoutine; vListInitialiseItem( &( pxCoRoutine->xGenericListItem ) ); vListInitialiseItem( &( pxCoRoutine->xEventListItem ) ); - /* Set the co-routine control block as a link back from the ListItem_t. + /* Set the co-routine control block as a link back from the xListItem. This is so we can get back to the containing CRCB from a generic item in a list. */ listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xGenericListItem ), pxCoRoutine ); listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xEventListItem ), pxCoRoutine ); /* Event lists are always in priority order. */ - listSET_LIST_ITEM_VALUE( &( pxCoRoutine->xEventListItem ), ( ( TickType_t ) configMAX_CO_ROUTINE_PRIORITIES - ( TickType_t ) uxPriority ) ); + listSET_LIST_ITEM_VALUE( &( pxCoRoutine->xEventListItem ), configMAX_PRIORITIES - ( portTickType ) uxPriority ); /* Now the co-routine has been initialised it can be added to the ready list at the correct priority. */ @@ -156,9 +190,9 @@ CRCB_t *pxCoRoutine; } /*-----------------------------------------------------------*/ -void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay, List_t *pxEventList ) +void vCoRoutineAddToDelayedList( portTickType xTicksToDelay, xList *pxEventList ) { -TickType_t xTimeToWake; +portTickType xTimeToWake; /* Calculate the time to wake - this may overflow but this is not a problem. */ @@ -167,7 +201,7 @@ TickType_t xTimeToWake; /* We must remove ourselves from the ready list before adding ourselves to the blocked list as the same list item is used for both lists. */ - ( void ) uxListRemove( ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) ); + ( void ) uxListRemove( ( xListItem * ) &( pxCurrentCoRoutine->xGenericListItem ) ); /* The list item will be inserted in wake time order. */ listSET_LIST_ITEM_VALUE( &( pxCurrentCoRoutine->xGenericListItem ), xTimeToWake ); @@ -176,13 +210,13 @@ TickType_t xTimeToWake; { /* Wake time has overflowed. Place this item in the overflow list. */ - vListInsert( ( List_t * ) pxOverflowDelayedCoRoutineList, ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) ); + vListInsert( ( xList * ) pxOverflowDelayedCoRoutineList, ( xListItem * ) &( pxCurrentCoRoutine->xGenericListItem ) ); } else { /* The wake time has not overflowed, so we can use the current block list. */ - vListInsert( ( List_t * ) pxDelayedCoRoutineList, ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) ); + vListInsert( ( xList * ) pxDelayedCoRoutineList, ( xListItem * ) &( pxCurrentCoRoutine->xGenericListItem ) ); } if( pxEventList ) @@ -201,12 +235,12 @@ static void prvCheckPendingReadyList( void ) the ready lists itself. */ while( listLIST_IS_EMPTY( &xPendingReadyCoRoutineList ) == pdFALSE ) { - CRCB_t *pxUnblockedCRCB; + corCRCB *pxUnblockedCRCB; /* The pending ready list can be accessed by an ISR. */ portDISABLE_INTERRUPTS(); { - pxUnblockedCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( (&xPendingReadyCoRoutineList) ); + pxUnblockedCRCB = ( corCRCB * ) listGET_OWNER_OF_HEAD_ENTRY( (&xPendingReadyCoRoutineList) ); ( void ) uxListRemove( &( pxUnblockedCRCB->xEventListItem ) ); } portENABLE_INTERRUPTS(); @@ -219,7 +253,7 @@ static void prvCheckPendingReadyList( void ) static void prvCheckDelayedList( void ) { -CRCB_t *pxCRCB; +corCRCB *pxCRCB; xPassedTicks = xTaskGetTickCount() - xLastTickCount; while( xPassedTicks ) @@ -230,7 +264,7 @@ CRCB_t *pxCRCB; /* If the tick count has overflowed we need to swap the ready lists. */ if( xCoRoutineTickCount == 0 ) { - List_t * pxTemp; + xList * pxTemp; /* Tick count has overflowed so we need to swap the delay lists. If there are any items in pxDelayedCoRoutineList here then there is an error! */ @@ -242,7 +276,7 @@ CRCB_t *pxCRCB; /* See if this tick has made a timeout expire. */ while( listLIST_IS_EMPTY( pxDelayedCoRoutineList ) == pdFALSE ) { - pxCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedCoRoutineList ); + pxCRCB = ( corCRCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedCoRoutineList ); if( xCoRoutineTickCount < listGET_LIST_ITEM_VALUE( &( pxCRCB->xGenericListItem ) ) ) { @@ -257,10 +291,10 @@ CRCB_t *pxCRCB; have been moved to the pending ready list and the following line is still valid. Also the pvContainer parameter will have been set to NULL so the following lines are also valid. */ - ( void ) uxListRemove( &( pxCRCB->xGenericListItem ) ); + uxListRemove( &( pxCRCB->xGenericListItem ) ); /* Is the co-routine waiting on an event also? */ - if( pxCRCB->xEventListItem.pxContainer ) + if( pxCRCB->xEventListItem.pvContainer ) { ( void ) uxListRemove( &( pxCRCB->xEventListItem ) ); } @@ -307,16 +341,16 @@ void vCoRoutineSchedule( void ) static void prvInitialiseCoRoutineLists( void ) { -UBaseType_t uxPriority; +unsigned portBASE_TYPE uxPriority; for( uxPriority = 0; uxPriority < configMAX_CO_ROUTINE_PRIORITIES; uxPriority++ ) { - vListInitialise( ( List_t * ) &( pxReadyCoRoutineLists[ uxPriority ] ) ); + vListInitialise( ( xList * ) &( pxReadyCoRoutineLists[ uxPriority ] ) ); } - vListInitialise( ( List_t * ) &xDelayedCoRoutineList1 ); - vListInitialise( ( List_t * ) &xDelayedCoRoutineList2 ); - vListInitialise( ( List_t * ) &xPendingReadyCoRoutineList ); + vListInitialise( ( xList * ) &xDelayedCoRoutineList1 ); + vListInitialise( ( xList * ) &xDelayedCoRoutineList2 ); + vListInitialise( ( xList * ) &xPendingReadyCoRoutineList ); /* Start with pxDelayedCoRoutineList using list1 and the pxOverflowDelayedCoRoutineList using list2. */ @@ -325,17 +359,17 @@ UBaseType_t uxPriority; } /*-----------------------------------------------------------*/ -BaseType_t xCoRoutineRemoveFromEventList( const List_t *pxEventList ) +signed portBASE_TYPE xCoRoutineRemoveFromEventList( const xList *pxEventList ) { -CRCB_t *pxUnblockedCRCB; -BaseType_t xReturn; +corCRCB *pxUnblockedCRCB; +signed portBASE_TYPE xReturn; /* This function is called from within an interrupt. It can only access event lists and the pending ready list. This function assumes that a check has already been made to ensure pxEventList is not empty. */ - pxUnblockedCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); + pxUnblockedCRCB = ( corCRCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); ( void ) uxListRemove( &( pxUnblockedCRCB->xEventListItem ) ); - vListInsertEnd( ( List_t * ) &( xPendingReadyCoRoutineList ), &( pxUnblockedCRCB->xEventListItem ) ); + vListInsertEnd( ( xList * ) &( xPendingReadyCoRoutineList ), &( pxUnblockedCRCB->xEventListItem ) ); if( pxUnblockedCRCB->uxPriority >= pxCurrentCoRoutine->uxPriority ) { @@ -349,5 +383,3 @@ BaseType_t xReturn; return xReturn; } -#endif /* configUSE_CO_ROUTINES == 0 */ - diff --git a/FreeRTOS/Source/event_groups.c b/FreeRTOS/Source/event_groups.c deleted file mode 100644 index f23047c..0000000 --- a/FreeRTOS/Source/event_groups.c +++ /dev/null @@ -1,753 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/* Standard includes. */ -#include - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* FreeRTOS includes. */ -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "event_groups.h" - -/* Lint e961, e750 and e9021 are suppressed as a MISRA exception justified -because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined -for the header files above, but not in this file, in order to generate the -correct privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750 !e9021 See comment above. */ - -/* The following bit fields convey control information in a task's event list -item value. It is important they don't clash with the -taskEVENT_LIST_ITEM_VALUE_IN_USE definition. */ -#if configUSE_16_BIT_TICKS == 1 - #define eventCLEAR_EVENTS_ON_EXIT_BIT 0x0100U - #define eventUNBLOCKED_DUE_TO_BIT_SET 0x0200U - #define eventWAIT_FOR_ALL_BITS 0x0400U - #define eventEVENT_BITS_CONTROL_BYTES 0xff00U -#else - #define eventCLEAR_EVENTS_ON_EXIT_BIT 0x01000000UL - #define eventUNBLOCKED_DUE_TO_BIT_SET 0x02000000UL - #define eventWAIT_FOR_ALL_BITS 0x04000000UL - #define eventEVENT_BITS_CONTROL_BYTES 0xff000000UL -#endif - -typedef struct EventGroupDef_t -{ - EventBits_t uxEventBits; - List_t xTasksWaitingForBits; /*< List of tasks waiting for a bit to be set. */ - - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxEventGroupNumber; - #endif - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the event group is statically allocated to ensure no attempt is made to free the memory. */ - #endif -} EventGroup_t; - -/*-----------------------------------------------------------*/ - -/* - * Test the bits set in uxCurrentEventBits to see if the wait condition is met. - * The wait condition is defined by xWaitForAllBits. If xWaitForAllBits is - * pdTRUE then the wait condition is met if all the bits set in uxBitsToWaitFor - * are also set in uxCurrentEventBits. If xWaitForAllBits is pdFALSE then the - * wait condition is met if any of the bits set in uxBitsToWait for are also set - * in uxCurrentEventBits. - */ -static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits ) PRIVILEGED_FUNCTION; - -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) - { - EventGroup_t *pxEventBits; - - /* A StaticEventGroup_t object must be provided. */ - configASSERT( pxEventGroupBuffer ); - - #if( configASSERT_DEFINED == 1 ) - { - /* Sanity check that the size of the structure used to declare a - variable of type StaticEventGroup_t equals the size of the real - event group structure. */ - volatile size_t xSize = sizeof( StaticEventGroup_t ); - configASSERT( xSize == sizeof( EventGroup_t ) ); - } /*lint !e529 xSize is referenced if configASSERT() is defined. */ - #endif /* configASSERT_DEFINED */ - - /* The user has provided a statically allocated event group - use it. */ - pxEventBits = ( EventGroup_t * ) pxEventGroupBuffer; /*lint !e740 !e9087 EventGroup_t and StaticEventGroup_t are deliberately aliased for data hiding purposes and guaranteed to have the same size and alignment requirement - checked by configASSERT(). */ - - if( pxEventBits != NULL ) - { - pxEventBits->uxEventBits = 0; - vListInitialise( &( pxEventBits->xTasksWaitingForBits ) ); - - #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - { - /* Both static and dynamic allocation can be used, so note that - this event group was created statically in case the event group - is later deleted. */ - pxEventBits->ucStaticallyAllocated = pdTRUE; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - - traceEVENT_GROUP_CREATE( pxEventBits ); - } - else - { - /* xEventGroupCreateStatic should only ever be called with - pxEventGroupBuffer pointing to a pre-allocated (compile time - allocated) StaticEventGroup_t variable. */ - traceEVENT_GROUP_CREATE_FAILED(); - } - - return pxEventBits; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - EventGroupHandle_t xEventGroupCreate( void ) - { - EventGroup_t *pxEventBits; - - /* Allocate the event group. Justification for MISRA deviation as - follows: pvPortMalloc() always ensures returned memory blocks are - aligned per the requirements of the MCU stack. In this case - pvPortMalloc() must return a pointer that is guaranteed to meet the - alignment requirements of the EventGroup_t structure - which (if you - follow it through) is the alignment requirements of the TickType_t type - (EventBits_t being of TickType_t itself). Therefore, whenever the - stack alignment requirements are greater than or equal to the - TickType_t alignment requirements the cast is safe. In other cases, - where the natural word size of the architecture is less than - sizeof( TickType_t ), the TickType_t variables will be accessed in two - or more reads operations, and the alignment requirements is only that - of each individual read. */ - pxEventBits = ( EventGroup_t * ) pvPortMalloc( sizeof( EventGroup_t ) ); /*lint !e9087 !e9079 see comment above. */ - - if( pxEventBits != NULL ) - { - pxEventBits->uxEventBits = 0; - vListInitialise( &( pxEventBits->xTasksWaitingForBits ) ); - - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - /* Both static and dynamic allocation can be used, so note this - event group was allocated statically in case the event group is - later deleted. */ - pxEventBits->ucStaticallyAllocated = pdFALSE; - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - - traceEVENT_GROUP_CREATE( pxEventBits ); - } - else - { - traceEVENT_GROUP_CREATE_FAILED(); /*lint !e9063 Else branch only exists to allow tracing and does not generate code if trace macros are not defined. */ - } - - return pxEventBits; - } - -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) -{ -EventBits_t uxOriginalBitValue, uxReturn; -EventGroup_t *pxEventBits = xEventGroup; -BaseType_t xAlreadyYielded; -BaseType_t xTimeoutOccurred = pdFALSE; - - configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 ); - configASSERT( uxBitsToWaitFor != 0 ); - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - vTaskSuspendAll(); - { - uxOriginalBitValue = pxEventBits->uxEventBits; - - ( void ) xEventGroupSetBits( xEventGroup, uxBitsToSet ); - - if( ( ( uxOriginalBitValue | uxBitsToSet ) & uxBitsToWaitFor ) == uxBitsToWaitFor ) - { - /* All the rendezvous bits are now set - no need to block. */ - uxReturn = ( uxOriginalBitValue | uxBitsToSet ); - - /* Rendezvous always clear the bits. They will have been cleared - already unless this is the only task in the rendezvous. */ - pxEventBits->uxEventBits &= ~uxBitsToWaitFor; - - xTicksToWait = 0; - } - else - { - if( xTicksToWait != ( TickType_t ) 0 ) - { - traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor ); - - /* Store the bits that the calling task is waiting for in the - task's event list item so the kernel knows when a match is - found. Then enter the blocked state. */ - vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | eventCLEAR_EVENTS_ON_EXIT_BIT | eventWAIT_FOR_ALL_BITS ), xTicksToWait ); - - /* This assignment is obsolete as uxReturn will get set after - the task unblocks, but some compilers mistakenly generate a - warning about uxReturn being returned without being set if the - assignment is omitted. */ - uxReturn = 0; - } - else - { - /* The rendezvous bits were not set, but no block time was - specified - just return the current event bit value. */ - uxReturn = pxEventBits->uxEventBits; - xTimeoutOccurred = pdTRUE; - } - } - } - xAlreadyYielded = xTaskResumeAll(); - - if( xTicksToWait != ( TickType_t ) 0 ) - { - if( xAlreadyYielded == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* The task blocked to wait for its required bits to be set - at this - point either the required bits were set or the block time expired. If - the required bits were set they will have been stored in the task's - event list item, and they should now be retrieved then cleared. */ - uxReturn = uxTaskResetEventItemValue(); - - if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 ) - { - /* The task timed out, just return the current event bit value. */ - taskENTER_CRITICAL(); - { - uxReturn = pxEventBits->uxEventBits; - - /* Although the task got here because it timed out before the - bits it was waiting for were set, it is possible that since it - unblocked another task has set the bits. If this is the case - then it needs to clear the bits before exiting. */ - if( ( uxReturn & uxBitsToWaitFor ) == uxBitsToWaitFor ) - { - pxEventBits->uxEventBits &= ~uxBitsToWaitFor; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - xTimeoutOccurred = pdTRUE; - } - else - { - /* The task unblocked because the bits were set. */ - } - - /* Control bits might be set as the task had blocked should not be - returned. */ - uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES; - } - - traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred ); - - /* Prevent compiler warnings when trace macros are not used. */ - ( void ) xTimeoutOccurred; - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) -{ -EventGroup_t *pxEventBits = xEventGroup; -EventBits_t uxReturn, uxControlBits = 0; -BaseType_t xWaitConditionMet, xAlreadyYielded; -BaseType_t xTimeoutOccurred = pdFALSE; - - /* Check the user is not attempting to wait on the bits used by the kernel - itself, and that at least one bit is being requested. */ - configASSERT( xEventGroup ); - configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 ); - configASSERT( uxBitsToWaitFor != 0 ); - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - vTaskSuspendAll(); - { - const EventBits_t uxCurrentEventBits = pxEventBits->uxEventBits; - - /* Check to see if the wait condition is already met or not. */ - xWaitConditionMet = prvTestWaitCondition( uxCurrentEventBits, uxBitsToWaitFor, xWaitForAllBits ); - - if( xWaitConditionMet != pdFALSE ) - { - /* The wait condition has already been met so there is no need to - block. */ - uxReturn = uxCurrentEventBits; - xTicksToWait = ( TickType_t ) 0; - - /* Clear the wait bits if requested to do so. */ - if( xClearOnExit != pdFALSE ) - { - pxEventBits->uxEventBits &= ~uxBitsToWaitFor; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else if( xTicksToWait == ( TickType_t ) 0 ) - { - /* The wait condition has not been met, but no block time was - specified, so just return the current value. */ - uxReturn = uxCurrentEventBits; - xTimeoutOccurred = pdTRUE; - } - else - { - /* The task is going to block to wait for its required bits to be - set. uxControlBits are used to remember the specified behaviour of - this call to xEventGroupWaitBits() - for use when the event bits - unblock the task. */ - if( xClearOnExit != pdFALSE ) - { - uxControlBits |= eventCLEAR_EVENTS_ON_EXIT_BIT; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( xWaitForAllBits != pdFALSE ) - { - uxControlBits |= eventWAIT_FOR_ALL_BITS; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Store the bits that the calling task is waiting for in the - task's event list item so the kernel knows when a match is - found. Then enter the blocked state. */ - vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | uxControlBits ), xTicksToWait ); - - /* This is obsolete as it will get set after the task unblocks, but - some compilers mistakenly generate a warning about the variable - being returned without being set if it is not done. */ - uxReturn = 0; - - traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor ); - } - } - xAlreadyYielded = xTaskResumeAll(); - - if( xTicksToWait != ( TickType_t ) 0 ) - { - if( xAlreadyYielded == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* The task blocked to wait for its required bits to be set - at this - point either the required bits were set or the block time expired. If - the required bits were set they will have been stored in the task's - event list item, and they should now be retrieved then cleared. */ - uxReturn = uxTaskResetEventItemValue(); - - if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 ) - { - taskENTER_CRITICAL(); - { - /* The task timed out, just return the current event bit value. */ - uxReturn = pxEventBits->uxEventBits; - - /* It is possible that the event bits were updated between this - task leaving the Blocked state and running again. */ - if( prvTestWaitCondition( uxReturn, uxBitsToWaitFor, xWaitForAllBits ) != pdFALSE ) - { - if( xClearOnExit != pdFALSE ) - { - pxEventBits->uxEventBits &= ~uxBitsToWaitFor; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - xTimeoutOccurred = pdTRUE; - } - taskEXIT_CRITICAL(); - } - else - { - /* The task unblocked because the bits were set. */ - } - - /* The task blocked so control bits may have been set. */ - uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES; - } - traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred ); - - /* Prevent compiler warnings when trace macros are not used. */ - ( void ) xTimeoutOccurred; - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) -{ -EventGroup_t *pxEventBits = xEventGroup; -EventBits_t uxReturn; - - /* Check the user is not attempting to clear the bits used by the kernel - itself. */ - configASSERT( xEventGroup ); - configASSERT( ( uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES ) == 0 ); - - taskENTER_CRITICAL(); - { - traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear ); - - /* The value returned is the event group value prior to the bits being - cleared. */ - uxReturn = pxEventBits->uxEventBits; - - /* Clear the bits. */ - pxEventBits->uxEventBits &= ~uxBitsToClear; - } - taskEXIT_CRITICAL(); - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) - - BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) - { - BaseType_t xReturn; - - traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear ); - xReturn = xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL ); /*lint !e9087 Can't avoid cast to void* as a generic callback function not specific to this use case. Callback casts back to original type so safe. */ - - return xReturn; - } - -#endif -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) -{ -UBaseType_t uxSavedInterruptStatus; -EventGroup_t const * const pxEventBits = xEventGroup; -EventBits_t uxReturn; - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - uxReturn = pxEventBits->uxEventBits; - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return uxReturn; -} /*lint !e818 EventGroupHandle_t is a typedef used in other functions to so can't be pointer to const. */ -/*-----------------------------------------------------------*/ - -EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) -{ -ListItem_t *pxListItem, *pxNext; -ListItem_t const *pxListEnd; -List_t const * pxList; -EventBits_t uxBitsToClear = 0, uxBitsWaitedFor, uxControlBits; -EventGroup_t *pxEventBits = xEventGroup; -BaseType_t xMatchFound = pdFALSE; - - /* Check the user is not attempting to set the bits used by the kernel - itself. */ - configASSERT( xEventGroup ); - configASSERT( ( uxBitsToSet & eventEVENT_BITS_CONTROL_BYTES ) == 0 ); - - pxList = &( pxEventBits->xTasksWaitingForBits ); - pxListEnd = listGET_END_MARKER( pxList ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ - vTaskSuspendAll(); - { - traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet ); - - pxListItem = listGET_HEAD_ENTRY( pxList ); - - /* Set the bits. */ - pxEventBits->uxEventBits |= uxBitsToSet; - - /* See if the new bit value should unblock any tasks. */ - while( pxListItem != pxListEnd ) - { - pxNext = listGET_NEXT( pxListItem ); - uxBitsWaitedFor = listGET_LIST_ITEM_VALUE( pxListItem ); - xMatchFound = pdFALSE; - - /* Split the bits waited for from the control bits. */ - uxControlBits = uxBitsWaitedFor & eventEVENT_BITS_CONTROL_BYTES; - uxBitsWaitedFor &= ~eventEVENT_BITS_CONTROL_BYTES; - - if( ( uxControlBits & eventWAIT_FOR_ALL_BITS ) == ( EventBits_t ) 0 ) - { - /* Just looking for single bit being set. */ - if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) != ( EventBits_t ) 0 ) - { - xMatchFound = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) == uxBitsWaitedFor ) - { - /* All bits are set. */ - xMatchFound = pdTRUE; - } - else - { - /* Need all bits to be set, but not all the bits were set. */ - } - - if( xMatchFound != pdFALSE ) - { - /* The bits match. Should the bits be cleared on exit? */ - if( ( uxControlBits & eventCLEAR_EVENTS_ON_EXIT_BIT ) != ( EventBits_t ) 0 ) - { - uxBitsToClear |= uxBitsWaitedFor; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Store the actual event flag value in the task's event list - item before removing the task from the event list. The - eventUNBLOCKED_DUE_TO_BIT_SET bit is set so the task knows - that is was unblocked due to its required bits matching, rather - than because it timed out. */ - vTaskRemoveFromUnorderedEventList( pxListItem, pxEventBits->uxEventBits | eventUNBLOCKED_DUE_TO_BIT_SET ); - } - - /* Move onto the next list item. Note pxListItem->pxNext is not - used here as the list item may have been removed from the event list - and inserted into the ready/pending reading list. */ - pxListItem = pxNext; - } - - /* Clear any bits that matched when the eventCLEAR_EVENTS_ON_EXIT_BIT - bit was set in the control word. */ - pxEventBits->uxEventBits &= ~uxBitsToClear; - } - ( void ) xTaskResumeAll(); - - return pxEventBits->uxEventBits; -} -/*-----------------------------------------------------------*/ - -void vEventGroupDelete( EventGroupHandle_t xEventGroup ) -{ -EventGroup_t *pxEventBits = xEventGroup; -const List_t *pxTasksWaitingForBits = &( pxEventBits->xTasksWaitingForBits ); - - vTaskSuspendAll(); - { - traceEVENT_GROUP_DELETE( xEventGroup ); - - while( listCURRENT_LIST_LENGTH( pxTasksWaitingForBits ) > ( UBaseType_t ) 0 ) - { - /* Unblock the task, returning 0 as the event list is being deleted - and cannot therefore have any bits set. */ - configASSERT( pxTasksWaitingForBits->xListEnd.pxNext != ( const ListItem_t * ) &( pxTasksWaitingForBits->xListEnd ) ); - vTaskRemoveFromUnorderedEventList( pxTasksWaitingForBits->xListEnd.pxNext, eventUNBLOCKED_DUE_TO_BIT_SET ); - } - - #if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) ) - { - /* The event group can only have been allocated dynamically - free - it again. */ - vPortFree( pxEventBits ); - } - #elif( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - { - /* The event group could have been allocated statically or - dynamically, so check before attempting to free the memory. */ - if( pxEventBits->ucStaticallyAllocated == ( uint8_t ) pdFALSE ) - { - vPortFree( pxEventBits ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - } - ( void ) xTaskResumeAll(); -} -/*-----------------------------------------------------------*/ - -/* For internal use only - execute a 'set bits' command that was pended from -an interrupt. */ -void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ) -{ - ( void ) xEventGroupSetBits( pvEventGroup, ( EventBits_t ) ulBitsToSet ); /*lint !e9079 Can't avoid cast to void* as a generic timer callback prototype. Callback casts back to original type so safe. */ -} -/*-----------------------------------------------------------*/ - -/* For internal use only - execute a 'clear bits' command that was pended from -an interrupt. */ -void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ) -{ - ( void ) xEventGroupClearBits( pvEventGroup, ( EventBits_t ) ulBitsToClear ); /*lint !e9079 Can't avoid cast to void* as a generic timer callback prototype. Callback casts back to original type so safe. */ -} -/*-----------------------------------------------------------*/ - -static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits ) -{ -BaseType_t xWaitConditionMet = pdFALSE; - - if( xWaitForAllBits == pdFALSE ) - { - /* Task only has to wait for one bit within uxBitsToWaitFor to be - set. Is one already set? */ - if( ( uxCurrentEventBits & uxBitsToWaitFor ) != ( EventBits_t ) 0 ) - { - xWaitConditionMet = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* Task has to wait for all the bits in uxBitsToWaitFor to be set. - Are they set already? */ - if( ( uxCurrentEventBits & uxBitsToWaitFor ) == uxBitsToWaitFor ) - { - xWaitConditionMet = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - return xWaitConditionMet; -} -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) - - BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ) - { - BaseType_t xReturn; - - traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet ); - xReturn = xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken ); /*lint !e9087 Can't avoid cast to void* as a generic callback function not specific to this use case. Callback casts back to original type so safe. */ - - return xReturn; - } - -#endif -/*-----------------------------------------------------------*/ - -#if (configUSE_TRACE_FACILITY == 1) - - UBaseType_t uxEventGroupGetNumber( void* xEventGroup ) - { - UBaseType_t xReturn; - EventGroup_t const *pxEventBits = ( EventGroup_t * ) xEventGroup; /*lint !e9087 !e9079 EventGroupHandle_t is a pointer to an EventGroup_t, but EventGroupHandle_t is kept opaque outside of this file for data hiding purposes. */ - - if( xEventGroup == NULL ) - { - xReturn = 0; - } - else - { - xReturn = pxEventBits->uxEventGroupNumber; - } - - return xReturn; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - void vEventGroupSetNumber( void * xEventGroup, UBaseType_t uxEventGroupNumber ) - { - ( ( EventGroup_t * ) xEventGroup )->uxEventGroupNumber = uxEventGroupNumber; /*lint !e9087 !e9079 EventGroupHandle_t is a pointer to an EventGroup_t, but EventGroupHandle_t is kept opaque outside of this file for data hiding purposes. */ - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - - diff --git a/FreeRTOS/Source/include/FreeRTOS.h b/FreeRTOS/Source/include/FreeRTOS.h index 3336b20..3556bb4 100644 --- a/FreeRTOS/Source/include/FreeRTOS.h +++ b/FreeRTOS/Source/include/FreeRTOS.h @@ -1,143 +1,156 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #ifndef INC_FREERTOS_H #define INC_FREERTOS_H + /* * Include the generic headers required for the FreeRTOS port being used. */ #include -/* - * If stdint.h cannot be located then: - * + If using GCC ensure the -nostdint options is *not* being used. - * + Ensure the project's include path includes the directory in which your - * compiler stores stdint.h. - * + Set any compiler options necessary for it to support C99, as technically - * stdint.h is only mandatory with C99 (FreeRTOS does not require C99 in any - * other way). - * + The FreeRTOS download includes a simple stdint.h definition that can be - * used in cases where none is provided by the compiler. The files only - * contains the typedefs required to build FreeRTOS. Read the instructions - * in FreeRTOS/source/stdint.readme for more information. - */ -#include /* READ COMMENT ABOVE. */ - -#ifdef __cplusplus -extern "C" { -#endif +/* Basic FreeRTOS definitions. */ +#include "projdefs.h" /* Application specific configuration options. */ #include -/* Basic FreeRTOS definitions. */ -#include "projdefs.h" +/* configUSE_PORT_OPTIMISED_TASK_SELECTION must be defined before portable.h +is included as it is used by the port layer. */ +#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION + #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 +#endif /* Definitions specific to the port being used. */ #include "portable.h" -/* Must be defaulted before configUSE_NEWLIB_REENTRANT is used below. */ -#ifndef configUSE_NEWLIB_REENTRANT - #define configUSE_NEWLIB_REENTRANT 0 -#endif -/* Required if struct _reent is used. */ -#if ( configUSE_NEWLIB_REENTRANT == 1 ) - #include -#endif +/* Defines the prototype to which the application task hook function must +conform. */ +typedef portBASE_TYPE (*pdTASK_HOOK_CODE)( void * ); + + + + + /* * Check all the required application specific macros have been defined. * These macros are application specific and (as downloaded) are defined * within FreeRTOSConfig.h. */ -#ifndef configMINIMAL_STACK_SIZE - #error Missing definition: configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h. configMINIMAL_STACK_SIZE defines the size (in words) of the stack allocated to the idle task. Refer to the demo project provided for your port for a suitable value. -#endif - -#ifndef configMAX_PRIORITIES - #error Missing definition: configMAX_PRIORITIES must be defined in FreeRTOSConfig.h. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#if configMAX_PRIORITIES < 1 - #error configMAX_PRIORITIES must be defined to be greater than or equal to 1. -#endif - #ifndef configUSE_PREEMPTION - #error Missing definition: configUSE_PREEMPTION must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. + #error Missing definition: configUSE_PREEMPTION should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef configUSE_IDLE_HOOK - #error Missing definition: configUSE_IDLE_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. + #error Missing definition: configUSE_IDLE_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef configUSE_TICK_HOOK - #error Missing definition: configUSE_TICK_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. -#endif - -#ifndef configUSE_16_BIT_TICKS - #error Missing definition: configUSE_16_BIT_TICKS must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. + #error Missing definition: configUSE_TICK_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef configUSE_CO_ROUTINES - #define configUSE_CO_ROUTINES 0 + #error Missing definition: configUSE_CO_ROUTINES should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef INCLUDE_vTaskPrioritySet - #define INCLUDE_vTaskPrioritySet 0 + #error Missing definition: INCLUDE_vTaskPrioritySet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef INCLUDE_uxTaskPriorityGet - #define INCLUDE_uxTaskPriorityGet 0 + #error Missing definition: INCLUDE_uxTaskPriorityGet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef INCLUDE_vTaskDelete - #define INCLUDE_vTaskDelete 0 + #error Missing definition: INCLUDE_vTaskDelete should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef INCLUDE_vTaskSuspend - #define INCLUDE_vTaskSuspend 0 + #error Missing definition: INCLUDE_vTaskSuspend should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef INCLUDE_vTaskDelayUntil - #define INCLUDE_vTaskDelayUntil 0 + #error Missing definition: INCLUDE_vTaskDelayUntil should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef INCLUDE_vTaskDelay - #define INCLUDE_vTaskDelay 0 + #error Missing definition: INCLUDE_vTaskDelay should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. +#endif + +#ifndef configUSE_16_BIT_TICKS + #error Missing definition: configUSE_16_BIT_TICKS should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details. #endif #ifndef INCLUDE_xTaskGetIdleTaskHandle #define INCLUDE_xTaskGetIdleTaskHandle 0 #endif -#ifndef INCLUDE_xTaskAbortDelay - #define INCLUDE_xTaskAbortDelay 0 +#ifndef INCLUDE_xTimerGetTimerDaemonTaskHandle + #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 #endif #ifndef INCLUDE_xQueueGetMutexHolder @@ -148,54 +161,20 @@ extern "C" { #define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder #endif -#ifndef INCLUDE_xTaskGetHandle - #define INCLUDE_xTaskGetHandle 0 -#endif - -#ifndef INCLUDE_uxTaskGetStackHighWaterMark - #define INCLUDE_uxTaskGetStackHighWaterMark 0 -#endif - -#ifndef INCLUDE_uxTaskGetStackHighWaterMark2 - #define INCLUDE_uxTaskGetStackHighWaterMark2 0 -#endif - -#ifndef INCLUDE_eTaskGetState - #define INCLUDE_eTaskGetState 0 -#endif - -#ifndef INCLUDE_xTaskResumeFromISR - #define INCLUDE_xTaskResumeFromISR 1 -#endif - -#ifndef INCLUDE_xTimerPendFunctionCall - #define INCLUDE_xTimerPendFunctionCall 0 -#endif - -#ifndef INCLUDE_xTaskGetSchedulerState - #define INCLUDE_xTaskGetSchedulerState 0 -#endif - -#ifndef INCLUDE_xTaskGetCurrentTaskHandle - #define INCLUDE_xTaskGetCurrentTaskHandle 0 -#endif - -#if configUSE_CO_ROUTINES != 0 - #ifndef configMAX_CO_ROUTINE_PRIORITIES - #error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1. - #endif -#endif - -#ifndef configUSE_DAEMON_TASK_STARTUP_HOOK - #define configUSE_DAEMON_TASK_STARTUP_HOOK 0 +#ifndef INCLUDE_pcTaskGetTaskName + #define INCLUDE_pcTaskGetTaskName 0 #endif #ifndef configUSE_APPLICATION_TASK_TAG #define configUSE_APPLICATION_TASK_TAG 0 #endif -#ifndef configNUM_THREAD_LOCAL_STORAGE_POINTERS - #define configNUM_THREAD_LOCAL_STORAGE_POINTERS 0 +#ifndef INCLUDE_uxTaskGetStackHighWaterMark + #define INCLUDE_uxTaskGetStackHighWaterMark 0 +#endif + +#ifndef INCLUDE_eTaskGetState + #define INCLUDE_eTaskGetState 0 #endif #ifndef configUSE_RECURSIVE_MUTEXES @@ -234,6 +213,10 @@ extern "C" { #error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h #endif +#ifndef INCLUDE_xTaskResumeFromISR + #define INCLUDE_xTaskResumeFromISR 1 +#endif + #ifndef configASSERT #define configASSERT( x ) #define configASSERT_DEFINED 0 @@ -258,6 +241,15 @@ extern "C" { #endif /* configUSE_TIMERS */ +#ifndef INCLUDE_xTaskGetSchedulerState + #define INCLUDE_xTaskGetSchedulerState 0 +#endif + +#ifndef INCLUDE_xTaskGetCurrentTaskHandle + #define INCLUDE_xTaskGetCurrentTaskHandle 0 +#endif + + #ifndef portSET_INTERRUPT_MASK_FROM_ISR #define portSET_INTERRUPT_MASK_FROM_ISR() 0 #endif @@ -270,10 +262,6 @@ extern "C" { #define portCLEAN_UP_TCB( pxTCB ) ( void ) pxTCB #endif -#ifndef portPRE_TASK_DELETE_HOOK - #define portPRE_TASK_DELETE_HOOK( pvTaskToDelete, pxYieldPending ) -#endif - #ifndef portSETUP_TCB #define portSETUP_TCB( pxTCB ) ( void ) pxTCB #endif @@ -285,11 +273,10 @@ extern "C" { #if ( configQUEUE_REGISTRY_SIZE < 1 ) #define vQueueAddToRegistry( xQueue, pcName ) #define vQueueUnregisterQueue( xQueue ) - #define pcQueueGetName( xQueue ) #endif #ifndef portPOINTER_SIZE_TYPE - #define portPOINTER_SIZE_TYPE uint32_t + #define portPOINTER_SIZE_TYPE unsigned long #endif /* Remove any unused trace macros. */ @@ -358,14 +345,6 @@ extern "C" { #define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ) #endif -#ifndef traceBLOCKING_ON_QUEUE_PEEK - /* Task is about to block because it cannot read from a - queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore - upon which the read was attempted. pxCurrentTCB points to the TCB of the - task that attempted the read. */ - #define traceBLOCKING_ON_QUEUE_PEEK( pxQueue ) -#endif - #ifndef traceBLOCKING_ON_QUEUE_SEND /* Task is about to block because it cannot write to a queue/mutex/semaphore. pxQueue is a pointer to the queue/mutex/semaphore @@ -378,24 +357,12 @@ extern "C" { #define configCHECK_FOR_STACK_OVERFLOW 0 #endif -#ifndef configRECORD_STACK_HIGH_ADDRESS - #define configRECORD_STACK_HIGH_ADDRESS 0 -#endif - -#ifndef configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H - #define configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H 0 -#endif - /* The following event macros are embedded in the kernel API calls. */ #ifndef traceMOVED_TASK_TO_READY_STATE #define traceMOVED_TASK_TO_READY_STATE( pxTCB ) #endif -#ifndef tracePOST_MOVED_TASK_TO_READY_STATE - #define tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB ) -#endif - #ifndef traceQUEUE_CREATE #define traceQUEUE_CREATE( pxNewQueue ) #endif @@ -452,10 +419,6 @@ extern "C" { #define traceQUEUE_PEEK( pxQueue ) #endif -#ifndef traceQUEUE_PEEK_FAILED - #define traceQUEUE_PEEK_FAILED( pxQueue ) -#endif - #ifndef traceQUEUE_PEEK_FROM_ISR #define traceQUEUE_PEEK_FROM_ISR( pxQueue ) #endif @@ -501,7 +464,7 @@ extern "C" { #endif #ifndef traceTASK_DELAY_UNTIL - #define traceTASK_DELAY_UNTIL( x ) + #define traceTASK_DELAY_UNTIL() #endif #ifndef traceTASK_DELAY @@ -548,150 +511,6 @@ extern "C" { #define traceTIMER_COMMAND_RECEIVED( pxTimer, xMessageID, xMessageValue ) #endif -#ifndef traceMALLOC - #define traceMALLOC( pvAddress, uiSize ) -#endif - -#ifndef traceFREE - #define traceFREE( pvAddress, uiSize ) -#endif - -#ifndef traceEVENT_GROUP_CREATE - #define traceEVENT_GROUP_CREATE( xEventGroup ) -#endif - -#ifndef traceEVENT_GROUP_CREATE_FAILED - #define traceEVENT_GROUP_CREATE_FAILED() -#endif - -#ifndef traceEVENT_GROUP_SYNC_BLOCK - #define traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor ) -#endif - -#ifndef traceEVENT_GROUP_SYNC_END - #define traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred -#endif - -#ifndef traceEVENT_GROUP_WAIT_BITS_BLOCK - #define traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor ) -#endif - -#ifndef traceEVENT_GROUP_WAIT_BITS_END - #define traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred ) ( void ) xTimeoutOccurred -#endif - -#ifndef traceEVENT_GROUP_CLEAR_BITS - #define traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear ) -#endif - -#ifndef traceEVENT_GROUP_CLEAR_BITS_FROM_ISR - #define traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear ) -#endif - -#ifndef traceEVENT_GROUP_SET_BITS - #define traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet ) -#endif - -#ifndef traceEVENT_GROUP_SET_BITS_FROM_ISR - #define traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet ) -#endif - -#ifndef traceEVENT_GROUP_DELETE - #define traceEVENT_GROUP_DELETE( xEventGroup ) -#endif - -#ifndef tracePEND_FUNC_CALL - #define tracePEND_FUNC_CALL(xFunctionToPend, pvParameter1, ulParameter2, ret) -#endif - -#ifndef tracePEND_FUNC_CALL_FROM_ISR - #define tracePEND_FUNC_CALL_FROM_ISR(xFunctionToPend, pvParameter1, ulParameter2, ret) -#endif - -#ifndef traceQUEUE_REGISTRY_ADD - #define traceQUEUE_REGISTRY_ADD(xQueue, pcQueueName) -#endif - -#ifndef traceTASK_NOTIFY_TAKE_BLOCK - #define traceTASK_NOTIFY_TAKE_BLOCK() -#endif - -#ifndef traceTASK_NOTIFY_TAKE - #define traceTASK_NOTIFY_TAKE() -#endif - -#ifndef traceTASK_NOTIFY_WAIT_BLOCK - #define traceTASK_NOTIFY_WAIT_BLOCK() -#endif - -#ifndef traceTASK_NOTIFY_WAIT - #define traceTASK_NOTIFY_WAIT() -#endif - -#ifndef traceTASK_NOTIFY - #define traceTASK_NOTIFY() -#endif - -#ifndef traceTASK_NOTIFY_FROM_ISR - #define traceTASK_NOTIFY_FROM_ISR() -#endif - -#ifndef traceTASK_NOTIFY_GIVE_FROM_ISR - #define traceTASK_NOTIFY_GIVE_FROM_ISR() -#endif - -#ifndef traceSTREAM_BUFFER_CREATE_FAILED - #define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_CREATE_STATIC_FAILED - #define traceSTREAM_BUFFER_CREATE_STATIC_FAILED( xReturn, xIsMessageBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_CREATE - #define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_DELETE - #define traceSTREAM_BUFFER_DELETE( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_RESET - #define traceSTREAM_BUFFER_RESET( xStreamBuffer ) -#endif - -#ifndef traceBLOCKING_ON_STREAM_BUFFER_SEND - #define traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_SEND - #define traceSTREAM_BUFFER_SEND( xStreamBuffer, xBytesSent ) -#endif - -#ifndef traceSTREAM_BUFFER_SEND_FAILED - #define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_SEND_FROM_ISR - #define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xBytesSent ) -#endif - -#ifndef traceBLOCKING_ON_STREAM_BUFFER_RECEIVE - #define traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_RECEIVE - #define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength ) -#endif - -#ifndef traceSTREAM_BUFFER_RECEIVE_FAILED - #define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer ) -#endif - -#ifndef traceSTREAM_BUFFER_RECEIVE_FROM_ISR - #define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength ) -#endif - #ifndef configGENERATE_RUN_TIME_STATS #define configGENERATE_RUN_TIME_STATS 0 #endif @@ -719,13 +538,21 @@ extern "C" { #endif #ifndef portPRIVILEGE_BIT - #define portPRIVILEGE_BIT ( ( UBaseType_t ) 0x00 ) + #define portPRIVILEGE_BIT ( ( unsigned portBASE_TYPE ) 0x00 ) #endif #ifndef portYIELD_WITHIN_API #define portYIELD_WITHIN_API portYIELD #endif +#ifndef pvPortMallocAligned + #define pvPortMallocAligned( x, puxStackBuffer ) ( ( ( puxStackBuffer ) == NULL ) ? ( pvPortMalloc( ( x ) ) ) : ( puxStackBuffer ) ) +#endif + +#ifndef vPortFreeAligned + #define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree ) +#endif + #ifndef portSUPPRESS_TICKS_AND_SLEEP #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) #endif @@ -742,10 +569,6 @@ extern "C" { #define configUSE_TICKLESS_IDLE 0 #endif -#ifndef configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING - #define configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( x ) -#endif - #ifndef configPRE_SLEEP_PROCESSING #define configPRE_SLEEP_PROCESSING( x ) #endif @@ -762,10 +585,6 @@ extern "C" { #define portTASK_USES_FLOATING_POINT() #endif -#ifndef portALLOCATE_SECURE_CONTEXT - #define portALLOCATE_SECURE_CONTEXT( ulSecureStackSize ) -#endif - #ifndef configUSE_TIME_SLICING #define configUSE_TIME_SLICING 1 #endif @@ -774,6 +593,10 @@ extern "C" { #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS 0 #endif +#ifndef configUSE_NEWLIB_REENTRANT + #define configUSE_NEWLIB_REENTRANT 0 +#endif + #ifndef configUSE_STATS_FORMATTING_FUNCTIONS #define configUSE_STATS_FORMATTING_FUNCTIONS 0 #endif @@ -782,489 +605,8 @@ extern "C" { #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() #endif -#ifndef configUSE_TRACE_FACILITY - #define configUSE_TRACE_FACILITY 0 -#endif - -#ifndef mtCOVERAGE_TEST_MARKER - #define mtCOVERAGE_TEST_MARKER() -#endif - -#ifndef mtCOVERAGE_TEST_DELAY - #define mtCOVERAGE_TEST_DELAY() -#endif - -#ifndef portASSERT_IF_IN_ISR - #define portASSERT_IF_IN_ISR() -#endif - -#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION - #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#endif - -#ifndef configAPPLICATION_ALLOCATED_HEAP - #define configAPPLICATION_ALLOCATED_HEAP 0 -#endif - -#ifndef configUSE_TASK_NOTIFICATIONS - #define configUSE_TASK_NOTIFICATIONS 1 -#endif - -#ifndef configUSE_POSIX_ERRNO - #define configUSE_POSIX_ERRNO 0 -#endif - -#ifndef portTICK_TYPE_IS_ATOMIC - #define portTICK_TYPE_IS_ATOMIC 0 -#endif - -#ifndef configSUPPORT_STATIC_ALLOCATION - /* Defaults to 0 for backward compatibility. */ - #define configSUPPORT_STATIC_ALLOCATION 0 -#endif - -#ifndef configSUPPORT_DYNAMIC_ALLOCATION - /* Defaults to 1 for backward compatibility. */ - #define configSUPPORT_DYNAMIC_ALLOCATION 1 -#endif - -#ifndef configSTACK_DEPTH_TYPE - /* Defaults to uint16_t for backward compatibility, but can be overridden - in FreeRTOSConfig.h if uint16_t is too restrictive. */ - #define configSTACK_DEPTH_TYPE uint16_t -#endif - -#ifndef configMESSAGE_BUFFER_LENGTH_TYPE - /* Defaults to size_t for backward compatibility, but can be overridden - in FreeRTOSConfig.h if lengths will always be less than the number of bytes - in a size_t. */ - #define configMESSAGE_BUFFER_LENGTH_TYPE size_t -#endif - -/* Sanity check the configuration. */ -#if( configUSE_TICKLESS_IDLE != 0 ) - #if( INCLUDE_vTaskSuspend != 1 ) - #error INCLUDE_vTaskSuspend must be set to 1 if configUSE_TICKLESS_IDLE is not set to 0 - #endif /* INCLUDE_vTaskSuspend */ -#endif /* configUSE_TICKLESS_IDLE */ - -#if( ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) ) - #error configSUPPORT_STATIC_ALLOCATION and configSUPPORT_DYNAMIC_ALLOCATION cannot both be 0, but can both be 1. -#endif - -#if( ( configUSE_RECURSIVE_MUTEXES == 1 ) && ( configUSE_MUTEXES != 1 ) ) - #error configUSE_MUTEXES must be set to 1 to use recursive mutexes -#endif - -#ifndef configINITIAL_TICK_COUNT - #define configINITIAL_TICK_COUNT 0 -#endif - -#if( portTICK_TYPE_IS_ATOMIC == 0 ) - /* Either variables of tick type cannot be read atomically, or - portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when - the tick count is returned to the standard critical section macros. */ - #define portTICK_TYPE_ENTER_CRITICAL() portENTER_CRITICAL() - #define portTICK_TYPE_EXIT_CRITICAL() portEXIT_CRITICAL() - #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR() - #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) ) -#else - /* The tick type can be read atomically, so critical sections used when the - tick count is returned can be defined away. */ - #define portTICK_TYPE_ENTER_CRITICAL() - #define portTICK_TYPE_EXIT_CRITICAL() - #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() 0 - #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) ( void ) x -#endif - -/* Definitions to allow backward compatibility with FreeRTOS versions prior to -V8 if desired. */ -#ifndef configENABLE_BACKWARD_COMPATIBILITY - #define configENABLE_BACKWARD_COMPATIBILITY 1 -#endif - -#ifndef configPRINTF - /* configPRINTF() was not defined, so define it away to nothing. To use - configPRINTF() then define it as follows (where MyPrintFunction() is - provided by the application writer): - - void MyPrintFunction(const char *pcFormat, ... ); - #define configPRINTF( X ) MyPrintFunction X - - Then call like a standard printf() function, but placing brackets around - all parameters so they are passed as a single parameter. For example: - configPRINTF( ("Value = %d", MyVariable) ); */ - #define configPRINTF( X ) -#endif - -#ifndef configMAX - /* The application writer has not provided their own MAX macro, so define - the following generic implementation. */ - #define configMAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) -#endif - -#ifndef configMIN - /* The application writer has not provided their own MAX macro, so define - the following generic implementation. */ - #define configMIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) -#endif - -#if configENABLE_BACKWARD_COMPATIBILITY == 1 - #define eTaskStateGet eTaskGetState - #define portTickType TickType_t - #define xTaskHandle TaskHandle_t - #define xQueueHandle QueueHandle_t - #define xSemaphoreHandle SemaphoreHandle_t - #define xQueueSetHandle QueueSetHandle_t - #define xQueueSetMemberHandle QueueSetMemberHandle_t - #define xTimeOutType TimeOut_t - #define xMemoryRegion MemoryRegion_t - #define xTaskParameters TaskParameters_t - #define xTaskStatusType TaskStatus_t - #define xTimerHandle TimerHandle_t - #define xCoRoutineHandle CoRoutineHandle_t - #define pdTASK_HOOK_CODE TaskHookFunction_t - #define portTICK_RATE_MS portTICK_PERIOD_MS - #define pcTaskGetTaskName pcTaskGetName - #define pcTimerGetTimerName pcTimerGetName - #define pcQueueGetQueueName pcQueueGetName - #define vTaskGetTaskInfo vTaskGetInfo - - /* Backward compatibility within the scheduler code only - these definitions - are not really required but are included for completeness. */ - #define tmrTIMER_CALLBACK TimerCallbackFunction_t - #define pdTASK_CODE TaskFunction_t - #define xListItem ListItem_t - #define xList List_t - - /* For libraries that break the list data hiding, and access list structure - members directly (which is not supposed to be done). */ - #define pxContainer pvContainer -#endif /* configENABLE_BACKWARD_COMPATIBILITY */ - -#if( configUSE_ALTERNATIVE_API != 0 ) - #error The alternative API was deprecated some time ago, and was removed in FreeRTOS V9.0 0 -#endif - -/* Set configUSE_TASK_FPU_SUPPORT to 0 to omit floating point support even -if floating point hardware is otherwise supported by the FreeRTOS port in use. -This constant is not supported by all FreeRTOS ports that include floating -point support. */ -#ifndef configUSE_TASK_FPU_SUPPORT - #define configUSE_TASK_FPU_SUPPORT 1 -#endif - -/* Set configENABLE_MPU to 1 to enable MPU support and 0 to disable it. This is -currently used in ARMv8M ports. */ -#ifndef configENABLE_MPU - #define configENABLE_MPU 0 -#endif - -/* Set configENABLE_FPU to 1 to enable FPU support and 0 to disable it. This is -currently used in ARMv8M ports. */ -#ifndef configENABLE_FPU - #define configENABLE_FPU 1 -#endif - -/* Set configENABLE_TRUSTZONE to 1 enable TrustZone support and 0 to disable it. -This is currently used in ARMv8M ports. */ -#ifndef configENABLE_TRUSTZONE - #define configENABLE_TRUSTZONE 1 -#endif - -/* Set configRUN_FREERTOS_SECURE_ONLY to 1 to run the FreeRTOS ARMv8M port on -the Secure Side only. */ -#ifndef configRUN_FREERTOS_SECURE_ONLY - #define configRUN_FREERTOS_SECURE_ONLY 0 -#endif - -/* Sometimes the FreeRTOSConfig.h settings only allow a task to be created using - * dynamically allocated RAM, in which case when any task is deleted it is known - * that both the task's stack and TCB need to be freed. Sometimes the - * FreeRTOSConfig.h settings only allow a task to be created using statically - * allocated RAM, in which case when any task is deleted it is known that neither - * the task's stack or TCB should be freed. Sometimes the FreeRTOSConfig.h - * settings allow a task to be created using either statically or dynamically - * allocated RAM, in which case a member of the TCB is used to record whether the - * stack and/or TCB were allocated statically or dynamically, so when a task is - * deleted the RAM that was allocated dynamically is freed again and no attempt is - * made to free the RAM that was allocated statically. - * tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is only true if it is possible for a - * task to be created using either statically or dynamically allocated RAM. Note - * that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with - * a statically allocated stack and a dynamically allocated TCB. - * - * The following table lists various combinations of portUSING_MPU_WRAPPERS, - * configSUPPORT_DYNAMIC_ALLOCATION and configSUPPORT_STATIC_ALLOCATION and - * when it is possible to have both static and dynamic allocation: - * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ - * | MPU | Dynamic | Static | Available Functions | Possible Allocations | Both Dynamic and | Need Free | - * | | | | | | Static Possible | | - * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ - * | 0 | 0 | 1 | xTaskCreateStatic | TCB - Static, Stack - Static | No | No | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 0 | 1 | 0 | xTaskCreate | TCB - Dynamic, Stack - Dynamic | No | Yes | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 0 | 1 | 1 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | - * | | | | xTaskCreateStatic | 2. TCB - Static, Stack - Static | | | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 1 | 0 | 1 | xTaskCreateStatic, | TCB - Static, Stack - Static | No | No | - * | | | | xTaskCreateRestrictedStatic | | | | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 1 | 1 | 0 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | - * | | | | xTaskCreateRestricted | 2. TCB - Dynamic, Stack - Static | | | - * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------| - * | 1 | 1 | 1 | xTaskCreate, | 1. TCB - Dynamic, Stack - Dynamic | Yes | Yes | - * | | | | xTaskCreateStatic, | 2. TCB - Dynamic, Stack - Static | | | - * | | | | xTaskCreateRestricted, | 3. TCB - Static, Stack - Static | | | - * | | | | xTaskCreateRestrictedStatic | | | | - * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+ - */ -#define tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE ( ( ( portUSING_MPU_WRAPPERS == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) || \ - ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) ) - -/* - * In line with software engineering best practice, FreeRTOS implements a strict - * data hiding policy, so the real structures used by FreeRTOS to maintain the - * state of tasks, queues, semaphores, etc. are not accessible to the application - * code. However, if the application writer wants to statically allocate such - * an object then the size of the object needs to be know. Dummy structures - * that are guaranteed to have the same size and alignment requirements of the - * real objects are used for this purpose. The dummy list and list item - * structures below are used for inclusion in such a dummy structure. - */ -struct xSTATIC_LIST_ITEM -{ - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy1; - #endif - TickType_t xDummy2; - void *pvDummy3[ 4 ]; - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy4; - #endif -}; -typedef struct xSTATIC_LIST_ITEM StaticListItem_t; - -/* See the comments above the struct xSTATIC_LIST_ITEM definition. */ -struct xSTATIC_MINI_LIST_ITEM -{ - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy1; - #endif - TickType_t xDummy2; - void *pvDummy3[ 2 ]; -}; -typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t; - -/* See the comments above the struct xSTATIC_LIST_ITEM definition. */ -typedef struct xSTATIC_LIST -{ - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy1; - #endif - UBaseType_t uxDummy2; - void *pvDummy3; - StaticMiniListItem_t xDummy4; - #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 ) - TickType_t xDummy5; - #endif -} StaticList_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the Task structure used internally by - * FreeRTOS is not accessible to application code. However, if the application - * writer wants to statically allocate the memory required to create a task then - * the size of the task object needs to be know. The StaticTask_t structure - * below is provided for this purpose. Its sizes and alignment requirements are - * guaranteed to match those of the genuine structure, no matter which - * architecture is being used, and no matter how the values in FreeRTOSConfig.h - * are set. Its contents are somewhat obfuscated in the hope users will - * recognise that it would be unwise to make direct use of the structure members. - */ -typedef struct xSTATIC_TCB -{ - void *pxDummy1; - #if ( portUSING_MPU_WRAPPERS == 1 ) - xMPU_SETTINGS xDummy2; - #endif - StaticListItem_t xDummy3[ 2 ]; - UBaseType_t uxDummy5; - void *pxDummy6; - uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ]; - #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) ) - void *pxDummy8; - #endif - #if ( portCRITICAL_NESTING_IN_TCB == 1 ) - UBaseType_t uxDummy9; - #endif - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy10[ 2 ]; - #endif - #if ( configUSE_MUTEXES == 1 ) - UBaseType_t uxDummy12[ 2 ]; - #endif - #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - void *pxDummy14; - #endif - #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) - void *pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; - #endif - #if ( configGENERATE_RUN_TIME_STATS == 1 ) - uint32_t ulDummy16; - #endif - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - struct _reent xDummy17; - #endif - #if ( configUSE_TASK_NOTIFICATIONS == 1 ) - uint32_t ulDummy18; - uint8_t ucDummy19; - #endif - #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) - uint8_t uxDummy20; - #endif - - #if( INCLUDE_xTaskAbortDelay == 1 ) - uint8_t ucDummy21; - #endif - #if ( configUSE_POSIX_ERRNO == 1 ) - int iDummy22; - #endif -} StaticTask_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the Queue structure used internally by - * FreeRTOS is not accessible to application code. However, if the application - * writer wants to statically allocate the memory required to create a queue - * then the size of the queue object needs to be know. The StaticQueue_t - * structure below is provided for this purpose. Its sizes and alignment - * requirements are guaranteed to match those of the genuine structure, no - * matter which architecture is being used, and no matter how the values in - * FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in the hope - * users will recognise that it would be unwise to make direct use of the - * structure members. - */ -typedef struct xSTATIC_QUEUE -{ - void *pvDummy1[ 3 ]; - - union - { - void *pvDummy2; - UBaseType_t uxDummy2; - } u; - - StaticList_t xDummy3[ 2 ]; - UBaseType_t uxDummy4[ 3 ]; - uint8_t ucDummy5[ 2 ]; - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucDummy6; - #endif - - #if ( configUSE_QUEUE_SETS == 1 ) - void *pvDummy7; - #endif - - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy8; - uint8_t ucDummy9; - #endif - -} StaticQueue_t; -typedef StaticQueue_t StaticSemaphore_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the event group structure used - * internally by FreeRTOS is not accessible to application code. However, if - * the application writer wants to statically allocate the memory required to - * create an event group then the size of the event group object needs to be - * know. The StaticEventGroup_t structure below is provided for this purpose. - * Its sizes and alignment requirements are guaranteed to match those of the - * genuine structure, no matter which architecture is being used, and no matter - * how the values in FreeRTOSConfig.h are set. Its contents are somewhat - * obfuscated in the hope users will recognise that it would be unwise to make - * direct use of the structure members. - */ -typedef struct xSTATIC_EVENT_GROUP -{ - TickType_t xDummy1; - StaticList_t xDummy2; - - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy3; - #endif - - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucDummy4; - #endif - -} StaticEventGroup_t; - -/* - * In line with software engineering best practice, especially when supplying a - * library that is likely to change in future versions, FreeRTOS implements a - * strict data hiding policy. This means the software timer structure used - * internally by FreeRTOS is not accessible to application code. However, if - * the application writer wants to statically allocate the memory required to - * create a software timer then the size of the queue object needs to be know. - * The StaticTimer_t structure below is provided for this purpose. Its sizes - * and alignment requirements are guaranteed to match those of the genuine - * structure, no matter which architecture is being used, and no matter how the - * values in FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in - * the hope users will recognise that it would be unwise to make direct use of - * the structure members. - */ -typedef struct xSTATIC_TIMER -{ - void *pvDummy1; - StaticListItem_t xDummy2; - TickType_t xDummy3; - void *pvDummy5; - TaskFunction_t pvDummy6; - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy7; - #endif - uint8_t ucDummy8; - -} StaticTimer_t; - -/* -* In line with software engineering best practice, especially when supplying a -* library that is likely to change in future versions, FreeRTOS implements a -* strict data hiding policy. This means the stream buffer structure used -* internally by FreeRTOS is not accessible to application code. However, if -* the application writer wants to statically allocate the memory required to -* create a stream buffer then the size of the stream buffer object needs to be -* know. The StaticStreamBuffer_t structure below is provided for this purpose. -* Its size and alignment requirements are guaranteed to match those of the -* genuine structure, no matter which architecture is being used, and no matter -* how the values in FreeRTOSConfig.h are set. Its contents are somewhat -* obfuscated in the hope users will recognise that it would be unwise to make -* direct use of the structure members. -*/ -typedef struct xSTATIC_STREAM_BUFFER -{ - size_t uxDummy1[ 4 ]; - void * pvDummy2[ 3 ]; - uint8_t ucDummy3; - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxDummy4; - #endif -} StaticStreamBuffer_t; - -/* Message buffers are built on stream buffers. */ -typedef StaticStreamBuffer_t StaticMessageBuffer_t; - -#ifdef __cplusplus -} -#endif +/* For backward compatability. */ +#define eTaskStateGet eTaskGetState #endif /* INC_FREERTOS_H */ diff --git a/FreeRTOS/Source/include/FreeRTOSConfig.h b/FreeRTOS/Source/include/FreeRTOSConfig.h index 6b4f84f..6604df3 100644 --- a/FreeRTOS/Source/include/FreeRTOSConfig.h +++ b/FreeRTOS/Source/include/FreeRTOSConfig.h @@ -1,31 +1,15 @@ -/* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. If you wish to use our Amazon - * FreeRTOS name, please do so in a fair use way that does not cause confusion. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ +/* Default esp-open-sdk FreeRTOSConfig file. + You can override settings in here by creating your own + FreeRTOSConfig.h file in your program directory. + + You could just copy this file there and edit it, but it's + recommended you instead define whatever you want to override and + then use #include_next to pick up these defaults. + + The "blink" example in "examples/blink" provides an example of how + to do this. +*/ #ifndef __DEFAULT_FREERTOS_CONFIG_H #define __DEFAULT_FREERTOS_CONFIG_H @@ -36,7 +20,7 @@ * application requirements. * * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE - * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. * * See http://www.freertos.org/a00110.html. *----------------------------------------------------------*/ @@ -50,20 +34,13 @@ #define configUSE_TICK_HOOK 0 #endif #ifndef configCPU_CLOCK_HZ -/* This is the _default_ clock speed for the CPU. Can be either 80MHz - * or 160MHz, and the system will set the clock speed to match at startup. - * - * Note that it's possible to change the clock speed at runtime, so you - * can/should use sdk_system_get_cpu_frequency() in order to determine the - * current CPU frequency, in preference to this macro. - */ #define configCPU_CLOCK_HZ ( ( unsigned long ) 80000000 ) #endif #ifndef configTICK_RATE_HZ -#define configTICK_RATE_HZ ( ( TickType_t ) 100 ) +#define configTICK_RATE_HZ ( ( portTickType ) 100 ) #endif #ifndef configMAX_PRIORITIES -#define configMAX_PRIORITIES ( 15 ) +#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 15 ) #endif #ifndef configMINIMAL_STACK_SIZE #define configMINIMAL_STACK_SIZE ( ( unsigned short )256 ) @@ -97,9 +74,6 @@ #ifndef configCHECK_FOR_STACK_OVERFLOW #define configCHECK_FOR_STACK_OVERFLOW 2 #endif -#ifndef configUSE_RECURSIVE_MUTEXES -#define configUSE_RECURSIVE_MUTEXES 1 -#endif #ifndef configUSE_MUTEXES #define configUSE_MUTEXES 1 #endif @@ -107,6 +81,7 @@ #define configUSE_TIMERS 1 #endif + #if configUSE_TIMERS #ifndef configTIMER_TASK_PRIORITY #define configTIMER_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 ) @@ -127,10 +102,6 @@ #define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) #endif -#ifndef configUSE_NEWLIB_REENTRANT -#define configUSE_NEWLIB_REENTRANT 1 -#endif - /* Set the following definitions to 1 to include the API function, or zero to exclude the API function. */ #ifndef INCLUDE_vTaskPrioritySet @@ -163,14 +134,5 @@ to exclude the API function. */ #define INCLUDE_uxTaskGetStackHighWaterMark 1 #endif -#ifndef configENABLE_BACKWARD_COMPATIBILITY -#define configENABLE_BACKWARD_COMPATIBILITY 0 -#endif - -/* Normal assert() semantics without relying on the provision of an assert.h -header file. */ -void vAssertCalled(const char * pcFile, unsigned long ulLine); -#define configASSERT(x) if((x) == 0) vAssertCalled(__FILE__, __LINE__); - #endif /* __DEFAULT_FREERTOS_CONFIG_H */ diff --git a/FreeRTOS/Source/include/StackMacros.h b/FreeRTOS/Source/include/StackMacros.h new file mode 100644 index 0000000..0a099df --- /dev/null +++ b/FreeRTOS/Source/include/StackMacros.h @@ -0,0 +1,179 @@ +/* + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + +#ifndef STACK_MACROS_H +#define STACK_MACROS_H + +/* + * Call the stack overflow hook function if the stack of the task being swapped + * out is currently overflowed, or looks like it might have overflowed in the + * past. + * + * Setting configCHECK_FOR_STACK_OVERFLOW to 1 will cause the macro to check + * the current stack state only - comparing the current top of stack value to + * the stack limit. Setting configCHECK_FOR_STACK_OVERFLOW to greater than 1 + * will also cause the last few stack bytes to be checked to ensure the value + * to which the bytes were set when the task was created have not been + * overwritten. Note this second test does not guarantee that an overflowed + * stack will always be recognised. + */ + +/*-----------------------------------------------------------*/ + +#if( configCHECK_FOR_STACK_OVERFLOW == 0 ) + + /* FreeRTOSConfig.h is not set to check for stack overflows. */ + #define taskFIRST_CHECK_FOR_STACK_OVERFLOW() + #define taskSECOND_CHECK_FOR_STACK_OVERFLOW() + +#endif /* configCHECK_FOR_STACK_OVERFLOW == 0 */ +/*-----------------------------------------------------------*/ + +#if( configCHECK_FOR_STACK_OVERFLOW == 1 ) + + /* FreeRTOSConfig.h is only set to use the first method of + overflow checking. */ + #define taskSECOND_CHECK_FOR_STACK_OVERFLOW() + +#endif +/*-----------------------------------------------------------*/ + +#if( ( configCHECK_FOR_STACK_OVERFLOW > 0 ) && ( portSTACK_GROWTH < 0 ) ) + + /* Only the current stack state is to be checked. */ + #define taskFIRST_CHECK_FOR_STACK_OVERFLOW() \ + { \ + /* Is the currently saved stack pointer within the stack limit? */ \ + if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack ) \ + { \ + vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ + } \ + } + +#endif /* configCHECK_FOR_STACK_OVERFLOW > 0 */ +/*-----------------------------------------------------------*/ + +#if( ( configCHECK_FOR_STACK_OVERFLOW > 0 ) && ( portSTACK_GROWTH > 0 ) ) + + /* Only the current stack state is to be checked. */ + #define taskFIRST_CHECK_FOR_STACK_OVERFLOW() \ + { \ + \ + /* Is the currently saved stack pointer within the stack limit? */ \ + if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack ) \ + { \ + vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ + } \ + } + +#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */ +/*-----------------------------------------------------------*/ + +#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) ) + + #define taskSECOND_CHECK_FOR_STACK_OVERFLOW() \ + { \ + static const unsigned char ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \ + \ + \ + /* Has the extremity of the task stack ever been written over? */ \ + if( memcmp( ( void * ) pxCurrentTCB->pxStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \ + { \ + vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ + } \ + } + +#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ +/*-----------------------------------------------------------*/ + +#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) ) + + #define taskSECOND_CHECK_FOR_STACK_OVERFLOW() \ + { \ + char *pcEndOfStack = ( char * ) pxCurrentTCB->pxEndOfStack; \ + static const unsigned char ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ + tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \ + \ + \ + pcEndOfStack -= sizeof( ucExpectedStackBytes ); \ + \ + /* Has the extremity of the task stack ever been written over? */ \ + if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \ + { \ + vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ + } \ + } + +#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ +/*-----------------------------------------------------------*/ + +#endif /* STACK_MACROS_H */ + diff --git a/FreeRTOS/Source/include/croutine.h b/FreeRTOS/Source/include/croutine.h index a70491e..94503e3 100644 --- a/FreeRTOS/Source/include/croutine.h +++ b/FreeRTOS/Source/include/croutine.h @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #ifndef CO_ROUTINE_H #define CO_ROUTINE_H @@ -41,28 +78,28 @@ extern "C" { /* Used to hide the implementation of the co-routine control block. The control block structure however has to be included in the header due to the macro implementation of the co-routine functionality. */ -typedef void * CoRoutineHandle_t; +typedef void * xCoRoutineHandle; /* Defines the prototype to which co-routine functions must conform. */ -typedef void (*crCOROUTINE_CODE)( CoRoutineHandle_t, UBaseType_t ); +typedef void (*crCOROUTINE_CODE)( xCoRoutineHandle, unsigned portBASE_TYPE ); typedef struct corCoRoutineControlBlock { - crCOROUTINE_CODE pxCoRoutineFunction; - ListItem_t xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */ - ListItem_t xEventListItem; /*< List item used to place the CRCB in event lists. */ - UBaseType_t uxPriority; /*< The priority of the co-routine in relation to other co-routines. */ - UBaseType_t uxIndex; /*< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */ - uint16_t uxState; /*< Used internally by the co-routine implementation. */ -} CRCB_t; /* Co-routine control block. Note must be identical in size down to uxPriority with TCB_t. */ + crCOROUTINE_CODE pxCoRoutineFunction; + xListItem xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */ + xListItem xEventListItem; /*< List item used to place the CRCB in event lists. */ + unsigned portBASE_TYPE uxPriority; /*< The priority of the co-routine in relation to other co-routines. */ + unsigned portBASE_TYPE uxIndex; /*< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */ + unsigned short uxState; /*< Used internally by the co-routine implementation. */ +} corCRCB; /* Co-routine control block. Note must be identical in size down to uxPriority with tskTCB. */ /** * croutine. h *
- BaseType_t xCoRoutineCreate(
+ portBASE_TYPE xCoRoutineCreate(
                                  crCOROUTINE_CODE pxCoRoutineCode,
-                                 UBaseType_t uxPriority,
-                                 UBaseType_t uxIndex
+                                 unsigned portBASE_TYPE uxPriority,
+                                 unsigned portBASE_TYPE uxIndex
                                );
* * Create a new co-routine and add it to the list of co-routines that are @@ -85,12 +122,12 @@ typedef struct corCoRoutineControlBlock * Example usage:
  // Co-routine to be created.
- void vFlashCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ void vFlashCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
  {
  // Variables in co-routines must be declared static if they must maintain value across a blocking call.
  // This may not be necessary for const variables.
  static const char cLedToFlash[ 2 ] = { 5, 6 };
- static const TickType_t uxFlashRates[ 2 ] = { 200, 400 };
+ static const portTickType uxFlashRates[ 2 ] = { 200, 400 };
 
      // Must start every co-routine with a call to crSTART();
      crSTART( xHandle );
@@ -100,7 +137,7 @@ typedef struct corCoRoutineControlBlock
          // This co-routine just delays for a fixed period, then toggles
          // an LED.  Two co-routines are created using this function, so
          // the uxIndex parameter is used to tell the co-routine which
-         // LED to flash and how int32_t to delay.  This assumes xQueue has
+         // LED to flash and how long to delay.  This assumes xQueue has
          // already been created.
          vParTestToggleLED( cLedToFlash[ uxIndex ] );
          crDELAY( xHandle, uxFlashRates[ uxIndex ] );
@@ -113,9 +150,9 @@ typedef struct corCoRoutineControlBlock
  // Function that creates two co-routines.
  void vOtherFunction( void )
  {
- uint8_t ucParameterToPass;
- TaskHandle_t xHandle;
-
+ unsigned char ucParameterToPass;
+ xTaskHandle xHandle;
+		
      // Create two co-routines at priority 0.  The first is given index 0
      // so (from the code above) toggles LED 5 every 200 ticks.  The second
      // is given index 1 so toggles LED 6 every 400 ticks.
@@ -128,7 +165,7 @@ typedef struct corCoRoutineControlBlock
  * \defgroup xCoRoutineCreate xCoRoutineCreate
  * \ingroup Tasks
  */
-BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex );
+signed portBASE_TYPE xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, unsigned portBASE_TYPE uxPriority, unsigned portBASE_TYPE uxIndex );
 
 
 /**
@@ -175,17 +212,17 @@ void vCoRoutineSchedule( void );
 /**
  * croutine. h
  * 
- crSTART( CoRoutineHandle_t xHandle );
+ crSTART( xCoRoutineHandle xHandle );
* * This macro MUST always be called at the start of a co-routine function. * * Example usage:
  // Co-routine to be created.
- void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
  {
  // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static int32_t ulAVariable;
+ static long ulAVariable;
 
      // Must start every co-routine with a call to crSTART();
      crSTART( xHandle );
@@ -201,7 +238,7 @@ void vCoRoutineSchedule( void );
  * \defgroup crSTART crSTART
  * \ingroup Tasks
  */
-#define crSTART( pxCRCB ) switch( ( ( CRCB_t * )( pxCRCB ) )->uxState ) { case 0:
+#define crSTART( pxCRCB ) switch( ( ( corCRCB * )( pxCRCB ) )->uxState ) { case 0:
 
 /**
  * croutine. h
@@ -213,10 +250,10 @@ void vCoRoutineSchedule( void );
  * Example usage:
    
  // Co-routine to be created.
- void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
  {
  // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static int32_t ulAVariable;
+ static long ulAVariable;
 
      // Must start every co-routine with a call to crSTART();
      crSTART( xHandle );
@@ -238,13 +275,13 @@ void vCoRoutineSchedule( void );
  * These macros are intended for internal use by the co-routine implementation
  * only.  The macros should not be used directly by application writers.
  */
-#define crSET_STATE0( xHandle ) ( ( CRCB_t * )( xHandle ) )->uxState = (__LINE__ * 2); return; case (__LINE__ * 2):
-#define crSET_STATE1( xHandle ) ( ( CRCB_t * )( xHandle ) )->uxState = ((__LINE__ * 2)+1); return; case ((__LINE__ * 2)+1):
+#define crSET_STATE0( xHandle ) ( ( corCRCB * )( xHandle ) )->uxState = (__LINE__ * 2); return; case (__LINE__ * 2):
+#define crSET_STATE1( xHandle ) ( ( corCRCB * )( xHandle ) )->uxState = ((__LINE__ * 2)+1); return; case ((__LINE__ * 2)+1):
 
 /**
  * croutine. h
  *
- crDELAY( CoRoutineHandle_t xHandle, TickType_t xTicksToDelay );
+ crDELAY( xCoRoutineHandle xHandle, portTickType xTicksToDelay );
* * Delay a co-routine for a fixed period of time. * @@ -257,18 +294,18 @@ void vCoRoutineSchedule( void ); * * @param xTickToDelay The number of ticks that the co-routine should delay * for. The actual amount of time this equates to is defined by - * configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant portTICK_PERIOD_MS + * configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant portTICK_RATE_MS * can be used to convert ticks to milliseconds. * * Example usage:
  // Co-routine to be created.
- void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ void vACoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
  {
  // Variables in co-routines must be declared static if they must maintain value across a blocking call.
  // This may not be necessary for const variables.
  // We are to delay for 200ms.
- static const xTickType xDelayTime = 200 / portTICK_PERIOD_MS;
+ static const xTickType xDelayTime = 200 / portTICK_RATE_MS;
 
      // Must start every co-routine with a call to crSTART();
      crSTART( xHandle );
@@ -297,11 +334,11 @@ void vCoRoutineSchedule( void );
 /**
  * 
  crQUEUE_SEND(
-                  CoRoutineHandle_t xHandle,
-                  QueueHandle_t pxQueue,
+                  xCoRoutineHandle xHandle,
+                  xQueueHandle pxQueue,
                   void *pvItemToQueue,
-                  TickType_t xTicksToWait,
-                  BaseType_t *pxResult
+                  portTickType xTicksToWait,
+                  portBASE_TYPE *pxResult
              )
* * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine @@ -334,7 +371,7 @@ void vCoRoutineSchedule( void ); * to wait for space to become available on the queue, should space not be * available immediately. The actual amount of time this equates to is defined * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant - * portTICK_PERIOD_MS can be used to convert ticks to milliseconds (see example + * portTICK_RATE_MS can be used to convert ticks to milliseconds (see example * below). * * @param pxResult The variable pointed to by pxResult will be set to pdPASS if @@ -345,11 +382,11 @@ void vCoRoutineSchedule( void );
  // Co-routine function that blocks for a fixed period then posts a number onto
  // a queue.
- static void prvCoRoutineFlashTask( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ static void prvCoRoutineFlashTask( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
  {
  // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static BaseType_t xNumberToPost = 0;
- static BaseType_t xResult;
+ static portBASE_TYPE xNumberToPost = 0;
+ static portBASE_TYPE xResult;
 
     // Co-routines must begin with a call to crSTART().
     crSTART( xHandle );
@@ -396,11 +433,11 @@ void vCoRoutineSchedule( void );
  * croutine. h
  * 
   crQUEUE_RECEIVE(
-                     CoRoutineHandle_t xHandle,
-                     QueueHandle_t pxQueue,
+                     xCoRoutineHandle xHandle,
+                     xQueueHandle pxQueue,
                      void *pvBuffer,
-                     TickType_t xTicksToWait,
-                     BaseType_t *pxResult
+                     portTickType xTicksToWait,
+                     portBASE_TYPE *pxResult
                  )
* * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine @@ -432,7 +469,7 @@ void vCoRoutineSchedule( void ); * to wait for data to become available from the queue, should data not be * available immediately. The actual amount of time this equates to is defined * by configTICK_RATE_HZ (set in FreeRTOSConfig.h). The constant - * portTICK_PERIOD_MS can be used to convert ticks to milliseconds (see the + * portTICK_RATE_MS can be used to convert ticks to milliseconds (see the * crQUEUE_SEND example). * * @param pxResult The variable pointed to by pxResult will be set to pdPASS if @@ -443,11 +480,11 @@ void vCoRoutineSchedule( void );
  // A co-routine receives the number of an LED to flash from a queue.  It
  // blocks on the queue until the number is received.
- static void prvCoRoutineFlashWorkTask( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ static void prvCoRoutineFlashWorkTask( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
  {
  // Variables in co-routines must be declared static if they must maintain value across a blocking call.
- static BaseType_t xResult;
- static UBaseType_t uxLEDToFlash;
+ static portBASE_TYPE xResult;
+ static unsigned portBASE_TYPE uxLEDToFlash;
 
     // All co-routines must start with a call to crSTART().
     crSTART( xHandle );
@@ -488,9 +525,9 @@ void vCoRoutineSchedule( void );
  * croutine. h
  * 
   crQUEUE_SEND_FROM_ISR(
-                            QueueHandle_t pxQueue,
+                            xQueueHandle pxQueue,
                             void *pvItemToQueue,
-                            BaseType_t xCoRoutinePreviouslyWoken
+                            portBASE_TYPE xCoRoutinePreviouslyWoken
                        )
* * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the @@ -528,10 +565,10 @@ void vCoRoutineSchedule( void ); * Example usage:
  // A co-routine that blocks on a queue waiting for characters to be received.
- static void vReceivingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ static void vReceivingCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
  {
  char cRxedChar;
- BaseType_t xResult;
+ portBASE_TYPE xResult;
 
      // All co-routines must start with a call to crSTART().
      crSTART( xHandle );
@@ -558,7 +595,7 @@ void vCoRoutineSchedule( void );
  void vUART_ISR( void )
  {
  char cRxedChar;
- BaseType_t xCRWokenByPost = pdFALSE;
+ portBASE_TYPE xCRWokenByPost = pdFALSE;
 
      // We loop around reading characters until there are none left in the UART.
      while( UART_RX_REG_NOT_EMPTY() )
@@ -585,9 +622,9 @@ void vCoRoutineSchedule( void );
  * croutine. h
  * 
   crQUEUE_SEND_FROM_ISR(
-                            QueueHandle_t pxQueue,
+                            xQueueHandle pxQueue,
                             void *pvBuffer,
-                            BaseType_t * pxCoRoutineWoken
+                            portBASE_TYPE * pxCoRoutineWoken
                        )
* * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the @@ -626,12 +663,12 @@ void vCoRoutineSchedule( void );
  // A co-routine that posts a character to a queue then blocks for a fixed
  // period.  The character is incremented each time.
- static void vSendingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
+ static void vSendingCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE uxIndex )
  {
  // cChar holds its value while this co-routine is blocked and must therefore
  // be declared static.
  static char cCharToTx = 'a';
- BaseType_t xResult;
+ portBASE_TYPE xResult;
 
      // All co-routines must start with a call to crSTART().
      crSTART( xHandle );
@@ -674,7 +711,7 @@ void vCoRoutineSchedule( void );
  void vUART_ISR( void )
  {
  char cCharToTx;
- BaseType_t xCRWokenByPost = pdFALSE;
+ portBASE_TYPE xCRWokenByPost = pdFALSE;
 
      while( UART_TX_REG_EMPTY() )
      {
@@ -702,7 +739,7 @@ void vCoRoutineSchedule( void );
  * Removes the current co-routine from its ready list and places it in the
  * appropriate delayed list.
  */
-void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay, List_t *pxEventList );
+void vCoRoutineAddToDelayedList( portTickType xTicksToDelay, xList *pxEventList );
 
 /*
  * This function is intended for internal use by the queue implementation only.
@@ -711,7 +748,7 @@ void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay, List_t *pxEventList )
  * Removes the highest priority co-routine from the event list and places it in
  * the pending ready list.
  */
-BaseType_t xCoRoutineRemoveFromEventList( const List_t *pxEventList );
+signed portBASE_TYPE xCoRoutineRemoveFromEventList( const xList *pxEventList );
 
 #ifdef __cplusplus
 }
diff --git a/FreeRTOS/Source/include/deprecated_definitions.h b/FreeRTOS/Source/include/deprecated_definitions.h
deleted file mode 100644
index cfee927..0000000
--- a/FreeRTOS/Source/include/deprecated_definitions.h
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * FreeRTOS Kernel V10.2.0
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * http://www.FreeRTOS.org
- * http://aws.amazon.com/freertos
- *
- * 1 tab == 4 spaces!
- */
-
-#ifndef DEPRECATED_DEFINITIONS_H
-#define DEPRECATED_DEFINITIONS_H
-
-
-/* Each FreeRTOS port has a unique portmacro.h header file.  Originally a
-pre-processor definition was used to ensure the pre-processor found the correct
-portmacro.h file for the port being used.  That scheme was deprecated in favour
-of setting the compiler's include path such that it found the correct
-portmacro.h file - removing the need for the constant and allowing the
-portmacro.h file to be located anywhere in relation to the port being used.  The
-definitions below remain in the code for backward compatibility only.  New
-projects should not use them. */
-
-#ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT
-	#include "..\..\Source\portable\owatcom\16bitdos\pc\portmacro.h"
-	typedef void ( __interrupt __far *pxISR )();
-#endif
-
-#ifdef OPEN_WATCOM_FLASH_LITE_186_PORT
-	#include "..\..\Source\portable\owatcom\16bitdos\flsh186\portmacro.h"
-	typedef void ( __interrupt __far *pxISR )();
-#endif
-
-#ifdef GCC_MEGA_AVR
-	#include "../portable/GCC/ATMega323/portmacro.h"
-#endif
-
-#ifdef IAR_MEGA_AVR
-	#include "../portable/IAR/ATMega323/portmacro.h"
-#endif
-
-#ifdef MPLAB_PIC24_PORT
-	#include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h"
-#endif
-
-#ifdef MPLAB_DSPIC_PORT
-	#include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h"
-#endif
-
-#ifdef MPLAB_PIC18F_PORT
-	#include "../../Source/portable/MPLAB/PIC18F/portmacro.h"
-#endif
-
-#ifdef MPLAB_PIC32MX_PORT
-	#include "../../Source/portable/MPLAB/PIC32MX/portmacro.h"
-#endif
-
-#ifdef _FEDPICC
-	#include "libFreeRTOS/Include/portmacro.h"
-#endif
-
-#ifdef SDCC_CYGNAL
-	#include "../../Source/portable/SDCC/Cygnal/portmacro.h"
-#endif
-
-#ifdef GCC_ARM7
-	#include "../../Source/portable/GCC/ARM7_LPC2000/portmacro.h"
-#endif
-
-#ifdef GCC_ARM7_ECLIPSE
-	#include "portmacro.h"
-#endif
-
-#ifdef ROWLEY_LPC23xx
-	#include "../../Source/portable/GCC/ARM7_LPC23xx/portmacro.h"
-#endif
-
-#ifdef IAR_MSP430
-	#include "..\..\Source\portable\IAR\MSP430\portmacro.h"
-#endif
-
-#ifdef GCC_MSP430
-	#include "../../Source/portable/GCC/MSP430F449/portmacro.h"
-#endif
-
-#ifdef ROWLEY_MSP430
-	#include "../../Source/portable/Rowley/MSP430F449/portmacro.h"
-#endif
-
-#ifdef ARM7_LPC21xx_KEIL_RVDS
-	#include "..\..\Source\portable\RVDS\ARM7_LPC21xx\portmacro.h"
-#endif
-
-#ifdef SAM7_GCC
-	#include "../../Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h"
-#endif
-
-#ifdef SAM7_IAR
-	#include "..\..\Source\portable\IAR\AtmelSAM7S64\portmacro.h"
-#endif
-
-#ifdef SAM9XE_IAR
-	#include "..\..\Source\portable\IAR\AtmelSAM9XE\portmacro.h"
-#endif
-
-#ifdef LPC2000_IAR
-	#include "..\..\Source\portable\IAR\LPC2000\portmacro.h"
-#endif
-
-#ifdef STR71X_IAR
-	#include "..\..\Source\portable\IAR\STR71x\portmacro.h"
-#endif
-
-#ifdef STR75X_IAR
-	#include "..\..\Source\portable\IAR\STR75x\portmacro.h"
-#endif
-
-#ifdef STR75X_GCC
-	#include "..\..\Source\portable\GCC\STR75x\portmacro.h"
-#endif
-
-#ifdef STR91X_IAR
-	#include "..\..\Source\portable\IAR\STR91x\portmacro.h"
-#endif
-
-#ifdef GCC_H8S
-	#include "../../Source/portable/GCC/H8S2329/portmacro.h"
-#endif
-
-#ifdef GCC_AT91FR40008
-	#include "../../Source/portable/GCC/ARM7_AT91FR40008/portmacro.h"
-#endif
-
-#ifdef RVDS_ARMCM3_LM3S102
-	#include "../../Source/portable/RVDS/ARM_CM3/portmacro.h"
-#endif
-
-#ifdef GCC_ARMCM3_LM3S102
-	#include "../../Source/portable/GCC/ARM_CM3/portmacro.h"
-#endif
-
-#ifdef GCC_ARMCM3
-	#include "../../Source/portable/GCC/ARM_CM3/portmacro.h"
-#endif
-
-#ifdef IAR_ARM_CM3
-	#include "../../Source/portable/IAR/ARM_CM3/portmacro.h"
-#endif
-
-#ifdef IAR_ARMCM3_LM
-	#include "../../Source/portable/IAR/ARM_CM3/portmacro.h"
-#endif
-
-#ifdef HCS12_CODE_WARRIOR
-	#include "../../Source/portable/CodeWarrior/HCS12/portmacro.h"
-#endif
-
-#ifdef MICROBLAZE_GCC
-	#include "../../Source/portable/GCC/MicroBlaze/portmacro.h"
-#endif
-
-#ifdef TERN_EE
-	#include "..\..\Source\portable\Paradigm\Tern_EE\small\portmacro.h"
-#endif
-
-#ifdef GCC_HCS12
-	#include "../../Source/portable/GCC/HCS12/portmacro.h"
-#endif
-
-#ifdef GCC_MCF5235
-    #include "../../Source/portable/GCC/MCF5235/portmacro.h"
-#endif
-
-#ifdef COLDFIRE_V2_GCC
-	#include "../../../Source/portable/GCC/ColdFire_V2/portmacro.h"
-#endif
-
-#ifdef COLDFIRE_V2_CODEWARRIOR
-	#include "../../Source/portable/CodeWarrior/ColdFire_V2/portmacro.h"
-#endif
-
-#ifdef GCC_PPC405
-	#include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h"
-#endif
-
-#ifdef GCC_PPC440
-	#include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h"
-#endif
-
-#ifdef _16FX_SOFTUNE
-	#include "..\..\Source\portable\Softune\MB96340\portmacro.h"
-#endif
-
-#ifdef BCC_INDUSTRIAL_PC_PORT
-	/* A short file name has to be used in place of the normal
-	FreeRTOSConfig.h when using the Borland compiler. */
-	#include "frconfig.h"
-	#include "..\portable\BCC\16BitDOS\PC\prtmacro.h"
-    typedef void ( __interrupt __far *pxISR )();
-#endif
-
-#ifdef BCC_FLASH_LITE_186_PORT
-	/* A short file name has to be used in place of the normal
-	FreeRTOSConfig.h when using the Borland compiler. */
-	#include "frconfig.h"
-	#include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h"
-    typedef void ( __interrupt __far *pxISR )();
-#endif
-
-#ifdef __GNUC__
-   #ifdef __AVR32_AVR32A__
-	   #include "portmacro.h"
-   #endif
-#endif
-
-#ifdef __ICCAVR32__
-   #ifdef __CORE__
-      #if __CORE__ == __AVR32A__
-	      #include "portmacro.h"
-      #endif
-   #endif
-#endif
-
-#ifdef __91467D
-	#include "portmacro.h"
-#endif
-
-#ifdef __96340
-	#include "portmacro.h"
-#endif
-
-
-#ifdef __IAR_V850ES_Fx3__
-	#include "../../Source/portable/IAR/V850ES/portmacro.h"
-#endif
-
-#ifdef __IAR_V850ES_Jx3__
-	#include "../../Source/portable/IAR/V850ES/portmacro.h"
-#endif
-
-#ifdef __IAR_V850ES_Jx3_L__
-	#include "../../Source/portable/IAR/V850ES/portmacro.h"
-#endif
-
-#ifdef __IAR_V850ES_Jx2__
-	#include "../../Source/portable/IAR/V850ES/portmacro.h"
-#endif
-
-#ifdef __IAR_V850ES_Hx2__
-	#include "../../Source/portable/IAR/V850ES/portmacro.h"
-#endif
-
-#ifdef __IAR_78K0R_Kx3__
-	#include "../../Source/portable/IAR/78K0R/portmacro.h"
-#endif
-
-#ifdef __IAR_78K0R_Kx3L__
-	#include "../../Source/portable/IAR/78K0R/portmacro.h"
-#endif
-
-#endif /* DEPRECATED_DEFINITIONS_H */
-
diff --git a/FreeRTOS/Source/include/event_groups.h b/FreeRTOS/Source/include/event_groups.h
deleted file mode 100644
index 7beb0ac..0000000
--- a/FreeRTOS/Source/include/event_groups.h
+++ /dev/null
@@ -1,757 +0,0 @@
-/*
- * FreeRTOS Kernel V10.2.0
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * http://www.FreeRTOS.org
- * http://aws.amazon.com/freertos
- *
- * 1 tab == 4 spaces!
- */
-
-#ifndef EVENT_GROUPS_H
-#define EVENT_GROUPS_H
-
-#ifndef INC_FREERTOS_H
-	#error "include FreeRTOS.h" must appear in source files before "include event_groups.h"
-#endif
-
-/* FreeRTOS includes. */
-#include "timers.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * An event group is a collection of bits to which an application can assign a
- * meaning.  For example, an application may create an event group to convey
- * the status of various CAN bus related events in which bit 0 might mean "A CAN
- * message has been received and is ready for processing", bit 1 might mean "The
- * application has queued a message that is ready for sending onto the CAN
- * network", and bit 2 might mean "It is time to send a SYNC message onto the
- * CAN network" etc.  A task can then test the bit values to see which events
- * are active, and optionally enter the Blocked state to wait for a specified
- * bit or a group of specified bits to be active.  To continue the CAN bus
- * example, a CAN controlling task can enter the Blocked state (and therefore
- * not consume any processing time) until either bit 0, bit 1 or bit 2 are
- * active, at which time the bit that was actually active would inform the task
- * which action it had to take (process a received message, send a message, or
- * send a SYNC).
- *
- * The event groups implementation contains intelligence to avoid race
- * conditions that would otherwise occur were an application to use a simple
- * variable for the same purpose.  This is particularly important with respect
- * to when a bit within an event group is to be cleared, and when bits have to
- * be set and then tested atomically - as is the case where event groups are
- * used to create a synchronisation point between multiple tasks (a
- * 'rendezvous').
- *
- * \defgroup EventGroup
- */
-
-
-
-/**
- * event_groups.h
- *
- * Type by which event groups are referenced.  For example, a call to
- * xEventGroupCreate() returns an EventGroupHandle_t variable that can then
- * be used as a parameter to other event group functions.
- *
- * \defgroup EventGroupHandle_t EventGroupHandle_t
- * \ingroup EventGroup
- */
-struct EventGroupDef_t;
-typedef struct EventGroupDef_t * EventGroupHandle_t;
-
-/*
- * The type that holds event bits always matches TickType_t - therefore the
- * number of bits it holds is set by configUSE_16_BIT_TICKS (16 bits if set to 1,
- * 32 bits if set to 0.
- *
- * \defgroup EventBits_t EventBits_t
- * \ingroup EventGroup
- */
-typedef TickType_t EventBits_t;
-
-/**
- * event_groups.h
- *
- EventGroupHandle_t xEventGroupCreate( void );
- 
- * - * Create a new event group. - * - * Internally, within the FreeRTOS implementation, event groups use a [small] - * block of memory, in which the event group's structure is stored. If an event - * groups is created using xEventGropuCreate() then the required memory is - * automatically dynamically allocated inside the xEventGroupCreate() function. - * (see http://www.freertos.org/a00111.html). If an event group is created - * using xEventGropuCreateStatic() then the application writer must instead - * provide the memory that will get used by the event group. - * xEventGroupCreateStatic() therefore allows an event group to be created - * without using any dynamic memory allocation. - * - * Although event groups are not related to ticks, for internal implementation - * reasons the number of bits available for use in an event group is dependent - * on the configUSE_16_BIT_TICKS setting in FreeRTOSConfig.h. If - * configUSE_16_BIT_TICKS is 1 then each event group contains 8 usable bits (bit - * 0 to bit 7). If configUSE_16_BIT_TICKS is set to 0 then each event group has - * 24 usable bits (bit 0 to bit 23). The EventBits_t type is used to store - * event bits within an event group. - * - * @return If the event group was created then a handle to the event group is - * returned. If there was insufficient FreeRTOS heap available to create the - * event group then NULL is returned. See http://www.freertos.org/a00111.html - * - * Example usage: -
-	// Declare a variable to hold the created event group.
-	EventGroupHandle_t xCreatedEventGroup;
-
-	// Attempt to create the event group.
-	xCreatedEventGroup = xEventGroupCreate();
-
-	// Was the event group created successfully?
-	if( xCreatedEventGroup == NULL )
-	{
-		// The event group was not created because there was insufficient
-		// FreeRTOS heap available.
-	}
-	else
-	{
-		// The event group was created.
-	}
-   
- * \defgroup xEventGroupCreate xEventGroupCreate - * \ingroup EventGroup - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - EventGroupHandle_t xEventGroupCreate( void ) PRIVILEGED_FUNCTION; -#endif - -/** - * event_groups.h - *
- EventGroupHandle_t xEventGroupCreateStatic( EventGroupHandle_t * pxEventGroupBuffer );
- 
- * - * Create a new event group. - * - * Internally, within the FreeRTOS implementation, event groups use a [small] - * block of memory, in which the event group's structure is stored. If an event - * groups is created using xEventGropuCreate() then the required memory is - * automatically dynamically allocated inside the xEventGroupCreate() function. - * (see http://www.freertos.org/a00111.html). If an event group is created - * using xEventGropuCreateStatic() then the application writer must instead - * provide the memory that will get used by the event group. - * xEventGroupCreateStatic() therefore allows an event group to be created - * without using any dynamic memory allocation. - * - * Although event groups are not related to ticks, for internal implementation - * reasons the number of bits available for use in an event group is dependent - * on the configUSE_16_BIT_TICKS setting in FreeRTOSConfig.h. If - * configUSE_16_BIT_TICKS is 1 then each event group contains 8 usable bits (bit - * 0 to bit 7). If configUSE_16_BIT_TICKS is set to 0 then each event group has - * 24 usable bits (bit 0 to bit 23). The EventBits_t type is used to store - * event bits within an event group. - * - * @param pxEventGroupBuffer pxEventGroupBuffer must point to a variable of type - * StaticEventGroup_t, which will be then be used to hold the event group's data - * structures, removing the need for the memory to be allocated dynamically. - * - * @return If the event group was created then a handle to the event group is - * returned. If pxEventGroupBuffer was NULL then NULL is returned. - * - * Example usage: -
-	// StaticEventGroup_t is a publicly accessible structure that has the same
-	// size and alignment requirements as the real event group structure.  It is
-	// provided as a mechanism for applications to know the size of the event
-	// group (which is dependent on the architecture and configuration file
-	// settings) without breaking the strict data hiding policy by exposing the
-	// real event group internals.  This StaticEventGroup_t variable is passed
-	// into the xSemaphoreCreateEventGroupStatic() function and is used to store
-	// the event group's data structures
-	StaticEventGroup_t xEventGroupBuffer;
-
-	// Create the event group without dynamically allocating any memory.
-	xEventGroup = xEventGroupCreateStatic( &xEventGroupBuffer );
-   
- */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) PRIVILEGED_FUNCTION; -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupWaitBits( 	EventGroupHandle_t xEventGroup,
-										const EventBits_t uxBitsToWaitFor,
-										const BaseType_t xClearOnExit,
-										const BaseType_t xWaitForAllBits,
-										const TickType_t xTicksToWait );
- 
- * - * [Potentially] block to wait for one or more bits to be set within a - * previously created event group. - * - * This function cannot be called from an interrupt. - * - * @param xEventGroup The event group in which the bits are being tested. The - * event group must have previously been created using a call to - * xEventGroupCreate(). - * - * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test - * inside the event group. For example, to wait for bit 0 and/or bit 2 set - * uxBitsToWaitFor to 0x05. To wait for bits 0 and/or bit 1 and/or bit 2 set - * uxBitsToWaitFor to 0x07. Etc. - * - * @param xClearOnExit If xClearOnExit is set to pdTRUE then any bits within - * uxBitsToWaitFor that are set within the event group will be cleared before - * xEventGroupWaitBits() returns if the wait condition was met (if the function - * returns for a reason other than a timeout). If xClearOnExit is set to - * pdFALSE then the bits set in the event group are not altered when the call to - * xEventGroupWaitBits() returns. - * - * @param xWaitForAllBits If xWaitForAllBits is set to pdTRUE then - * xEventGroupWaitBits() will return when either all the bits in uxBitsToWaitFor - * are set or the specified block time expires. If xWaitForAllBits is set to - * pdFALSE then xEventGroupWaitBits() will return when any one of the bits set - * in uxBitsToWaitFor is set or the specified block time expires. The block - * time is specified by the xTicksToWait parameter. - * - * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait - * for one/all (depending on the xWaitForAllBits value) of the bits specified by - * uxBitsToWaitFor to become set. - * - * @return The value of the event group at the time either the bits being waited - * for became set, or the block time expired. Test the return value to know - * which bits were set. If xEventGroupWaitBits() returned because its timeout - * expired then not all the bits being waited for will be set. If - * xEventGroupWaitBits() returned because the bits it was waiting for were set - * then the returned value is the event group value before any bits were - * automatically cleared in the case that xClearOnExit parameter was set to - * pdTRUE. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-   const TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;
-
-		// Wait a maximum of 100ms for either bit 0 or bit 4 to be set within
-		// the event group.  Clear the bits before exiting.
-		uxBits = xEventGroupWaitBits(
-					xEventGroup,	// The event group being tested.
-					BIT_0 | BIT_4,	// The bits within the event group to wait for.
-					pdTRUE,			// BIT_0 and BIT_4 should be cleared before returning.
-					pdFALSE,		// Don't wait for both bits, either bit will do.
-					xTicksToWait );	// Wait a maximum of 100ms for either bit to be set.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// xEventGroupWaitBits() returned because both bits were set.
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// xEventGroupWaitBits() returned because just BIT_0 was set.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// xEventGroupWaitBits() returned because just BIT_4 was set.
-		}
-		else
-		{
-			// xEventGroupWaitBits() returned because xTicksToWait ticks passed
-			// without either BIT_0 or BIT_4 becoming set.
-		}
-   }
-   
- * \defgroup xEventGroupWaitBits xEventGroupWaitBits - * \ingroup EventGroup - */ -EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * event_groups.h - *
-	EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear );
- 
- * - * Clear bits within an event group. This function cannot be called from an - * interrupt. - * - * @param xEventGroup The event group in which the bits are to be cleared. - * - * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear - * in the event group. For example, to clear bit 3 only, set uxBitsToClear to - * 0x08. To clear bit 3 and bit 0 set uxBitsToClear to 0x09. - * - * @return The value of the event group before the specified bits were cleared. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-
-		// Clear bit 0 and bit 4 in xEventGroup.
-		uxBits = xEventGroupClearBits(
-								xEventGroup,	// The event group being updated.
-								BIT_0 | BIT_4 );// The bits being cleared.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// Both bit 0 and bit 4 were set before xEventGroupClearBits() was
-			// called.  Both will now be clear (not set).
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// Bit 0 was set before xEventGroupClearBits() was called.  It will
-			// now be clear.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// Bit 4 was set before xEventGroupClearBits() was called.  It will
-			// now be clear.
-		}
-		else
-		{
-			// Neither bit 0 nor bit 4 were set in the first place.
-		}
-   }
-   
- * \defgroup xEventGroupClearBits xEventGroupClearBits - * \ingroup EventGroup - */ -EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION; - -/** - * event_groups.h - *
-	BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
- 
- * - * A version of xEventGroupClearBits() that can be called from an interrupt. - * - * Setting bits in an event group is not a deterministic operation because there - * are an unknown number of tasks that may be waiting for the bit or bits being - * set. FreeRTOS does not allow nondeterministic operations to be performed - * while interrupts are disabled, so protects event groups that are accessed - * from tasks by suspending the scheduler rather than disabling interrupts. As - * a result event groups cannot be accessed directly from an interrupt service - * routine. Therefore xEventGroupClearBitsFromISR() sends a message to the - * timer task to have the clear operation performed in the context of the timer - * task. - * - * @param xEventGroup The event group in which the bits are to be cleared. - * - * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear. - * For example, to clear bit 3 only, set uxBitsToClear to 0x08. To clear bit 3 - * and bit 0 set uxBitsToClear to 0x09. - * - * @return If the request to execute the function was posted successfully then - * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned - * if the timer service queue was full. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   // An event group which it is assumed has already been created by a call to
-   // xEventGroupCreate().
-   EventGroupHandle_t xEventGroup;
-
-   void anInterruptHandler( void )
-   {
-		// Clear bit 0 and bit 4 in xEventGroup.
-		xResult = xEventGroupClearBitsFromISR(
-							xEventGroup,	 // The event group being updated.
-							BIT_0 | BIT_4 ); // The bits being set.
-
-		if( xResult == pdPASS )
-		{
-			// The message was posted successfully.
-		}
-  }
-   
- * \defgroup xEventGroupClearBitsFromISR xEventGroupClearBitsFromISR - * \ingroup EventGroup - */ -#if( configUSE_TRACE_FACILITY == 1 ) - BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION; -#else - #define xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear ) xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL ) -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
- 
- * - * Set bits within an event group. - * This function cannot be called from an interrupt. xEventGroupSetBitsFromISR() - * is a version that can be called from an interrupt. - * - * Setting bits in an event group will automatically unblock tasks that are - * blocked waiting for the bits. - * - * @param xEventGroup The event group in which the bits are to be set. - * - * @param uxBitsToSet A bitwise value that indicates the bit or bits to set. - * For example, to set bit 3 only, set uxBitsToSet to 0x08. To set bit 3 - * and bit 0 set uxBitsToSet to 0x09. - * - * @return The value of the event group at the time the call to - * xEventGroupSetBits() returns. There are two reasons why the returned value - * might have the bits specified by the uxBitsToSet parameter cleared. First, - * if setting a bit results in a task that was waiting for the bit leaving the - * blocked state then it is possible the bit will be cleared automatically - * (see the xClearBitOnExit parameter of xEventGroupWaitBits()). Second, any - * unblocked (or otherwise Ready state) task that has a priority above that of - * the task that called xEventGroupSetBits() will execute and may change the - * event group value before the call to xEventGroupSetBits() returns. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   void aFunction( EventGroupHandle_t xEventGroup )
-   {
-   EventBits_t uxBits;
-
-		// Set bit 0 and bit 4 in xEventGroup.
-		uxBits = xEventGroupSetBits(
-							xEventGroup,	// The event group being updated.
-							BIT_0 | BIT_4 );// The bits being set.
-
-		if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
-		{
-			// Both bit 0 and bit 4 remained set when the function returned.
-		}
-		else if( ( uxBits & BIT_0 ) != 0 )
-		{
-			// Bit 0 remained set when the function returned, but bit 4 was
-			// cleared.  It might be that bit 4 was cleared automatically as a
-			// task that was waiting for bit 4 was removed from the Blocked
-			// state.
-		}
-		else if( ( uxBits & BIT_4 ) != 0 )
-		{
-			// Bit 4 remained set when the function returned, but bit 0 was
-			// cleared.  It might be that bit 0 was cleared automatically as a
-			// task that was waiting for bit 0 was removed from the Blocked
-			// state.
-		}
-		else
-		{
-			// Neither bit 0 nor bit 4 remained set.  It might be that a task
-			// was waiting for both of the bits to be set, and the bits were
-			// cleared as the task left the Blocked state.
-		}
-   }
-   
- * \defgroup xEventGroupSetBits xEventGroupSetBits - * \ingroup EventGroup - */ -EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION; - -/** - * event_groups.h - *
-	BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken );
- 
- * - * A version of xEventGroupSetBits() that can be called from an interrupt. - * - * Setting bits in an event group is not a deterministic operation because there - * are an unknown number of tasks that may be waiting for the bit or bits being - * set. FreeRTOS does not allow nondeterministic operations to be performed in - * interrupts or from critical sections. Therefore xEventGroupSetBitsFromISR() - * sends a message to the timer task to have the set operation performed in the - * context of the timer task - where a scheduler lock is used in place of a - * critical section. - * - * @param xEventGroup The event group in which the bits are to be set. - * - * @param uxBitsToSet A bitwise value that indicates the bit or bits to set. - * For example, to set bit 3 only, set uxBitsToSet to 0x08. To set bit 3 - * and bit 0 set uxBitsToSet to 0x09. - * - * @param pxHigherPriorityTaskWoken As mentioned above, calling this function - * will result in a message being sent to the timer daemon task. If the - * priority of the timer daemon task is higher than the priority of the - * currently running task (the task the interrupt interrupted) then - * *pxHigherPriorityTaskWoken will be set to pdTRUE by - * xEventGroupSetBitsFromISR(), indicating that a context switch should be - * requested before the interrupt exits. For that reason - * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the - * example code below. - * - * @return If the request to execute the function was posted successfully then - * pdPASS is returned, otherwise pdFALSE is returned. pdFALSE will be returned - * if the timer service queue was full. - * - * Example usage: -
-   #define BIT_0	( 1 << 0 )
-   #define BIT_4	( 1 << 4 )
-
-   // An event group which it is assumed has already been created by a call to
-   // xEventGroupCreate().
-   EventGroupHandle_t xEventGroup;
-
-   void anInterruptHandler( void )
-   {
-   BaseType_t xHigherPriorityTaskWoken, xResult;
-
-		// xHigherPriorityTaskWoken must be initialised to pdFALSE.
-		xHigherPriorityTaskWoken = pdFALSE;
-
-		// Set bit 0 and bit 4 in xEventGroup.
-		xResult = xEventGroupSetBitsFromISR(
-							xEventGroup,	// The event group being updated.
-							BIT_0 | BIT_4   // The bits being set.
-							&xHigherPriorityTaskWoken );
-
-		// Was the message posted successfully?
-		if( xResult == pdPASS )
-		{
-			// If xHigherPriorityTaskWoken is now set to pdTRUE then a context
-			// switch should be requested.  The macro used is port specific and
-			// will be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() -
-			// refer to the documentation page for the port being used.
-			portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
-		}
-  }
-   
- * \defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR - * \ingroup EventGroup - */ -#if( configUSE_TRACE_FACILITY == 1 ) - BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -#else - #define xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken ) xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken ) -#endif - -/** - * event_groups.h - *
-	EventBits_t xEventGroupSync(	EventGroupHandle_t xEventGroup,
-									const EventBits_t uxBitsToSet,
-									const EventBits_t uxBitsToWaitFor,
-									TickType_t xTicksToWait );
- 
- * - * Atomically set bits within an event group, then wait for a combination of - * bits to be set within the same event group. This functionality is typically - * used to synchronise multiple tasks, where each task has to wait for the other - * tasks to reach a synchronisation point before proceeding. - * - * This function cannot be used from an interrupt. - * - * The function will return before its block time expires if the bits specified - * by the uxBitsToWait parameter are set, or become set within that time. In - * this case all the bits specified by uxBitsToWait will be automatically - * cleared before the function returns. - * - * @param xEventGroup The event group in which the bits are being tested. The - * event group must have previously been created using a call to - * xEventGroupCreate(). - * - * @param uxBitsToSet The bits to set in the event group before determining - * if, and possibly waiting for, all the bits specified by the uxBitsToWait - * parameter are set. - * - * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test - * inside the event group. For example, to wait for bit 0 and bit 2 set - * uxBitsToWaitFor to 0x05. To wait for bits 0 and bit 1 and bit 2 set - * uxBitsToWaitFor to 0x07. Etc. - * - * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait - * for all of the bits specified by uxBitsToWaitFor to become set. - * - * @return The value of the event group at the time either the bits being waited - * for became set, or the block time expired. Test the return value to know - * which bits were set. If xEventGroupSync() returned because its timeout - * expired then not all the bits being waited for will be set. If - * xEventGroupSync() returned because all the bits it was waiting for were - * set then the returned value is the event group value before any bits were - * automatically cleared. - * - * Example usage: -
- // Bits used by the three tasks.
- #define TASK_0_BIT		( 1 << 0 )
- #define TASK_1_BIT		( 1 << 1 )
- #define TASK_2_BIT		( 1 << 2 )
-
- #define ALL_SYNC_BITS ( TASK_0_BIT | TASK_1_BIT | TASK_2_BIT )
-
- // Use an event group to synchronise three tasks.  It is assumed this event
- // group has already been created elsewhere.
- EventGroupHandle_t xEventBits;
-
- void vTask0( void *pvParameters )
- {
- EventBits_t uxReturn;
- TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;
-
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 0 in the event flag to note this task has reached the
-		// sync point.  The other two tasks will set the other two bits defined
-		// by ALL_SYNC_BITS.  All three tasks have reached the synchronisation
-		// point when all the ALL_SYNC_BITS are set.  Wait a maximum of 100ms
-		// for this to happen.
-		uxReturn = xEventGroupSync( xEventBits, TASK_0_BIT, ALL_SYNC_BITS, xTicksToWait );
-
-		if( ( uxReturn & ALL_SYNC_BITS ) == ALL_SYNC_BITS )
-		{
-			// All three tasks reached the synchronisation point before the call
-			// to xEventGroupSync() timed out.
-		}
-	}
- }
-
- void vTask1( void *pvParameters )
- {
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 1 in the event flag to note this task has reached the
-		// synchronisation point.  The other two tasks will set the other two
-		// bits defined by ALL_SYNC_BITS.  All three tasks have reached the
-		// synchronisation point when all the ALL_SYNC_BITS are set.  Wait
-		// indefinitely for this to happen.
-		xEventGroupSync( xEventBits, TASK_1_BIT, ALL_SYNC_BITS, portMAX_DELAY );
-
-		// xEventGroupSync() was called with an indefinite block time, so
-		// this task will only reach here if the syncrhonisation was made by all
-		// three tasks, so there is no need to test the return value.
-	 }
- }
-
- void vTask2( void *pvParameters )
- {
-	 for( ;; )
-	 {
-		// Perform task functionality here.
-
-		// Set bit 2 in the event flag to note this task has reached the
-		// synchronisation point.  The other two tasks will set the other two
-		// bits defined by ALL_SYNC_BITS.  All three tasks have reached the
-		// synchronisation point when all the ALL_SYNC_BITS are set.  Wait
-		// indefinitely for this to happen.
-		xEventGroupSync( xEventBits, TASK_2_BIT, ALL_SYNC_BITS, portMAX_DELAY );
-
-		// xEventGroupSync() was called with an indefinite block time, so
-		// this task will only reach here if the syncrhonisation was made by all
-		// three tasks, so there is no need to test the return value.
-	}
- }
-
- 
- * \defgroup xEventGroupSync xEventGroupSync - * \ingroup EventGroup - */ -EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - - -/** - * event_groups.h - *
-	EventBits_t xEventGroupGetBits( EventGroupHandle_t xEventGroup );
- 
- * - * Returns the current value of the bits in an event group. This function - * cannot be used from an interrupt. - * - * @param xEventGroup The event group being queried. - * - * @return The event group bits at the time xEventGroupGetBits() was called. - * - * \defgroup xEventGroupGetBits xEventGroupGetBits - * \ingroup EventGroup - */ -#define xEventGroupGetBits( xEventGroup ) xEventGroupClearBits( xEventGroup, 0 ) - -/** - * event_groups.h - *
-	EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup );
- 
- * - * A version of xEventGroupGetBits() that can be called from an ISR. - * - * @param xEventGroup The event group being queried. - * - * @return The event group bits at the time xEventGroupGetBitsFromISR() was called. - * - * \defgroup xEventGroupGetBitsFromISR xEventGroupGetBitsFromISR - * \ingroup EventGroup - */ -EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION; - -/** - * event_groups.h - *
-	void xEventGroupDelete( EventGroupHandle_t xEventGroup );
- 
- * - * Delete an event group that was previously created by a call to - * xEventGroupCreate(). Tasks that are blocked on the event group will be - * unblocked and obtain 0 as the event group's value. - * - * @param xEventGroup The event group being deleted. - */ -void vEventGroupDelete( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION; - -/* For internal use only. */ -void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ) PRIVILEGED_FUNCTION; -void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ) PRIVILEGED_FUNCTION; - - -#if (configUSE_TRACE_FACILITY == 1) - UBaseType_t uxEventGroupGetNumber( void* xEventGroup ) PRIVILEGED_FUNCTION; - void vEventGroupSetNumber( void* xEventGroup, UBaseType_t uxEventGroupNumber ) PRIVILEGED_FUNCTION; -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* EVENT_GROUPS_H */ - - diff --git a/FreeRTOS/Source/include/list.h b/FreeRTOS/Source/include/list.h index 48ad64d..a8bafb0 100644 --- a/FreeRTOS/Source/include/list.h +++ b/FreeRTOS/Source/include/list.h @@ -1,36 +1,73 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ /* * This is the list implementation used by the scheduler. While it is tailored * heavily for the schedulers needs, it is also available for use by * application code. * - * list_ts can only store pointers to list_item_ts. Each ListItem_t contains a + * xLists can only store pointers to xListItems. Each xListItem contains a * numeric value (xItemValue). Most of the time the lists are sorted in * descending item value order. * @@ -53,9 +90,6 @@ * \ingroup FreeRTOSIntro */ -#ifndef INC_FREERTOS_H - #error FreeRTOS.h must be included before list.h -#endif #ifndef LIST_H #define LIST_H @@ -80,8 +114,8 @@ * complete and obvious failure of the scheduler. If this is ever experienced * then the volatile qualifier can be inserted in the relevant places within the * list structures by simply defining configLIST_VOLATILE to volatile in - * FreeRTOSConfig.h (as per the example at the bottom of this comment block). - * If configLIST_VOLATILE is not defined then the preprocessor directives below + * FreeRTOSConfig.h (as per the example at the bottom of this comment block). + * If configLIST_VOLATILE is not defined then the preprocessor directives below * will simply #define configLIST_VOLATILE away completely. * * To use volatile list structure members then add the following line to @@ -95,80 +129,36 @@ #ifdef __cplusplus extern "C" { #endif - -/* Macros that can be used to place known values within the list structures, -then check that the known values do not get corrupted during the execution of -the application. These may catch the list data structures being overwritten in -memory. They will not catch data errors caused by incorrect configuration or -use of FreeRTOS.*/ -#if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 ) - /* Define the macros to do nothing. */ - #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE - #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE - #define listFIRST_LIST_INTEGRITY_CHECK_VALUE - #define listSECOND_LIST_INTEGRITY_CHECK_VALUE - #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) - #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) - #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) - #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) - #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) - #define listTEST_LIST_INTEGRITY( pxList ) -#else - /* Define macros that add new members into the list structures. */ - #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue1; - #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue2; - #define listFIRST_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue1; - #define listSECOND_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue2; - - /* Define macros that set the new structure members to known values. */ - #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE - #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE - #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE - #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE - - /* Define macros that will assert if one of the structure members does not - contain its expected value. */ - #define listTEST_LIST_ITEM_INTEGRITY( pxItem ) configASSERT( ( ( pxItem )->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxItem )->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) ) - #define listTEST_LIST_INTEGRITY( pxList ) configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) ) -#endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */ - - /* * Definition of the only type of object that a list can contain. */ -struct xLIST; struct xLIST_ITEM { - listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - configLIST_VOLATILE TickType_t xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */ - struct xLIST_ITEM * configLIST_VOLATILE pxNext; /*< Pointer to the next ListItem_t in the list. */ - struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< Pointer to the previous ListItem_t in the list. */ - void * pvOwner; /*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */ - struct xLIST * configLIST_VOLATILE pxContainer; /*< Pointer to the list in which this list item is placed (if any). */ - listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ + configLIST_VOLATILE portTickType xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */ + struct xLIST_ITEM * configLIST_VOLATILE pxNext; /*< Pointer to the next xListItem in the list. */ + struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;/*< Pointer to the previous xListItem in the list. */ + void * pvOwner; /*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */ + void * configLIST_VOLATILE pvContainer; /*< Pointer to the list in which this list item is placed (if any). */ }; -typedef struct xLIST_ITEM ListItem_t; /* For some reason lint wants this as two separate definitions. */ +typedef struct xLIST_ITEM xListItem; /* For some reason lint wants this as two separate definitions. */ struct xMINI_LIST_ITEM { - listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - configLIST_VOLATILE TickType_t xItemValue; + configLIST_VOLATILE portTickType xItemValue; struct xLIST_ITEM * configLIST_VOLATILE pxNext; struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; }; -typedef struct xMINI_LIST_ITEM MiniListItem_t; +typedef struct xMINI_LIST_ITEM xMiniListItem; /* * Definition of the type of queue used by the scheduler. */ typedef struct xLIST { - listFIRST_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - volatile UBaseType_t uxNumberOfItems; - ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */ - MiniListItem_t xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */ - listSECOND_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ -} List_t; + configLIST_VOLATILE unsigned portBASE_TYPE uxNumberOfItems; + xListItem * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to pvListGetOwnerOfNextEntry (). */ + xMiniListItem xListEnd; /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */ +} xList; /* * Access macro to set the owner of a list item. The owner of a list item @@ -186,7 +176,7 @@ typedef struct xLIST * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER * \ingroup LinkedList */ -#define listGET_LIST_ITEM_OWNER( pxListItem ) ( ( pxListItem )->pvOwner ) +#define listGET_LIST_ITEM_OWNER( pxListItem ) ( pxListItem )->pvOwner /* * Access macro to set the value of the list item. In most cases the value is @@ -195,50 +185,26 @@ typedef struct xLIST * \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE * \ingroup LinkedList */ -#define listSET_LIST_ITEM_VALUE( pxListItem, xValue ) ( ( pxListItem )->xItemValue = ( xValue ) ) +#define listSET_LIST_ITEM_VALUE( pxListItem, xValue ) ( ( pxListItem )->xItemValue = ( xValue ) ) /* * Access macro to retrieve the value of the list item. The value can - * represent anything - for example the priority of a task, or the time at + * represent anything - for example a the priority of a task, or the time at * which a task should be unblocked. * * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE * \ingroup LinkedList */ -#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue ) +#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue ) /* - * Access macro to retrieve the value of the list item at the head of a given + * Access macro the retrieve the value of the list item at the head of a given * list. * * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE * \ingroup LinkedList */ -#define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext->xItemValue ) - -/* - * Return the list item at the head of the list. - * - * \page listGET_HEAD_ENTRY listGET_HEAD_ENTRY - * \ingroup LinkedList - */ -#define listGET_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext ) - -/* - * Return the list item at the head of the list. - * - * \page listGET_NEXT listGET_NEXT - * \ingroup LinkedList - */ -#define listGET_NEXT( pxListItem ) ( ( pxListItem )->pxNext ) - -/* - * Return the list item that marks the end of the list - * - * \page listGET_END_MARKER listGET_END_MARKER - * \ingroup LinkedList - */ -#define listGET_END_MARKER( pxList ) ( ( ListItem_t const * ) ( &( ( pxList )->xListEnd ) ) ) +#define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList ) ( (&( ( pxList )->xListEnd ))->pxNext->xItemValue ) /* * Access macro to determine if a list contains any items. The macro will @@ -247,19 +213,19 @@ typedef struct xLIST * \page listLIST_IS_EMPTY listLIST_IS_EMPTY * \ingroup LinkedList */ -#define listLIST_IS_EMPTY( pxList ) ( ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? pdTRUE : pdFALSE ) +#define listLIST_IS_EMPTY( pxList ) ( ( portBASE_TYPE ) ( ( pxList )->uxNumberOfItems == ( unsigned portBASE_TYPE ) 0 ) ) /* * Access macro to return the number of items in the list. */ -#define listCURRENT_LIST_LENGTH( pxList ) ( ( pxList )->uxNumberOfItems ) +#define listCURRENT_LIST_LENGTH( pxList ) ( ( pxList )->uxNumberOfItems ) /* * Access function to obtain the owner of the next entry in a list. * * The list member pxIndex is used to walk through a list. Calling * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list - * and returns that entry's pxOwner parameter. Using multiple calls to this + * and returns that entries pxOwner parameter. Using multiple calls to this * function it is therefore possible to move through every item contained in * a list. * @@ -268,7 +234,6 @@ typedef struct xLIST * The pxOwner parameter effectively creates a two way link between the list * item and its owner. * - * @param pxTCB pxTCB is set to the address of the owner of the next list item. * @param pxList The list from which the next item owner is to be returned. * * \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY @@ -276,7 +241,7 @@ typedef struct xLIST */ #define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList ) \ { \ -List_t * const pxConstList = ( pxList ); \ +xList * const pxConstList = ( pxList ); \ /* Increment the index to the next item and return the item, ensuring */ \ /* we don't return the marker used at the end of the list. */ \ ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \ @@ -313,17 +278,18 @@ List_t * const pxConstList = ( pxList ); \ * * @param pxList The list we want to know if the list item is within. * @param pxListItem The list item we want to know if is in the list. - * @return pdTRUE if the list item is in the list, otherwise pdFALSE. + * @return pdTRUE is the list item is in the list, otherwise pdFALSE. + * pointer against */ -#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( ( pxListItem )->pxContainer == ( pxList ) ) ? ( pdTRUE ) : ( pdFALSE ) ) +#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( portBASE_TYPE ) ( ( pxListItem )->pvContainer == ( void * ) ( pxList ) ) ) /* * Return the list a list item is contained within (referenced from). * * @param pxListItem The list item being queried. - * @return A pointer to the List_t object that references the pxListItem + * @return A pointer to the xList object that references the pxListItem */ -#define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pxContainer ) +#define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pvContainer ) /* * This provides a crude means of knowing if a list has been initialised, as @@ -342,7 +308,7 @@ List_t * const pxConstList = ( pxList ); \ * \page vListInitialise vListInitialise * \ingroup LinkedList */ -void vListInitialise( List_t * const pxList ) PRIVILEGED_FUNCTION; +void vListInitialise( xList * const pxList ); /* * Must be called before a list item is used. This sets the list container to @@ -353,7 +319,7 @@ void vListInitialise( List_t * const pxList ) PRIVILEGED_FUNCTION; * \page vListInitialiseItem vListInitialiseItem * \ingroup LinkedList */ -void vListInitialiseItem( ListItem_t * const pxItem ) PRIVILEGED_FUNCTION; +void vListInitialiseItem( xListItem * const pxItem ); /* * Insert a list item into a list. The item will be inserted into the list in @@ -361,24 +327,24 @@ void vListInitialiseItem( ListItem_t * const pxItem ) PRIVILEGED_FUNCTION; * * @param pxList The list into which the item is to be inserted. * - * @param pxNewListItem The item that is to be placed in the list. + * @param pxNewListItem The item to that is to be placed in the list. * * \page vListInsert vListInsert * \ingroup LinkedList */ -void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION; +void vListInsert( xList * const pxList, xListItem * const pxNewListItem ); /* * Insert a list item into a list. The item will be inserted in a position * such that it will be the last item within the list returned by multiple * calls to listGET_OWNER_OF_NEXT_ENTRY. * - * The list member pxIndex is used to walk through a list. Calling - * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list. + * The list member pvIndex is used to walk through a list. Calling + * listGET_OWNER_OF_NEXT_ENTRY increments pvIndex to the next item in the list. * Placing an item in a list using vListInsertEnd effectively places the item - * in the list position pointed to by pxIndex. This means that every other + * in the list position pointed to by pvIndex. This means that every other * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before - * the pxIndex parameter again points to the item being inserted. + * the pvIndex parameter again points to the item being inserted. * * @param pxList The list into which the item is to be inserted. * @@ -387,7 +353,7 @@ void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIV * \page vListInsertEnd vListInsertEnd * \ingroup LinkedList */ -void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION; +void vListInsertEnd( xList * const pxList, xListItem * const pxNewListItem ); /* * Remove an item from a list. The list item has a pointer to the list that @@ -402,7 +368,7 @@ void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ) P * \page uxListRemove uxListRemove * \ingroup LinkedList */ -UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION; +unsigned portBASE_TYPE uxListRemove( xListItem * const pxItemToRemove ); #ifdef __cplusplus } diff --git a/FreeRTOS/Source/include/message_buffer.h b/FreeRTOS/Source/include/message_buffer.h deleted file mode 100644 index 8ec2be3..0000000 --- a/FreeRTOS/Source/include/message_buffer.h +++ /dev/null @@ -1,798 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -/* - * Message buffers build functionality on top of FreeRTOS stream buffers. - * Whereas stream buffers are used to send a continuous stream of data from one - * task or interrupt to another, message buffers are used to send variable - * length discrete messages from one task or interrupt to another. Their - * implementation is light weight, making them particularly suited for interrupt - * to task and core to core communication scenarios. - * - * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer - * implementation (so also the message buffer implementation, as message buffers - * are built on top of stream buffers) assumes there is only one task or - * interrupt that will write to the buffer (the writer), and only one task or - * interrupt that will read from the buffer (the reader). It is safe for the - * writer and reader to be different tasks or interrupts, but, unlike other - * FreeRTOS objects, it is not safe to have multiple different writers or - * multiple different readers. If there are to be multiple different writers - * then the application writer must place each call to a writing API function - * (such as xMessageBufferSend()) inside a critical section and set the send - * block time to 0. Likewise, if there are to be multiple different readers - * then the application writer must place each call to a reading API function - * (such as xMessageBufferRead()) inside a critical section and set the receive - * timeout to 0. - * - * Message buffers hold variable length messages. To enable that, when a - * message is written to the message buffer an additional sizeof( size_t ) bytes - * are also written to store the message's length (that happens internally, with - * the API function). sizeof( size_t ) is typically 4 bytes on a 32-bit - * architecture, so writing a 10 byte message to a message buffer on a 32-bit - * architecture will actually reduce the available space in the message buffer - * by 14 bytes (10 byte are used by the message, and 4 bytes to hold the length - * of the message). - */ - -#ifndef FREERTOS_MESSAGE_BUFFER_H -#define FREERTOS_MESSAGE_BUFFER_H - -/* Message buffers are built onto of stream buffers. */ -#include "stream_buffer.h" - -#if defined( __cplusplus ) -extern "C" { -#endif - -/** - * Type by which message buffers are referenced. For example, a call to - * xMessageBufferCreate() returns an MessageBufferHandle_t variable that can - * then be used as a parameter to xMessageBufferSend(), xMessageBufferReceive(), - * etc. - */ -typedef void * MessageBufferHandle_t; - -/*-----------------------------------------------------------*/ - -/** - * message_buffer.h - * -
-MessageBufferHandle_t xMessageBufferCreate( size_t xBufferSizeBytes );
-
- * - * Creates a new message buffer using dynamically allocated memory. See - * xMessageBufferCreateStatic() for a version that uses statically allocated - * memory (memory that is allocated at compile time). - * - * configSUPPORT_DYNAMIC_ALLOCATION must be set to 1 or left undefined in - * FreeRTOSConfig.h for xMessageBufferCreate() to be available. - * - * @param xBufferSizeBytes The total number of bytes (not messages) the message - * buffer will be able to hold at any one time. When a message is written to - * the message buffer an additional sizeof( size_t ) bytes are also written to - * store the message's length. sizeof( size_t ) is typically 4 bytes on a - * 32-bit architecture, so on most 32-bit architectures a 10 byte message will - * take up 14 bytes of message buffer space. - * - * @return If NULL is returned, then the message buffer cannot be created - * because there is insufficient heap memory available for FreeRTOS to allocate - * the message buffer data structures and storage area. A non-NULL value being - * returned indicates that the message buffer has been created successfully - - * the returned value should be stored as the handle to the created message - * buffer. - * - * Example use: -
-
-void vAFunction( void )
-{
-MessageBufferHandle_t xMessageBuffer;
-const size_t xMessageBufferSizeBytes = 100;
-
-    // Create a message buffer that can hold 100 bytes.  The memory used to hold
-    // both the message buffer structure and the messages themselves is allocated
-    // dynamically.  Each message added to the buffer consumes an additional 4
-    // bytes which are used to hold the lengh of the message.
-    xMessageBuffer = xMessageBufferCreate( xMessageBufferSizeBytes );
-
-    if( xMessageBuffer == NULL )
-    {
-        // There was not enough heap memory space available to create the
-        // message buffer.
-    }
-    else
-    {
-        // The message buffer was created successfully and can now be used.
-    }
-
-
- * \defgroup xMessageBufferCreate xMessageBufferCreate - * \ingroup MessageBufferManagement - */ -#define xMessageBufferCreate( xBufferSizeBytes ) ( MessageBufferHandle_t ) xStreamBufferGenericCreate( xBufferSizeBytes, ( size_t ) 0, pdTRUE ) - -/** - * message_buffer.h - * -
-MessageBufferHandle_t xMessageBufferCreateStatic( size_t xBufferSizeBytes,
-                                                  uint8_t *pucMessageBufferStorageArea,
-                                                  StaticMessageBuffer_t *pxStaticMessageBuffer );
-
- * Creates a new message buffer using statically allocated memory. See - * xMessageBufferCreate() for a version that uses dynamically allocated memory. - * - * @param xBufferSizeBytes The size, in bytes, of the buffer pointed to by the - * pucMessageBufferStorageArea parameter. When a message is written to the - * message buffer an additional sizeof( size_t ) bytes are also written to store - * the message's length. sizeof( size_t ) is typically 4 bytes on a 32-bit - * architecture, so on most 32-bit architecture a 10 byte message will take up - * 14 bytes of message buffer space. The maximum number of bytes that can be - * stored in the message buffer is actually (xBufferSizeBytes - 1). - * - * @param pucMessageBufferStorageArea Must point to a uint8_t array that is at - * least xBufferSizeBytes + 1 big. This is the array to which messages are - * copied when they are written to the message buffer. - * - * @param pxStaticMessageBuffer Must point to a variable of type - * StaticMessageBuffer_t, which will be used to hold the message buffer's data - * structure. - * - * @return If the message buffer is created successfully then a handle to the - * created message buffer is returned. If either pucMessageBufferStorageArea or - * pxStaticmessageBuffer are NULL then NULL is returned. - * - * Example use: -
-
-// Used to dimension the array used to hold the messages.  The available space
-// will actually be one less than this, so 999.
-#define STORAGE_SIZE_BYTES 1000
-
-// Defines the memory that will actually hold the messages within the message
-// buffer.
-static uint8_t ucStorageBuffer[ STORAGE_SIZE_BYTES ];
-
-// The variable used to hold the message buffer structure.
-StaticMessageBuffer_t xMessageBufferStruct;
-
-void MyFunction( void )
-{
-MessageBufferHandle_t xMessageBuffer;
-
-    xMessageBuffer = xMessageBufferCreateStatic( sizeof( ucBufferStorage ),
-                                                 ucBufferStorage,
-                                                 &xMessageBufferStruct );
-
-    // As neither the pucMessageBufferStorageArea or pxStaticMessageBuffer
-    // parameters were NULL, xMessageBuffer will not be NULL, and can be used to
-    // reference the created message buffer in other message buffer API calls.
-
-    // Other code that uses the message buffer can go here.
-}
-
-
- * \defgroup xMessageBufferCreateStatic xMessageBufferCreateStatic - * \ingroup MessageBufferManagement - */ -#define xMessageBufferCreateStatic( xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer ) ( MessageBufferHandle_t ) xStreamBufferGenericCreateStatic( xBufferSizeBytes, 0, pdTRUE, pucMessageBufferStorageArea, pxStaticMessageBuffer ) - -/** - * message_buffer.h - * -
-size_t xMessageBufferSend( MessageBufferHandle_t xMessageBuffer,
-                           const void *pvTxData,
-                           size_t xDataLengthBytes,
-                           TickType_t xTicksToWait );
-
- *
- * Sends a discrete message to the message buffer.  The message can be any
- * length that fits within the buffer's free space, and is copied into the
- * buffer.
- *
- * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer
- * implementation (so also the message buffer implementation, as message buffers
- * are built on top of stream buffers) assumes there is only one task or
- * interrupt that will write to the buffer (the writer), and only one task or
- * interrupt that will read from the buffer (the reader).  It is safe for the
- * writer and reader to be different tasks or interrupts, but, unlike other
- * FreeRTOS objects, it is not safe to have multiple different writers or
- * multiple different readers.  If there are to be multiple different writers
- * then the application writer must place each call to a writing API function
- * (such as xMessageBufferSend()) inside a critical section and set the send
- * block time to 0.  Likewise, if there are to be multiple different readers
- * then the application writer must place each call to a reading API function
- * (such as xMessageBufferRead()) inside a critical section and set the receive
- * block time to 0.
- *
- * Use xMessageBufferSend() to write to a message buffer from a task.  Use
- * xMessageBufferSendFromISR() to write to a message buffer from an interrupt
- * service routine (ISR).
- *
- * @param xMessageBuffer The handle of the message buffer to which a message is
- * being sent.
- *
- * @param pvTxData A pointer to the message that is to be copied into the
- * message buffer.
- *
- * @param xDataLengthBytes The length of the message.  That is, the number of
- * bytes to copy from pvTxData into the message buffer.  When a message is
- * written to the message buffer an additional sizeof( size_t ) bytes are also
- * written to store the message's length.  sizeof( size_t ) is typically 4 bytes
- * on a 32-bit architecture, so on most 32-bit architecture setting
- * xDataLengthBytes to 20 will reduce the free space in the message buffer by 24
- * bytes (20 bytes of message data and 4 bytes to hold the message length).
- *
- * @param xTicksToWait The maximum amount of time the calling task should remain
- * in the Blocked state to wait for enough space to become available in the
- * message buffer, should the message buffer have insufficient space when
- * xMessageBufferSend() is called.  The calling task will never block if
- * xTicksToWait is zero.  The block time is specified in tick periods, so the
- * absolute time it represents is dependent on the tick frequency.  The macro
- * pdMS_TO_TICKS() can be used to convert a time specified in milliseconds into
- * a time specified in ticks.  Setting xTicksToWait to portMAX_DELAY will cause
- * the task to wait indefinitely (without timing out), provided
- * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h.  Tasks do not use any
- * CPU time when they are in the Blocked state.
- *
- * @return The number of bytes written to the message buffer.  If the call to
- * xMessageBufferSend() times out before there was enough space to write the
- * message into the message buffer then zero is returned.  If the call did not
- * time out then xDataLengthBytes is returned.
- *
- * Example use:
-
-void vAFunction( MessageBufferHandle_t xMessageBuffer )
-{
-size_t xBytesSent;
-uint8_t ucArrayToSend[] = { 0, 1, 2, 3 };
-char *pcStringToSend = "String to send";
-const TickType_t x100ms = pdMS_TO_TICKS( 100 );
-
-    // Send an array to the message buffer, blocking for a maximum of 100ms to
-    // wait for enough space to be available in the message buffer.
-    xBytesSent = xMessageBufferSend( xMessageBuffer, ( void * ) ucArrayToSend, sizeof( ucArrayToSend ), x100ms );
-
-    if( xBytesSent != sizeof( ucArrayToSend ) )
-    {
-        // The call to xMessageBufferSend() times out before there was enough
-        // space in the buffer for the data to be written.
-    }
-
-    // Send the string to the message buffer.  Return immediately if there is
-    // not enough space in the buffer.
-    xBytesSent = xMessageBufferSend( xMessageBuffer, ( void * ) pcStringToSend, strlen( pcStringToSend ), 0 );
-
-    if( xBytesSent != strlen( pcStringToSend ) )
-    {
-        // The string could not be added to the message buffer because there was
-        // not enough free space in the buffer.
-    }
-}
-
- * \defgroup xMessageBufferSend xMessageBufferSend - * \ingroup MessageBufferManagement - */ -#define xMessageBufferSend( xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait ) xStreamBufferSend( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait ) - -/** - * message_buffer.h - * -
-size_t xMessageBufferSendFromISR( MessageBufferHandle_t xMessageBuffer,
-                                  const void *pvTxData,
-                                  size_t xDataLengthBytes,
-                                  BaseType_t *pxHigherPriorityTaskWoken );
-
- *
- * Interrupt safe version of the API function that sends a discrete message to
- * the message buffer.  The message can be any length that fits within the
- * buffer's free space, and is copied into the buffer.
- *
- * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer
- * implementation (so also the message buffer implementation, as message buffers
- * are built on top of stream buffers) assumes there is only one task or
- * interrupt that will write to the buffer (the writer), and only one task or
- * interrupt that will read from the buffer (the reader).  It is safe for the
- * writer and reader to be different tasks or interrupts, but, unlike other
- * FreeRTOS objects, it is not safe to have multiple different writers or
- * multiple different readers.  If there are to be multiple different writers
- * then the application writer must place each call to a writing API function
- * (such as xMessageBufferSend()) inside a critical section and set the send
- * block time to 0.  Likewise, if there are to be multiple different readers
- * then the application writer must place each call to a reading API function
- * (such as xMessageBufferRead()) inside a critical section and set the receive
- * block time to 0.
- *
- * Use xMessageBufferSend() to write to a message buffer from a task.  Use
- * xMessageBufferSendFromISR() to write to a message buffer from an interrupt
- * service routine (ISR).
- *
- * @param xMessageBuffer The handle of the message buffer to which a message is
- * being sent.
- *
- * @param pvTxData A pointer to the message that is to be copied into the
- * message buffer.
- *
- * @param xDataLengthBytes The length of the message.  That is, the number of
- * bytes to copy from pvTxData into the message buffer.  When a message is
- * written to the message buffer an additional sizeof( size_t ) bytes are also
- * written to store the message's length.  sizeof( size_t ) is typically 4 bytes
- * on a 32-bit architecture, so on most 32-bit architecture setting
- * xDataLengthBytes to 20 will reduce the free space in the message buffer by 24
- * bytes (20 bytes of message data and 4 bytes to hold the message length).
- *
- * @param pxHigherPriorityTaskWoken  It is possible that a message buffer will
- * have a task blocked on it waiting for data.  Calling
- * xMessageBufferSendFromISR() can make data available, and so cause a task that
- * was waiting for data to leave the Blocked state.  If calling
- * xMessageBufferSendFromISR() causes a task to leave the Blocked state, and the
- * unblocked task has a priority higher than the currently executing task (the
- * task that was interrupted), then, internally, xMessageBufferSendFromISR()
- * will set *pxHigherPriorityTaskWoken to pdTRUE.  If
- * xMessageBufferSendFromISR() sets this value to pdTRUE, then normally a
- * context switch should be performed before the interrupt is exited.  This will
- * ensure that the interrupt returns directly to the highest priority Ready
- * state task.  *pxHigherPriorityTaskWoken should be set to pdFALSE before it
- * is passed into the function.  See the code example below for an example.
- *
- * @return The number of bytes actually written to the message buffer.  If the
- * message buffer didn't have enough free space for the message to be stored
- * then 0 is returned, otherwise xDataLengthBytes is returned.
- *
- * Example use:
-
-// A message buffer that has already been created.
-MessageBufferHandle_t xMessageBuffer;
-
-void vAnInterruptServiceRoutine( void )
-{
-size_t xBytesSent;
-char *pcStringToSend = "String to send";
-BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE.
-
-    // Attempt to send the string to the message buffer.
-    xBytesSent = xMessageBufferSendFromISR( xMessageBuffer,
-                                            ( void * ) pcStringToSend,
-                                            strlen( pcStringToSend ),
-                                            &xHigherPriorityTaskWoken );
-
-    if( xBytesSent != strlen( pcStringToSend ) )
-    {
-        // The string could not be added to the message buffer because there was
-        // not enough free space in the buffer.
-    }
-
-    // If xHigherPriorityTaskWoken was set to pdTRUE inside
-    // xMessageBufferSendFromISR() then a task that has a priority above the
-    // priority of the currently executing task was unblocked and a context
-    // switch should be performed to ensure the ISR returns to the unblocked
-    // task.  In most FreeRTOS ports this is done by simply passing
-    // xHigherPriorityTaskWoken into taskYIELD_FROM_ISR(), which will test the
-    // variables value, and perform the context switch if necessary.  Check the
-    // documentation for the port in use for port specific instructions.
-    taskYIELD_FROM_ISR( xHigherPriorityTaskWoken );
-}
-
- * \defgroup xMessageBufferSendFromISR xMessageBufferSendFromISR - * \ingroup MessageBufferManagement - */ -#define xMessageBufferSendFromISR( xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken ) xStreamBufferSendFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken ) - -/** - * message_buffer.h - * -
-size_t xMessageBufferReceive( MessageBufferHandle_t xMessageBuffer,
-                              void *pvRxData,
-                              size_t xBufferLengthBytes,
-                              TickType_t xTicksToWait );
-
- * - * Receives a discrete message from a message buffer. Messages can be of - * variable length and are copied out of the buffer. - * - * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer - * implementation (so also the message buffer implementation, as message buffers - * are built on top of stream buffers) assumes there is only one task or - * interrupt that will write to the buffer (the writer), and only one task or - * interrupt that will read from the buffer (the reader). It is safe for the - * writer and reader to be different tasks or interrupts, but, unlike other - * FreeRTOS objects, it is not safe to have multiple different writers or - * multiple different readers. If there are to be multiple different writers - * then the application writer must place each call to a writing API function - * (such as xMessageBufferSend()) inside a critical section and set the send - * block time to 0. Likewise, if there are to be multiple different readers - * then the application writer must place each call to a reading API function - * (such as xMessageBufferRead()) inside a critical section and set the receive - * block time to 0. - * - * Use xMessageBufferReceive() to read from a message buffer from a task. Use - * xMessageBufferReceiveFromISR() to read from a message buffer from an - * interrupt service routine (ISR). - * - * @param xMessageBuffer The handle of the message buffer from which a message - * is being received. - * - * @param pvRxData A pointer to the buffer into which the received message is - * to be copied. - * - * @param xBufferLengthBytes The length of the buffer pointed to by the pvRxData - * parameter. This sets the maximum length of the message that can be received. - * If xBufferLengthBytes is too small to hold the next message then the message - * will be left in the message buffer and 0 will be returned. - * - * @param xTicksToWait The maximum amount of time the task should remain in the - * Blocked state to wait for a message, should the message buffer be empty. - * xMessageBufferReceive() will return immediately if xTicksToWait is zero and - * the message buffer is empty. The block time is specified in tick periods, so - * the absolute time it represents is dependent on the tick frequency. The - * macro pdMS_TO_TICKS() can be used to convert a time specified in milliseconds - * into a time specified in ticks. Setting xTicksToWait to portMAX_DELAY will - * cause the task to wait indefinitely (without timing out), provided - * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h. Tasks do not use any - * CPU time when they are in the Blocked state. - * - * @return The length, in bytes, of the message read from the message buffer, if - * any. If xMessageBufferReceive() times out before a message became available - * then zero is returned. If the length of the message is greater than - * xBufferLengthBytes then the message will be left in the message buffer and - * zero is returned. - * - * Example use: -
-void vAFunction( MessageBuffer_t xMessageBuffer )
-{
-uint8_t ucRxData[ 20 ];
-size_t xReceivedBytes;
-const TickType_t xBlockTime = pdMS_TO_TICKS( 20 );
-
-    // Receive the next message from the message buffer.  Wait in the Blocked
-    // state (so not using any CPU processing time) for a maximum of 100ms for
-    // a message to become available.
-    xReceivedBytes = xMessageBufferReceive( xMessageBuffer,
-                                            ( void * ) ucRxData,
-                                            sizeof( ucRxData ),
-                                            xBlockTime );
-
-    if( xReceivedBytes > 0 )
-    {
-        // A ucRxData contains a message that is xReceivedBytes long.  Process
-        // the message here....
-    }
-}
-
- * \defgroup xMessageBufferReceive xMessageBufferReceive - * \ingroup MessageBufferManagement - */ -#define xMessageBufferReceive( xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait ) xStreamBufferReceive( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait ) - - -/** - * message_buffer.h - * -
-size_t xMessageBufferReceiveFromISR( MessageBufferHandle_t xMessageBuffer,
-                                     void *pvRxData,
-                                     size_t xBufferLengthBytes,
-                                     BaseType_t *pxHigherPriorityTaskWoken );
-
- * - * An interrupt safe version of the API function that receives a discrete - * message from a message buffer. Messages can be of variable length and are - * copied out of the buffer. - * - * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer - * implementation (so also the message buffer implementation, as message buffers - * are built on top of stream buffers) assumes there is only one task or - * interrupt that will write to the buffer (the writer), and only one task or - * interrupt that will read from the buffer (the reader). It is safe for the - * writer and reader to be different tasks or interrupts, but, unlike other - * FreeRTOS objects, it is not safe to have multiple different writers or - * multiple different readers. If there are to be multiple different writers - * then the application writer must place each call to a writing API function - * (such as xMessageBufferSend()) inside a critical section and set the send - * block time to 0. Likewise, if there are to be multiple different readers - * then the application writer must place each call to a reading API function - * (such as xMessageBufferRead()) inside a critical section and set the receive - * block time to 0. - * - * Use xMessageBufferReceive() to read from a message buffer from a task. Use - * xMessageBufferReceiveFromISR() to read from a message buffer from an - * interrupt service routine (ISR). - * - * @param xMessageBuffer The handle of the message buffer from which a message - * is being received. - * - * @param pvRxData A pointer to the buffer into which the received message is - * to be copied. - * - * @param xBufferLengthBytes The length of the buffer pointed to by the pvRxData - * parameter. This sets the maximum length of the message that can be received. - * If xBufferLengthBytes is too small to hold the next message then the message - * will be left in the message buffer and 0 will be returned. - * - * @param pxHigherPriorityTaskWoken It is possible that a message buffer will - * have a task blocked on it waiting for space to become available. Calling - * xMessageBufferReceiveFromISR() can make space available, and so cause a task - * that is waiting for space to leave the Blocked state. If calling - * xMessageBufferReceiveFromISR() causes a task to leave the Blocked state, and - * the unblocked task has a priority higher than the currently executing task - * (the task that was interrupted), then, internally, - * xMessageBufferReceiveFromISR() will set *pxHigherPriorityTaskWoken to pdTRUE. - * If xMessageBufferReceiveFromISR() sets this value to pdTRUE, then normally a - * context switch should be performed before the interrupt is exited. That will - * ensure the interrupt returns directly to the highest priority Ready state - * task. *pxHigherPriorityTaskWoken should be set to pdFALSE before it is - * passed into the function. See the code example below for an example. - * - * @return The length, in bytes, of the message read from the message buffer, if - * any. - * - * Example use: -
-// A message buffer that has already been created.
-MessageBuffer_t xMessageBuffer;
-
-void vAnInterruptServiceRoutine( void )
-{
-uint8_t ucRxData[ 20 ];
-size_t xReceivedBytes;
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;  // Initialised to pdFALSE.
-
-    // Receive the next message from the message buffer.
-    xReceivedBytes = xMessageBufferReceiveFromISR( xMessageBuffer,
-                                                  ( void * ) ucRxData,
-                                                  sizeof( ucRxData ),
-                                                  &xHigherPriorityTaskWoken );
-
-    if( xReceivedBytes > 0 )
-    {
-        // A ucRxData contains a message that is xReceivedBytes long.  Process
-        // the message here....
-    }
-
-    // If xHigherPriorityTaskWoken was set to pdTRUE inside
-    // xMessageBufferReceiveFromISR() then a task that has a priority above the
-    // priority of the currently executing task was unblocked and a context
-    // switch should be performed to ensure the ISR returns to the unblocked
-    // task.  In most FreeRTOS ports this is done by simply passing
-    // xHigherPriorityTaskWoken into taskYIELD_FROM_ISR(), which will test the
-    // variables value, and perform the context switch if necessary.  Check the
-    // documentation for the port in use for port specific instructions.
-    taskYIELD_FROM_ISR( xHigherPriorityTaskWoken );
-}
-
- * \defgroup xMessageBufferReceiveFromISR xMessageBufferReceiveFromISR - * \ingroup MessageBufferManagement - */ -#define xMessageBufferReceiveFromISR( xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken ) xStreamBufferReceiveFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken ) - -/** - * message_buffer.h - * -
-void vMessageBufferDelete( MessageBufferHandle_t xMessageBuffer );
-
- * - * Deletes a message buffer that was previously created using a call to - * xMessageBufferCreate() or xMessageBufferCreateStatic(). If the message - * buffer was created using dynamic memory (that is, by xMessageBufferCreate()), - * then the allocated memory is freed. - * - * A message buffer handle must not be used after the message buffer has been - * deleted. - * - * @param xMessageBuffer The handle of the message buffer to be deleted. - * - */ -#define vMessageBufferDelete( xMessageBuffer ) vStreamBufferDelete( ( StreamBufferHandle_t ) xMessageBuffer ) - -/** - * message_buffer.h -
-BaseType_t xMessageBufferIsFull( MessageBufferHandle_t xMessageBuffer ) );
-
- * - * Tests to see if a message buffer is full. A message buffer is full if it - * cannot accept any more messages, of any size, until space is made available - * by a message being removed from the message buffer. - * - * @param xMessageBuffer The handle of the message buffer being queried. - * - * @return If the message buffer referenced by xMessageBuffer is full then - * pdTRUE is returned. Otherwise pdFALSE is returned. - */ -#define xMessageBufferIsFull( xMessageBuffer ) xStreamBufferIsFull( ( StreamBufferHandle_t ) xMessageBuffer ) - -/** - * message_buffer.h -
-BaseType_t xMessageBufferIsEmpty( MessageBufferHandle_t xMessageBuffer ) );
-
- * - * Tests to see if a message buffer is empty (does not contain any messages). - * - * @param xMessageBuffer The handle of the message buffer being queried. - * - * @return If the message buffer referenced by xMessageBuffer is empty then - * pdTRUE is returned. Otherwise pdFALSE is returned. - * - */ -#define xMessageBufferIsEmpty( xMessageBuffer ) xStreamBufferIsEmpty( ( StreamBufferHandle_t ) xMessageBuffer ) - -/** - * message_buffer.h -
-BaseType_t xMessageBufferReset( MessageBufferHandle_t xMessageBuffer );
-
- * - * Resets a message buffer to its initial empty state, discarding any message it - * contained. - * - * A message buffer can only be reset if there are no tasks blocked on it. - * - * @param xMessageBuffer The handle of the message buffer being reset. - * - * @return If the message buffer was reset then pdPASS is returned. If the - * message buffer could not be reset because either there was a task blocked on - * the message queue to wait for space to become available, or to wait for a - * a message to be available, then pdFAIL is returned. - * - * \defgroup xMessageBufferReset xMessageBufferReset - * \ingroup MessageBufferManagement - */ -#define xMessageBufferReset( xMessageBuffer ) xStreamBufferReset( ( StreamBufferHandle_t ) xMessageBuffer ) - - -/** - * message_buffer.h -
-size_t xMessageBufferSpaceAvailable( MessageBufferHandle_t xMessageBuffer ) );
-
- * Returns the number of bytes of free space in the message buffer. - * - * @param xMessageBuffer The handle of the message buffer being queried. - * - * @return The number of bytes that can be written to the message buffer before - * the message buffer would be full. When a message is written to the message - * buffer an additional sizeof( size_t ) bytes are also written to store the - * message's length. sizeof( size_t ) is typically 4 bytes on a 32-bit - * architecture, so if xMessageBufferSpacesAvailable() returns 10, then the size - * of the largest message that can be written to the message buffer is 6 bytes. - * - * \defgroup xMessageBufferSpaceAvailable xMessageBufferSpaceAvailable - * \ingroup MessageBufferManagement - */ -#define xMessageBufferSpaceAvailable( xMessageBuffer ) xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer ) - -/** - * message_buffer.h -
- size_t xMessageBufferNextLengthBytes( MessageBufferHandle_t xMessageBuffer ) );
- 
- * Returns the length (in bytes) of the next message in a message buffer. - * Useful if xMessageBufferReceive() returned 0 because the size of the buffer - * passed into xMessageBufferReceive() was too small to hold the next message. - * - * @param xMessageBuffer The handle of the message buffer being queried. - * - * @return The length (in bytes) of the next message in the message buffer, or 0 - * if the message buffer is empty. - * - * \defgroup xMessageBufferNextLengthBytes xMessageBufferNextLengthBytes - * \ingroup MessageBufferManagement - */ -#define xMessageBufferNextLengthBytes( xMessageBuffer ) xStreamBufferNextMessageLengthBytes( ( StreamBufferHandle_t ) xMessageBuffer ) PRIVILEGED_FUNCTION; - -/** - * message_buffer.h - * -
-BaseType_t xMessageBufferSendCompletedFromISR( MessageBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken );
-
- * - * For advanced users only. - * - * The sbSEND_COMPLETED() macro is called from within the FreeRTOS APIs when - * data is sent to a message buffer or stream buffer. If there was a task that - * was blocked on the message or stream buffer waiting for data to arrive then - * the sbSEND_COMPLETED() macro sends a notification to the task to remove it - * from the Blocked state. xMessageBufferSendCompletedFromISR() does the same - * thing. It is provided to enable application writers to implement their own - * version of sbSEND_COMPLETED(), and MUST NOT BE USED AT ANY OTHER TIME. - * - * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for - * additional information. - * - * @param xStreamBuffer The handle of the stream buffer to which data was - * written. - * - * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be - * initialised to pdFALSE before it is passed into - * xMessageBufferSendCompletedFromISR(). If calling - * xMessageBufferSendCompletedFromISR() removes a task from the Blocked state, - * and the task has a priority above the priority of the currently running task, - * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a - * context switch should be performed before exiting the ISR. - * - * @return If a task was removed from the Blocked state then pdTRUE is returned. - * Otherwise pdFALSE is returned. - * - * \defgroup xMessageBufferSendCompletedFromISR xMessageBufferSendCompletedFromISR - * \ingroup StreamBufferManagement - */ -#define xMessageBufferSendCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) xStreamBufferSendCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken ) - -/** - * message_buffer.h - * -
-BaseType_t xMessageBufferReceiveCompletedFromISR( MessageBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken );
-
- * - * For advanced users only. - * - * The sbRECEIVE_COMPLETED() macro is called from within the FreeRTOS APIs when - * data is read out of a message buffer or stream buffer. If there was a task - * that was blocked on the message or stream buffer waiting for data to arrive - * then the sbRECEIVE_COMPLETED() macro sends a notification to the task to - * remove it from the Blocked state. xMessageBufferReceiveCompletedFromISR() - * does the same thing. It is provided to enable application writers to - * implement their own version of sbRECEIVE_COMPLETED(), and MUST NOT BE USED AT - * ANY OTHER TIME. - * - * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for - * additional information. - * - * @param xStreamBuffer The handle of the stream buffer from which data was - * read. - * - * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be - * initialised to pdFALSE before it is passed into - * xMessageBufferReceiveCompletedFromISR(). If calling - * xMessageBufferReceiveCompletedFromISR() removes a task from the Blocked state, - * and the task has a priority above the priority of the currently running task, - * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a - * context switch should be performed before exiting the ISR. - * - * @return If a task was removed from the Blocked state then pdTRUE is returned. - * Otherwise pdFALSE is returned. - * - * \defgroup xMessageBufferReceiveCompletedFromISR xMessageBufferReceiveCompletedFromISR - * \ingroup StreamBufferManagement - */ -#define xMessageBufferReceiveCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) xStreamBufferReceiveCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken ) - -#if defined( __cplusplus ) -} /* extern "C" */ -#endif - -#endif /* !defined( FREERTOS_MESSAGE_BUFFER_H ) */ diff --git a/FreeRTOS/Source/include/mpu_prototypes.h b/FreeRTOS/Source/include/mpu_prototypes.h deleted file mode 100644 index 8105038..0000000 --- a/FreeRTOS/Source/include/mpu_prototypes.h +++ /dev/null @@ -1,157 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/* - * When the MPU is used the standard (non MPU) API functions are mapped to - * equivalents that start "MPU_", the prototypes for which are defined in this - * header files. This will cause the application code to call the MPU_ version - * which wraps the non-MPU version with privilege promoting then demoting code, - * so the kernel code always runs will full privileges. - */ - - -#ifndef MPU_PROTOTYPES_H -#define MPU_PROTOTYPES_H - -/* MPU versions of tasks.h API functions. */ -BaseType_t MPU_xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask ) FREERTOS_SYSTEM_CALL; -TaskHandle_t MPU_xTaskCreateStatic( TaskFunction_t pxTaskCode, const char * const pcName, const uint32_t ulStackDepth, void * const pvParameters, UBaseType_t uxPriority, StackType_t * const puxStackBuffer, StaticTask_t * const pxTaskBuffer ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskDelete( TaskHandle_t xTaskToDelete ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskDelay( const TickType_t xTicksToDelay ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskAbortDelay( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL; -UBaseType_t MPU_uxTaskPriorityGet( const TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL; -eTaskState MPU_eTaskGetState( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskSuspend( TaskHandle_t xTaskToSuspend ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskResume( TaskHandle_t xTaskToResume ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskStartScheduler( void ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskSuspendAll( void ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskResumeAll( void ) FREERTOS_SYSTEM_CALL; -TickType_t MPU_xTaskGetTickCount( void ) FREERTOS_SYSTEM_CALL; -UBaseType_t MPU_uxTaskGetNumberOfTasks( void ) FREERTOS_SYSTEM_CALL; -char * MPU_pcTaskGetName( TaskHandle_t xTaskToQuery ) FREERTOS_SYSTEM_CALL; -TaskHandle_t MPU_xTaskGetHandle( const char *pcNameToQuery ) FREERTOS_SYSTEM_CALL; -UBaseType_t MPU_uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL; -configSTACK_DEPTH_TYPE MPU_uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) FREERTOS_SYSTEM_CALL; -TaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) FREERTOS_SYSTEM_CALL; -void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) FREERTOS_SYSTEM_CALL; -TaskHandle_t MPU_xTaskGetIdleTaskHandle( void ) FREERTOS_SYSTEM_CALL; -UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) FREERTOS_SYSTEM_CALL; -TickType_t MPU_xTaskGetIdleRunTimeCounter( void ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskList( char * pcWriteBuffer ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskGetRunTimeStats( char *pcWriteBuffer ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -uint32_t MPU_ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskNotifyStateClear( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskIncrementTick( void ) FREERTOS_SYSTEM_CALL; -TaskHandle_t MPU_xTaskGetCurrentTaskHandle( void ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) FREERTOS_SYSTEM_CALL; -void MPU_vTaskMissedYield( void ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTaskGetSchedulerState( void ) FREERTOS_SYSTEM_CALL; - -/* MPU versions of queue.h API functions. */ -BaseType_t MPU_xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -UBaseType_t MPU_uxQueueMessagesWaiting( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL; -UBaseType_t MPU_uxQueueSpacesAvailable( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL; -void MPU_vQueueDelete( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL; -QueueHandle_t MPU_xQueueCreateMutex( const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL; -QueueHandle_t MPU_xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) FREERTOS_SYSTEM_CALL; -QueueHandle_t MPU_xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) FREERTOS_SYSTEM_CALL; -QueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) FREERTOS_SYSTEM_CALL; -TaskHandle_t MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) FREERTOS_SYSTEM_CALL; -void MPU_vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ) FREERTOS_SYSTEM_CALL; -void MPU_vQueueUnregisterQueue( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL; -const char * MPU_pcQueueGetName( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL; -QueueHandle_t MPU_xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL; -QueueHandle_t MPU_xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL; -QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL; -QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) FREERTOS_SYSTEM_CALL; -void MPU_vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) FREERTOS_SYSTEM_CALL; -UBaseType_t MPU_uxQueueGetQueueNumber( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL; -uint8_t MPU_ucQueueGetQueueType( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL; - -/* MPU versions of timers.h API functions. */ -TimerHandle_t MPU_xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction ) FREERTOS_SYSTEM_CALL; -TimerHandle_t MPU_xTimerCreateStatic( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction, StaticTimer_t *pxTimerBuffer ) FREERTOS_SYSTEM_CALL; -void * MPU_pvTimerGetTimerID( const TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL; -void MPU_vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTimerIsTimerActive( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL; -TaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle( void ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -const char * MPU_pcTimerGetName( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL; -void MPU_vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) FREERTOS_SYSTEM_CALL; -TickType_t MPU_xTimerGetPeriod( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL; -TickType_t MPU_xTimerGetExpiryTime( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTimerCreateTimerTask( void ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; - -/* MPU versions of event_group.h API functions. */ -EventGroupHandle_t MPU_xEventGroupCreate( void ) FREERTOS_SYSTEM_CALL; -EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) FREERTOS_SYSTEM_CALL; -EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -EventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) FREERTOS_SYSTEM_CALL; -EventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) FREERTOS_SYSTEM_CALL; -EventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) FREERTOS_SYSTEM_CALL; -UBaseType_t MPU_uxEventGroupGetNumber( void* xEventGroup ) FREERTOS_SYSTEM_CALL; - -/* MPU versions of message/stream_buffer.h API functions. */ -size_t MPU_xStreamBufferSend( StreamBufferHandle_t xStreamBuffer, const void *pvTxData, size_t xDataLengthBytes, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -size_t MPU_xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer, void *pvRxData, size_t xBufferLengthBytes, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL; -size_t MPU_xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL; -void MPU_vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL; -size_t MPU_xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL; -size_t MPU_xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL; -BaseType_t MPU_xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel ) FREERTOS_SYSTEM_CALL; -StreamBufferHandle_t MPU_xStreamBufferGenericCreate( size_t xBufferSizeBytes, size_t xTriggerLevelBytes, BaseType_t xIsMessageBuffer ) FREERTOS_SYSTEM_CALL; -StreamBufferHandle_t MPU_xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes, size_t xTriggerLevelBytes, BaseType_t xIsMessageBuffer, uint8_t * const pucStreamBufferStorageArea, StaticStreamBuffer_t * const pxStaticStreamBuffer ) FREERTOS_SYSTEM_CALL; - - - -#endif /* MPU_PROTOTYPES_H */ - diff --git a/FreeRTOS/Source/include/mpu_wrappers.h b/FreeRTOS/Source/include/mpu_wrappers.h index 465e586..6635069 100644 --- a/FreeRTOS/Source/include/mpu_wrappers.h +++ b/FreeRTOS/Source/include/mpu_wrappers.h @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #ifndef MPU_WRAPPERS_H #define MPU_WRAPPERS_H @@ -37,138 +74,68 @@ only for ports that are using the MPU. */ those files. */ #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE - /* - * Map standard (non MPU) API functions to equivalents that start - * "MPU_". This will cause the application code to call the MPU_ - * version, which wraps the non-MPU version with privilege promoting - * then demoting code, so the kernel code always runs will full - * privileges. - */ + #define xTaskGenericCreate MPU_xTaskGenericCreate + #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions + #define vTaskDelete MPU_vTaskDelete + #define vTaskDelayUntil MPU_vTaskDelayUntil + #define vTaskDelay MPU_vTaskDelay + #define uxTaskPriorityGet MPU_uxTaskPriorityGet + #define vTaskPrioritySet MPU_vTaskPrioritySet + #define eTaskGetState MPU_eTaskGetState + #define vTaskSuspend MPU_vTaskSuspend + #define xTaskIsTaskSuspended MPU_xTaskIsTaskSuspended + #define vTaskResume MPU_vTaskResume + #define vTaskSuspendAll MPU_vTaskSuspendAll + #define xTaskResumeAll MPU_xTaskResumeAll + #define xTaskGetTickCount MPU_xTaskGetTickCount + #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks + #define vTaskList MPU_vTaskList + #define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats + #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag + #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag + #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook + #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark + #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle + #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState + #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle + #define uxTaskGetSystemState MPU_uxTaskGetSystemState - /* Map standard tasks.h API functions to the MPU equivalents. */ - #define xTaskCreate MPU_xTaskCreate - #define xTaskCreateStatic MPU_xTaskCreateStatic - #define xTaskCreateRestricted MPU_xTaskCreateRestricted - #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions - #define vTaskDelete MPU_vTaskDelete - #define vTaskDelay MPU_vTaskDelay - #define vTaskDelayUntil MPU_vTaskDelayUntil - #define xTaskAbortDelay MPU_xTaskAbortDelay - #define uxTaskPriorityGet MPU_uxTaskPriorityGet - #define eTaskGetState MPU_eTaskGetState - #define vTaskGetInfo MPU_vTaskGetInfo - #define vTaskPrioritySet MPU_vTaskPrioritySet - #define vTaskSuspend MPU_vTaskSuspend - #define vTaskResume MPU_vTaskResume - #define vTaskSuspendAll MPU_vTaskSuspendAll - #define xTaskResumeAll MPU_xTaskResumeAll - #define xTaskGetTickCount MPU_xTaskGetTickCount - #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks - #define pcTaskGetName MPU_pcTaskGetName - #define xTaskGetHandle MPU_xTaskGetHandle - #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark - #define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2 - #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag - #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag - #define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer - #define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer - #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook - #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle - #define uxTaskGetSystemState MPU_uxTaskGetSystemState - #define vTaskList MPU_vTaskList - #define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats - #define xTaskGetIdleRunTimeCounter MPU_xTaskGetIdleRunTimeCounter - #define xTaskGenericNotify MPU_xTaskGenericNotify - #define xTaskNotifyWait MPU_xTaskNotifyWait - #define ulTaskNotifyTake MPU_ulTaskNotifyTake - #define xTaskNotifyStateClear MPU_xTaskNotifyStateClear + #define xQueueGenericCreate MPU_xQueueGenericCreate + #define xQueueCreateMutex MPU_xQueueCreateMutex + #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive + #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive + #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore + #define xQueueGenericSend MPU_xQueueGenericSend + #define xQueueAltGenericSend MPU_xQueueAltGenericSend + #define xQueueAltGenericReceive MPU_xQueueAltGenericReceive + #define xQueueGenericReceive MPU_xQueueGenericReceive + #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting + #define vQueueDelete MPU_vQueueDelete + #define xQueueGenericReset MPU_xQueueGenericReset + #define xQueueCreateSet MPU_xQueueCreateSet + #define xQueueSelectFromSet MPU_xQueueSelectFromSet + #define xQueueAddToSet MPU_xQueueAddToSet + #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet + #define xQueuePeekFromISR MPU_xQueuePeekFromISR - #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle - #define vTaskSetTimeOutState MPU_vTaskSetTimeOutState - #define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut - #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState + #define pvPortMalloc MPU_pvPortMalloc + #define vPortFree MPU_vPortFree + #define xPortGetFreeHeapSize MPU_xPortGetFreeHeapSize + #define vPortInitialiseBlocks MPU_vPortInitialiseBlocks - /* Map standard queue.h API functions to the MPU equivalents. */ - #define xQueueGenericSend MPU_xQueueGenericSend - #define xQueueReceive MPU_xQueueReceive - #define xQueuePeek MPU_xQueuePeek - #define xQueueSemaphoreTake MPU_xQueueSemaphoreTake - #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting - #define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable - #define vQueueDelete MPU_vQueueDelete - #define xQueueCreateMutex MPU_xQueueCreateMutex - #define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic - #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore - #define xQueueCreateCountingSemaphoreStatic MPU_xQueueCreateCountingSemaphoreStatic - #define xQueueGetMutexHolder MPU_xQueueGetMutexHolder - #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive - #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive - #define xQueueGenericCreate MPU_xQueueGenericCreate - #define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic - #define xQueueCreateSet MPU_xQueueCreateSet - #define xQueueAddToSet MPU_xQueueAddToSet - #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet - #define xQueueSelectFromSet MPU_xQueueSelectFromSet - #define xQueueGenericReset MPU_xQueueGenericReset - - #if( configQUEUE_REGISTRY_SIZE > 0 ) - #define vQueueAddToRegistry MPU_vQueueAddToRegistry - #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue - #define pcQueueGetName MPU_pcQueueGetName + #if configQUEUE_REGISTRY_SIZE > 0 + #define vQueueAddToRegistry MPU_vQueueAddToRegistry + #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue #endif - /* Map standard timer.h API functions to the MPU equivalents. */ - #define xTimerCreate MPU_xTimerCreate - #define xTimerCreateStatic MPU_xTimerCreateStatic - #define pvTimerGetTimerID MPU_pvTimerGetTimerID - #define vTimerSetTimerID MPU_vTimerSetTimerID - #define xTimerIsTimerActive MPU_xTimerIsTimerActive - #define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle - #define xTimerPendFunctionCall MPU_xTimerPendFunctionCall - #define pcTimerGetName MPU_pcTimerGetName - #define vTimerSetReloadMode MPU_vTimerSetReloadMode - #define xTimerGetPeriod MPU_xTimerGetPeriod - #define xTimerGetExpiryTime MPU_xTimerGetExpiryTime - #define xTimerGenericCommand MPU_xTimerGenericCommand - - /* Map standard event_group.h API functions to the MPU equivalents. */ - #define xEventGroupCreate MPU_xEventGroupCreate - #define xEventGroupCreateStatic MPU_xEventGroupCreateStatic - #define xEventGroupWaitBits MPU_xEventGroupWaitBits - #define xEventGroupClearBits MPU_xEventGroupClearBits - #define xEventGroupSetBits MPU_xEventGroupSetBits - #define xEventGroupSync MPU_xEventGroupSync - #define vEventGroupDelete MPU_vEventGroupDelete - - /* Map standard message/stream_buffer.h API functions to the MPU - equivalents. */ - #define xStreamBufferSend MPU_xStreamBufferSend - #define xStreamBufferReceive MPU_xStreamBufferReceive - #define xStreamBufferNextMessageLengthBytes MPU_xStreamBufferNextMessageLengthBytes - #define vStreamBufferDelete MPU_vStreamBufferDelete - #define xStreamBufferIsFull MPU_xStreamBufferIsFull - #define xStreamBufferIsEmpty MPU_xStreamBufferIsEmpty - #define xStreamBufferReset MPU_xStreamBufferReset - #define xStreamBufferSpacesAvailable MPU_xStreamBufferSpacesAvailable - #define xStreamBufferBytesAvailable MPU_xStreamBufferBytesAvailable - #define xStreamBufferSetTriggerLevel MPU_xStreamBufferSetTriggerLevel - #define xStreamBufferGenericCreate MPU_xStreamBufferGenericCreate - #define xStreamBufferGenericCreateStatic MPU_xStreamBufferGenericCreateStatic - - - /* Remove the privileged function macro, but keep the PRIVILEGED_DATA - macro so applications can place data in privileged access sections - (useful when using statically allocated objects). */ + /* Remove the privileged function macro. */ #define PRIVILEGED_FUNCTION - #define PRIVILEGED_DATA __attribute__((section("privileged_data"))) - #define FREERTOS_SYSTEM_CALL #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ /* Ensure API functions go in the privileged execution section. */ #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions"))) #define PRIVILEGED_DATA __attribute__((section("privileged_data"))) - #define FREERTOS_SYSTEM_CALL __attribute__((section( "freertos_system_calls"))) #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ @@ -176,7 +143,6 @@ only for ports that are using the MPU. */ #define PRIVILEGED_FUNCTION #define PRIVILEGED_DATA - #define FREERTOS_SYSTEM_CALL #define portUSING_MPU_WRAPPERS 0 #endif /* portUSING_MPU_WRAPPERS */ diff --git a/FreeRTOS/Source/include/portable.h b/FreeRTOS/Source/include/portable.h index 1b99ed1..cb83f26 100644 --- a/FreeRTOS/Source/include/portable.h +++ b/FreeRTOS/Source/include/portable.h @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ /*----------------------------------------------------------- * Portable layer API. Each function must be defined for each port. @@ -32,32 +69,253 @@ #ifndef PORTABLE_H #define PORTABLE_H -/* Each FreeRTOS port has a unique portmacro.h header file. Originally a -pre-processor definition was used to ensure the pre-processor found the correct -portmacro.h file for the port being used. That scheme was deprecated in favour -of setting the compiler's include path such that it found the correct -portmacro.h file - removing the need for the constant and allowing the -portmacro.h file to be located anywhere in relation to the port being used. -Purely for reasons of backward compatibility the old method is still valid, but -to make it clear that new projects should not use it, support for the port -specific constants has been moved into the deprecated_definitions.h header -file. */ -#include "deprecated_definitions.h" +/* Include the macro file relevant to the port being used. */ -/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h -did not result in a portmacro.h header file being included - and it should be -included here. In this case the path to the correct portmacro.h header file -must be set in the compiler's include path. */ -#ifndef portENTER_CRITICAL +#ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT + #include "..\..\Source\portable\owatcom\16bitdos\pc\portmacro.h" + typedef void ( __interrupt __far *pxISR )(); +#endif + +#ifdef OPEN_WATCOM_FLASH_LITE_186_PORT + #include "..\..\Source\portable\owatcom\16bitdos\flsh186\portmacro.h" + typedef void ( __interrupt __far *pxISR )(); +#endif + +#ifdef GCC_MEGA_AVR + #include "../portable/GCC/ATMega323/portmacro.h" +#endif + +#ifdef IAR_MEGA_AVR + #include "../portable/IAR/ATMega323/portmacro.h" +#endif + +#ifdef MPLAB_PIC24_PORT + #include "..\..\Source\portable\MPLAB\PIC24_dsPIC\portmacro.h" +#endif + +#ifdef MPLAB_DSPIC_PORT + #include "..\..\Source\portable\MPLAB\PIC24_dsPIC\portmacro.h" +#endif + +#ifdef MPLAB_PIC18F_PORT + #include "..\..\Source\portable\MPLAB\PIC18F\portmacro.h" +#endif + +#ifdef MPLAB_PIC32MX_PORT + #include "..\..\Source\portable\MPLAB\PIC32MX\portmacro.h" +#endif + +#ifdef _FEDPICC + #include "libFreeRTOS/Include/portmacro.h" +#endif + +#ifdef SDCC_CYGNAL + #include "../../Source/portable/SDCC/Cygnal/portmacro.h" +#endif + +#ifdef GCC_ARM7 + #include "../../Source/portable/GCC/ARM7_LPC2000/portmacro.h" +#endif + +#ifdef GCC_ARM7_ECLIPSE #include "portmacro.h" #endif -#if portBYTE_ALIGNMENT == 32 - #define portBYTE_ALIGNMENT_MASK ( 0x001f ) +#ifdef ROWLEY_LPC23xx + #include "../../Source/portable/GCC/ARM7_LPC23xx/portmacro.h" #endif -#if portBYTE_ALIGNMENT == 16 - #define portBYTE_ALIGNMENT_MASK ( 0x000f ) +#ifdef IAR_MSP430 + #include "..\..\Source\portable\IAR\MSP430\portmacro.h" +#endif + +#ifdef GCC_MSP430 + #include "../../Source/portable/GCC/MSP430F449/portmacro.h" +#endif + +#ifdef ROWLEY_MSP430 + #include "../../Source/portable/Rowley/MSP430F449/portmacro.h" +#endif + +#ifdef ARM7_LPC21xx_KEIL_RVDS + #include "..\..\Source\portable\RVDS\ARM7_LPC21xx\portmacro.h" +#endif + +#ifdef SAM7_GCC + #include "../../Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h" +#endif + +#ifdef SAM7_IAR + #include "..\..\Source\portable\IAR\AtmelSAM7S64\portmacro.h" +#endif + +#ifdef SAM9XE_IAR + #include "..\..\Source\portable\IAR\AtmelSAM9XE\portmacro.h" +#endif + +#ifdef LPC2000_IAR + #include "..\..\Source\portable\IAR\LPC2000\portmacro.h" +#endif + +#ifdef STR71X_IAR + #include "..\..\Source\portable\IAR\STR71x\portmacro.h" +#endif + +#ifdef STR75X_IAR + #include "..\..\Source\portable\IAR\STR75x\portmacro.h" +#endif + +#ifdef STR75X_GCC + #include "..\..\Source\portable\GCC\STR75x\portmacro.h" +#endif + +#ifdef STR91X_IAR + #include "..\..\Source\portable\IAR\STR91x\portmacro.h" +#endif + +#ifdef GCC_H8S + #include "../../Source/portable/GCC/H8S2329/portmacro.h" +#endif + +#ifdef GCC_AT91FR40008 + #include "../../Source/portable/GCC/ARM7_AT91FR40008/portmacro.h" +#endif + +#ifdef RVDS_ARMCM3_LM3S102 + #include "../../Source/portable/RVDS/ARM_CM3/portmacro.h" +#endif + +#ifdef GCC_ARMCM3_LM3S102 + #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" +#endif + +#ifdef GCC_ARMCM3 + #include "../../Source/portable/GCC/ARM_CM3/portmacro.h" +#endif + +#ifdef IAR_ARM_CM3 + #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" +#endif + +#ifdef IAR_ARMCM3_LM + #include "../../Source/portable/IAR/ARM_CM3/portmacro.h" +#endif + +#ifdef HCS12_CODE_WARRIOR + #include "../../Source/portable/CodeWarrior/HCS12/portmacro.h" +#endif + +#ifdef MICROBLAZE_GCC + #include "../../Source/portable/GCC/MicroBlaze/portmacro.h" +#endif + +#ifdef TERN_EE + #include "..\..\Source\portable\Paradigm\Tern_EE\small\portmacro.h" +#endif + +#ifdef GCC_HCS12 + #include "../../Source/portable/GCC/HCS12/portmacro.h" +#endif + +#ifdef GCC_MCF5235 + #include "../../Source/portable/GCC/MCF5235/portmacro.h" +#endif + +#ifdef COLDFIRE_V2_GCC + #include "../../../Source/portable/GCC/ColdFire_V2/portmacro.h" +#endif + +#ifdef COLDFIRE_V2_CODEWARRIOR + #include "../../Source/portable/CodeWarrior/ColdFire_V2/portmacro.h" +#endif + +#ifdef GCC_PPC405 + #include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h" +#endif + +#ifdef GCC_PPC440 + #include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h" +#endif + +#ifdef _16FX_SOFTUNE + #include "..\..\Source\portable\Softune\MB96340\portmacro.h" +#endif + +#ifdef BCC_INDUSTRIAL_PC_PORT + /* A short file name has to be used in place of the normal + FreeRTOSConfig.h when using the Borland compiler. */ + #include "frconfig.h" + #include "..\portable\BCC\16BitDOS\PC\prtmacro.h" + typedef void ( __interrupt __far *pxISR )(); +#endif + +#ifdef BCC_FLASH_LITE_186_PORT + /* A short file name has to be used in place of the normal + FreeRTOSConfig.h when using the Borland compiler. */ + #include "frconfig.h" + #include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h" + typedef void ( __interrupt __far *pxISR )(); +#endif + +#ifdef __GNUC__ + #ifdef __AVR32_AVR32A__ + #include "portmacro.h" + #endif +#endif + +#ifdef __ICCAVR32__ + #ifdef __CORE__ + #if __CORE__ == __AVR32A__ + #include "portmacro.h" + #endif + #endif +#endif + +#ifdef __91467D + #include "portmacro.h" +#endif + +#ifdef __96340 + #include "portmacro.h" +#endif + + +#ifdef __IAR_V850ES_Fx3__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_V850ES_Jx3__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_V850ES_Jx3_L__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_V850ES_Jx2__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_V850ES_Hx2__ + #include "../../Source/portable/IAR/V850ES/portmacro.h" +#endif + +#ifdef __IAR_78K0R_Kx3__ + #include "../../Source/portable/IAR/78K0R/portmacro.h" +#endif + +#ifdef __IAR_78K0R_Kx3L__ + #include "../../Source/portable/IAR/78K0R/portmacro.h" +#endif + +/* Catch all to ensure portmacro.h is included in the build. Newer demos +have the path as part of the project options, rather than as relative from +the project location. If portENTER_CRITICAL() has not been defined then +portmacro.h has not yet been included - as every portmacro.h provides a +portENTER_CRITICAL() definition. Check the demo application for your demo +to find the path to the correct portmacro.h file. */ +#ifndef portENTER_CRITICAL + #include "portmacro.h" #endif #if portBYTE_ALIGNMENT == 8 @@ -84,14 +342,6 @@ must be set in the compiler's include path. */ #define portNUM_CONFIGURABLE_REGIONS 1 #endif -#ifndef portHAS_STACK_OVERFLOW_CHECKING - #define portHAS_STACK_OVERFLOW_CHECKING 0 -#endif - -#ifndef portARCH_NAME - #define portARCH_NAME NULL -#endif - #ifdef __cplusplus extern "C" { #endif @@ -105,40 +355,11 @@ extern "C" { * */ #if( portUSING_MPU_WRAPPERS == 1 ) - #if( portHAS_STACK_OVERFLOW_CHECKING == 1 ) - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; - #else - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION; - #endif + portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters, portBASE_TYPE xRunPrivileged ) PRIVILEGED_FUNCTION; #else - #if( portHAS_STACK_OVERFLOW_CHECKING == 1 ) - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; - #else - StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; - #endif + portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters ) PRIVILEGED_FUNCTION; #endif -/* Used by heap_5.c. */ -typedef struct HeapRegion -{ - uint8_t *pucStartAddress; - size_t xSizeInBytes; -} HeapRegion_t; - -/* - * Used to define multiple heap regions for use by heap_5.c. This function - * must be called before any calls to pvPortMalloc() - not creating a task, - * queue, semaphore, mutex, software timer, event group, etc. will result in - * pvPortMalloc being called. - * - * pxHeapRegions passes in an array of HeapRegion_t structures - each of which - * defines a region of memory that can be used as the heap. The array is - * terminated by a HeapRegions_t structure that has a size of 0. The region - * with the lowest start address must appear first in the array. - */ -void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION; - - /* * Map to the memory management routines required for the port. */ @@ -146,13 +367,12 @@ void *pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION; void vPortFree( void *pv ) PRIVILEGED_FUNCTION; void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION; size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION; -size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION; /* * Setup the hardware ready for the scheduler to take control. This generally * sets up a tick interrupt and sets timers for the correct tick frequency. */ -BaseType_t xPortStartScheduler( void ) PRIVILEGED_FUNCTION; +portBASE_TYPE xPortStartScheduler( void ) PRIVILEGED_FUNCTION; /* * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so @@ -170,7 +390,7 @@ void vPortEndScheduler( void ) PRIVILEGED_FUNCTION; */ #if( portUSING_MPU_WRAPPERS == 1 ) struct xMEMORY_REGION; - void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth ) PRIVILEGED_FUNCTION; + void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, portSTACK_TYPE *pxBottomOfStack, unsigned short usStackDepth ) PRIVILEGED_FUNCTION; #endif #ifdef __cplusplus diff --git a/FreeRTOS/Source/include/projdefs.h b/FreeRTOS/Source/include/projdefs.h index 155b90e..e2531bc 100644 --- a/FreeRTOS/Source/include/projdefs.h +++ b/FreeRTOS/Source/include/projdefs.h @@ -1,123 +1,87 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #ifndef PROJDEFS_H #define PROJDEFS_H -/* - * Defines the prototype to which task functions must conform. Defined in this - * file to ensure the type is known before portable.h is included. - */ -typedef void (*TaskFunction_t)( void * ); +/* Defines the prototype to which task functions must conform. */ +typedef void (*pdTASK_CODE)( void * ); -/* Converts a time in milliseconds to a time in ticks. This macro can be -overridden by a macro of the same name defined in FreeRTOSConfig.h in case the -definition here is not suitable for your application. */ -#ifndef pdMS_TO_TICKS - #define pdMS_TO_TICKS( xTimeInMs ) ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000 ) ) -#endif +#define pdFALSE ( ( portBASE_TYPE ) 0 ) +#define pdTRUE ( ( portBASE_TYPE ) 1 ) -#define pdFALSE ( ( BaseType_t ) 0 ) -#define pdTRUE ( ( BaseType_t ) 1 ) +#define pdPASS ( pdTRUE ) +#define pdFAIL ( pdFALSE ) +#define errQUEUE_EMPTY ( ( portBASE_TYPE ) 0 ) +#define errQUEUE_FULL ( ( portBASE_TYPE ) 0 ) -#define pdPASS ( pdTRUE ) -#define pdFAIL ( pdFALSE ) -#define errQUEUE_EMPTY ( ( BaseType_t ) 0 ) -#define errQUEUE_FULL ( ( BaseType_t ) 0 ) - -/* FreeRTOS error definitions. */ +/* Error definitions. */ #define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 ) +#define errNO_TASK_TO_RUN ( -2 ) #define errQUEUE_BLOCKED ( -4 ) #define errQUEUE_YIELD ( -5 ) -/* Macros used for basic data corruption checks. */ -#ifndef configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES - #define configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES 0 -#endif - -#if( configUSE_16_BIT_TICKS == 1 ) - #define pdINTEGRITY_CHECK_VALUE 0x5a5a -#else - #define pdINTEGRITY_CHECK_VALUE 0x5a5a5a5aUL -#endif - -/* The following errno values are used by FreeRTOS+ components, not FreeRTOS -itself. */ -#define pdFREERTOS_ERRNO_NONE 0 /* No errors */ -#define pdFREERTOS_ERRNO_ENOENT 2 /* No such file or directory */ -#define pdFREERTOS_ERRNO_EINTR 4 /* Interrupted system call */ -#define pdFREERTOS_ERRNO_EIO 5 /* I/O error */ -#define pdFREERTOS_ERRNO_ENXIO 6 /* No such device or address */ -#define pdFREERTOS_ERRNO_EBADF 9 /* Bad file number */ -#define pdFREERTOS_ERRNO_EAGAIN 11 /* No more processes */ -#define pdFREERTOS_ERRNO_EWOULDBLOCK 11 /* Operation would block */ -#define pdFREERTOS_ERRNO_ENOMEM 12 /* Not enough memory */ -#define pdFREERTOS_ERRNO_EACCES 13 /* Permission denied */ -#define pdFREERTOS_ERRNO_EFAULT 14 /* Bad address */ -#define pdFREERTOS_ERRNO_EBUSY 16 /* Mount device busy */ -#define pdFREERTOS_ERRNO_EEXIST 17 /* File exists */ -#define pdFREERTOS_ERRNO_EXDEV 18 /* Cross-device link */ -#define pdFREERTOS_ERRNO_ENODEV 19 /* No such device */ -#define pdFREERTOS_ERRNO_ENOTDIR 20 /* Not a directory */ -#define pdFREERTOS_ERRNO_EISDIR 21 /* Is a directory */ -#define pdFREERTOS_ERRNO_EINVAL 22 /* Invalid argument */ -#define pdFREERTOS_ERRNO_ENOSPC 28 /* No space left on device */ -#define pdFREERTOS_ERRNO_ESPIPE 29 /* Illegal seek */ -#define pdFREERTOS_ERRNO_EROFS 30 /* Read only file system */ -#define pdFREERTOS_ERRNO_EUNATCH 42 /* Protocol driver not attached */ -#define pdFREERTOS_ERRNO_EBADE 50 /* Invalid exchange */ -#define pdFREERTOS_ERRNO_EFTYPE 79 /* Inappropriate file type or format */ -#define pdFREERTOS_ERRNO_ENMFILE 89 /* No more files */ -#define pdFREERTOS_ERRNO_ENOTEMPTY 90 /* Directory not empty */ -#define pdFREERTOS_ERRNO_ENAMETOOLONG 91 /* File or path name too long */ -#define pdFREERTOS_ERRNO_EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ -#define pdFREERTOS_ERRNO_ENOBUFS 105 /* No buffer space available */ -#define pdFREERTOS_ERRNO_ENOPROTOOPT 109 /* Protocol not available */ -#define pdFREERTOS_ERRNO_EADDRINUSE 112 /* Address already in use */ -#define pdFREERTOS_ERRNO_ETIMEDOUT 116 /* Connection timed out */ -#define pdFREERTOS_ERRNO_EINPROGRESS 119 /* Connection already in progress */ -#define pdFREERTOS_ERRNO_EALREADY 120 /* Socket already connected */ -#define pdFREERTOS_ERRNO_EADDRNOTAVAIL 125 /* Address not available */ -#define pdFREERTOS_ERRNO_EISCONN 127 /* Socket is already connected */ -#define pdFREERTOS_ERRNO_ENOTCONN 128 /* Socket is not connected */ -#define pdFREERTOS_ERRNO_ENOMEDIUM 135 /* No medium inserted */ -#define pdFREERTOS_ERRNO_EILSEQ 138 /* An invalid UTF-16 sequence was encountered. */ -#define pdFREERTOS_ERRNO_ECANCELED 140 /* Operation canceled. */ - -/* The following endian values are used by FreeRTOS+ components, not FreeRTOS -itself. */ -#define pdFREERTOS_LITTLE_ENDIAN 0 -#define pdFREERTOS_BIG_ENDIAN 1 - -/* Re-defining endian values for generic naming. */ -#define pdLITTLE_ENDIAN pdFREERTOS_LITTLE_ENDIAN -#define pdBIG_ENDIAN pdFREERTOS_BIG_ENDIAN - - #endif /* PROJDEFS_H */ diff --git a/FreeRTOS/Source/include/queue.h b/FreeRTOS/Source/include/queue.h index d596b0f..3968cff 100644 --- a/FreeRTOS/Source/include/queue.h +++ b/FreeRTOS/Source/include/queue.h @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #ifndef QUEUE_H @@ -37,66 +74,52 @@ extern "C" { #endif -#include "task.h" /** * Type by which queues are referenced. For example, a call to xQueueCreate() - * returns an QueueHandle_t variable that can then be used as a parameter to + * returns an xQueueHandle variable that can then be used as a parameter to * xQueueSend(), xQueueReceive(), etc. */ -struct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */ -typedef struct QueueDefinition * QueueHandle_t; +typedef void * xQueueHandle; /** * Type by which queue sets are referenced. For example, a call to * xQueueCreateSet() returns an xQueueSet variable that can then be used as a * parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc. */ -typedef struct QueueDefinition * QueueSetHandle_t; +typedef void * xQueueSetHandle; /** * Queue sets can contain both queues and semaphores, so the - * QueueSetMemberHandle_t is defined as a type to be used where a parameter or - * return value can be either an QueueHandle_t or an SemaphoreHandle_t. + * xQueueSetMemberHandle is defined as a type to be used where a parameter or + * return value can be either an xQueueHandle or an xSemaphoreHandle. */ -typedef struct QueueDefinition * QueueSetMemberHandle_t; +typedef void * xQueueSetMemberHandle; /* For internal use only. */ -#define queueSEND_TO_BACK ( ( BaseType_t ) 0 ) -#define queueSEND_TO_FRONT ( ( BaseType_t ) 1 ) -#define queueOVERWRITE ( ( BaseType_t ) 2 ) +#define queueSEND_TO_BACK ( ( portBASE_TYPE ) 0 ) +#define queueSEND_TO_FRONT ( ( portBASE_TYPE ) 1 ) +#define queueOVERWRITE ( ( portBASE_TYPE ) 2 ) /* For internal use only. These definitions *must* match those in queue.c. */ -#define queueQUEUE_TYPE_BASE ( ( uint8_t ) 0U ) -#define queueQUEUE_TYPE_SET ( ( uint8_t ) 0U ) -#define queueQUEUE_TYPE_MUTEX ( ( uint8_t ) 1U ) -#define queueQUEUE_TYPE_COUNTING_SEMAPHORE ( ( uint8_t ) 2U ) -#define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U ) -#define queueQUEUE_TYPE_RECURSIVE_MUTEX ( ( uint8_t ) 4U ) +#define queueQUEUE_TYPE_BASE ( ( unsigned char ) 0U ) +#define queueQUEUE_TYPE_SET ( ( unsigned char ) 0U ) +#define queueQUEUE_TYPE_MUTEX ( ( unsigned char ) 1U ) +#define queueQUEUE_TYPE_COUNTING_SEMAPHORE ( ( unsigned char ) 2U ) +#define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( unsigned char ) 3U ) +#define queueQUEUE_TYPE_RECURSIVE_MUTEX ( ( unsigned char ) 4U ) /** * queue. h *
- QueueHandle_t xQueueCreate(
-							  UBaseType_t uxQueueLength,
-							  UBaseType_t uxItemSize
+ xQueueHandle xQueueCreate(
+							  unsigned portBASE_TYPE uxQueueLength,
+							  unsigned portBASE_TYPE uxItemSize
 						  );
  * 
* - * Creates a new queue instance, and returns a handle by which the new queue - * can be referenced. - * - * Internally, within the FreeRTOS implementation, queues use two blocks of - * memory. The first block is used to hold the queue's data structures. The - * second block is used to hold items placed into the queue. If a queue is - * created using xQueueCreate() then both blocks of memory are automatically - * dynamically allocated inside the xQueueCreate() function. (see - * http://www.freertos.org/a00111.html). If a queue is created using - * xQueueCreateStatic() then the application writer must provide the memory that - * will get used by the queue. xQueueCreateStatic() therefore allows a queue to - * be created without using any dynamic memory allocation. - * - * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html + * Creates a new queue instance. This allocates the storage required by the + * new queue and returns a handle for the queue. * * @param uxQueueLength The maximum number of items that the queue can contain. * @@ -119,10 +142,10 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; void vATask( void *pvParameters ) { - QueueHandle_t xQueue1, xQueue2; + xQueueHandle xQueue1, xQueue2; - // Create a queue capable of containing 10 uint32_t values. - xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) ); + // Create a queue capable of containing 10 unsigned long values. + xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) ); if( xQueue1 == 0 ) { // Queue was not created and must not be used. @@ -142,106 +165,20 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; * \defgroup xQueueCreate xQueueCreate * \ingroup QueueManagement */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_BASE ) ) -#endif +#define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( uxQueueLength, uxItemSize, queueQUEUE_TYPE_BASE ) /** * queue. h *
- QueueHandle_t xQueueCreateStatic(
-							  UBaseType_t uxQueueLength,
-							  UBaseType_t uxItemSize,
-							  uint8_t *pucQueueStorageBuffer,
-							  StaticQueue_t *pxQueueBuffer
-						  );
- * 
- * - * Creates a new queue instance, and returns a handle by which the new queue - * can be referenced. - * - * Internally, within the FreeRTOS implementation, queues use two blocks of - * memory. The first block is used to hold the queue's data structures. The - * second block is used to hold items placed into the queue. If a queue is - * created using xQueueCreate() then both blocks of memory are automatically - * dynamically allocated inside the xQueueCreate() function. (see - * http://www.freertos.org/a00111.html). If a queue is created using - * xQueueCreateStatic() then the application writer must provide the memory that - * will get used by the queue. xQueueCreateStatic() therefore allows a queue to - * be created without using any dynamic memory allocation. - * - * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html - * - * @param uxQueueLength The maximum number of items that the queue can contain. - * - * @param uxItemSize The number of bytes each item in the queue will require. - * Items are queued by copy, not by reference, so this is the number of bytes - * that will be copied for each posted item. Each item on the queue must be - * the same size. - * - * @param pucQueueStorageBuffer If uxItemSize is not zero then - * pucQueueStorageBuffer must point to a uint8_t array that is at least large - * enough to hold the maximum number of items that can be in the queue at any - * one time - which is ( uxQueueLength * uxItemsSize ) bytes. If uxItemSize is - * zero then pucQueueStorageBuffer can be NULL. - * - * @param pxQueueBuffer Must point to a variable of type StaticQueue_t, which - * will be used to hold the queue's data structure. - * - * @return If the queue is created then a handle to the created queue is - * returned. If pxQueueBuffer is NULL then NULL is returned. - * - * Example usage: -
- struct AMessage
- {
-	char ucMessageID;
-	char ucData[ 20 ];
- };
-
- #define QUEUE_LENGTH 10
- #define ITEM_SIZE sizeof( uint32_t )
-
- // xQueueBuffer will hold the queue structure.
- StaticQueue_t xQueueBuffer;
-
- // ucQueueStorage will hold the items posted to the queue.  Must be at least
- // [(queue length) * ( queue item size)] bytes long.
- uint8_t ucQueueStorage[ QUEUE_LENGTH * ITEM_SIZE ];
-
- void vATask( void *pvParameters )
- {
- QueueHandle_t xQueue1;
-
-	// Create a queue capable of containing 10 uint32_t values.
-	xQueue1 = xQueueCreate( QUEUE_LENGTH, // The number of items the queue can hold.
-							ITEM_SIZE	  // The size of each item in the queue
-							&( ucQueueStorage[ 0 ] ), // The buffer that will hold the items in the queue.
-							&xQueueBuffer ); // The buffer that will hold the queue structure.
-
-	// The queue is guaranteed to be created successfully as no dynamic memory
-	// allocation is used.  Therefore xQueue1 is now a handle to a valid queue.
-
-	// ... Rest of task code.
- }
- 
- * \defgroup xQueueCreateStatic xQueueCreateStatic - * \ingroup QueueManagement - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer ) xQueueGenericCreateStatic( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * queue. h - *
- BaseType_t xQueueSendToToFront(
-								   QueueHandle_t	xQueue,
-								   const void		*pvItemToQueue,
-								   TickType_t		xTicksToWait
+ portBASE_TYPE xQueueSendToToFront(
+								   xQueueHandle	xQueue,
+								   const void	*	pvItemToQueue,
+								   portTickType	xTicksToWait
 							   );
  * 
* + * This is a macro that calls xQueueGenericSend(). + * * Post an item to the front of a queue. The item is queued by copy, not by * reference. This function must not be called from an interrupt service * routine. See xQueueSendFromISR () for an alternative which may be used @@ -258,7 +195,7 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; * waiting for space to become available on the queue, should it already * be full. The call will return immediately if this is set to 0 and the * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * portTICK_RATE_MS should be used to convert to real time if this is required. * * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. * @@ -270,15 +207,15 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; char ucData[ 20 ]; } xMessage; - uint32_t ulVar = 10UL; + unsigned long ulVar = 10UL; void vATask( void *pvParameters ) { - QueueHandle_t xQueue1, xQueue2; + xQueueHandle xQueue1, xQueue2; struct AMessage *pxMessage; - // Create a queue capable of containing 10 uint32_t values. - xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) ); + // Create a queue capable of containing 10 unsigned long values. + xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) ); // Create a queue capable of containing 10 pointers to AMessage structures. // These should be passed by pointer as they contain a lot of data. @@ -288,9 +225,9 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; if( xQueue1 != 0 ) { - // Send an uint32_t. Wait for 10 ticks for space to become + // Send an unsigned long. Wait for 10 ticks for space to become // available if necessary. - if( xQueueSendToFront( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS ) + if( xQueueSendToFront( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS ) { // Failed to post the message, even after 10 ticks. } @@ -301,7 +238,7 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; // Send a pointer to a struct AMessage object. Don't block if the // queue is already full. pxMessage = & xMessage; - xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 ); + xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 ); } // ... Rest of task code. @@ -315,10 +252,10 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; /** * queue. h *
- BaseType_t xQueueSendToBack(
-								   QueueHandle_t	xQueue,
-								   const void		*pvItemToQueue,
-								   TickType_t		xTicksToWait
+ portBASE_TYPE xQueueSendToBack(
+								   xQueueHandle	xQueue,
+								   const	void	*	pvItemToQueue,
+								   portTickType	xTicksToWait
 							   );
  * 
* @@ -340,7 +277,7 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; * waiting for space to become available on the queue, should it already * be full. The call will return immediately if this is set to 0 and the queue * is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * portTICK_RATE_MS should be used to convert to real time if this is required. * * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. * @@ -352,15 +289,15 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; char ucData[ 20 ]; } xMessage; - uint32_t ulVar = 10UL; + unsigned long ulVar = 10UL; void vATask( void *pvParameters ) { - QueueHandle_t xQueue1, xQueue2; + xQueueHandle xQueue1, xQueue2; struct AMessage *pxMessage; - // Create a queue capable of containing 10 uint32_t values. - xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) ); + // Create a queue capable of containing 10 unsigned long values. + xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) ); // Create a queue capable of containing 10 pointers to AMessage structures. // These should be passed by pointer as they contain a lot of data. @@ -370,9 +307,9 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; if( xQueue1 != 0 ) { - // Send an uint32_t. Wait for 10 ticks for space to become + // Send an unsigned long. Wait for 10 ticks for space to become // available if necessary. - if( xQueueSendToBack( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS ) + if( xQueueSendToBack( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS ) { // Failed to post the message, even after 10 ticks. } @@ -383,7 +320,7 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; // Send a pointer to a struct AMessage object. Don't block if the // queue is already full. pxMessage = & xMessage; - xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 ); + xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 ); } // ... Rest of task code. @@ -397,10 +334,10 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; /** * queue. h *
- BaseType_t xQueueSend(
-							  QueueHandle_t xQueue,
+ portBASE_TYPE xQueueSend(
+							  xQueueHandle xQueue,
 							  const void * pvItemToQueue,
-							  TickType_t xTicksToWait
+							  portTickType xTicksToWait
 						 );
  * 
* @@ -424,7 +361,7 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; * waiting for space to become available on the queue, should it already * be full. The call will return immediately if this is set to 0 and the * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * portTICK_RATE_MS should be used to convert to real time if this is required. * * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL. * @@ -436,15 +373,15 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; char ucData[ 20 ]; } xMessage; - uint32_t ulVar = 10UL; + unsigned long ulVar = 10UL; void vATask( void *pvParameters ) { - QueueHandle_t xQueue1, xQueue2; + xQueueHandle xQueue1, xQueue2; struct AMessage *pxMessage; - // Create a queue capable of containing 10 uint32_t values. - xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) ); + // Create a queue capable of containing 10 unsigned long values. + xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) ); // Create a queue capable of containing 10 pointers to AMessage structures. // These should be passed by pointer as they contain a lot of data. @@ -454,9 +391,9 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; if( xQueue1 != 0 ) { - // Send an uint32_t. Wait for 10 ticks for space to become + // Send an unsigned long. Wait for 10 ticks for space to become // available if necessary. - if( xQueueSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS ) + if( xQueueSend( xQueue1, ( void * ) &ulVar, ( portTickType ) 10 ) != pdPASS ) { // Failed to post the message, even after 10 ticks. } @@ -467,7 +404,7 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; // Send a pointer to a struct AMessage object. Don't block if the // queue is already full. pxMessage = & xMessage; - xQueueSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 ); + xQueueSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0 ); } // ... Rest of task code. @@ -481,8 +418,8 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; /** * queue. h *
- BaseType_t xQueueOverwrite(
-							  QueueHandle_t xQueue,
+ portBASE_TYPE xQueueOverwrite(
+							  xQueueHandle xQueue,
 							  const void * pvItemToQueue
 						 );
  * 
@@ -513,14 +450,14 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; void vFunction( void *pvParameters ) { - QueueHandle_t xQueue; - uint32_t ulVarToSend, ulValReceived; + xQueueHandle xQueue; + unsigned long ulVarToSend, ulValReceived; - // Create a queue to hold one uint32_t value. It is strongly + // Create a queue to hold one unsigned long value. It is strongly // recommended *not* to use xQueueOverwrite() on queues that can // contain more than one value, and doing so will trigger an assertion // if configASSERT() is defined. - xQueue = xQueueCreate( 1, sizeof( uint32_t ) ); + xQueue = xQueueCreate( 1, sizeof( unsigned long ) ); // Write the value 10 to the queue using xQueueOverwrite(). ulVarToSend = 10; @@ -565,11 +502,11 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; /** * queue. h *
- BaseType_t xQueueGenericSend(
-									QueueHandle_t xQueue,
+ portBASE_TYPE xQueueGenericSend(
+									xQueueHandle xQueue,
 									const void * pvItemToQueue,
-									TickType_t xTicksToWait
-									BaseType_t xCopyPosition
+									portTickType xTicksToWait
+									portBASE_TYPE xCopyPosition
 								);
  * 
* @@ -591,7 +528,7 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; * waiting for space to become available on the queue, should it already * be full. The call will return immediately if this is set to 0 and the * queue is full. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * portTICK_RATE_MS should be used to convert to real time if this is required. * * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the * item at the back of the queue, or queueSEND_TO_FRONT to place the item @@ -607,15 +544,15 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; char ucData[ 20 ]; } xMessage; - uint32_t ulVar = 10UL; + unsigned long ulVar = 10UL; void vATask( void *pvParameters ) { - QueueHandle_t xQueue1, xQueue2; + xQueueHandle xQueue1, xQueue2; struct AMessage *pxMessage; - // Create a queue capable of containing 10 uint32_t values. - xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) ); + // Create a queue capable of containing 10 unsigned long values. + xQueue1 = xQueueCreate( 10, sizeof( unsigned long ) ); // Create a queue capable of containing 10 pointers to AMessage structures. // These should be passed by pointer as they contain a lot of data. @@ -625,9 +562,9 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; if( xQueue1 != 0 ) { - // Send an uint32_t. Wait for 10 ticks for space to become + // Send an unsigned long. Wait for 10 ticks for space to become // available if necessary. - if( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10, queueSEND_TO_BACK ) != pdPASS ) + if( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( portTickType ) 10, queueSEND_TO_BACK ) != pdPASS ) { // Failed to post the message, even after 10 ticks. } @@ -638,7 +575,7 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; // Send a pointer to a struct AMessage object. Don't block if the // queue is already full. pxMessage = & xMessage; - xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0, queueSEND_TO_BACK ); + xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( portTickType ) 0, queueSEND_TO_BACK ); } // ... Rest of task code. @@ -647,17 +584,19 @@ typedef struct QueueDefinition * QueueSetMemberHandle_t; * \defgroup xQueueSend xQueueSend * \ingroup QueueManagement */ -BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; +signed portBASE_TYPE xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ) PRIVILEGED_FUNCTION; /** * queue. h *
- BaseType_t xQueuePeek(
-							 QueueHandle_t xQueue,
-							 void * const pvBuffer,
-							 TickType_t xTicksToWait
+ portBASE_TYPE xQueuePeek(
+							 xQueueHandle xQueue,
+							 void *pvBuffer,
+							 portTickType xTicksToWait
 						 );
* + * This is a macro that calls the xQueueGenericReceive() function. + * * Receive an item from a queue without removing the item from the queue. * The item is received by copy so a buffer of adequate size must be * provided. The number of bytes copied into the buffer was defined when @@ -679,7 +618,7 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ * @param xTicksToWait The maximum amount of time the task should block * waiting for an item to receive should the queue be empty at the time * of the call. The time is defined in tick periods so the constant - * portTICK_PERIOD_MS should be used to convert to real time if this is required. + * portTICK_RATE_MS should be used to convert to real time if this is required. * xQueuePeek() will return immediately if xTicksToWait is 0 and the queue * is empty. * @@ -694,7 +633,7 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ char ucData[ 20 ]; } xMessage; - QueueHandle_t xQueue; + xQueueHandle xQueue; // Task to create a queue and post a value. void vATask( void *pvParameters ) @@ -714,7 +653,7 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ // Send a pointer to a struct AMessage object. Don't block if the // queue is already full. pxMessage = & xMessage; - xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 ); + xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 ); // ... Rest of task code. } @@ -728,7 +667,7 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ { // Peek a message on the created queue. Block for 10 ticks if a // message is not immediately available. - if( xQueuePeek( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) ) + if( xQueuePeek( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) ) { // pcRxedMessage now points to the struct AMessage variable posted // by vATask, but the item still remains on the queue. @@ -738,16 +677,16 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQ // ... Rest of task code. }
- * \defgroup xQueuePeek xQueuePeek + * \defgroup xQueueReceive xQueueReceive * \ingroup QueueManagement */ -BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +#define xQueuePeek( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE ) /** * queue. h *
- BaseType_t xQueuePeekFromISR(
-									QueueHandle_t xQueue,
+ portBASE_TYPE xQueuePeekFromISR(
+									xQueueHandle xQueue,
 									void *pvBuffer,
 								);
* @@ -774,17 +713,19 @@ BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t x * \defgroup xQueuePeekFromISR xQueuePeekFromISR * \ingroup QueueManagement */ -BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; +signed portBASE_TYPE xQueuePeekFromISR( xQueueHandle xQueue, const void * const pvBuffer ) PRIVILEGED_FUNCTION; /** * queue. h *
- BaseType_t xQueueReceive(
-								 QueueHandle_t xQueue,
+ portBASE_TYPE xQueueReceive(
+								 xQueueHandle xQueue,
 								 void *pvBuffer,
-								 TickType_t xTicksToWait
+								 portTickType xTicksToWait
 							);
* + * This is a macro that calls the xQueueGenericReceive() function. + * * Receive an item from a queue. The item is received by copy so a buffer of * adequate size must be provided. The number of bytes copied into the buffer * was defined when the queue was created. @@ -804,7 +745,7 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIV * waiting for an item to receive should the queue be empty at the time * of the call. xQueueReceive() will return immediately if xTicksToWait * is zero and the queue is empty. The time is defined in tick periods so the - * constant portTICK_PERIOD_MS should be used to convert to real time if this is + * constant portTICK_RATE_MS should be used to convert to real time if this is * required. * * @return pdTRUE if an item was successfully received from the queue, @@ -818,7 +759,7 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIV char ucData[ 20 ]; } xMessage; - QueueHandle_t xQueue; + xQueueHandle xQueue; // Task to create a queue and post a value. void vATask( void *pvParameters ) @@ -838,7 +779,7 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIV // Send a pointer to a struct AMessage object. Don't block if the // queue is already full. pxMessage = & xMessage; - xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 ); + xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 ); // ... Rest of task code. } @@ -852,7 +793,7 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIV { // Receive a message on the created queue. Block for 10 ticks if a // message is not immediately available. - if( xQueueReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) ) + if( xQueueReceive( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) ) { // pcRxedMessage now points to the struct AMessage variable posted // by vATask. @@ -865,11 +806,110 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIV * \defgroup xQueueReceive xQueueReceive * \ingroup QueueManagement */ -BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +#define xQueueReceive( xQueue, pvBuffer, xTicksToWait ) xQueueGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE ) + /** * queue. h - *
UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue );
+ *
+ portBASE_TYPE xQueueGenericReceive(
+									   xQueueHandle	xQueue,
+									   void	*pvBuffer,
+									   portTickType	xTicksToWait
+									   portBASE_TYPE	xJustPeek
+									);
+ * + * It is preferred that the macro xQueueReceive() be used rather than calling + * this function directly. + * + * Receive an item from a queue. The item is received by copy so a buffer of + * adequate size must be provided. The number of bytes copied into the buffer + * was defined when the queue was created. + * + * This function must not be used in an interrupt service routine. See + * xQueueReceiveFromISR for an alternative that can. + * + * @param xQueue The handle to the queue from which the item is to be + * received. + * + * @param pvBuffer Pointer to the buffer into which the received item will + * be copied. + * + * @param xTicksToWait The maximum amount of time the task should block + * waiting for an item to receive should the queue be empty at the time + * of the call. The time is defined in tick periods so the constant + * portTICK_RATE_MS should be used to convert to real time if this is required. + * xQueueGenericReceive() will return immediately if the queue is empty and + * xTicksToWait is 0. + * + * @param xJustPeek When set to true, the item received from the queue is not + * actually removed from the queue - meaning a subsequent call to + * xQueueReceive() will return the same item. When set to false, the item + * being received from the queue is also removed from the queue. + * + * @return pdTRUE if an item was successfully received from the queue, + * otherwise pdFALSE. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ } xMessage;
+
+ xQueueHandle xQueue;
+
+ // Task to create a queue and post a value.
+ void vATask( void *pvParameters )
+ {
+ struct AMessage *pxMessage;
+
+	// Create a queue capable of containing 10 pointers to AMessage structures.
+	// These should be passed by pointer as they contain a lot of data.
+	xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );
+	if( xQueue == 0 )
+	{
+		// Failed to create the queue.
+	}
+
+	// ...
+
+	// Send a pointer to a struct AMessage object.  Don't block if the
+	// queue is already full.
+	pxMessage = & xMessage;
+	xQueueSend( xQueue, ( void * ) &pxMessage, ( portTickType ) 0 );
+
+	// ... Rest of task code.
+ }
+
+ // Task to receive from the queue.
+ void vADifferentTask( void *pvParameters )
+ {
+ struct AMessage *pxRxedMessage;
+
+	if( xQueue != 0 )
+	{
+		// Receive a message on the created queue.  Block for 10 ticks if a
+		// message is not immediately available.
+		if( xQueueGenericReceive( xQueue, &( pxRxedMessage ), ( portTickType ) 10 ) )
+		{
+			// pcRxedMessage now points to the struct AMessage variable posted
+			// by vATask.
+		}
+	}
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueReceive xQueueReceive + * \ingroup QueueManagement + */ +signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeek ) PRIVILEGED_FUNCTION; + +/** + * queue. h + *
unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue );
* * Return the number of messages stored in a queue. * @@ -880,28 +920,11 @@ BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_ * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting * \ingroup QueueManagement */ -UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; +unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION; /** * queue. h - *
UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue );
- * - * Return the number of free spaces available in a queue. This is equal to the - * number of items that can be sent to the queue before the queue becomes full - * if no items are removed. - * - * @param xQueue A handle to the queue being queried. - * - * @return The number of spaces available in the queue. - * - * \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting - * \ingroup QueueManagement - */ -UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; - -/** - * queue. h - *
void vQueueDelete( QueueHandle_t xQueue );
+ *
void vQueueDelete( xQueueHandle xQueue );
* * Delete a queue - freeing all the memory allocated for storing of items * placed on the queue. @@ -911,15 +934,15 @@ UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNC * \defgroup vQueueDelete vQueueDelete * \ingroup QueueManagement */ -void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; +void vQueueDelete( xQueueHandle xQueue ) PRIVILEGED_FUNCTION; /** * queue. h *
- BaseType_t xQueueSendToFrontFromISR(
-										 QueueHandle_t xQueue,
+ portBASE_TYPE xQueueSendToFrontFromISR(
+										 xQueueHandle xQueue,
 										 const void *pvItemToQueue,
-										 BaseType_t *pxHigherPriorityTaskWoken
+										 portBASE_TYPE *pxHigherPriorityTaskWoken
 									  );
  
* @@ -954,7 +977,7 @@ void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; void vBufferISR( void ) { char cIn; - BaseType_t xHigherPrioritTaskWoken; + portBASE_TYPE xHigherPrioritTaskWoken; // We have not woken a task at the start of the ISR. xHigherPriorityTaskWoken = pdFALSE; @@ -987,10 +1010,10 @@ void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /** * queue. h *
- BaseType_t xQueueSendToBackFromISR(
-										 QueueHandle_t xQueue,
+ portBASE_TYPE xQueueSendToBackFromISR(
+										 xQueueHandle xQueue,
 										 const void *pvItemToQueue,
-										 BaseType_t *pxHigherPriorityTaskWoken
+										 portBASE_TYPE *pxHigherPriorityTaskWoken
 									  );
  
* @@ -1025,7 +1048,7 @@ void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; void vBufferISR( void ) { char cIn; - BaseType_t xHigherPriorityTaskWoken; + portBASE_TYPE xHigherPriorityTaskWoken; // We have not woken a task at the start of the ISR. xHigherPriorityTaskWoken = pdFALSE; @@ -1057,10 +1080,10 @@ void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /** * queue. h *
- BaseType_t xQueueOverwriteFromISR(
-							  QueueHandle_t xQueue,
+ portBASE_TYPE xQueueOverwriteFromISR(
+							  xQueueHandle xQueue,
 							  const void * pvItemToQueue,
-							  BaseType_t *pxHigherPriorityTaskWoken
+							  portBASE_TYPE *pxHigherPriorityTaskWoken
 						 );
  * 
* @@ -1095,22 +1118,22 @@ void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; * Example usage:
 
- QueueHandle_t xQueue;
-
+ xQueueHandle xQueue;
+ 
  void vFunction( void *pvParameters )
  {
- 	// Create a queue to hold one uint32_t value.  It is strongly
+ 	// Create a queue to hold one unsigned long value.  It is strongly
 	// recommended *not* to use xQueueOverwriteFromISR() on queues that can
 	// contain more than one value, and doing so will trigger an assertion
 	// if configASSERT() is defined.
-	xQueue = xQueueCreate( 1, sizeof( uint32_t ) );
+	xQueue = xQueueCreate( 1, sizeof( unsigned long ) );
 }
 
 void vAnInterruptHandler( void )
 {
 // xHigherPriorityTaskWoken must be set to pdFALSE before it is used.
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;
-uint32_t ulVarToSend, ulValReceived;
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+unsigned long ulVarToSend, ulValReceived;
 
 	// Write the value 10 to the queue using xQueueOverwriteFromISR().
 	ulVarToSend = 10;
@@ -1125,7 +1148,7 @@ uint32_t ulVarToSend, ulValReceived;
 	// Reading from the queue will now return 100.
 
 	// ...
-
+	
 	if( xHigherPrioritytaskWoken == pdTRUE )
 	{
 		// Writing to the queue caused a task to unblock and the unblocked task
@@ -1144,10 +1167,10 @@ uint32_t ulVarToSend, ulValReceived;
 /**
  * queue. h
  * 
- BaseType_t xQueueSendFromISR(
-									 QueueHandle_t xQueue,
+ portBASE_TYPE xQueueSendFromISR(
+									 xQueueHandle xQueue,
 									 const void *pvItemToQueue,
-									 BaseType_t *pxHigherPriorityTaskWoken
+									 portBASE_TYPE *pxHigherPriorityTaskWoken
 								);
  
* @@ -1185,7 +1208,7 @@ uint32_t ulVarToSend, ulValReceived; void vBufferISR( void ) { char cIn; - BaseType_t xHigherPriorityTaskWoken; + portBASE_TYPE xHigherPriorityTaskWoken; // We have not woken a task at the start of the ISR. xHigherPriorityTaskWoken = pdFALSE; @@ -1205,7 +1228,7 @@ uint32_t ulVarToSend, ulValReceived; if( xHigherPriorityTaskWoken ) { // Actual macro used here is port specific. - portYIELD_FROM_ISR (); + taskYIELD_FROM_ISR (); } }
@@ -1218,18 +1241,17 @@ uint32_t ulVarToSend, ulValReceived; /** * queue. h *
- BaseType_t xQueueGenericSendFromISR(
-										   QueueHandle_t		xQueue,
+ portBASE_TYPE xQueueGenericSendFromISR(
+										   xQueueHandle		xQueue,
 										   const	void	*pvItemToQueue,
-										   BaseType_t	*pxHigherPriorityTaskWoken,
-										   BaseType_t	xCopyPosition
+										   portBASE_TYPE	*pxHigherPriorityTaskWoken,
+										   portBASE_TYPE	xCopyPosition
 									   );
  
* * It is preferred that the macros xQueueSendFromISR(), * xQueueSendToFrontFromISR() and xQueueSendToBackFromISR() be used in place - * of calling this function directly. xQueueGiveFromISR() is an - * equivalent for use by semaphores that don't actually copy any data. + * of calling this function directly. * * Post an item on a queue. It is safe to use this function from within an * interrupt service routine. @@ -1264,7 +1286,7 @@ uint32_t ulVarToSend, ulValReceived; void vBufferISR( void ) { char cIn; - BaseType_t xHigherPriorityTaskWokenByPost; + portBASE_TYPE xHigherPriorityTaskWokenByPost; // We have not woken a task at the start of the ISR. xHigherPriorityTaskWokenByPost = pdFALSE; @@ -1292,16 +1314,15 @@ uint32_t ulVarToSend, ulValReceived; * \defgroup xQueueSendFromISR xQueueSendFromISR * \ingroup QueueManagement */ -BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; -BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; +signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle xQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition ) PRIVILEGED_FUNCTION; /** * queue. h *
- BaseType_t xQueueReceiveFromISR(
-									   QueueHandle_t	xQueue,
+ portBASE_TYPE xQueueReceiveFromISR(
+									   xQueueHandle	xQueue,
 									   void	*pvBuffer,
-									   BaseType_t *pxTaskWoken
+									   portBASE_TYPE *pxTaskWoken
 								   );
  * 
* @@ -1325,13 +1346,13 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherP * Example usage:
 
- QueueHandle_t xQueue;
+ xQueueHandle xQueue;
 
  // Function to create a queue and post some values.
  void vAFunction( void *pvParameters )
  {
  char cValueToPost;
- const TickType_t xTicksToWait = ( TickType_t )0xff;
+ const portTickType xBlockTime = ( portTickType )0xff;
 
 	// Create a queue capable of containing 10 characters.
 	xQueue = xQueueCreate( 10, sizeof( char ) );
@@ -1343,23 +1364,23 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherP
 	// ...
 
 	// Post some characters that will be used within an ISR.  If the queue
-	// is full then this task will block for xTicksToWait ticks.
+	// is full then this task will block for xBlockTime ticks.
 	cValueToPost = 'a';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
+	xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
 	cValueToPost = 'b';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
+	xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
 
 	// ... keep posting characters ... this task may block when the queue
 	// becomes full.
 
 	cValueToPost = 'c';
-	xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );
+	xQueueSend( xQueue, ( void * ) &cValueToPost, xBlockTime );
  }
 
  // ISR that outputs all the characters received on the queue.
  void vISR_Routine( void )
  {
- BaseType_t xTaskWokenByReceive = pdFALSE;
+ portBASE_TYPE xTaskWokenByReceive = pdFALSE;
  char cRxedChar;
 
 	while( xQueueReceiveFromISR( xQueue, ( void * ) &cRxedChar, &xTaskWokenByReceive) )
@@ -1382,15 +1403,37 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherP
  * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR
  * \ingroup QueueManagement
  */
-BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle xQueue, const void * const pvBuffer, signed portBASE_TYPE *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 
 /*
  * Utilities to query queues that are safe to use from an ISR.  These utilities
  * should be used only from witin an ISR, or within a critical section.
  */
-BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
-BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
-UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueIsQueueEmptyFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;
+signed portBASE_TYPE xQueueIsQueueFullFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;
+unsigned portBASE_TYPE uxQueueMessagesWaitingFromISR( const xQueueHandle xQueue ) PRIVILEGED_FUNCTION;
+
+
+/*
+ * xQueueAltGenericSend() is an alternative version of xQueueGenericSend().
+ * Likewise xQueueAltGenericReceive() is an alternative version of
+ * xQueueGenericReceive().
+ *
+ * The source code that implements the alternative (Alt) API is much
+ * simpler	because it executes everything from within a critical section.
+ * This is	the approach taken by many other RTOSes, but FreeRTOS.org has the
+ * preferred fully featured API too.  The fully featured API has more
+ * complex	code that takes longer to execute, but makes much less use of
+ * critical sections.  Therefore the alternative API sacrifices interrupt
+ * responsiveness to gain execution speed, whereas the fully featured API
+ * sacrifices execution speed to ensure better interrupt responsiveness.
+ */
+signed portBASE_TYPE xQueueAltGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition );
+signed portBASE_TYPE xQueueAltGenericReceive( xQueueHandle xQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking );
+#define xQueueAltSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT )
+#define xQueueAltSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueAltGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )
+#define xQueueAltReceive( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdFALSE )
+#define xQueueAltPeek( xQueue, pvBuffer, xTicksToWait ) xQueueAltGenericReceive( ( xQueue ), ( pvBuffer ), ( xTicksToWait ), pdTRUE )
 
 /*
  * The functions defined above are for passing data to and from tasks.  The
@@ -1401,34 +1444,32 @@ UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEG
  * should not be called directly from application code.  Instead use the macro
  * wrappers defined within croutine.h.
  */
-BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken );
-BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken );
-BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait );
-BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait );
+signed portBASE_TYPE xQueueCRSendFromISR( xQueueHandle xQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken );
+signed portBASE_TYPE xQueueCRReceiveFromISR( xQueueHandle xQueue, void *pvBuffer, signed portBASE_TYPE *pxTaskWoken );
+signed portBASE_TYPE xQueueCRSend( xQueueHandle xQueue, const void *pvItemToQueue, portTickType xTicksToWait );
+signed portBASE_TYPE xQueueCRReceive( xQueueHandle xQueue, void *pvBuffer, portTickType xTicksToWait );
 
 /*
  * For internal use only.  Use xSemaphoreCreateMutex(),
  * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling
  * these functions directly.
  */
-QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
-QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
-QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
-QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
-BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
-TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
-TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
+xQueueHandle xQueueCreateMutex( unsigned char ucQueueType ) PRIVILEGED_FUNCTION;
+xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount ) PRIVILEGED_FUNCTION;
+void* xQueueGetMutexHolder( xQueueHandle xSemaphore ) PRIVILEGED_FUNCTION;
 
 /*
  * For internal use only.  Use xSemaphoreTakeMutexRecursive() or
  * xSemaphoreGiveMutexRecursive() instead of calling these functions directly.
  */
-BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
-BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
+portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle xMutex, portTickType xBlockTime ) PRIVILEGED_FUNCTION;
+portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex ) PRIVILEGED_FUNCTION;
 
 /*
- * Reset a queue back to its original empty state.  The return value is now
- * obsolete and is always set to pdPASS.
+ * Reset a queue back to its original empty state.  pdPASS is returned if the
+ * queue is successfully reset.  pdFAIL is returned if the queue could not be
+ * reset because there are tasks blocked on the queue waiting to either
+ * receive from the queue or send to the queue.
  */
 #define xQueueReset( xQueue ) xQueueGenericReset( xQueue, pdFALSE )
 
@@ -1450,12 +1491,10 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
  * handles can also be passed in here.
  *
  * @param pcName The name to be associated with the handle.  This is the
- * name that the kernel aware debugger will display.  The queue registry only
- * stores a pointer to the string - so the string must be persistent (global or
- * preferably in ROM/Flash), not on the stack.
+ * name that the kernel aware debugger will display.
  */
-#if( configQUEUE_REGISTRY_SIZE > 0 )
-	void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+#if configQUEUE_REGISTRY_SIZE > 0
+	void vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName ) PRIVILEGED_FUNCTION;
 #endif
 
 /*
@@ -1468,42 +1507,15 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
  *
  * @param xQueue The handle of the queue being removed from the registry.
  */
-#if( configQUEUE_REGISTRY_SIZE > 0 )
-	void vQueueUnregisterQueue( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
+#if configQUEUE_REGISTRY_SIZE > 0
+	void vQueueUnregisterQueue( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;
 #endif
 
 /*
- * The queue registry is provided as a means for kernel aware debuggers to
- * locate queues, semaphores and mutexes.  Call pcQueueGetName() to look
- * up and return the name of a queue in the queue registry from the queue's
- * handle.
- *
- * @param xQueue The handle of the queue the name of which will be returned.
- * @return If the queue is in the registry then a pointer to the name of the
- * queue is returned.  If the queue is not in the registry then NULL is
- * returned.
+ * Generic version of the queue creation function, which is in turn called by
+ * any queue, semaphore or mutex creation function or macro.
  */
-#if( configQUEUE_REGISTRY_SIZE > 0 )
-	const char *pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
-#endif
-
-/*
- * Generic version of the function used to creaet a queue using dynamic memory
- * allocation.  This is called by other functions and macros that create other
- * RTOS objects that use the queue structure as their base.
- */
-#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
-	QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
-#endif
-
-/*
- * Generic version of the function used to creaet a queue using dynamic memory
- * allocation.  This is called by other functions and macros that create other
- * RTOS objects that use the queue structure as their base.
- */
-#if( configSUPPORT_STATIC_ALLOCATION == 1 )
-	QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
-#endif
+xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize, unsigned char ucQueueType ) PRIVILEGED_FUNCTION;
 
 /*
  * Queue sets provide a mechanism to allow a task to block (pend) on a read
@@ -1553,7 +1565,7 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
  * @return If the queue set is created successfully then a handle to the created
  * queue set is returned.  Otherwise NULL is returned.
  */
-QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
+xQueueSetHandle xQueueCreateSet( unsigned portBASE_TYPE uxEventQueueLength ) PRIVILEGED_FUNCTION;
 
 /*
  * Adds a queue or semaphore to a queue set that was previously created by a
@@ -1567,7 +1579,7 @@ QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILE
  * a call to xQueueSelectFromSet() has first returned a handle to that set member.
  *
  * @param xQueueOrSemaphore The handle of the queue or semaphore being added to
- * the queue set (cast to an QueueSetMemberHandle_t type).
+ * the queue set (cast to an xQueueSetMemberHandle type).
  *
  * @param xQueueSet The handle of the queue set to which the queue or semaphore
  * is being added.
@@ -1577,7 +1589,7 @@ QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILE
  * queue set because it is already a member of a different queue set then pdFAIL
  * is returned.
  */
-BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
+portBASE_TYPE xQueueAddToSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;
 
 /*
  * Removes a queue or semaphore from a queue set.  A queue or semaphore can only
@@ -1587,7 +1599,7 @@ BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHan
  * function.
  *
  * @param xQueueOrSemaphore The handle of the queue or semaphore being removed
- * from the queue set (cast to an QueueSetMemberHandle_t type).
+ * from the queue set (cast to an xQueueSetMemberHandle type).
  *
  * @param xQueueSet The handle of the queue set in which the queue or semaphore
  * is included.
@@ -1596,7 +1608,7 @@ BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHan
  * then pdPASS is returned.  If the queue was not in the queue set, or the
  * queue (or semaphore) was not empty, then pdFAIL is returned.
  */
-BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
+portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;
 
 /*
  * xQueueSelectFromSet() selects from the members of a queue set a queue or
@@ -1621,30 +1633,30 @@ BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueS
  *
  * @param xQueueSet The queue set on which the task will (potentially) block.
  *
- * @param xTicksToWait The maximum time, in ticks, that the calling task will
+ * @param xBlockTimeTicks The maximum time, in ticks, that the calling task will
  * remain in the Blocked state (with other tasks executing) to wait for a member
  * of the queue set to be ready for a successful queue read or semaphore take
  * operation.
  *
  * @return xQueueSelectFromSet() will return the handle of a queue (cast to
- * a QueueSetMemberHandle_t type) contained in the queue set that contains data,
- * or the handle of a semaphore (cast to a QueueSetMemberHandle_t type) contained
+ * a xQueueSetMemberHandle type) contained in the queue set that contains data,
+ * or the handle of a semaphore (cast to a xQueueSetMemberHandle type) contained
  * in the queue set that is available, or NULL if no such queue or semaphore
  * exists before before the specified block time expires.
  */
-QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
+xQueueSetMemberHandle xQueueSelectFromSet( xQueueSetHandle xQueueSet, portTickType xBlockTimeTicks ) PRIVILEGED_FUNCTION;
 
 /*
  * A version of xQueueSelectFromSet() that can be used from an ISR.
  */
-QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
+xQueueSetMemberHandle xQueueSelectFromSetFromISR( xQueueSetHandle xQueueSet ) PRIVILEGED_FUNCTION;
 
 /* Not public API functions. */
-void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION;
-BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) PRIVILEGED_FUNCTION;
-void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;
-UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
-uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
+void vQueueWaitForMessageRestricted( xQueueHandle xQueue, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;
+portBASE_TYPE xQueueGenericReset( xQueueHandle xQueue, portBASE_TYPE xNewQueue ) PRIVILEGED_FUNCTION;
+void vQueueSetQueueNumber( xQueueHandle xQueue, unsigned char ucQueueNumber ) PRIVILEGED_FUNCTION;
+unsigned char ucQueueGetQueueNumber( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;
+unsigned char ucQueueGetQueueType( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;
 
 
 #ifdef __cplusplus
diff --git a/FreeRTOS/Source/include/semphr.h b/FreeRTOS/Source/include/semphr.h
index 9e9e83f..04957f5 100644
--- a/FreeRTOS/Source/include/semphr.h
+++ b/FreeRTOS/Source/include/semphr.h
@@ -1,29 +1,66 @@
 /*
- * FreeRTOS Kernel V10.2.0
- * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * http://www.FreeRTOS.org
- * http://aws.amazon.com/freertos
- *
- * 1 tab == 4 spaces!
- */
+    FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd.
+
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
+
+    ***************************************************************************
+     *                                                                       *
+     *    FreeRTOS provides completely free yet professionally developed,    *
+     *    robust, strictly quality controlled, supported, and cross          *
+     *    platform software that has become a de facto standard.             *
+     *                                                                       *
+     *    Help yourself get started quickly and support the FreeRTOS         *
+     *    project by purchasing a FreeRTOS tutorial book, reference          *
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *
+     *                                                                       *
+     *    Thank you!                                                         *
+     *                                                                       *
+    ***************************************************************************
+
+    This file is part of the FreeRTOS distribution.
+
+    FreeRTOS is free software; you can redistribute it and/or modify it under
+    the terms of the GNU General Public License (version 2) as published by the
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
+
+    >>! NOTE: The modification to the GPL is included to allow you to distribute
+    >>! a combined work that includes FreeRTOS without being obliged to provide
+    >>! the source code for proprietary components outside of the FreeRTOS
+    >>! kernel.
+
+    FreeRTOS 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.  Full license text is available from the following
+    link: http://www.freertos.org/a00114.html
+
+    1 tab == 4 spaces!
+
+    ***************************************************************************
+     *                                                                       *
+     *    Having a problem?  Start by reading the FAQ "My application does   *
+     *    not run, what could be wrong?"                                     *
+     *                                                                       *
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *
+     *                                                                       *
+    ***************************************************************************
+
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,
+    license and Real Time Engineers Ltd. contact details.
+
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.
+
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS
+    licenses offer ticketed support, indemnification and middleware.
+
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
+    engineered and independently SIL3 certified version for use in safety and
+    mission critical applications that require provable dependability.
+
+    1 tab == 4 spaces!
+*/
 
 #ifndef SEMAPHORE_H
 #define SEMAPHORE_H
@@ -34,27 +71,16 @@
 
 #include "queue.h"
 
-typedef QueueHandle_t SemaphoreHandle_t;
+typedef xQueueHandle xSemaphoreHandle;
 
-#define semBINARY_SEMAPHORE_QUEUE_LENGTH	( ( uint8_t ) 1U )
-#define semSEMAPHORE_QUEUE_ITEM_LENGTH		( ( uint8_t ) 0U )
-#define semGIVE_BLOCK_TIME					( ( TickType_t ) 0U )
+#define semBINARY_SEMAPHORE_QUEUE_LENGTH	( ( unsigned char ) 1U )
+#define semSEMAPHORE_QUEUE_ITEM_LENGTH		( ( unsigned char ) 0U )
+#define semGIVE_BLOCK_TIME					( ( portTickType ) 0U )
 
 
 /**
  * semphr. h
- * 
vSemaphoreCreateBinary( SemaphoreHandle_t xSemaphore )
- * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * This old vSemaphoreCreateBinary() macro is now deprecated in favour of the - * xSemaphoreCreateBinary() function. Note that binary semaphores created using - * the vSemaphoreCreateBinary() macro are created in a state such that the - * first call to 'take' the semaphore would pass, whereas binary semaphores - * created using xSemaphoreCreateBinary() are created in a state such that the - * the semaphore must first be 'given' before it can be 'taken'. + *
vSemaphoreCreateBinary( xSemaphoreHandle xSemaphore )
* * Macro that implements a semaphore by using the existing queue mechanism. * The queue length is 1 as this is a binary semaphore. The data size is 0 @@ -68,11 +94,11 @@ typedef QueueHandle_t SemaphoreHandle_t; * semaphore does not use a priority inheritance mechanism. For an alternative * that does use priority inheritance see xSemaphoreCreateMutex(). * - * @param xSemaphore Handle to the created semaphore. Should be of type SemaphoreHandle_t. + * @param xSemaphore Handle to the created semaphore. Should be of type xSemaphoreHandle. * * Example usage:
- SemaphoreHandle_t xSemaphore = NULL;
+ xSemaphoreHandle xSemaphore;
 
  void vATask( void * pvParameters )
  {
@@ -83,160 +109,38 @@ typedef QueueHandle_t SemaphoreHandle_t;
     if( xSemaphore != NULL )
     {
         // The semaphore was created successfully.
-        // The semaphore can now be used.
+        // The semaphore can now be used.  
     }
  }
  
* \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary * \ingroup Semaphores */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define vSemaphoreCreateBinary( xSemaphore ) \ - { \ - ( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \ - if( ( xSemaphore ) != NULL ) \ - { \ - ( void ) xSemaphoreGive( ( xSemaphore ) ); \ - } \ - } -#endif +#define vSemaphoreCreateBinary( xSemaphore ) \ + { \ + ( xSemaphore ) = xQueueGenericCreate( ( unsigned portBASE_TYPE ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \ + if( ( xSemaphore ) != NULL ) \ + { \ + ( void ) xSemaphoreGive( ( xSemaphore ) ); \ + } \ + } /** * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateBinary( void )
- * - * Creates a new binary semaphore instance, and returns a handle by which the - * new semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, binary semaphores use a block - * of memory, in which the semaphore structure is stored. If a binary semaphore - * is created using xSemaphoreCreateBinary() then the required memory is - * automatically dynamically allocated inside the xSemaphoreCreateBinary() - * function. (see http://www.freertos.org/a00111.html). If a binary semaphore - * is created using xSemaphoreCreateBinaryStatic() then the application writer - * must provide the memory. xSemaphoreCreateBinaryStatic() therefore allows a - * binary semaphore to be created without using any dynamic memory allocation. - * - * The old vSemaphoreCreateBinary() macro is now deprecated in favour of this - * xSemaphoreCreateBinary() function. Note that binary semaphores created using - * the vSemaphoreCreateBinary() macro are created in a state such that the - * first call to 'take' the semaphore would pass, whereas binary semaphores - * created using xSemaphoreCreateBinary() are created in a state such that the - * the semaphore must first be 'given' before it can be 'taken'. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @return Handle to the created semaphore, or NULL if the memory required to - * hold the semaphore's data structures could not be allocated. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateBinary().
-    // This is a macro so pass the variable in directly.
-    xSemaphore = xSemaphoreCreateBinary();
-
-    if( xSemaphore != NULL )
-    {
-        // The semaphore was created successfully.
-        // The semaphore can now be used.
-    }
- }
- 
- * \defgroup xSemaphoreCreateBinary xSemaphoreCreateBinary - * \ingroup Semaphores - */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateBinaryStatic( StaticSemaphore_t *pxSemaphoreBuffer )
- * - * Creates a new binary semaphore instance, and returns a handle by which the - * new semaphore can be referenced. - * - * NOTE: In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a binary semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, binary semaphores use a block - * of memory, in which the semaphore structure is stored. If a binary semaphore - * is created using xSemaphoreCreateBinary() then the required memory is - * automatically dynamically allocated inside the xSemaphoreCreateBinary() - * function. (see http://www.freertos.org/a00111.html). If a binary semaphore - * is created using xSemaphoreCreateBinaryStatic() then the application writer - * must provide the memory. xSemaphoreCreateBinaryStatic() therefore allows a - * binary semaphore to be created without using any dynamic memory allocation. - * - * This type of semaphore can be used for pure synchronisation between tasks or - * between an interrupt and a task. The semaphore need not be given back once - * obtained, so one task/interrupt can continuously 'give' the semaphore while - * another continuously 'takes' the semaphore. For this reason this type of - * semaphore does not use a priority inheritance mechanism. For an alternative - * that does use priority inheritance see xSemaphoreCreateMutex(). - * - * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the semaphore's data structure, removing the - * need for the memory to be allocated dynamically. - * - * @return If the semaphore is created then a handle to the created semaphore is - * returned. If pxSemaphoreBuffer is NULL then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore = NULL;
- StaticSemaphore_t xSemaphoreBuffer;
-
- void vATask( void * pvParameters )
- {
-    // Semaphore cannot be used before a call to xSemaphoreCreateBinary().
-    // The semaphore's data structures will be placed in the xSemaphoreBuffer
-    // variable, the address of which is passed into the function.  The
-    // function's parameter is not NULL, so the function will not attempt any
-    // dynamic memory allocation, and therefore the function will not return
-    // return NULL.
-    xSemaphore = xSemaphoreCreateBinary( &xSemaphoreBuffer );
-
-    // Rest of task code goes here.
- }
- 
- * \defgroup xSemaphoreCreateBinaryStatic xSemaphoreCreateBinaryStatic - * \ingroup Semaphores - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateBinaryStatic( pxStaticSemaphore ) xQueueGenericCreateStatic( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticSemaphore, queueQUEUE_TYPE_BINARY_SEMAPHORE ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
xSemaphoreTake(
- *                   SemaphoreHandle_t xSemaphore,
- *                   TickType_t xBlockTime
+ * 
xSemaphoreTake( 
+ *                   xSemaphoreHandle xSemaphore, 
+ *                   portTickType xBlockTime 
  *               )
* * Macro to obtain a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or + * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or * xSemaphoreCreateCounting(). * * @param xSemaphore A handle to the semaphore being taken - obtained when * the semaphore was created. * * @param xBlockTime The time in ticks to wait for the semaphore to become - * available. The macro portTICK_PERIOD_MS can be used to convert this to a + * available. The macro portTICK_RATE_MS can be used to convert this to a * real time. A block time of zero can be used to poll the semaphore. A block * time of portMAX_DELAY can be used to block indefinitely (provided * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h). @@ -246,13 +150,13 @@ typedef QueueHandle_t SemaphoreHandle_t; * * Example usage:
- SemaphoreHandle_t xSemaphore = NULL;
+ xSemaphoreHandle xSemaphore = NULL;
 
  // A task that creates a semaphore.
  void vATask( void * pvParameters )
  {
     // Create the semaphore to guard a shared resource.
-    xSemaphore = xSemaphoreCreateBinary();
+    vSemaphoreCreateBinary( xSemaphore );
  }
 
  // A task that uses the semaphore.
@@ -263,15 +167,15 @@ typedef QueueHandle_t SemaphoreHandle_t;
     if( xSemaphore != NULL )
     {
         // See if we can obtain the semaphore.  If the semaphore is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTake( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )
+        // wait 10 ticks to see if it becomes free.	
+        if( xSemaphoreTake( xSemaphore, ( portTickType ) 10 ) == pdTRUE )
         {
             // We were able to obtain the semaphore and can now access the
             // shared resource.
 
             // ...
 
-            // We have finished accessing the shared resource.  Release the
+            // We have finished accessing the shared resource.  Release the 
             // semaphore.
             xSemaphoreGive( xSemaphore );
         }
@@ -286,28 +190,28 @@ typedef QueueHandle_t SemaphoreHandle_t;
  * \defgroup xSemaphoreTake xSemaphoreTake
  * \ingroup Semaphores
  */
-#define xSemaphoreTake( xSemaphore, xBlockTime )		xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) )
+#define xSemaphoreTake( xSemaphore, xBlockTime )		xQueueGenericReceive( ( xQueueHandle ) ( xSemaphore ), NULL, ( xBlockTime ), pdFALSE )
 
 /**
  * semphr. h
- * xSemaphoreTakeRecursive(
- *                          SemaphoreHandle_t xMutex,
- *                          TickType_t xBlockTime
+ * xSemaphoreTakeRecursive( 
+ *                          xSemaphoreHandle xMutex, 
+ *                          portTickType xBlockTime 
  *                        )
  *
- * Macro to recursively obtain, or 'take', a mutex type semaphore.
- * The mutex must have previously been created using a call to
+ * Macro to recursively obtain, or 'take', a mutex type semaphore.  
+ * The mutex must have previously been created using a call to 
  * xSemaphoreCreateRecursiveMutex();
- *
+ * 
  * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this
  * macro to be available.
- *
+ * 
  * This macro must not be used on mutexes created using xSemaphoreCreateMutex().
  *
- * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex
- * doesn't become available again until the owner has called
- * xSemaphoreGiveRecursive() for each successful 'take' request.  For example,
- * if a task successfully 'takes' the same mutex 5 times then the mutex will
+ * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex 
+ * doesn't become available again until the owner has called 
+ * xSemaphoreGiveRecursive() for each successful 'take' request.  For example, 
+ * if a task successfully 'takes' the same mutex 5 times then the mutex will 
  * not be available to any other task until it has also  'given' the mutex back
  * exactly five times.
  *
@@ -315,17 +219,17 @@ typedef QueueHandle_t SemaphoreHandle_t;
  * handle returned by xSemaphoreCreateRecursiveMutex();
  *
  * @param xBlockTime The time in ticks to wait for the semaphore to become
- * available.  The macro portTICK_PERIOD_MS can be used to convert this to a
+ * available.  The macro portTICK_RATE_MS can be used to convert this to a
  * real time.  A block time of zero can be used to poll the semaphore.  If
  * the task already owns the semaphore then xSemaphoreTakeRecursive() will
- * return immediately no matter what the value of xBlockTime.
+ * return immediately no matter what the value of xBlockTime. 
  *
  * @return pdTRUE if the semaphore was obtained.  pdFALSE if xBlockTime
  * expired without the semaphore becoming available.
  *
  * Example usage:
  
- SemaphoreHandle_t xMutex = NULL;
+ xSemaphoreHandle xMutex = NULL;
 
  // A task that creates a mutex.
  void vATask( void * pvParameters )
@@ -342,31 +246,31 @@ typedef QueueHandle_t SemaphoreHandle_t;
     if( xMutex != NULL )
     {
         // See if we can obtain the mutex.  If the mutex is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTakeRecursive( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )
+        // wait 10 ticks to see if it becomes free.	
+        if( xSemaphoreTakeRecursive( xSemaphore, ( portTickType ) 10 ) == pdTRUE )
         {
             // We were able to obtain the mutex and can now access the
             // shared resource.
 
             // ...
-            // For some reason due to the nature of the code further calls to
-            // xSemaphoreTakeRecursive() are made on the same mutex.  In real
-            // code these would not be just sequential calls as this would make
-            // no sense.  Instead the calls are likely to be buried inside
-            // a more complex call structure.
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
+            // For some reason due to the nature of the code further calls to 
+			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
+			// code these would not be just sequential calls as this would make
+			// no sense.  Instead the calls are likely to be buried inside
+			// a more complex call structure.
+            xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
+            xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
 
-            // The mutex has now been 'taken' three times, so will not be
-            // available to another task until it has also been given back
-            // three times.  Again it is unlikely that real code would have
-            // these calls sequentially, but instead buried in a more complex
-            // call structure.  This is just for illustrative purposes.
-            xSemaphoreGiveRecursive( xMutex );
-            xSemaphoreGiveRecursive( xMutex );
+            // The mutex has now been 'taken' three times, so will not be 
+			// available to another task until it has also been given back
+			// three times.  Again it is unlikely that real code would have
+			// these calls sequentially, but instead buried in a more complex
+			// call structure.  This is just for illustrative purposes.
             xSemaphoreGiveRecursive( xMutex );
+			xSemaphoreGiveRecursive( xMutex );
+			xSemaphoreGiveRecursive( xMutex );
 
-            // Now the mutex can be taken by other tasks.
+			// Now the mutex can be taken by other tasks.
         }
         else
         {
@@ -379,22 +283,35 @@ typedef QueueHandle_t SemaphoreHandle_t;
  * \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive
  * \ingroup Semaphores
  */
-#if( configUSE_RECURSIVE_MUTEXES == 1 )
-	#define xSemaphoreTakeRecursive( xMutex, xBlockTime )	xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) )
-#endif
+#define xSemaphoreTakeRecursive( xMutex, xBlockTime )	xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) )
+
+
+/* 
+ * xSemaphoreAltTake() is an alternative version of xSemaphoreTake().
+ *
+ * The source code that implements the alternative (Alt) API is much 
+ * simpler	because it executes everything from within a critical section.  
+ * This is	the approach taken by many other RTOSes, but FreeRTOS.org has the 
+ * preferred fully featured API too.  The fully featured API has more 
+ * complex	code that takes longer to execute, but makes much less use of 
+ * critical sections.  Therefore the alternative API sacrifices interrupt 
+ * responsiveness to gain execution speed, whereas the fully featured API
+ * sacrifices execution speed to ensure better interrupt responsiveness.
+ */
+#define xSemaphoreAltTake( xSemaphore, xBlockTime )		xQueueAltGenericReceive( ( xQueueHandle ) ( xSemaphore ), NULL, ( xBlockTime ), pdFALSE )
 
 /**
  * semphr. h
- * 
xSemaphoreGive( SemaphoreHandle_t xSemaphore )
+ *
xSemaphoreGive( xSemaphoreHandle xSemaphore )
* * Macro to release a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or + * created with a call to vSemaphoreCreateBinary(), xSemaphoreCreateMutex() or * xSemaphoreCreateCounting(). and obtained using sSemaphoreTake(). * * This macro must not be used from an ISR. See xSemaphoreGiveFromISR () for * an alternative which can be used from an ISR. * - * This macro must also not be used on semaphores created using + * This macro must also not be used on semaphores created using * xSemaphoreCreateRecursiveMutex(). * * @param xSemaphore A handle to the semaphore being released. This is the @@ -402,17 +319,17 @@ typedef QueueHandle_t SemaphoreHandle_t; * * @return pdTRUE if the semaphore was released. pdFALSE if an error occurred. * Semaphores are implemented using queues. An error can occur if there is - * no space on the queue to post a message - indicating that the + * no space on the queue to post a message - indicating that the * semaphore was not first obtained correctly. * * Example usage:
- SemaphoreHandle_t xSemaphore = NULL;
+ xSemaphoreHandle xSemaphore = NULL;
 
  void vATask( void * pvParameters )
  {
     // Create the semaphore to guard a shared resource.
-    xSemaphore = vSemaphoreCreateBinary();
+    vSemaphoreCreateBinary( xSemaphore );
 
     if( xSemaphore != NULL )
     {
@@ -424,7 +341,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
 
         // Obtain the semaphore - don't block if the semaphore is not
         // immediately available.
-        if( xSemaphoreTake( xSemaphore, ( TickType_t ) 0 ) )
+        if( xSemaphoreTake( xSemaphore, ( portTickType ) 0 ) )
         {
             // We now have the semaphore and can access the shared resource.
 
@@ -444,25 +361,25 @@ typedef QueueHandle_t SemaphoreHandle_t;
  * \defgroup xSemaphoreGive xSemaphoreGive
  * \ingroup Semaphores
  */
-#define xSemaphoreGive( xSemaphore )		xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )
+#define xSemaphoreGive( xSemaphore )		xQueueGenericSend( ( xQueueHandle ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )
 
 /**
  * semphr. h
- * 
xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex )
+ *
xSemaphoreGiveRecursive( xSemaphoreHandle xMutex )
* * Macro to recursively release, or 'give', a mutex type semaphore. - * The mutex must have previously been created using a call to + * The mutex must have previously been created using a call to * xSemaphoreCreateRecursiveMutex(); - * + * * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this * macro to be available. * * This macro must not be used on mutexes created using xSemaphoreCreateMutex(). - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will + * + * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex + * doesn't become available again until the owner has called + * xSemaphoreGiveRecursive() for each successful 'take' request. For example, + * if a task successfully 'takes' the same mutex 5 times then the mutex will * not be available to any other task until it has also 'given' the mutex back * exactly five times. * @@ -473,7 +390,7 @@ typedef QueueHandle_t SemaphoreHandle_t; * * Example usage:
- SemaphoreHandle_t xMutex = NULL;
+ xSemaphoreHandle xMutex = NULL;
 
  // A task that creates a mutex.
  void vATask( void * pvParameters )
@@ -490,22 +407,22 @@ typedef QueueHandle_t SemaphoreHandle_t;
     if( xMutex != NULL )
     {
         // See if we can obtain the mutex.  If the mutex is not available
-        // wait 10 ticks to see if it becomes free.
-        if( xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 ) == pdTRUE )
+        // wait 10 ticks to see if it becomes free.	
+        if( xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 ) == pdTRUE )
         {
             // We were able to obtain the mutex and can now access the
             // shared resource.
 
             // ...
-            // For some reason due to the nature of the code further calls to
+            // For some reason due to the nature of the code further calls to 
 			// xSemaphoreTakeRecursive() are made on the same mutex.  In real
 			// code these would not be just sequential calls as this would make
 			// no sense.  Instead the calls are likely to be buried inside
 			// a more complex call structure.
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
-            xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );
+            xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
+            xSemaphoreTakeRecursive( xMutex, ( portTickType ) 10 );
 
-            // The mutex has now been 'taken' three times, so will not be
+            // The mutex has now been 'taken' three times, so will not be 
 			// available to another task until it has also been given back
 			// three times.  Again it is unlikely that real code would have
 			// these calls sequentially, it would be more likely that the calls
@@ -528,20 +445,32 @@ typedef QueueHandle_t SemaphoreHandle_t;
  * \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive
  * \ingroup Semaphores
  */
-#if( configUSE_RECURSIVE_MUTEXES == 1 )
-	#define xSemaphoreGiveRecursive( xMutex )	xQueueGiveMutexRecursive( ( xMutex ) )
-#endif
+#define xSemaphoreGiveRecursive( xMutex )	xQueueGiveMutexRecursive( ( xMutex ) )
+
+/* 
+ * xSemaphoreAltGive() is an alternative version of xSemaphoreGive().
+ *
+ * The source code that implements the alternative (Alt) API is much 
+ * simpler	because it executes everything from within a critical section.  
+ * This is	the approach taken by many other RTOSes, but FreeRTOS.org has the 
+ * preferred fully featured API too.  The fully featured API has more 
+ * complex	code that takes longer to execute, but makes much less use of 
+ * critical sections.  Therefore the alternative API sacrifices interrupt 
+ * responsiveness to gain execution speed, whereas the fully featured API
+ * sacrifices execution speed to ensure better interrupt responsiveness.
+ */
+#define xSemaphoreAltGive( xSemaphore )		xQueueAltGenericSend( ( xQueueHandle ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )
 
 /**
  * semphr. h
  * 
- xSemaphoreGiveFromISR(
-                          SemaphoreHandle_t xSemaphore,
-                          BaseType_t *pxHigherPriorityTaskWoken
+ xSemaphoreGiveFromISR( 
+                          xSemaphoreHandle xSemaphore, 
+                          signed portBASE_TYPE *pxHigherPriorityTaskWoken
                       )
* * Macro to release a semaphore. The semaphore must have previously been - * created with a call to xSemaphoreCreateBinary() or xSemaphoreCreateCounting(). + * created with a call to vSemaphoreCreateBinary() or xSemaphoreCreateCounting(). * * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) * must not be used with this macro. @@ -563,14 +492,14 @@ typedef QueueHandle_t SemaphoreHandle_t;
  \#define LONG_TIME 0xffff
  \#define TICKS_TO_WAIT	10
- SemaphoreHandle_t xSemaphore = NULL;
+ xSemaphoreHandle xSemaphore = NULL;
 
  // Repetitive task.
  void vATask( void * pvParameters )
  {
     for( ;; )
     {
-        // We want this task to run every 10 ticks of a timer.  The semaphore
+        // We want this task to run every 10 ticks of a timer.  The semaphore 
         // was created before this task was started.
 
         // Block waiting for the semaphore to become available.
@@ -581,7 +510,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
             // ...
 
             // We have finished our task.  Return to the top of the loop where
-            // we will block on the semaphore until it is time to execute
+            // we will block on the semaphore until it is time to execute 
             // again.  Note when using the semaphore for synchronisation with an
 			// ISR in this manner there is no need to 'give' the semaphore back.
         }
@@ -591,8 +520,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
  // Timer ISR
  void vTimerISR( void * pvParameters )
  {
- static uint8_t ucLocalTickCount = 0;
- static BaseType_t xHigherPriorityTaskWoken;
+ static unsigned char ucLocalTickCount = 0;
+ static signed portBASE_TYPE xHigherPriorityTaskWoken;
 
     // A timer tick has occurred.
 
@@ -621,18 +550,18 @@ typedef QueueHandle_t SemaphoreHandle_t;
  * \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR
  * \ingroup Semaphores
  */
-#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken )	xQueueGiveFromISR( ( QueueHandle_t ) ( xSemaphore ), ( pxHigherPriorityTaskWoken ) )
+#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken )			xQueueGenericSendFromISR( ( xQueueHandle ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )
 
 /**
  * semphr. h
  * 
- xSemaphoreTakeFromISR(
-                          SemaphoreHandle_t xSemaphore,
-                          BaseType_t *pxHigherPriorityTaskWoken
+ xSemaphoreTakeFromISR( 
+                          xSemaphoreHandle xSemaphore, 
+                          signed portBASE_TYPE *pxHigherPriorityTaskWoken
                       )
* - * Macro to take a semaphore from an ISR. The semaphore must have - * previously been created with a call to xSemaphoreCreateBinary() or + * Macro to take a semaphore from an ISR. The semaphore must have + * previously been created with a call to vSemaphoreCreateBinary() or * xSemaphoreCreateCounting(). * * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) @@ -652,49 +581,39 @@ typedef QueueHandle_t SemaphoreHandle_t; * running task. If xSemaphoreTakeFromISR() sets this value to pdTRUE then * a context switch should be requested before the interrupt is exited. * - * @return pdTRUE if the semaphore was successfully taken, otherwise + * @return pdTRUE if the semaphore was successfully taken, otherwise * pdFALSE */ -#define xSemaphoreTakeFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueReceiveFromISR( ( QueueHandle_t ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) ) +#define xSemaphoreTakeFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueReceiveFromISR( ( xQueueHandle ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) ) /** * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateMutex( void )
+ *
xSemaphoreHandle xSemaphoreCreateMutex( void )
* - * Creates a new mutex type semaphore instance, and returns a handle by which - * the new mutex can be referenced. + * Macro that implements a mutex semaphore by using the existing queue + * mechanism. * - * Internally, within the FreeRTOS implementation, mutex semaphores use a block - * of memory, in which the mutex structure is stored. If a mutex is created - * using xSemaphoreCreateMutex() then the required memory is automatically - * dynamically allocated inside the xSemaphoreCreateMutex() function. (see - * http://www.freertos.org/a00111.html). If a mutex is created using - * xSemaphoreCreateMutexStatic() then the application writer must provided the - * memory. xSemaphoreCreateMutexStatic() therefore allows a mutex to be created - * without using any dynamic memory allocation. + * Mutexes created using this macro can be accessed using the xSemaphoreTake() + * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and + * xSemaphoreGiveRecursive() macros should not be used. + * + * This type of semaphore uses a priority inheritance mechanism so a task + * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the + * semaphore it is no longer required. * - * Mutexes created using this function can be accessed using the xSemaphoreTake() - * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and - * xSemaphoreGiveRecursive() macros must not be used. + * Mutex type semaphores cannot be used from within interrupt service routines. * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt + * See vSemaphoreCreateBinary() for an alternative implementation that can be + * used for pure synchronisation (where one task or interrupt always 'gives' the + * semaphore and another always 'takes' the semaphore) and from within interrupt * service routines. * - * @return If the mutex was successfully created then a handle to the created - * semaphore is returned. If there was not enough heap to allocate the mutex - * data structures then NULL is returned. + * @return xSemaphore Handle to the created mutex semaphore. Should be of type + * xSemaphoreHandle. * * Example usage:
- SemaphoreHandle_t xSemaphore;
+ xSemaphoreHandle xSemaphore;
 
  void vATask( void * pvParameters )
  {
@@ -705,125 +624,51 @@ typedef QueueHandle_t SemaphoreHandle_t;
     if( xSemaphore != NULL )
     {
         // The semaphore was created successfully.
-        // The semaphore can now be used.
+        // The semaphore can now be used.  
     }
  }
  
- * \defgroup xSemaphoreCreateMutex xSemaphoreCreateMutex + * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex * \ingroup Semaphores */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX ) -#endif - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateMutexStatic( StaticSemaphore_t *pxMutexBuffer )
- * - * Creates a new mutex type semaphore instance, and returns a handle by which - * the new mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, mutex semaphores use a block - * of memory, in which the mutex structure is stored. If a mutex is created - * using xSemaphoreCreateMutex() then the required memory is automatically - * dynamically allocated inside the xSemaphoreCreateMutex() function. (see - * http://www.freertos.org/a00111.html). If a mutex is created using - * xSemaphoreCreateMutexStatic() then the application writer must provided the - * memory. xSemaphoreCreateMutexStatic() therefore allows a mutex to be created - * without using any dynamic memory allocation. - * - * Mutexes created using this function can be accessed using the xSemaphoreTake() - * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and - * xSemaphoreGiveRecursive() macros must not be used. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t, - * which will be used to hold the mutex's data structure, removing the need for - * the memory to be allocated dynamically. - * - * @return If the mutex was successfully created then a handle to the created - * mutex is returned. If pxMutexBuffer was NULL then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xMutexBuffer;
-
- void vATask( void * pvParameters )
- {
-    // A mutex cannot be used before it has been created.  xMutexBuffer is
-    // into xSemaphoreCreateMutexStatic() so no dynamic memory allocation is
-    // attempted.
-    xSemaphore = xSemaphoreCreateMutexStatic( &xMutexBuffer );
-
-    // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,
-    // so there is no need to check it.
- }
- 
- * \defgroup xSemaphoreCreateMutexStatic xSemaphoreCreateMutexStatic - * \ingroup Semaphores - */ - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateMutexStatic( pxMutexBuffer ) xQueueCreateMutexStatic( queueQUEUE_TYPE_MUTEX, ( pxMutexBuffer ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ +#define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX ) /** * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )
+ *
xSemaphoreHandle xSemaphoreCreateRecursiveMutex( void )
* - * Creates a new recursive mutex type semaphore instance, and returns a handle - * by which the new recursive mutex can be referenced. + * Macro that implements a recursive mutex by using the existing queue + * mechanism. * - * Internally, within the FreeRTOS implementation, recursive mutexs use a block - * of memory, in which the mutex structure is stored. If a recursive mutex is - * created using xSemaphoreCreateRecursiveMutex() then the required memory is - * automatically dynamically allocated inside the - * xSemaphoreCreateRecursiveMutex() function. (see - * http://www.freertos.org/a00111.html). If a recursive mutex is created using - * xSemaphoreCreateRecursiveMutexStatic() then the application writer must - * provide the memory that will get used by the mutex. - * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to - * be created without using any dynamic memory allocation. + * Mutexes created using this macro can be accessed using the + * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The + * xSemaphoreTake() and xSemaphoreGive() macros should not be used. * - * Mutexes created using this macro can be accessed using the - * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The - * xSemaphoreTake() and xSemaphoreGive() macros must not be used. - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will + * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex + * doesn't become available again until the owner has called + * xSemaphoreGiveRecursive() for each successful 'take' request. For example, + * if a task successfully 'takes' the same mutex 5 times then the mutex will * not be available to any other task until it has also 'given' the mutex back * exactly five times. + * + * This type of semaphore uses a priority inheritance mechanism so a task + * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the + * semaphore it is no longer required. * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. + * Mutex type semaphores cannot be used from within interrupt service routines. * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt + * See vSemaphoreCreateBinary() for an alternative implementation that can be + * used for pure synchronisation (where one task or interrupt always 'gives' the + * semaphore and another always 'takes' the semaphore) and from within interrupt * service routines. * - * @return xSemaphore Handle to the created mutex semaphore. Should be of type - * SemaphoreHandle_t. + * @return xSemaphore Handle to the created mutex semaphore. Should be of type + * xSemaphoreHandle. * * Example usage:
- SemaphoreHandle_t xSemaphore;
+ xSemaphoreHandle xSemaphore;
 
  void vATask( void * pvParameters )
  {
@@ -834,135 +679,45 @@ typedef QueueHandle_t SemaphoreHandle_t;
     if( xSemaphore != NULL )
     {
         // The semaphore was created successfully.
-        // The semaphore can now be used.
+        // The semaphore can now be used.  
     }
  }
  
- * \defgroup xSemaphoreCreateRecursiveMutex xSemaphoreCreateRecursiveMutex + * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex * \ingroup Semaphores */ -#if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) ) - #define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX ) -#endif +#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX ) /** * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutexStatic( StaticSemaphore_t *pxMutexBuffer )
+ *
xSemaphoreHandle xSemaphoreCreateCounting( unsigned portBASE_TYPE uxMaxCount, unsigned portBASE_TYPE uxInitialCount )
* - * Creates a new recursive mutex type semaphore instance, and returns a handle - * by which the new recursive mutex can be referenced. - * - * Internally, within the FreeRTOS implementation, recursive mutexs use a block - * of memory, in which the mutex structure is stored. If a recursive mutex is - * created using xSemaphoreCreateRecursiveMutex() then the required memory is - * automatically dynamically allocated inside the - * xSemaphoreCreateRecursiveMutex() function. (see - * http://www.freertos.org/a00111.html). If a recursive mutex is created using - * xSemaphoreCreateRecursiveMutexStatic() then the application writer must - * provide the memory that will get used by the mutex. - * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to - * be created without using any dynamic memory allocation. - * - * Mutexes created using this macro can be accessed using the - * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The - * xSemaphoreTake() and xSemaphoreGive() macros must not be used. - * - * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex - * doesn't become available again until the owner has called - * xSemaphoreGiveRecursive() for each successful 'take' request. For example, - * if a task successfully 'takes' the same mutex 5 times then the mutex will - * not be available to any other task until it has also 'given' the mutex back - * exactly five times. - * - * This type of semaphore uses a priority inheritance mechanism so a task - * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the - * semaphore it is no longer required. - * - * Mutex type semaphores cannot be used from within interrupt service routines. - * - * See xSemaphoreCreateBinary() for an alternative implementation that can be - * used for pure synchronisation (where one task or interrupt always 'gives' the - * semaphore and another always 'takes' the semaphore) and from within interrupt - * service routines. - * - * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the recursive mutex's data structure, - * removing the need for the memory to be allocated dynamically. - * - * @return If the recursive mutex was successfully created then a handle to the - * created recursive mutex is returned. If pxMutexBuffer was NULL then NULL is - * returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xMutexBuffer;
-
- void vATask( void * pvParameters )
- {
-    // A recursive semaphore cannot be used before it is created.  Here a
-    // recursive mutex is created using xSemaphoreCreateRecursiveMutexStatic().
-    // The address of xMutexBuffer is passed into the function, and will hold
-    // the mutexes data structures - so no dynamic memory allocation will be
-    // attempted.
-    xSemaphore = xSemaphoreCreateRecursiveMutexStatic( &xMutexBuffer );
-
-    // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,
-    // so there is no need to check it.
- }
- 
- * \defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic - * \ingroup Semaphores - */ -#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) ) - #define xSemaphoreCreateRecursiveMutexStatic( pxStaticSemaphore ) xQueueCreateMutexStatic( queueQUEUE_TYPE_RECURSIVE_MUTEX, pxStaticSemaphore ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount )
- * - * Creates a new counting semaphore instance, and returns a handle by which the - * new counting semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a counting semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, counting semaphores use a - * block of memory, in which the counting semaphore structure is stored. If a - * counting semaphore is created using xSemaphoreCreateCounting() then the - * required memory is automatically dynamically allocated inside the - * xSemaphoreCreateCounting() function. (see - * http://www.freertos.org/a00111.html). If a counting semaphore is created - * using xSemaphoreCreateCountingStatic() then the application writer can - * instead optionally provide the memory that will get used by the counting - * semaphore. xSemaphoreCreateCountingStatic() therefore allows a counting - * semaphore to be created without using any dynamic memory allocation. + * Macro that creates a counting semaphore by using the existing + * queue mechanism. * * Counting semaphores are typically used for two things: * - * 1) Counting events. + * 1) Counting events. * * In this usage scenario an event handler will 'give' a semaphore each time - * an event occurs (incrementing the semaphore count value), and a handler - * task will 'take' a semaphore each time it processes an event - * (decrementing the semaphore count value). The count value is therefore - * the difference between the number of events that have occurred and the - * number that have been processed. In this case it is desirable for the + * an event occurs (incrementing the semaphore count value), and a handler + * task will 'take' a semaphore each time it processes an event + * (decrementing the semaphore count value). The count value is therefore + * the difference between the number of events that have occurred and the + * number that have been processed. In this case it is desirable for the * initial count value to be zero. * * 2) Resource management. * * In this usage scenario the count value indicates the number of resources - * available. To obtain control of a resource a task must first obtain a + * available. To obtain control of a resource a task must first obtain a * semaphore - decrementing the semaphore count value. When the count value * reaches zero there are no free resources. When a task finishes with the * resource it 'gives' the semaphore back - incrementing the semaphore count * value. In this case it is desirable for the initial count value to be * equal to the maximum count value, indicating that all resources are free. * - * @param uxMaxCount The maximum count value that can be reached. When the + * @param uxMaxCount The maximum count value that can be reached. When the * semaphore reaches this value it can no longer be 'given'. * * @param uxInitialCount The count value assigned to the semaphore when it is @@ -970,14 +725,14 @@ typedef QueueHandle_t SemaphoreHandle_t; * * @return Handle to the created semaphore. Null if the semaphore could not be * created. - * + * * Example usage:
- SemaphoreHandle_t xSemaphore;
+ xSemaphoreHandle xSemaphore;
 
  void vATask( void * pvParameters )
  {
- SemaphoreHandle_t xSemaphore = NULL;
+ xSemaphoreHandle xSemaphore = NULL;
 
     // Semaphore cannot be used before a call to xSemaphoreCreateCounting().
     // The max value to which the semaphore can count should be 10, and the
@@ -987,105 +742,18 @@ typedef QueueHandle_t SemaphoreHandle_t;
     if( xSemaphore != NULL )
     {
         // The semaphore was created successfully.
-        // The semaphore can now be used.
+        // The semaphore can now be used.  
     }
  }
  
* \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting * \ingroup Semaphores */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - #define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) ) -#endif +#define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) ) /** * semphr. h - *
SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount, StaticSemaphore_t *pxSemaphoreBuffer )
- * - * Creates a new counting semaphore instance, and returns a handle by which the - * new counting semaphore can be referenced. - * - * In many usage scenarios it is faster and more memory efficient to use a - * direct to task notification in place of a counting semaphore! - * http://www.freertos.org/RTOS-task-notifications.html - * - * Internally, within the FreeRTOS implementation, counting semaphores use a - * block of memory, in which the counting semaphore structure is stored. If a - * counting semaphore is created using xSemaphoreCreateCounting() then the - * required memory is automatically dynamically allocated inside the - * xSemaphoreCreateCounting() function. (see - * http://www.freertos.org/a00111.html). If a counting semaphore is created - * using xSemaphoreCreateCountingStatic() then the application writer must - * provide the memory. xSemaphoreCreateCountingStatic() therefore allows a - * counting semaphore to be created without using any dynamic memory allocation. - * - * Counting semaphores are typically used for two things: - * - * 1) Counting events. - * - * In this usage scenario an event handler will 'give' a semaphore each time - * an event occurs (incrementing the semaphore count value), and a handler - * task will 'take' a semaphore each time it processes an event - * (decrementing the semaphore count value). The count value is therefore - * the difference between the number of events that have occurred and the - * number that have been processed. In this case it is desirable for the - * initial count value to be zero. - * - * 2) Resource management. - * - * In this usage scenario the count value indicates the number of resources - * available. To obtain control of a resource a task must first obtain a - * semaphore - decrementing the semaphore count value. When the count value - * reaches zero there are no free resources. When a task finishes with the - * resource it 'gives' the semaphore back - incrementing the semaphore count - * value. In this case it is desirable for the initial count value to be - * equal to the maximum count value, indicating that all resources are free. - * - * @param uxMaxCount The maximum count value that can be reached. When the - * semaphore reaches this value it can no longer be 'given'. - * - * @param uxInitialCount The count value assigned to the semaphore when it is - * created. - * - * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t, - * which will then be used to hold the semaphore's data structure, removing the - * need for the memory to be allocated dynamically. - * - * @return If the counting semaphore was successfully created then a handle to - * the created counting semaphore is returned. If pxSemaphoreBuffer was NULL - * then NULL is returned. - * - * Example usage: -
- SemaphoreHandle_t xSemaphore;
- StaticSemaphore_t xSemaphoreBuffer;
-
- void vATask( void * pvParameters )
- {
- SemaphoreHandle_t xSemaphore = NULL;
-
-    // Counting semaphore cannot be used before they have been created.  Create
-    // a counting semaphore using xSemaphoreCreateCountingStatic().  The max
-    // value to which the semaphore can count is 10, and the initial value
-    // assigned to the count will be 0.  The address of xSemaphoreBuffer is
-    // passed in and will be used to hold the semaphore structure, so no dynamic
-    // memory allocation will be used.
-    xSemaphore = xSemaphoreCreateCounting( 10, 0, &xSemaphoreBuffer );
-
-    // No memory allocation was attempted so xSemaphore cannot be NULL, so there
-    // is no need to check its value.
- }
- 
- * \defgroup xSemaphoreCreateCountingStatic xSemaphoreCreateCountingStatic - * \ingroup Semaphores - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - #define xSemaphoreCreateCountingStatic( uxMaxCount, uxInitialCount, pxSemaphoreBuffer ) xQueueCreateCountingSemaphoreStatic( ( uxMaxCount ), ( uxInitialCount ), ( pxSemaphoreBuffer ) ) -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * semphr. h - *
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );
+ *
void vSemaphoreDelete( xSemaphoreHandle xSemaphore );
* * Delete a semaphore. This function must be used with care. For example, * do not delete a mutex type semaphore if the mutex is held by a task. @@ -1095,46 +763,23 @@ typedef QueueHandle_t SemaphoreHandle_t; * \defgroup vSemaphoreDelete vSemaphoreDelete * \ingroup Semaphores */ -#define vSemaphoreDelete( xSemaphore ) vQueueDelete( ( QueueHandle_t ) ( xSemaphore ) ) +#define vSemaphoreDelete( xSemaphore ) vQueueDelete( ( xQueueHandle ) ( xSemaphore ) ) /** * semphr.h - *
TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex );
+ *
xTaskHandle xSemaphoreGetMutexHolder( xSemaphoreHandle xMutex );
* * If xMutex is indeed a mutex type semaphore, return the current mutex holder. * If xMutex is not a mutex type semaphore, or the mutex is available (not held * by a task), return NULL. * - * Note: This is a good way of determining if the calling task is the mutex + * Note: This Is is a good way of determining if the calling task is the mutex * holder, but not a good way of determining the identity of the mutex holder as * the holder may change between the function exiting and the returned value * being tested. */ #define xSemaphoreGetMutexHolder( xSemaphore ) xQueueGetMutexHolder( ( xSemaphore ) ) -/** - * semphr.h - *
TaskHandle_t xSemaphoreGetMutexHolderFromISR( SemaphoreHandle_t xMutex );
- * - * If xMutex is indeed a mutex type semaphore, return the current mutex holder. - * If xMutex is not a mutex type semaphore, or the mutex is available (not held - * by a task), return NULL. - * - */ -#define xSemaphoreGetMutexHolderFromISR( xSemaphore ) xQueueGetMutexHolderFromISR( ( xSemaphore ) ) - -/** - * semphr.h - *
UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore );
- * - * If the semaphore is a counting semaphore then uxSemaphoreGetCount() returns - * its current count value. If the semaphore is a binary semaphore then - * uxSemaphoreGetCount() returns 1 if the semaphore is available, and 0 if the - * semaphore is not available. - * - */ -#define uxSemaphoreGetCount( xSemaphore ) uxQueueMessagesWaiting( ( QueueHandle_t ) ( xSemaphore ) ) - #endif /* SEMAPHORE_H */ diff --git a/FreeRTOS/Source/include/stack_macros.h b/FreeRTOS/Source/include/stack_macros.h deleted file mode 100644 index e7e259c..0000000 --- a/FreeRTOS/Source/include/stack_macros.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#ifndef STACK_MACROS_H -#define STACK_MACROS_H - -/* - * Call the stack overflow hook function if the stack of the task being swapped - * out is currently overflowed, or looks like it might have overflowed in the - * past. - * - * Setting configCHECK_FOR_STACK_OVERFLOW to 1 will cause the macro to check - * the current stack state only - comparing the current top of stack value to - * the stack limit. Setting configCHECK_FOR_STACK_OVERFLOW to greater than 1 - * will also cause the last few stack bytes to be checked to ensure the value - * to which the bytes were set when the task was created have not been - * overwritten. Note this second test does not guarantee that an overflowed - * stack will always be recognised. - */ - -/*-----------------------------------------------------------*/ - -#if( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH < 0 ) ) - - /* Only the current stack state is to be checked. */ - #define taskCHECK_FOR_STACK_OVERFLOW() \ - { \ - /* Is the currently saved stack pointer within the stack limit? */ \ - if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack ) \ - { \ - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ - } \ - } - -#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */ -/*-----------------------------------------------------------*/ - -#if( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH > 0 ) ) - - /* Only the current stack state is to be checked. */ - #define taskCHECK_FOR_STACK_OVERFLOW() \ - { \ - \ - /* Is the currently saved stack pointer within the stack limit? */ \ - if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack ) \ - { \ - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ - } \ - } - -#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */ -/*-----------------------------------------------------------*/ - -#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) ) - - #define taskCHECK_FOR_STACK_OVERFLOW() \ - { \ - const uint32_t * const pulStack = ( uint32_t * ) pxCurrentTCB->pxStack; \ - const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5; \ - \ - if( ( pulStack[ 0 ] != ulCheckValue ) || \ - ( pulStack[ 1 ] != ulCheckValue ) || \ - ( pulStack[ 2 ] != ulCheckValue ) || \ - ( pulStack[ 3 ] != ulCheckValue ) ) \ - { \ - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ - } \ - } - -#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ -/*-----------------------------------------------------------*/ - -#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) ) - - #define taskCHECK_FOR_STACK_OVERFLOW() \ - { \ - int8_t *pcEndOfStack = ( int8_t * ) pxCurrentTCB->pxEndOfStack; \ - static const uint8_t ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ - tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ - tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ - tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \ - tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \ - \ - \ - pcEndOfStack -= sizeof( ucExpectedStackBytes ); \ - \ - /* Has the extremity of the task stack ever been written over? */ \ - if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \ - { \ - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \ - } \ - } - -#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */ -/*-----------------------------------------------------------*/ - -/* Remove stack overflow macro if not being used. */ -#ifndef taskCHECK_FOR_STACK_OVERFLOW - #define taskCHECK_FOR_STACK_OVERFLOW() -#endif - - - -#endif /* STACK_MACROS_H */ - diff --git a/FreeRTOS/Source/include/stream_buffer.h b/FreeRTOS/Source/include/stream_buffer.h deleted file mode 100644 index 022d5e1..0000000 --- a/FreeRTOS/Source/include/stream_buffer.h +++ /dev/null @@ -1,855 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/* - * Stream buffers are used to send a continuous stream of data from one task or - * interrupt to another. Their implementation is light weight, making them - * particularly suited for interrupt to task and core to core communication - * scenarios. - * - * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer - * implementation (so also the message buffer implementation, as message buffers - * are built on top of stream buffers) assumes there is only one task or - * interrupt that will write to the buffer (the writer), and only one task or - * interrupt that will read from the buffer (the reader). It is safe for the - * writer and reader to be different tasks or interrupts, but, unlike other - * FreeRTOS objects, it is not safe to have multiple different writers or - * multiple different readers. If there are to be multiple different writers - * then the application writer must place each call to a writing API function - * (such as xStreamBufferSend()) inside a critical section and set the send - * block time to 0. Likewise, if there are to be multiple different readers - * then the application writer must place each call to a reading API function - * (such as xStreamBufferRead()) inside a critical section section and set the - * receive block time to 0. - * - */ - -#ifndef STREAM_BUFFER_H -#define STREAM_BUFFER_H - -#if defined( __cplusplus ) -extern "C" { -#endif - -/** - * Type by which stream buffers are referenced. For example, a call to - * xStreamBufferCreate() returns an StreamBufferHandle_t variable that can - * then be used as a parameter to xStreamBufferSend(), xStreamBufferReceive(), - * etc. - */ -struct StreamBufferDef_t; -typedef struct StreamBufferDef_t * StreamBufferHandle_t; - - -/** - * message_buffer.h - * -
-StreamBufferHandle_t xStreamBufferCreate( size_t xBufferSizeBytes, size_t xTriggerLevelBytes );
-
- * - * Creates a new stream buffer using dynamically allocated memory. See - * xStreamBufferCreateStatic() for a version that uses statically allocated - * memory (memory that is allocated at compile time). - * - * configSUPPORT_DYNAMIC_ALLOCATION must be set to 1 or left undefined in - * FreeRTOSConfig.h for xStreamBufferCreate() to be available. - * - * @param xBufferSizeBytes The total number of bytes the stream buffer will be - * able to hold at any one time. - * - * @param xTriggerLevelBytes The number of bytes that must be in the stream - * buffer before a task that is blocked on the stream buffer to wait for data is - * moved out of the blocked state. For example, if a task is blocked on a read - * of an empty stream buffer that has a trigger level of 1 then the task will be - * unblocked when a single byte is written to the buffer or the task's block - * time expires. As another example, if a task is blocked on a read of an empty - * stream buffer that has a trigger level of 10 then the task will not be - * unblocked until the stream buffer contains at least 10 bytes or the task's - * block time expires. If a reading task's block time expires before the - * trigger level is reached then the task will still receive however many bytes - * are actually available. Setting a trigger level of 0 will result in a - * trigger level of 1 being used. It is not valid to specify a trigger level - * that is greater than the buffer size. - * - * @return If NULL is returned, then the stream buffer cannot be created - * because there is insufficient heap memory available for FreeRTOS to allocate - * the stream buffer data structures and storage area. A non-NULL value being - * returned indicates that the stream buffer has been created successfully - - * the returned value should be stored as the handle to the created stream - * buffer. - * - * Example use: -
-
-void vAFunction( void )
-{
-StreamBufferHandle_t xStreamBuffer;
-const size_t xStreamBufferSizeBytes = 100, xTriggerLevel = 10;
-
-    // Create a stream buffer that can hold 100 bytes.  The memory used to hold
-    // both the stream buffer structure and the data in the stream buffer is
-    // allocated dynamically.
-    xStreamBuffer = xStreamBufferCreate( xStreamBufferSizeBytes, xTriggerLevel );
-
-    if( xStreamBuffer == NULL )
-    {
-        // There was not enough heap memory space available to create the
-        // stream buffer.
-    }
-    else
-    {
-        // The stream buffer was created successfully and can now be used.
-    }
-}
-
- * \defgroup xStreamBufferCreate xStreamBufferCreate - * \ingroup StreamBufferManagement - */ -#define xStreamBufferCreate( xBufferSizeBytes, xTriggerLevelBytes ) xStreamBufferGenericCreate( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE ) - -/** - * stream_buffer.h - * -
-StreamBufferHandle_t xStreamBufferCreateStatic( size_t xBufferSizeBytes,
-                                                size_t xTriggerLevelBytes,
-                                                uint8_t *pucStreamBufferStorageArea,
-                                                StaticStreamBuffer_t *pxStaticStreamBuffer );
-
- * Creates a new stream buffer using statically allocated memory. See - * xStreamBufferCreate() for a version that uses dynamically allocated memory. - * - * configSUPPORT_STATIC_ALLOCATION must be set to 1 in FreeRTOSConfig.h for - * xStreamBufferCreateStatic() to be available. - * - * @param xBufferSizeBytes The size, in bytes, of the buffer pointed to by the - * pucStreamBufferStorageArea parameter. - * - * @param xTriggerLevelBytes The number of bytes that must be in the stream - * buffer before a task that is blocked on the stream buffer to wait for data is - * moved out of the blocked state. For example, if a task is blocked on a read - * of an empty stream buffer that has a trigger level of 1 then the task will be - * unblocked when a single byte is written to the buffer or the task's block - * time expires. As another example, if a task is blocked on a read of an empty - * stream buffer that has a trigger level of 10 then the task will not be - * unblocked until the stream buffer contains at least 10 bytes or the task's - * block time expires. If a reading task's block time expires before the - * trigger level is reached then the task will still receive however many bytes - * are actually available. Setting a trigger level of 0 will result in a - * trigger level of 1 being used. It is not valid to specify a trigger level - * that is greater than the buffer size. - * - * @param pucStreamBufferStorageArea Must point to a uint8_t array that is at - * least xBufferSizeBytes + 1 big. This is the array to which streams are - * copied when they are written to the stream buffer. - * - * @param pxStaticStreamBuffer Must point to a variable of type - * StaticStreamBuffer_t, which will be used to hold the stream buffer's data - * structure. - * - * @return If the stream buffer is created successfully then a handle to the - * created stream buffer is returned. If either pucStreamBufferStorageArea or - * pxStaticstreamBuffer are NULL then NULL is returned. - * - * Example use: -
-
-// Used to dimension the array used to hold the streams.  The available space
-// will actually be one less than this, so 999.
-#define STORAGE_SIZE_BYTES 1000
-
-// Defines the memory that will actually hold the streams within the stream
-// buffer.
-static uint8_t ucStorageBuffer[ STORAGE_SIZE_BYTES ];
-
-// The variable used to hold the stream buffer structure.
-StaticStreamBuffer_t xStreamBufferStruct;
-
-void MyFunction( void )
-{
-StreamBufferHandle_t xStreamBuffer;
-const size_t xTriggerLevel = 1;
-
-    xStreamBuffer = xStreamBufferCreateStatic( sizeof( ucBufferStorage ),
-                                               xTriggerLevel,
-                                               ucBufferStorage,
-                                               &xStreamBufferStruct );
-
-    // As neither the pucStreamBufferStorageArea or pxStaticStreamBuffer
-    // parameters were NULL, xStreamBuffer will not be NULL, and can be used to
-    // reference the created stream buffer in other stream buffer API calls.
-
-    // Other code that uses the stream buffer can go here.
-}
-
-
- * \defgroup xStreamBufferCreateStatic xStreamBufferCreateStatic - * \ingroup StreamBufferManagement - */ -#define xStreamBufferCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer ) xStreamBufferGenericCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE, pucStreamBufferStorageArea, pxStaticStreamBuffer ) - -/** - * stream_buffer.h - * -
-size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
-                          const void *pvTxData,
-                          size_t xDataLengthBytes,
-                          TickType_t xTicksToWait );
-
- * - * Sends bytes to a stream buffer. The bytes are copied into the stream buffer. - * - * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer - * implementation (so also the message buffer implementation, as message buffers - * are built on top of stream buffers) assumes there is only one task or - * interrupt that will write to the buffer (the writer), and only one task or - * interrupt that will read from the buffer (the reader). It is safe for the - * writer and reader to be different tasks or interrupts, but, unlike other - * FreeRTOS objects, it is not safe to have multiple different writers or - * multiple different readers. If there are to be multiple different writers - * then the application writer must place each call to a writing API function - * (such as xStreamBufferSend()) inside a critical section and set the send - * block time to 0. Likewise, if there are to be multiple different readers - * then the application writer must place each call to a reading API function - * (such as xStreamBufferRead()) inside a critical section and set the receive - * block time to 0. - * - * Use xStreamBufferSend() to write to a stream buffer from a task. Use - * xStreamBufferSendFromISR() to write to a stream buffer from an interrupt - * service routine (ISR). - * - * @param xStreamBuffer The handle of the stream buffer to which a stream is - * being sent. - * - * @param pvTxData A pointer to the buffer that holds the bytes to be copied - * into the stream buffer. - * - * @param xDataLengthBytes The maximum number of bytes to copy from pvTxData - * into the stream buffer. - * - * @param xTicksToWait The maximum amount of time the task should remain in the - * Blocked state to wait for enough space to become available in the stream - * buffer, should the stream buffer contain too little space to hold the - * another xDataLengthBytes bytes. The block time is specified in tick periods, - * so the absolute time it represents is dependent on the tick frequency. The - * macro pdMS_TO_TICKS() can be used to convert a time specified in milliseconds - * into a time specified in ticks. Setting xTicksToWait to portMAX_DELAY will - * cause the task to wait indefinitely (without timing out), provided - * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h. If a task times out - * before it can write all xDataLengthBytes into the buffer it will still write - * as many bytes as possible. A task does not use any CPU time when it is in - * the blocked state. - * - * @return The number of bytes written to the stream buffer. If a task times - * out before it can write all xDataLengthBytes into the buffer it will still - * write as many bytes as possible. - * - * Example use: -
-void vAFunction( StreamBufferHandle_t xStreamBuffer )
-{
-size_t xBytesSent;
-uint8_t ucArrayToSend[] = { 0, 1, 2, 3 };
-char *pcStringToSend = "String to send";
-const TickType_t x100ms = pdMS_TO_TICKS( 100 );
-
-    // Send an array to the stream buffer, blocking for a maximum of 100ms to
-    // wait for enough space to be available in the stream buffer.
-    xBytesSent = xStreamBufferSend( xStreamBuffer, ( void * ) ucArrayToSend, sizeof( ucArrayToSend ), x100ms );
-
-    if( xBytesSent != sizeof( ucArrayToSend ) )
-    {
-        // The call to xStreamBufferSend() times out before there was enough
-        // space in the buffer for the data to be written, but it did
-        // successfully write xBytesSent bytes.
-    }
-
-    // Send the string to the stream buffer.  Return immediately if there is not
-    // enough space in the buffer.
-    xBytesSent = xStreamBufferSend( xStreamBuffer, ( void * ) pcStringToSend, strlen( pcStringToSend ), 0 );
-
-    if( xBytesSent != strlen( pcStringToSend ) )
-    {
-        // The entire string could not be added to the stream buffer because
-        // there was not enough free space in the buffer, but xBytesSent bytes
-        // were sent.  Could try again to send the remaining bytes.
-    }
-}
-
- * \defgroup xStreamBufferSend xStreamBufferSend - * \ingroup StreamBufferManagement - */ -size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer, - const void *pvTxData, - size_t xDataLengthBytes, - TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,
-                                 const void *pvTxData,
-                                 size_t xDataLengthBytes,
-                                 BaseType_t *pxHigherPriorityTaskWoken );
-
- * - * Interrupt safe version of the API function that sends a stream of bytes to - * the stream buffer. - * - * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer - * implementation (so also the message buffer implementation, as message buffers - * are built on top of stream buffers) assumes there is only one task or - * interrupt that will write to the buffer (the writer), and only one task or - * interrupt that will read from the buffer (the reader). It is safe for the - * writer and reader to be different tasks or interrupts, but, unlike other - * FreeRTOS objects, it is not safe to have multiple different writers or - * multiple different readers. If there are to be multiple different writers - * then the application writer must place each call to a writing API function - * (such as xStreamBufferSend()) inside a critical section and set the send - * block time to 0. Likewise, if there are to be multiple different readers - * then the application writer must place each call to a reading API function - * (such as xStreamBufferRead()) inside a critical section and set the receive - * block time to 0. - * - * Use xStreamBufferSend() to write to a stream buffer from a task. Use - * xStreamBufferSendFromISR() to write to a stream buffer from an interrupt - * service routine (ISR). - * - * @param xStreamBuffer The handle of the stream buffer to which a stream is - * being sent. - * - * @param pvTxData A pointer to the data that is to be copied into the stream - * buffer. - * - * @param xDataLengthBytes The maximum number of bytes to copy from pvTxData - * into the stream buffer. - * - * @param pxHigherPriorityTaskWoken It is possible that a stream buffer will - * have a task blocked on it waiting for data. Calling - * xStreamBufferSendFromISR() can make data available, and so cause a task that - * was waiting for data to leave the Blocked state. If calling - * xStreamBufferSendFromISR() causes a task to leave the Blocked state, and the - * unblocked task has a priority higher than the currently executing task (the - * task that was interrupted), then, internally, xStreamBufferSendFromISR() - * will set *pxHigherPriorityTaskWoken to pdTRUE. If - * xStreamBufferSendFromISR() sets this value to pdTRUE, then normally a - * context switch should be performed before the interrupt is exited. This will - * ensure that the interrupt returns directly to the highest priority Ready - * state task. *pxHigherPriorityTaskWoken should be set to pdFALSE before it - * is passed into the function. See the example code below for an example. - * - * @return The number of bytes actually written to the stream buffer, which will - * be less than xDataLengthBytes if the stream buffer didn't have enough free - * space for all the bytes to be written. - * - * Example use: -
-// A stream buffer that has already been created.
-StreamBufferHandle_t xStreamBuffer;
-
-void vAnInterruptServiceRoutine( void )
-{
-size_t xBytesSent;
-char *pcStringToSend = "String to send";
-BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE.
-
-    // Attempt to send the string to the stream buffer.
-    xBytesSent = xStreamBufferSendFromISR( xStreamBuffer,
-                                           ( void * ) pcStringToSend,
-                                           strlen( pcStringToSend ),
-                                           &xHigherPriorityTaskWoken );
-
-    if( xBytesSent != strlen( pcStringToSend ) )
-    {
-        // There was not enough free space in the stream buffer for the entire
-        // string to be written, ut xBytesSent bytes were written.
-    }
-
-    // If xHigherPriorityTaskWoken was set to pdTRUE inside
-    // xStreamBufferSendFromISR() then a task that has a priority above the
-    // priority of the currently executing task was unblocked and a context
-    // switch should be performed to ensure the ISR returns to the unblocked
-    // task.  In most FreeRTOS ports this is done by simply passing
-    // xHigherPriorityTaskWoken into taskYIELD_FROM_ISR(), which will test the
-    // variables value, and perform the context switch if necessary.  Check the
-    // documentation for the port in use for port specific instructions.
-    taskYIELD_FROM_ISR( xHigherPriorityTaskWoken );
-}
-
- * \defgroup xStreamBufferSendFromISR xStreamBufferSendFromISR - * \ingroup StreamBufferManagement - */ -size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer, - const void *pvTxData, - size_t xDataLengthBytes, - BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,
-                             void *pvRxData,
-                             size_t xBufferLengthBytes,
-                             TickType_t xTicksToWait );
-
- * - * Receives bytes from a stream buffer. - * - * ***NOTE***: Uniquely among FreeRTOS objects, the stream buffer - * implementation (so also the message buffer implementation, as message buffers - * are built on top of stream buffers) assumes there is only one task or - * interrupt that will write to the buffer (the writer), and only one task or - * interrupt that will read from the buffer (the reader). It is safe for the - * writer and reader to be different tasks or interrupts, but, unlike other - * FreeRTOS objects, it is not safe to have multiple different writers or - * multiple different readers. If there are to be multiple different writers - * then the application writer must place each call to a writing API function - * (such as xStreamBufferSend()) inside a critical section and set the send - * block time to 0. Likewise, if there are to be multiple different readers - * then the application writer must place each call to a reading API function - * (such as xStreamBufferRead()) inside a critical section and set the receive - * block time to 0. - * - * Use xStreamBufferReceive() to read from a stream buffer from a task. Use - * xStreamBufferReceiveFromISR() to read from a stream buffer from an - * interrupt service routine (ISR). - * - * @param xStreamBuffer The handle of the stream buffer from which bytes are to - * be received. - * - * @param pvRxData A pointer to the buffer into which the received bytes will be - * copied. - * - * @param xBufferLengthBytes The length of the buffer pointed to by the - * pvRxData parameter. This sets the maximum number of bytes to receive in one - * call. xStreamBufferReceive will return as many bytes as possible up to a - * maximum set by xBufferLengthBytes. - * - * @param xTicksToWait The maximum amount of time the task should remain in the - * Blocked state to wait for data to become available if the stream buffer is - * empty. xStreamBufferReceive() will return immediately if xTicksToWait is - * zero. The block time is specified in tick periods, so the absolute time it - * represents is dependent on the tick frequency. The macro pdMS_TO_TICKS() can - * be used to convert a time specified in milliseconds into a time specified in - * ticks. Setting xTicksToWait to portMAX_DELAY will cause the task to wait - * indefinitely (without timing out), provided INCLUDE_vTaskSuspend is set to 1 - * in FreeRTOSConfig.h. A task does not use any CPU time when it is in the - * Blocked state. - * - * @return The number of bytes actually read from the stream buffer, which will - * be less than xBufferLengthBytes if the call to xStreamBufferReceive() timed - * out before xBufferLengthBytes were available. - * - * Example use: -
-void vAFunction( StreamBuffer_t xStreamBuffer )
-{
-uint8_t ucRxData[ 20 ];
-size_t xReceivedBytes;
-const TickType_t xBlockTime = pdMS_TO_TICKS( 20 );
-
-    // Receive up to another sizeof( ucRxData ) bytes from the stream buffer.
-    // Wait in the Blocked state (so not using any CPU processing time) for a
-    // maximum of 100ms for the full sizeof( ucRxData ) number of bytes to be
-    // available.
-    xReceivedBytes = xStreamBufferReceive( xStreamBuffer,
-                                           ( void * ) ucRxData,
-                                           sizeof( ucRxData ),
-                                           xBlockTime );
-
-    if( xReceivedBytes > 0 )
-    {
-        // A ucRxData contains another xRecievedBytes bytes of data, which can
-        // be processed here....
-    }
-}
-
- * \defgroup xStreamBufferReceive xStreamBufferReceive - * \ingroup StreamBufferManagement - */ -size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer, - void *pvRxData, - size_t xBufferLengthBytes, - TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-size_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer,
-                                    void *pvRxData,
-                                    size_t xBufferLengthBytes,
-                                    BaseType_t *pxHigherPriorityTaskWoken );
-
- * - * An interrupt safe version of the API function that receives bytes from a - * stream buffer. - * - * Use xStreamBufferReceive() to read bytes from a stream buffer from a task. - * Use xStreamBufferReceiveFromISR() to read bytes from a stream buffer from an - * interrupt service routine (ISR). - * - * @param xStreamBuffer The handle of the stream buffer from which a stream - * is being received. - * - * @param pvRxData A pointer to the buffer into which the received bytes are - * copied. - * - * @param xBufferLengthBytes The length of the buffer pointed to by the - * pvRxData parameter. This sets the maximum number of bytes to receive in one - * call. xStreamBufferReceive will return as many bytes as possible up to a - * maximum set by xBufferLengthBytes. - * - * @param pxHigherPriorityTaskWoken It is possible that a stream buffer will - * have a task blocked on it waiting for space to become available. Calling - * xStreamBufferReceiveFromISR() can make space available, and so cause a task - * that is waiting for space to leave the Blocked state. If calling - * xStreamBufferReceiveFromISR() causes a task to leave the Blocked state, and - * the unblocked task has a priority higher than the currently executing task - * (the task that was interrupted), then, internally, - * xStreamBufferReceiveFromISR() will set *pxHigherPriorityTaskWoken to pdTRUE. - * If xStreamBufferReceiveFromISR() sets this value to pdTRUE, then normally a - * context switch should be performed before the interrupt is exited. That will - * ensure the interrupt returns directly to the highest priority Ready state - * task. *pxHigherPriorityTaskWoken should be set to pdFALSE before it is - * passed into the function. See the code example below for an example. - * - * @return The number of bytes read from the stream buffer, if any. - * - * Example use: -
-// A stream buffer that has already been created.
-StreamBuffer_t xStreamBuffer;
-
-void vAnInterruptServiceRoutine( void )
-{
-uint8_t ucRxData[ 20 ];
-size_t xReceivedBytes;
-BaseType_t xHigherPriorityTaskWoken = pdFALSE;  // Initialised to pdFALSE.
-
-    // Receive the next stream from the stream buffer.
-    xReceivedBytes = xStreamBufferReceiveFromISR( xStreamBuffer,
-                                                  ( void * ) ucRxData,
-                                                  sizeof( ucRxData ),
-                                                  &xHigherPriorityTaskWoken );
-
-    if( xReceivedBytes > 0 )
-    {
-        // ucRxData contains xReceivedBytes read from the stream buffer.
-        // Process the stream here....
-    }
-
-    // If xHigherPriorityTaskWoken was set to pdTRUE inside
-    // xStreamBufferReceiveFromISR() then a task that has a priority above the
-    // priority of the currently executing task was unblocked and a context
-    // switch should be performed to ensure the ISR returns to the unblocked
-    // task.  In most FreeRTOS ports this is done by simply passing
-    // xHigherPriorityTaskWoken into taskYIELD_FROM_ISR(), which will test the
-    // variables value, and perform the context switch if necessary.  Check the
-    // documentation for the port in use for port specific instructions.
-    taskYIELD_FROM_ISR( xHigherPriorityTaskWoken );
-}
-
- * \defgroup xStreamBufferReceiveFromISR xStreamBufferReceiveFromISR - * \ingroup StreamBufferManagement - */ -size_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer, - void *pvRxData, - size_t xBufferLengthBytes, - BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer );
-
- * - * Deletes a stream buffer that was previously created using a call to - * xStreamBufferCreate() or xStreamBufferCreateStatic(). If the stream - * buffer was created using dynamic memory (that is, by xStreamBufferCreate()), - * then the allocated memory is freed. - * - * A stream buffer handle must not be used after the stream buffer has been - * deleted. - * - * @param xStreamBuffer The handle of the stream buffer to be deleted. - * - * \defgroup vStreamBufferDelete vStreamBufferDelete - * \ingroup StreamBufferManagement - */ -void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer );
-
- * - * Queries a stream buffer to see if it is full. A stream buffer is full if it - * does not have any free space, and therefore cannot accept any more data. - * - * @param xStreamBuffer The handle of the stream buffer being queried. - * - * @return If the stream buffer is full then pdTRUE is returned. Otherwise - * pdFALSE is returned. - * - * \defgroup xStreamBufferIsFull xStreamBufferIsFull - * \ingroup StreamBufferManagement - */ -BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer );
-
- * - * Queries a stream buffer to see if it is empty. A stream buffer is empty if - * it does not contain any data. - * - * @param xStreamBuffer The handle of the stream buffer being queried. - * - * @return If the stream buffer is empty then pdTRUE is returned. Otherwise - * pdFALSE is returned. - * - * \defgroup xStreamBufferIsEmpty xStreamBufferIsEmpty - * \ingroup StreamBufferManagement - */ -BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer );
-
- * - * Resets a stream buffer to its initial, empty, state. Any data that was in - * the stream buffer is discarded. A stream buffer can only be reset if there - * are no tasks blocked waiting to either send to or receive from the stream - * buffer. - * - * @param xStreamBuffer The handle of the stream buffer being reset. - * - * @return If the stream buffer is reset then pdPASS is returned. If there was - * a task blocked waiting to send to or read from the stream buffer then the - * stream buffer is not reset and pdFAIL is returned. - * - * \defgroup xStreamBufferReset xStreamBufferReset - * \ingroup StreamBufferManagement - */ -BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer );
-
- * - * Queries a stream buffer to see how much free space it contains, which is - * equal to the amount of data that can be sent to the stream buffer before it - * is full. - * - * @param xStreamBuffer The handle of the stream buffer being queried. - * - * @return The number of bytes that can be written to the stream buffer before - * the stream buffer would be full. - * - * \defgroup xStreamBufferSpacesAvailable xStreamBufferSpacesAvailable - * \ingroup StreamBufferManagement - */ -size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer );
-
- * - * Queries a stream buffer to see how much data it contains, which is equal to - * the number of bytes that can be read from the stream buffer before the stream - * buffer would be empty. - * - * @param xStreamBuffer The handle of the stream buffer being queried. - * - * @return The number of bytes that can be read from the stream buffer before - * the stream buffer would be empty. - * - * \defgroup xStreamBufferBytesAvailable xStreamBufferBytesAvailable - * \ingroup StreamBufferManagement - */ -size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel );
-
- * - * A stream buffer's trigger level is the number of bytes that must be in the - * stream buffer before a task that is blocked on the stream buffer to - * wait for data is moved out of the blocked state. For example, if a task is - * blocked on a read of an empty stream buffer that has a trigger level of 1 - * then the task will be unblocked when a single byte is written to the buffer - * or the task's block time expires. As another example, if a task is blocked - * on a read of an empty stream buffer that has a trigger level of 10 then the - * task will not be unblocked until the stream buffer contains at least 10 bytes - * or the task's block time expires. If a reading task's block time expires - * before the trigger level is reached then the task will still receive however - * many bytes are actually available. Setting a trigger level of 0 will result - * in a trigger level of 1 being used. It is not valid to specify a trigger - * level that is greater than the buffer size. - * - * A trigger level is set when the stream buffer is created, and can be modified - * using xStreamBufferSetTriggerLevel(). - * - * @param xStreamBuffer The handle of the stream buffer being updated. - * - * @param xTriggerLevel The new trigger level for the stream buffer. - * - * @return If xTriggerLevel was less than or equal to the stream buffer's length - * then the trigger level will be updated and pdTRUE is returned. Otherwise - * pdFALSE is returned. - * - * \defgroup xStreamBufferSetTriggerLevel xStreamBufferSetTriggerLevel - * \ingroup StreamBufferManagement - */ -BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken );
-
- * - * For advanced users only. - * - * The sbSEND_COMPLETED() macro is called from within the FreeRTOS APIs when - * data is sent to a message buffer or stream buffer. If there was a task that - * was blocked on the message or stream buffer waiting for data to arrive then - * the sbSEND_COMPLETED() macro sends a notification to the task to remove it - * from the Blocked state. xStreamBufferSendCompletedFromISR() does the same - * thing. It is provided to enable application writers to implement their own - * version of sbSEND_COMPLETED(), and MUST NOT BE USED AT ANY OTHER TIME. - * - * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for - * additional information. - * - * @param xStreamBuffer The handle of the stream buffer to which data was - * written. - * - * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be - * initialised to pdFALSE before it is passed into - * xStreamBufferSendCompletedFromISR(). If calling - * xStreamBufferSendCompletedFromISR() removes a task from the Blocked state, - * and the task has a priority above the priority of the currently running task, - * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a - * context switch should be performed before exiting the ISR. - * - * @return If a task was removed from the Blocked state then pdTRUE is returned. - * Otherwise pdFALSE is returned. - * - * \defgroup xStreamBufferSendCompletedFromISR xStreamBufferSendCompletedFromISR - * \ingroup StreamBufferManagement - */ -BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - -/** - * stream_buffer.h - * -
-BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken );
-
- * - * For advanced users only. - * - * The sbRECEIVE_COMPLETED() macro is called from within the FreeRTOS APIs when - * data is read out of a message buffer or stream buffer. If there was a task - * that was blocked on the message or stream buffer waiting for data to arrive - * then the sbRECEIVE_COMPLETED() macro sends a notification to the task to - * remove it from the Blocked state. xStreamBufferReceiveCompletedFromISR() - * does the same thing. It is provided to enable application writers to - * implement their own version of sbRECEIVE_COMPLETED(), and MUST NOT BE USED AT - * ANY OTHER TIME. - * - * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for - * additional information. - * - * @param xStreamBuffer The handle of the stream buffer from which data was - * read. - * - * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be - * initialised to pdFALSE before it is passed into - * xStreamBufferReceiveCompletedFromISR(). If calling - * xStreamBufferReceiveCompletedFromISR() removes a task from the Blocked state, - * and the task has a priority above the priority of the currently running task, - * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a - * context switch should be performed before exiting the ISR. - * - * @return If a task was removed from the Blocked state then pdTRUE is returned. - * Otherwise pdFALSE is returned. - * - * \defgroup xStreamBufferReceiveCompletedFromISR xStreamBufferReceiveCompletedFromISR - * \ingroup StreamBufferManagement - */ -BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - -/* Functions below here are not part of the public API. */ -StreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes, - size_t xTriggerLevelBytes, - BaseType_t xIsMessageBuffer ) PRIVILEGED_FUNCTION; - -StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes, - size_t xTriggerLevelBytes, - BaseType_t xIsMessageBuffer, - uint8_t * const pucStreamBufferStorageArea, - StaticStreamBuffer_t * const pxStaticStreamBuffer ) PRIVILEGED_FUNCTION; - -size_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; - -#if( configUSE_TRACE_FACILITY == 1 ) - void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer, UBaseType_t uxStreamBufferNumber ) PRIVILEGED_FUNCTION; - UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; - uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION; -#endif - -#if defined( __cplusplus ) -} -#endif - -#endif /* !defined( STREAM_BUFFER_H ) */ diff --git a/FreeRTOS/Source/include/task.h b/FreeRTOS/Source/include/task.h index 8c8653a..9881084 100644 --- a/FreeRTOS/Source/include/task.h +++ b/FreeRTOS/Source/include/task.h @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #ifndef INC_TASK_H @@ -43,37 +80,19 @@ extern "C" { * MACROS AND DEFINITIONS *----------------------------------------------------------*/ -#define tskKERNEL_VERSION_NUMBER "V10.2.0" -#define tskKERNEL_VERSION_MAJOR 10 -#define tskKERNEL_VERSION_MINOR 2 -#define tskKERNEL_VERSION_BUILD 0 - -/* MPU region parameters passed in ulParameters - * of MemoryRegion_t struct. */ -#define tskMPU_REGION_READ_ONLY ( 1UL << 0UL ) -#define tskMPU_REGION_READ_WRITE ( 1UL << 1UL ) -#define tskMPU_REGION_EXECUTE_NEVER ( 1UL << 2UL ) -#define tskMPU_REGION_NORMAL_MEMORY ( 1UL << 3UL ) -#define tskMPU_REGION_DEVICE_MEMORY ( 1UL << 4UL ) +#define tskKERNEL_VERSION_NUMBER "V7.5.2" /** * task. h * * Type by which tasks are referenced. For example, a call to xTaskCreate - * returns (via a pointer parameter) an TaskHandle_t variable that can then + * returns (via a pointer parameter) an xTaskHandle variable that can then * be used as a parameter to vTaskDelete to delete the task. * - * \defgroup TaskHandle_t TaskHandle_t + * \defgroup xTaskHandle xTaskHandle * \ingroup Tasks */ -struct tskTaskControlBlock; /* The old naming convention is used to prevent breaking kernel aware debuggers. */ -typedef struct tskTaskControlBlock* TaskHandle_t; - -/* - * Defines the prototype to which the application task hook function must - * conform. - */ -typedef BaseType_t (*TaskHookFunction_t)( void * ); +typedef void * xTaskHandle; /* Task states returned by eTaskGetState. */ typedef enum @@ -82,28 +101,17 @@ typedef enum eReady, /* The task being queried is in a read or pending ready list. */ eBlocked, /* The task being queried is in the Blocked state. */ eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */ - eDeleted, /* The task being queried has been deleted, but its TCB has not yet been freed. */ - eInvalid /* Used as an 'invalid state' value. */ + eDeleted /* The task being queried has been deleted, but its TCB has not yet been freed. */ } eTaskState; -/* Actions that can be performed when vTaskNotify() is called. */ -typedef enum -{ - eNoAction = 0, /* Notify the task without updating its notify value. */ - eSetBits, /* Set bits in the task's notification value. */ - eIncrement, /* Increment the task's notification value. */ - eSetValueWithOverwrite, /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */ - eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */ -} eNotifyAction; - /* * Used internally only. */ typedef struct xTIME_OUT { - BaseType_t xOverflowCount; - TickType_t xTimeOnEntering; -} TimeOut_t; + portBASE_TYPE xOverflowCount; + portTickType xTimeOnEntering; +} xTimeOutType; /* * Defines the memory ranges allocated to the task when an MPU is used. @@ -111,41 +119,37 @@ typedef struct xTIME_OUT typedef struct xMEMORY_REGION { void *pvBaseAddress; - uint32_t ulLengthInBytes; - uint32_t ulParameters; -} MemoryRegion_t; + unsigned long ulLengthInBytes; + unsigned long ulParameters; +} xMemoryRegion; /* * Parameters required to create an MPU protected task. */ -typedef struct xTASK_PARAMETERS +typedef struct xTASK_PARAMTERS { - TaskFunction_t pvTaskCode; - const char * const pcName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - configSTACK_DEPTH_TYPE usStackDepth; + pdTASK_CODE pvTaskCode; + const signed char * const pcName; + unsigned short usStackDepth; void *pvParameters; - UBaseType_t uxPriority; - StackType_t *puxStackBuffer; - MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ]; - #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - StaticTask_t * const pxTaskBuffer; - #endif -} TaskParameters_t; + unsigned portBASE_TYPE uxPriority; + portSTACK_TYPE *puxStackBuffer; + xMemoryRegion xRegions[ portNUM_CONFIGURABLE_REGIONS ]; +} xTaskParameters; /* Used with the uxTaskGetSystemState() function to return the state of each task in the system. */ typedef struct xTASK_STATUS { - TaskHandle_t xHandle; /* The handle of the task to which the rest of the information in the structure relates. */ - const char *pcTaskName; /* A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - UBaseType_t xTaskNumber; /* A number unique to the task. */ - eTaskState eCurrentState; /* The state in which the task existed when the structure was populated. */ - UBaseType_t uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */ - UBaseType_t uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */ - uint32_t ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */ - StackType_t *pxStackBase; /* Points to the lowest address of the task's stack area. */ - configSTACK_DEPTH_TYPE usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */ -} TaskStatus_t; + xTaskHandle xHandle; /* The handle of the task to which the rest of the information in the structure relates. */ + const signed char *pcTaskName; /* A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ + unsigned portBASE_TYPE xTaskNumber; /* A number unique to the task. */ + eTaskState eCurrentState; /* The state in which the task existed when the structure was populated. */ + unsigned portBASE_TYPE uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */ + unsigned portBASE_TYPE uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */ + unsigned long ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */ + unsigned short usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */ +} xTaskStatusType; /* Possible return values for eTaskConfirmSleepModeStatus(). */ typedef enum @@ -155,12 +159,13 @@ typedef enum eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */ } eSleepModeStatus; -/** + +/* * Defines the priority used by the idle task. This must not be modified. * * \ingroup TaskUtils */ -#define tskIDLE_PRIORITY ( ( UBaseType_t ) 0U ) +#define tskIDLE_PRIORITY ( ( unsigned portBASE_TYPE ) 0U ) /** * task. h @@ -185,7 +190,6 @@ typedef enum * \ingroup SchedulerControl */ #define taskENTER_CRITICAL() portENTER_CRITICAL() -#define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR() /** * task. h @@ -200,7 +204,7 @@ typedef enum * \ingroup SchedulerControl */ #define taskEXIT_CRITICAL() portEXIT_CRITICAL() -#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x ) + /** * task. h * @@ -221,13 +225,10 @@ typedef enum */ #define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS() -/* Definitions returned by xTaskGetSchedulerState(). taskSCHEDULER_SUSPENDED is -0 to generate more optimal code when configASSERT() is defined as the constant -is used in assert() statements. */ -#define taskSCHEDULER_SUSPENDED ( ( BaseType_t ) 0 ) -#define taskSCHEDULER_NOT_STARTED ( ( BaseType_t ) 1 ) -#define taskSCHEDULER_RUNNING ( ( BaseType_t ) 2 ) - +/* Definitions returned by xTaskGetSchedulerState(). */ +#define taskSCHEDULER_NOT_STARTED ( ( portBASE_TYPE ) 0 ) +#define taskSCHEDULER_RUNNING ( ( portBASE_TYPE ) 1 ) +#define taskSCHEDULER_SUSPENDED ( ( portBASE_TYPE ) 2 ) /*----------------------------------------------------------- * TASK CREATION API @@ -236,30 +237,17 @@ is used in assert() statements. */ /** * task. h *
- BaseType_t xTaskCreate(
-							  TaskFunction_t pvTaskCode,
+ portBASE_TYPE xTaskCreate(
+							  pdTASK_CODE pvTaskCode,
 							  const char * const pcName,
-							  configSTACK_DEPTH_TYPE usStackDepth,
+							  unsigned short usStackDepth,
 							  void *pvParameters,
-							  UBaseType_t uxPriority,
-							  TaskHandle_t *pvCreatedTask
+							  unsigned portBASE_TYPE uxPriority,
+							  xTaskHandle *pvCreatedTask
 						  );
* * Create a new task and add it to the list of tasks that are ready to run. * - * Internally, within the FreeRTOS implementation, tasks use two blocks of - * memory. The first block is used to hold the task's data structures. The - * second block is used by the task as its stack. If a task is created using - * xTaskCreate() then both blocks of memory are automatically dynamically - * allocated inside the xTaskCreate() function. (see - * http://www.freertos.org/a00111.html). If a task is created using - * xTaskCreateStatic() then the application writer must provide the required - * memory. xTaskCreateStatic() therefore allows a task to be created without - * using any dynamic memory allocation. - * - * See xTaskCreateStatic() for a version that does not use any dynamic memory - * allocation. - * * xTaskCreate() can only be used to create a task that has unrestricted * access to the entire microcontroller memory map. Systems that include MPU * support can alternatively create an MPU constrained task using @@ -269,7 +257,7 @@ is used in assert() statements. */ * must be implemented to never return (i.e. continuous loop). * * @param pcName A descriptive name for the task. This is mainly used to - * facilitate debugging. Max length defined by configMAX_TASK_NAME_LEN - default + * facilitate debugging. Max length defined by tskMAX_TASK_NAME_LEN - default * is 16. * * @param usStackDepth The size of the task stack specified as the number of @@ -290,7 +278,7 @@ is used in assert() statements. */ * can be referenced. * * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file projdefs.h + * list, otherwise an error code defined in the file errors. h * * Example usage:
@@ -306,158 +294,28 @@ is used in assert() statements. */
  // Function that creates a task.
  void vOtherFunction( void )
  {
- static uint8_t ucParameterToPass;
- TaskHandle_t xHandle = NULL;
+ static unsigned char ucParameterToPass;
+ xTaskHandle xHandle;
 
 	 // Create the task, storing the handle.  Note that the passed parameter ucParameterToPass
 	 // must exist for the lifetime of the task, so in this case is declared static.  If it was just an
 	 // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
 	 // the new task attempts to access it.
 	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
-     configASSERT( xHandle );
 
 	 // Use the handle to delete the task.
-     if( xHandle != NULL )
-     {
-	     vTaskDelete( xHandle );
-     }
+	 vTaskDelete( xHandle );
  }
    
* \defgroup xTaskCreate xTaskCreate * \ingroup Tasks */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, - const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const configSTACK_DEPTH_TYPE usStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION; -#endif +#define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) ) /** * task. h *
- TaskHandle_t xTaskCreateStatic( TaskFunction_t pvTaskCode,
-								 const char * const pcName,
-								 uint32_t ulStackDepth,
-								 void *pvParameters,
-								 UBaseType_t uxPriority,
-								 StackType_t *pxStackBuffer,
-								 StaticTask_t *pxTaskBuffer );
- * - * Create a new task and add it to the list of tasks that are ready to run. - * - * Internally, within the FreeRTOS implementation, tasks use two blocks of - * memory. The first block is used to hold the task's data structures. The - * second block is used by the task as its stack. If a task is created using - * xTaskCreate() then both blocks of memory are automatically dynamically - * allocated inside the xTaskCreate() function. (see - * http://www.freertos.org/a00111.html). If a task is created using - * xTaskCreateStatic() then the application writer must provide the required - * memory. xTaskCreateStatic() therefore allows a task to be created without - * using any dynamic memory allocation. - * - * @param pvTaskCode Pointer to the task entry function. Tasks - * must be implemented to never return (i.e. continuous loop). - * - * @param pcName A descriptive name for the task. This is mainly used to - * facilitate debugging. The maximum length of the string is defined by - * configMAX_TASK_NAME_LEN in FreeRTOSConfig.h. - * - * @param ulStackDepth The size of the task stack specified as the number of - * variables the stack can hold - not the number of bytes. For example, if - * the stack is 32-bits wide and ulStackDepth is defined as 100 then 400 bytes - * will be allocated for stack storage. - * - * @param pvParameters Pointer that will be used as the parameter for the task - * being created. - * - * @param uxPriority The priority at which the task will run. - * - * @param pxStackBuffer Must point to a StackType_t array that has at least - * ulStackDepth indexes - the array will then be used as the task's stack, - * removing the need for the stack to be allocated dynamically. - * - * @param pxTaskBuffer Must point to a variable of type StaticTask_t, which will - * then be used to hold the task's data structures, removing the need for the - * memory to be allocated dynamically. - * - * @return If neither pxStackBuffer or pxTaskBuffer are NULL, then the task will - * be created and a handle to the created task is returned. If either - * pxStackBuffer or pxTaskBuffer are NULL then the task will not be created and - * NULL is returned. - * - * Example usage: -
-
-    // Dimensions the buffer that the task being created will use as its stack.
-    // NOTE:  This is the number of words the stack will hold, not the number of
-    // bytes.  For example, if each stack item is 32-bits, and this is set to 100,
-    // then 400 bytes (100 * 32-bits) will be allocated.
-    #define STACK_SIZE 200
-
-    // Structure that will hold the TCB of the task being created.
-    StaticTask_t xTaskBuffer;
-
-    // Buffer that the task being created will use as its stack.  Note this is
-    // an array of StackType_t variables.  The size of StackType_t is dependent on
-    // the RTOS port.
-    StackType_t xStack[ STACK_SIZE ];
-
-    // Function that implements the task being created.
-    void vTaskCode( void * pvParameters )
-    {
-        // The parameter value is expected to be 1 as 1 is passed in the
-        // pvParameters value in the call to xTaskCreateStatic().
-        configASSERT( ( uint32_t ) pvParameters == 1UL );
-
-        for( ;; )
-        {
-            // Task code goes here.
-        }
-    }
-
-    // Function that creates a task.
-    void vOtherFunction( void )
-    {
-        TaskHandle_t xHandle = NULL;
-
-        // Create the task without using any dynamic memory allocation.
-        xHandle = xTaskCreateStatic(
-                      vTaskCode,       // Function that implements the task.
-                      "NAME",          // Text name for the task.
-                      STACK_SIZE,      // Stack size in words, not bytes.
-                      ( void * ) 1,    // Parameter passed into the task.
-                      tskIDLE_PRIORITY,// Priority at which the task is created.
-                      xStack,          // Array to use as the task's stack.
-                      &xTaskBuffer );  // Variable to hold the task's data structure.
-
-        // puxStackBuffer and pxTaskBuffer were not NULL, so the task will have
-        // been created, and xHandle will be the task's handle.  Use the handle
-        // to suspend the task.
-        vTaskSuspend( xHandle );
-    }
-   
- * \defgroup xTaskCreateStatic xTaskCreateStatic - * \ingroup Tasks - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode, - const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - StackType_t * const puxStackBuffer, - StaticTask_t * const pxTaskBuffer ) PRIVILEGED_FUNCTION; -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * task. h - *
- BaseType_t xTaskCreateRestricted( TaskParameters_t *pxTaskDefinition, TaskHandle_t *pxCreatedTask );
- * - * Only available when configSUPPORT_DYNAMIC_ALLOCATION is set to 1. + portBASE_TYPE xTaskCreateRestricted( xTaskParameters *pxTaskDefinition, xTaskHandle *pxCreatedTask );
* * xTaskCreateRestricted() should only be used in systems that include an MPU * implementation. @@ -466,9 +324,6 @@ is used in assert() statements. */ * The function parameters define the memory regions and associated access * permissions allocated to the task. * - * See xTaskCreateRestrictedStatic() for a version that does not use any - * dynamic memory allocation. - * * @param pxTaskDefinition Pointer to a structure that contains a member * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API * documentation) plus an optional stack buffer and the memory region @@ -478,12 +333,12 @@ is used in assert() statements. */ * can be referenced. * * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file projdefs.h + * list, otherwise an error code defined in the file errors. h * * Example usage:
-// Create an TaskParameters_t structure that defines the task to be created.
-static const TaskParameters_t xCheckTaskParameters =
+// Create an xTaskParameters structure that defines the task to be created.
+static const xTaskParameters xCheckTaskParameters =
 {
 	vATask,		// pvTaskCode - the function that implements the task.
 	"ATask",	// pcName - just a text name for the task to assist debugging.
@@ -506,7 +361,7 @@ static const TaskParameters_t xCheckTaskParameters =
 
 int main( void )
 {
-TaskHandle_t xHandle;
+xTaskHandle xHandle;
 
 	// Create a task from the const structure defined above.  The task handle
 	// is requested (the second parameter is not NULL) but in this case just for
@@ -517,109 +372,19 @@ TaskHandle_t xHandle;
 	vTaskStartScheduler();
 
 	// Will only get here if there was insufficient memory to create the idle
-	// and/or timer task.
+	// task.
 	for( ;; );
 }
    
* \defgroup xTaskCreateRestricted xTaskCreateRestricted * \ingroup Tasks */ -#if( portUSING_MPU_WRAPPERS == 1 ) - BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION; -#endif +#define xTaskCreateRestricted( x, pxCreatedTask ) xTaskGenericCreate( ((x)->pvTaskCode), ((x)->pcName), ((x)->usStackDepth), ((x)->pvParameters), ((x)->uxPriority), (pxCreatedTask), ((x)->puxStackBuffer), ((x)->xRegions) ) /** * task. h *
- BaseType_t xTaskCreateRestrictedStatic( TaskParameters_t *pxTaskDefinition, TaskHandle_t *pxCreatedTask );
- * - * Only available when configSUPPORT_STATIC_ALLOCATION is set to 1. - * - * xTaskCreateRestrictedStatic() should only be used in systems that include an - * MPU implementation. - * - * Internally, within the FreeRTOS implementation, tasks use two blocks of - * memory. The first block is used to hold the task's data structures. The - * second block is used by the task as its stack. If a task is created using - * xTaskCreateRestricted() then the stack is provided by the application writer, - * and the memory used to hold the task's data structure is automatically - * dynamically allocated inside the xTaskCreateRestricted() function. If a task - * is created using xTaskCreateRestrictedStatic() then the application writer - * must provide the memory used to hold the task's data structures too. - * xTaskCreateRestrictedStatic() therefore allows a memory protected task to be - * created without using any dynamic memory allocation. - * - * @param pxTaskDefinition Pointer to a structure that contains a member - * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API - * documentation) plus an optional stack buffer and the memory region - * definitions. If configSUPPORT_STATIC_ALLOCATION is set to 1 the structure - * contains an additional member, which is used to point to a variable of type - * StaticTask_t - which is then used to hold the task's data structure. - * - * @param pxCreatedTask Used to pass back a handle by which the created task - * can be referenced. - * - * @return pdPASS if the task was successfully created and added to a ready - * list, otherwise an error code defined in the file projdefs.h - * - * Example usage: -
-// Create an TaskParameters_t structure that defines the task to be created.
-// The StaticTask_t variable is only included in the structure when
-// configSUPPORT_STATIC_ALLOCATION is set to 1.  The PRIVILEGED_DATA macro can
-// be used to force the variable into the RTOS kernel's privileged data area.
-static PRIVILEGED_DATA StaticTask_t xTaskBuffer;
-static const TaskParameters_t xCheckTaskParameters =
-{
-	vATask,		// pvTaskCode - the function that implements the task.
-	"ATask",	// pcName - just a text name for the task to assist debugging.
-	100,		// usStackDepth	- the stack size DEFINED IN WORDS.
-	NULL,		// pvParameters - passed into the task function as the function parameters.
-	( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.
-	cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.
-
-	// xRegions - Allocate up to three separate memory regions for access by
-	// the task, with appropriate access permissions.  Different processors have
-	// different memory alignment requirements - refer to the FreeRTOS documentation
-	// for full information.
-	{
-		// Base address					Length	Parameters
-        { cReadWriteArray,				32,		portMPU_REGION_READ_WRITE },
-        { cReadOnlyArray,				32,		portMPU_REGION_READ_ONLY },
-        { cPrivilegedOnlyAccessArray,	128,	portMPU_REGION_PRIVILEGED_READ_WRITE }
-	}
-
-	&xTaskBuffer; // Holds the task's data structure.
-};
-
-int main( void )
-{
-TaskHandle_t xHandle;
-
-	// Create a task from the const structure defined above.  The task handle
-	// is requested (the second parameter is not NULL) but in this case just for
-	// demonstration purposes as its not actually used.
-	xTaskCreateRestricted( &xRegTest1Parameters, &xHandle );
-
-	// Start the scheduler.
-	vTaskStartScheduler();
-
-	// Will only get here if there was insufficient memory to create the idle
-	// and/or timer task.
-	for( ;; );
-}
-   
- * \defgroup xTaskCreateRestrictedStatic xTaskCreateRestrictedStatic - * \ingroup Tasks - */ -#if( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - BaseType_t xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION; -#endif - -/** - * task. h - *
- void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions );
+ void vTaskAllocateMPURegions( xTaskHandle xTask, const xMemoryRegion * const pxRegions );
* * Memory regions are assigned to a restricted task when the task is created by * a call to xTaskCreateRestricted(). These regions can be redefined using @@ -627,16 +392,16 @@ TaskHandle_t xHandle; * * @param xTask The handle of the task being updated. * - * @param xRegions A pointer to an MemoryRegion_t structure that contains the + * @param xRegions A pointer to an xMemoryRegion structure that contains the * new memory region definitions. * * Example usage:
-// Define an array of MemoryRegion_t structures that configures an MPU region
+// Define an array of xMemoryRegion structures that configures an MPU region
 // allowing read/write access for 1024 bytes starting at the beginning of the
 // ucOneKByte array.  The other two of the maximum 3 definable regions are
 // unused so set to zero.
-static const MemoryRegion_t xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =
+static const xMemoryRegion xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =
 {
 	// Base address		Length		Parameters
 	{ ucOneKByte,		1024,		portMPU_REGION_READ_WRITE },
@@ -662,16 +427,16 @@ void vATask( void *pvParameters )
  * \defgroup xTaskCreateRestricted xTaskCreateRestricted
  * \ingroup Tasks
  */
-void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION;
+void vTaskAllocateMPURegions( xTaskHandle xTask, const xMemoryRegion * const pxRegions ) PRIVILEGED_FUNCTION;
 
 /**
  * task. h
- * 
void vTaskDelete( TaskHandle_t xTask );
+ *
void vTaskDelete( xTaskHandle xTask );
* * INCLUDE_vTaskDelete must be defined as 1 for this function to be available. * See the configuration section for more information. * - * Remove a task from the RTOS real time kernel's management. The task being + * Remove a task from the RTOS real time kernels management. The task being * deleted will be removed from all ready, blocked, suspended and event lists. * * NOTE: The idle task is responsible for freeing the kernel allocated @@ -691,7 +456,7 @@ void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const p
  void vOtherFunction( void )
  {
- TaskHandle_t xHandle;
+ xTaskHandle xHandle;
 
 	 // Create the task, storing the handle.
 	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
@@ -703,7 +468,7 @@ void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const p
  * \defgroup vTaskDelete vTaskDelete
  * \ingroup Tasks
  */
-void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION;
+void vTaskDelete( xTaskHandle xTaskToDelete ) PRIVILEGED_FUNCTION;
 
 /*-----------------------------------------------------------
  * TASK CONTROL API
@@ -711,11 +476,11 @@ void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION;
 
 /**
  * task. h
- * 
void vTaskDelay( const TickType_t xTicksToDelay );
+ *
void vTaskDelay( portTickType xTicksToDelay );
* * Delay a task for a given number of ticks. The actual time that the * task remains blocked depends on the tick rate. The constant - * portTICK_PERIOD_MS can be used to calculate real time from the tick + * portTICK_RATE_MS can be used to calculate real time from the tick * rate - with the resolution of one tick period. * * INCLUDE_vTaskDelay must be defined as 1 for this function to be available. @@ -726,7 +491,7 @@ void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION; * the time at which vTaskDelay() is called. For example, specifying a block * period of 100 ticks will cause the task to unblock 100 ticks after * vTaskDelay() is called. vTaskDelay() does not therefore provide a good method - * of controlling the frequency of a periodic task as the path taken through the + * of controlling the frequency of a cyclical task as the path taken through the * code, as well as other task and interrupt activity, will effect the frequency * at which vTaskDelay() gets called and therefore the time at which the task * next executes. See vTaskDelayUntil() for an alternative API function designed @@ -739,10 +504,12 @@ void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION; * * Example usage: + void vTaskFunction( void * pvParameters ) + { void vTaskFunction( void * pvParameters ) { // Block for 500ms. - const TickType_t xDelay = 500 / portTICK_PERIOD_MS; + const portTickType xDelay = 500 / portTICK_RATE_MS; for( ;; ) { @@ -755,16 +522,16 @@ void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION; * \defgroup vTaskDelay vTaskDelay * \ingroup TaskCtrl */ -void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; +void vTaskDelay( portTickType xTicksToDelay ) PRIVILEGED_FUNCTION; /** * task. h - *
void vTaskDelayUntil( TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement );
+ *
void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickType xTimeIncrement );
* * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. * See the configuration section for more information. * - * Delay a task until a specified time. This function can be used by periodic + * Delay a task until a specified time. This function can be used by cyclical * tasks to ensure a constant execution frequency. * * This function differs from vTaskDelay () in one important aspect: vTaskDelay () will @@ -779,7 +546,7 @@ void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; * is called, vTaskDelayUntil () specifies the absolute (exact) time at which it wishes to * unblock. * - * The constant portTICK_PERIOD_MS can be used to calculate real time from the tick + * The constant portTICK_RATE_MS can be used to calculate real time from the tick * rate - with the resolution of one tick period. * * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the @@ -797,8 +564,8 @@ void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; // Perform an action every 10 ticks. void vTaskFunction( void * pvParameters ) { - TickType_t xLastWakeTime; - const TickType_t xFrequency = 10; + portTickType xLastWakeTime; + const portTickType xFrequency = 10; // Initialise the xLastWakeTime variable with the current time. xLastWakeTime = xTaskGetTickCount (); @@ -814,38 +581,13 @@ void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION; * \defgroup vTaskDelayUntil vTaskDelayUntil * \ingroup TaskCtrl */ -void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) PRIVILEGED_FUNCTION; +void vTaskDelayUntil( portTickType * const pxPreviousWakeTime, portTickType xTimeIncrement ) PRIVILEGED_FUNCTION; /** * task. h - *
BaseType_t xTaskAbortDelay( TaskHandle_t xTask );
+ *
unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle xTask );
* - * INCLUDE_xTaskAbortDelay must be defined as 1 in FreeRTOSConfig.h for this - * function to be available. - * - * A task will enter the Blocked state when it is waiting for an event. The - * event it is waiting for can be a temporal event (waiting for a time), such - * as when vTaskDelay() is called, or an event on an object, such as when - * xQueueReceive() or ulTaskNotifyTake() is called. If the handle of a task - * that is in the Blocked state is used in a call to xTaskAbortDelay() then the - * task will leave the Blocked state, and return from whichever function call - * placed the task into the Blocked state. - * - * @param xTask The handle of the task to remove from the Blocked state. - * - * @return If the task referenced by xTask was not in the Blocked state then - * pdFAIL is returned. Otherwise pdPASS is returned. - * - * \defgroup xTaskAbortDelay xTaskAbortDelay - * \ingroup TaskCtrl - */ -BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );
- * - * INCLUDE_uxTaskPriorityGet must be defined as 1 for this function to be available. + * INCLUDE_xTaskPriorityGet must be defined as 1 for this function to be available. * See the configuration section for more information. * * Obtain the priority of any task. @@ -859,7 +601,7 @@ BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
  void vAFunction( void )
  {
- TaskHandle_t xHandle;
+ xTaskHandle xHandle;
 
 	 // Create a task, storing the handle.
 	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
@@ -886,19 +628,11 @@ BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
  * \defgroup uxTaskPriorityGet uxTaskPriorityGet
  * \ingroup TaskCtrl
  */
-UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
+unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
 
 /**
  * task. h
- * 
UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask );
- * - * A version of uxTaskPriorityGet() that can be used from an ISR. - */ -UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
eTaskState eTaskGetState( TaskHandle_t xTask );
+ *
eTaskState eTaskGetState( xTaskHandle xTask );
* * INCLUDE_eTaskGetState must be defined as 1 for this function to be available. * See the configuration section for more information. @@ -912,67 +646,11 @@ UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNC * state of the task might change between the function being called, and the * functions return value being tested by the calling task. */ -eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; +eTaskState eTaskGetState( xTaskHandle xTask ) PRIVILEGED_FUNCTION; /** * task. h - *
void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState );
- * - * configUSE_TRACE_FACILITY must be defined as 1 for this function to be - * available. See the configuration section for more information. - * - * Populates a TaskStatus_t structure with information about a task. - * - * @param xTask Handle of the task being queried. If xTask is NULL then - * information will be returned about the calling task. - * - * @param pxTaskStatus A pointer to the TaskStatus_t structure that will be - * filled with information about the task referenced by the handle passed using - * the xTask parameter. - * - * @xGetFreeStackSpace The TaskStatus_t structure contains a member to report - * the stack high water mark of the task being queried. Calculating the stack - * high water mark takes a relatively long time, and can make the system - * temporarily unresponsive - so the xGetFreeStackSpace parameter is provided to - * allow the high water mark checking to be skipped. The high watermark value - * will only be written to the TaskStatus_t structure if xGetFreeStackSpace is - * not set to pdFALSE; - * - * @param eState The TaskStatus_t structure contains a member to report the - * state of the task being queried. Obtaining the task state is not as fast as - * a simple assignment - so the eState parameter is provided to allow the state - * information to be omitted from the TaskStatus_t structure. To obtain state - * information then set eState to eInvalid - otherwise the value passed in - * eState will be reported as the task state in the TaskStatus_t structure. - * - * Example usage: -
- void vAFunction( void )
- {
- TaskHandle_t xHandle;
- TaskStatus_t xTaskDetails;
-
-    // Obtain the handle of a task from its name.
-    xHandle = xTaskGetHandle( "Task_Name" );
-
-    // Check the handle is not NULL.
-    configASSERT( xHandle );
-
-    // Use the handle to obtain further information about the task.
-    vTaskGetInfo( xHandle,
-                  &xTaskDetails,
-                  pdTRUE, // Include the high water mark in xTaskDetails.
-                  eInvalid ); // Include the task state in xTaskDetails.
- }
-   
- * \defgroup vTaskGetInfo vTaskGetInfo - * \ingroup TaskCtrl - */ -void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );
+ *
void vTaskPrioritySet( xTaskHandle xTask, unsigned portBASE_TYPE uxNewPriority );
* * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available. * See the configuration section for more information. @@ -991,7 +669,7 @@ void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xG
  void vAFunction( void )
  {
- TaskHandle_t xHandle;
+ xTaskHandle xHandle;
 
 	 // Create a task, storing the handle.
 	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
@@ -1010,11 +688,11 @@ void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xG
  * \defgroup vTaskPrioritySet vTaskPrioritySet
  * \ingroup TaskCtrl
  */
-void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) PRIVILEGED_FUNCTION;
+void vTaskPrioritySet( xTaskHandle xTask, unsigned portBASE_TYPE uxNewPriority ) PRIVILEGED_FUNCTION;
 
 /**
  * task. h
- * 
void vTaskSuspend( TaskHandle_t xTaskToSuspend );
+ *
void vTaskSuspend( xTaskHandle xTaskToSuspend );
* * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. * See the configuration section for more information. @@ -1033,7 +711,7 @@ void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) PRIVILEGE
  void vAFunction( void )
  {
- TaskHandle_t xHandle;
+ xTaskHandle xHandle;
 
 	 // Create a task, storing the handle.
 	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
@@ -1061,18 +739,18 @@ void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) PRIVILEGE
  * \defgroup vTaskSuspend vTaskSuspend
  * \ingroup TaskCtrl
  */
-void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION;
+void vTaskSuspend( xTaskHandle xTaskToSuspend ) PRIVILEGED_FUNCTION;
 
 /**
  * task. h
- * 
void vTaskResume( TaskHandle_t xTaskToResume );
+ *
void vTaskResume( xTaskHandle xTaskToResume );
* * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. * See the configuration section for more information. * * Resumes a suspended task. * - * A task that has been suspended by one or more calls to vTaskSuspend () + * A task that has been suspended by one of more calls to vTaskSuspend () * will be made available for running again by a single call to * vTaskResume (). * @@ -1082,7 +760,7 @@ void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION;
  void vAFunction( void )
  {
- TaskHandle_t xHandle;
+ xTaskHandle xHandle;
 
 	 // Create a task, storing the handle.
 	 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
@@ -1104,42 +782,33 @@ void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION;
 	 vTaskResume( xHandle );
 
 	 // The created task will once again get microcontroller processing
-	 // time in accordance with its priority within the system.
+	 // time in accordance with it priority within the system.
  }
    
* \defgroup vTaskResume vTaskResume * \ingroup TaskCtrl */ -void vTaskResume( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; +void vTaskResume( xTaskHandle xTaskToResume ) PRIVILEGED_FUNCTION; /** * task. h - *
void xTaskResumeFromISR( TaskHandle_t xTaskToResume );
+ *
void xTaskResumeFromISR( xTaskHandle xTaskToResume );
* * INCLUDE_xTaskResumeFromISR must be defined as 1 for this function to be * available. See the configuration section for more information. * * An implementation of vTaskResume() that can be called from within an ISR. * - * A task that has been suspended by one or more calls to vTaskSuspend () + * A task that has been suspended by one of more calls to vTaskSuspend () * will be made available for running again by a single call to * xTaskResumeFromISR (). * - * xTaskResumeFromISR() should not be used to synchronise a task with an - * interrupt if there is a chance that the interrupt could arrive prior to the - * task being suspended - as this can lead to interrupts being missed. Use of a - * semaphore as a synchronisation mechanism would avoid this eventuality. - * * @param xTaskToResume Handle to the task being readied. * - * @return pdTRUE if resuming the task should result in a context switch, - * otherwise pdFALSE. This is used by the ISR to determine if a context switch - * may be required following the ISR. - * * \defgroup vTaskResumeFromISR vTaskResumeFromISR * \ingroup TaskCtrl */ -BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; +portBASE_TYPE xTaskResumeFromISR( xTaskHandle xTaskToResume ) PRIVILEGED_FUNCTION; /*----------------------------------------------------------- * SCHEDULER CONTROL @@ -1150,7 +819,12 @@ BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION; *
void vTaskStartScheduler( void );
* * Starts the real time kernel tick processing. After calling the kernel - * has control over which tasks are executed and when. + * has control over which tasks are executed and when. This function + * does not return until an executing task calls vTaskEndScheduler (). + * + * At least one task should be created via a call to xTaskCreate () + * before calling vTaskStartScheduler (). The idle task is created + * automatically when the first application task is created. * * See the demo application file main.c for an example of creating * tasks and starting the kernel. @@ -1178,9 +852,6 @@ void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION; * task. h *
void vTaskEndScheduler( void );
* - * NOTE: At the time of writing only the x86 real mode port, which runs on a PC - * in place of DOS, implements this function. - * * Stops the real time kernel tick. All created tasks will be automatically * deleted and multitasking (either preemptive or cooperative) will * stop. Execution then resumes from the point where vTaskStartScheduler () @@ -1234,8 +905,8 @@ void vTaskEndScheduler( void ) PRIVILEGED_FUNCTION; * task. h *
void vTaskSuspendAll( void );
* - * Suspends the scheduler without disabling interrupts. Context switches will - * not occur while the scheduler is suspended. + * Suspends all real time kernel activity while keeping interrupts (including the + * kernel tick) enabled. * * After calling vTaskSuspendAll () the calling task will continue to execute * without risk of being swapped out until a call to xTaskResumeAll () has been @@ -1283,13 +954,11 @@ void vTaskSuspendAll( void ) PRIVILEGED_FUNCTION; /** * task. h - *
BaseType_t xTaskResumeAll( void );
+ *
char xTaskResumeAll( void );
* - * Resumes scheduler activity after it was suspended by a call to - * vTaskSuspendAll(). - * - * xTaskResumeAll() only resumes the scheduler. It does not unsuspend tasks - * that were previously suspended by a call to vTaskSuspend(). + * Resumes real time kernel activity following a call to vTaskSuspendAll (). + * After a call to vTaskSuspendAll () the kernel will take control of which + * task is executing at any time. * * @return If resuming the scheduler caused a context switch then pdTRUE is * returned, otherwise pdFALSE is returned. @@ -1333,7 +1002,18 @@ void vTaskSuspendAll( void ) PRIVILEGED_FUNCTION; * \defgroup xTaskResumeAll xTaskResumeAll * \ingroup SchedulerControl */ -BaseType_t xTaskResumeAll( void ) PRIVILEGED_FUNCTION; +signed portBASE_TYPE xTaskResumeAll( void ) PRIVILEGED_FUNCTION; + +/** + * task. h + *
signed portBASE_TYPE xTaskIsTaskSuspended( const xTaskHandle xTask );
+ * + * Utility task that simply returns pdTRUE if the task referenced by xTask is + * currently in the Suspended state, or pdFALSE if the task referenced by xTask + * is in any other state. + * + */ +signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask ) PRIVILEGED_FUNCTION; /*----------------------------------------------------------- * TASK UTILITIES @@ -1341,34 +1021,34 @@ BaseType_t xTaskResumeAll( void ) PRIVILEGED_FUNCTION; /** * task. h - *
TickType_t xTaskGetTickCount( void );
+ *
portTickType xTaskGetTickCount( void );
* * @return The count of ticks since vTaskStartScheduler was called. * * \defgroup xTaskGetTickCount xTaskGetTickCount * \ingroup TaskUtils */ -TickType_t xTaskGetTickCount( void ) PRIVILEGED_FUNCTION; +portTickType xTaskGetTickCount( void ) PRIVILEGED_FUNCTION; /** * task. h - *
TickType_t xTaskGetTickCountFromISR( void );
+ *
portTickType xTaskGetTickCountFromISR( void );
* * @return The count of ticks since vTaskStartScheduler was called. * * This is a version of xTaskGetTickCount() that is safe to be called from an - * ISR - provided that TickType_t is the natural word size of the + * ISR - provided that portTickType is the natural word size of the * microcontroller being used or interrupt nesting is either not supported or * not being used. * - * \defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR + * \defgroup xTaskGetTickCount xTaskGetTickCount * \ingroup TaskUtils */ -TickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION; +portTickType xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION; /** * task. h - *
uint16_t uxTaskGetNumberOfTasks( void );
+ *
unsigned short uxTaskGetNumberOfTasks( void );
* * @return The number of tasks that the real time kernel is currently managing. * This includes all ready, blocked and suspended tasks. A task that @@ -1378,40 +1058,25 @@ TickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION; * \defgroup uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks * \ingroup TaskUtils */ -UBaseType_t uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION; +unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION; /** * task. h - *
char *pcTaskGetName( TaskHandle_t xTaskToQuery );
+ *
signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery );
* * @return The text (human readable) name of the task referenced by the handle - * xTaskToQuery. A task can query its own name by either passing in its own - * handle, or by setting xTaskToQuery to NULL. + * xTaskToQueury. A task can query its own name by either passing in its own + * handle, or by setting xTaskToQuery to NULL. INCLUDE_pcTaskGetTaskName must be + * set to 1 in FreeRTOSConfig.h for pcTaskGetTaskName() to be available. * - * \defgroup pcTaskGetName pcTaskGetName + * \defgroup pcTaskGetTaskName pcTaskGetTaskName * \ingroup TaskUtils */ -char *pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/** - * task. h - *
TaskHandle_t xTaskGetHandle( const char *pcNameToQuery );
- * - * NOTE: This function takes a relatively long time to complete and should be - * used sparingly. - * - * @return The handle of the task that has the human readable name pcNameToQuery. - * NULL is returned if no matching name is found. INCLUDE_xTaskGetHandle - * must be set to 1 in FreeRTOSConfig.h for pcTaskGetHandle() to be available. - * - * \defgroup pcTaskGetHandle pcTaskGetHandle - * \ingroup TaskUtils - */ -TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ +signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery ); /** * task.h - *
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );
+ *
unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask );
* * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for * this function to be available. @@ -1421,50 +1086,16 @@ TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) PRIVILEGED_FUNCTION; /* * a value of 1 means 4 bytes) since the task started. The smaller the returned * number the closer the task has come to overflowing its stack. * - * uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the - * same except for their return type. Using configSTACK_DEPTH_TYPE allows the - * user to determine the return type. It gets around the problem of the value - * overflowing on 8-bit types without breaking backward compatibility for - * applications that expect an 8-bit return type. - * * @param xTask Handle of the task associated with the stack to be checked. * Set xTask to NULL to check the stack of the calling task. * - * @return The smallest amount of free stack space there has been (in words, so - * actual spaces on the stack rather than bytes) since the task referenced by - * xTask was created. + * @return The smallest amount of free stack space there has been (in bytes) + * since the task referenced by xTask was created. */ -UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; +unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask ) PRIVILEGED_FUNCTION; -/** - * task.h - *
configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask );
- * - * INCLUDE_uxTaskGetStackHighWaterMark2 must be set to 1 in FreeRTOSConfig.h for - * this function to be available. - * - * Returns the high water mark of the stack associated with xTask. That is, - * the minimum free stack space there has been (in words, so on a 32 bit machine - * a value of 1 means 4 bytes) since the task started. The smaller the returned - * number the closer the task has come to overflowing its stack. - * - * uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the - * same except for their return type. Using configSTACK_DEPTH_TYPE allows the - * user to determine the return type. It gets around the problem of the value - * overflowing on 8-bit types without breaking backward compatibility for - * applications that expect an 8-bit return type. - * - * @param xTask Handle of the task associated with the stack to be checked. - * Set xTask to NULL to check the stack of the calling task. - * - * @return The smallest amount of free stack space there has been (in words, so - * actual spaces on the stack rather than bytes) since the task referenced by - * xTask was created. - */ -configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -/* When using trace macros it is sometimes necessary to include task.h before -FreeRTOS.h. When this is done TaskHookFunction_t will not yet have been defined, +/* When using trace macros it is sometimes necessary to include tasks.h before +FreeRTOS.h. When this is done pdTASK_HOOK_CODE will not yet have been defined, so the following two prototypes will cause a compilation error. This can be fixed by simply guarding against the inclusion of these two prototypes unless they are explicitly required by the configUSE_APPLICATION_TASK_TAG configuration @@ -1473,59 +1104,35 @@ constant. */ #if configUSE_APPLICATION_TASK_TAG == 1 /** * task.h - *
void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );
+ *
void vTaskSetApplicationTaskTag( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction );
* * Sets pxHookFunction to be the task hook function used by the task xTask. * Passing xTask as NULL has the effect of setting the calling tasks hook * function. */ - void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) PRIVILEGED_FUNCTION; + void vTaskSetApplicationTaskTag( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction ) PRIVILEGED_FUNCTION; /** * task.h - *
void xTaskGetApplicationTaskTag( TaskHandle_t xTask );
+ *
void xTaskGetApplicationTaskTag( xTaskHandle xTask );
* - * Returns the pxHookFunction value assigned to the task xTask. Do not - * call from an interrupt service routine - call - * xTaskGetApplicationTaskTagFromISR() instead. + * Returns the pxHookFunction value assigned to the task xTask. */ - TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - - /** - * task.h - *
void xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask );
- * - * Returns the pxHookFunction value assigned to the task xTask. Can - * be called from an interrupt service routine. - */ - TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; + pdTASK_HOOK_CODE xTaskGetApplicationTaskTag( xTaskHandle xTask ) PRIVILEGED_FUNCTION; #endif /* configUSE_APPLICATION_TASK_TAG ==1 */ #endif /* ifdef configUSE_APPLICATION_TASK_TAG */ -#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) - - /* Each task contains an array of pointers that is dimensioned by the - configNUM_THREAD_LOCAL_STORAGE_POINTERS setting in FreeRTOSConfig.h. The - kernel does not use the pointers itself, so the application writer can use - the pointers for any purpose they wish. The following two functions are - used to set and query a pointer respectively. */ - void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) PRIVILEGED_FUNCTION; - void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) PRIVILEGED_FUNCTION; - -#endif - /** * task.h - *
BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );
+ *
portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction );
* * Calls the hook function associated with xTask. Passing xTask as NULL has * the effect of calling the Running tasks (the calling task) hook function. * * pvParameter is passed to the hook function for the task to interpret as it - * wants. The return value is the value returned by the task hook function - * registered by the user. + * wants. */ -BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) PRIVILEGED_FUNCTION; +portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, void *pvParameter ) PRIVILEGED_FUNCTION; /** * xTaskGetIdleTaskHandle() is only available if @@ -1534,29 +1141,29 @@ BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) * Simply returns the handle of the idle task. It is not valid to call * xTaskGetIdleTaskHandle() before the scheduler has been started. */ -TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION; +xTaskHandle xTaskGetIdleTaskHandle( void ); /** - * configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for + * configUSE_TRACE_FACILITY must bet defined as 1 in FreeRTOSConfig.h for * uxTaskGetSystemState() to be available. * - * uxTaskGetSystemState() populates an TaskStatus_t structure for each task in - * the system. TaskStatus_t structures contain, among other things, members + * uxTaskGetSystemState() populates an xTaskStatusType structure for each task in + * the system. xTaskStatusType structures contain, among other things, members * for the task handle, task name, task priority, task state, and total amount - * of run time consumed by the task. See the TaskStatus_t structure + * of run time consumed by the task. See the xTaskStatusType structure * definition in this file for the full member list. * * NOTE: This function is intended for debugging use only as its use results in * the scheduler remaining suspended for an extended period. * - * @param pxTaskStatusArray A pointer to an array of TaskStatus_t structures. - * The array must contain at least one TaskStatus_t structure for each task - * that is under the control of the RTOS. The number of tasks under the control + * @param pxTaskStatusArray A pointer to an array of xTaskStatusType structures. + * The array must contain at least one xTaskStatusType structure for each task + * that is under the control of the RTOS. The number of tasks under the control * of the RTOS can be determined using the uxTaskGetNumberOfTasks() API function. * * @param uxArraySize The size of the array pointed to by the pxTaskStatusArray * parameter. The size is specified as the number of indexes in the array, or - * the number of TaskStatus_t structures contained in the array, not by the + * the number of xTaskStatusType structures contained in the array, not by the * number of bytes in the array. * * @param pulTotalRunTime If configGENERATE_RUN_TIME_STATS is set to 1 in @@ -1565,7 +1172,7 @@ TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION; * http://www.freertos.org/rtos-run-time-stats.html) since the target booted. * pulTotalRunTime can be set to NULL to omit the total run time information. * - * @return The number of TaskStatus_t structures that were populated by + * @return The number of xTaskStatusType structures that were populated by * uxTaskGetSystemState(). This should equal the number returned by the * uxTaskGetNumberOfTasks() API function, but will be zero if the value passed * in the uxArraySize parameter was too small. @@ -1575,22 +1182,22 @@ TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION; // This example demonstrates how a human readable table of run time stats // information is generated from raw data provided by uxTaskGetSystemState(). // The human readable table is written to pcWriteBuffer - void vTaskGetRunTimeStats( char *pcWriteBuffer ) + void vTaskGetRunTimeStats( signed char *pcWriteBuffer ) { - TaskStatus_t *pxTaskStatusArray; - volatile UBaseType_t uxArraySize, x; - uint32_t ulTotalRunTime, ulStatsAsPercentage; + xTaskStatusType *pxTaskStatusArray; + volatile unsigned portBASE_TYPE uxArraySize, x; + unsigned long ulTotalRunTime, ulStatsAsPercentage; // Make sure the write buffer does not contain a string. *pcWriteBuffer = 0x00; // Take a snapshot of the number of tasks in case it changes while this // function is executing. - uxArraySize = uxTaskGetNumberOfTasks(); + uxArraySize = uxCurrentNumberOfTasks(); - // Allocate a TaskStatus_t structure for each task. An array could be + // Allocate a xTaskStatusType structure for each task. An array could be // allocated statically at compile time. - pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( TaskStatus_t ) ); + pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( xTaskStatusType ) ); if( pxTaskStatusArray != NULL ) { @@ -1614,13 +1221,13 @@ TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION; if( ulStatsAsPercentage > 0UL ) { - sprintf( pcWriteBuffer, "%s\t\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage ); + sprintf( ( char * ) pcWriteBuffer, ( char * ) "%s\t\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage ); } else { // If the percentage is zero here then the task has // consumed less than 1% of the total run time. - sprintf( pcWriteBuffer, "%s\t\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter ); + sprintf( ( char * ) pcWriteBuffer, ( char * ) "%s\t\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter ); } pcWriteBuffer += strlen( ( char * ) pcWriteBuffer ); @@ -1633,7 +1240,7 @@ TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION; }
*/ -UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) PRIVILEGED_FUNCTION; +unsigned portBASE_TYPE uxTaskGetSystemState( xTaskStatusType *pxTaskStatusArray, unsigned portBASE_TYPE uxArraySize, unsigned long *pulTotalRunTime ); /** * task. h @@ -1673,14 +1280,14 @@ UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const * call to vTaskList(). * * @param pcWriteBuffer A buffer into which the above mentioned details - * will be written, in ASCII form. This buffer is assumed to be large + * will be written, in ascii form. This buffer is assumed to be large * enough to contain the generated report. Approximately 40 bytes per * task should be sufficient. * * \defgroup vTaskList vTaskList * \ingroup TaskUtils */ -void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ +void vTaskList( signed char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /** * task. h @@ -1689,7 +1296,7 @@ void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unquali * configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS * must both be defined as 1 for this function to be available. The application * must also then provide definitions for - * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE() + * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE * to configure a peripheral timer/counter and return the timers current count * value respectively. The counter should be at least 10 times the frequency of * the tick count. @@ -1727,479 +1334,14 @@ void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unquali * vTaskGetRunTimeStats(). * * @param pcWriteBuffer A buffer into which the execution times will be - * written, in ASCII form. This buffer is assumed to be large enough to + * written, in ascii form. This buffer is assumed to be large enough to * contain the generated report. Approximately 40 bytes per task should * be sufficient. * * \defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats * \ingroup TaskUtils */ -void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/** -* task. h -*
TickType_t xTaskGetIdleRunTimeCounter( void );
-* -* configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS -* must both be defined as 1 for this function to be available. The application -* must also then provide definitions for -* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE() -* to configure a peripheral timer/counter and return the timers current count -* value respectively. The counter should be at least 10 times the frequency of -* the tick count. -* -* Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total -* accumulated execution time being stored for each task. The resolution -* of the accumulated time value depends on the frequency of the timer -* configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro. -* While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total -* execution time of each task into a buffer, xTaskGetIdleRunTimeCounter() -* returns the total execution time of just the idle task. -* -* @return The total run time of the idle task. This is the amount of time the -* idle task has actually been executing. The unit of time is dependent on the -* frequency configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and -* portGET_RUN_TIME_COUNTER_VALUE() macros. -* -* \defgroup xTaskGetIdleRunTimeCounter xTaskGetIdleRunTimeCounter -* \ingroup TaskUtils -*/ -TickType_t xTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @param ulValue Data that can be sent with the notification. How the data is - * used depends on the value of the eAction parameter. - * - * @param eAction Specifies how the notification updates the task's notification - * value, if at all. Valid values for eAction are as follows: - * - * eSetBits - - * The task's notification value is bitwise ORed with ulValue. xTaskNofify() - * always returns pdPASS in this case. - * - * eIncrement - - * The task's notification value is incremented. ulValue is not used and - * xTaskNotify() always returns pdPASS in this case. - * - * eSetValueWithOverwrite - - * The task's notification value is set to the value of ulValue, even if the - * task being notified had not yet processed the previous notification (the - * task already had a notification pending). xTaskNotify() always returns - * pdPASS in this case. - * - * eSetValueWithoutOverwrite - - * If the task being notified did not already have a notification pending then - * the task's notification value is set to ulValue and xTaskNotify() will - * return pdPASS. If the task being notified already had a notification - * pending then no action is performed and pdFAIL is returned. - * - * eNoAction - - * The task receives a notification without its notification value being - * updated. ulValue is not used and xTaskNotify() always returns pdPASS in - * this case. - * - * pulPreviousNotificationValue - - * Can be used to pass out the subject task's notification value before any - * bits are modified by the notify function. - * - * @return Dependent on the value of eAction. See the description of the - * eAction parameter. - * - * \defgroup xTaskNotify xTaskNotify - * \ingroup TaskNotifications - */ -BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) PRIVILEGED_FUNCTION; -#define xTaskNotify( xTaskToNotify, ulValue, eAction ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL ) -#define xTaskNotifyAndQuery( xTaskToNotify, ulValue, eAction, pulPreviousNotifyValue ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotifyValue ) ) - -/** - * task. h - *
BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * A version of xTaskNotify() that can be used from an interrupt service routine - * (ISR). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @param ulValue Data that can be sent with the notification. How the data is - * used depends on the value of the eAction parameter. - * - * @param eAction Specifies how the notification updates the task's notification - * value, if at all. Valid values for eAction are as follows: - * - * eSetBits - - * The task's notification value is bitwise ORed with ulValue. xTaskNofify() - * always returns pdPASS in this case. - * - * eIncrement - - * The task's notification value is incremented. ulValue is not used and - * xTaskNotify() always returns pdPASS in this case. - * - * eSetValueWithOverwrite - - * The task's notification value is set to the value of ulValue, even if the - * task being notified had not yet processed the previous notification (the - * task already had a notification pending). xTaskNotify() always returns - * pdPASS in this case. - * - * eSetValueWithoutOverwrite - - * If the task being notified did not already have a notification pending then - * the task's notification value is set to ulValue and xTaskNotify() will - * return pdPASS. If the task being notified already had a notification - * pending then no action is performed and pdFAIL is returned. - * - * eNoAction - - * The task receives a notification without its notification value being - * updated. ulValue is not used and xTaskNotify() always returns pdPASS in - * this case. - * - * @param pxHigherPriorityTaskWoken xTaskNotifyFromISR() will set - * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the - * task to which the notification was sent to leave the Blocked state, and the - * unblocked task has a priority higher than the currently running task. If - * xTaskNotifyFromISR() sets this value to pdTRUE then a context switch should - * be requested before the interrupt is exited. How a context switch is - * requested from an ISR is dependent on the port - see the documentation page - * for the port in use. - * - * @return Dependent on the value of eAction. See the description of the - * eAction parameter. - * - * \defgroup xTaskNotify xTaskNotify - * \ingroup TaskNotifications - */ -BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; -#define xTaskNotifyFromISR( xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL, ( pxHigherPriorityTaskWoken ) ) -#define xTaskNotifyAndQueryFromISR( xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotificationValue ), ( pxHigherPriorityTaskWoken ) ) - -/** - * task. h - *
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * A notification sent to a task will remain pending until it is cleared by the - * task calling xTaskNotifyWait() or ulTaskNotifyTake(). If the task was - * already in the Blocked state to wait for a notification when the notification - * arrives then the task will automatically be removed from the Blocked state - * (unblocked) and the notification cleared. - * - * A task can use xTaskNotifyWait() to [optionally] block to wait for a - * notification to be pending, or ulTaskNotifyTake() to [optionally] block - * to wait for its notification value to have a non-zero value. The task does - * not consume any CPU time while it is in the Blocked state. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param ulBitsToClearOnEntry Bits that are set in ulBitsToClearOnEntry value - * will be cleared in the calling task's notification value before the task - * checks to see if any notifications are pending, and optionally blocks if no - * notifications are pending. Setting ulBitsToClearOnEntry to ULONG_MAX (if - * limits.h is included) or 0xffffffffUL (if limits.h is not included) will have - * the effect of resetting the task's notification value to 0. Setting - * ulBitsToClearOnEntry to 0 will leave the task's notification value unchanged. - * - * @param ulBitsToClearOnExit If a notification is pending or received before - * the calling task exits the xTaskNotifyWait() function then the task's - * notification value (see the xTaskNotify() API function) is passed out using - * the pulNotificationValue parameter. Then any bits that are set in - * ulBitsToClearOnExit will be cleared in the task's notification value (note - * *pulNotificationValue is set before any bits are cleared). Setting - * ulBitsToClearOnExit to ULONG_MAX (if limits.h is included) or 0xffffffffUL - * (if limits.h is not included) will have the effect of resetting the task's - * notification value to 0 before the function exits. Setting - * ulBitsToClearOnExit to 0 will leave the task's notification value unchanged - * when the function exits (in which case the value passed out in - * pulNotificationValue will match the task's notification value). - * - * @param pulNotificationValue Used to pass the task's notification value out - * of the function. Note the value passed out will not be effected by the - * clearing of any bits caused by ulBitsToClearOnExit being non-zero. - * - * @param xTicksToWait The maximum amount of time that the task should wait in - * the Blocked state for a notification to be received, should a notification - * not already be pending when xTaskNotifyWait() was called. The task - * will not consume any processing time while it is in the Blocked state. This - * is specified in kernel ticks, the macro pdMS_TO_TICSK( value_in_ms ) can be - * used to convert a time specified in milliseconds to a time specified in - * ticks. - * - * @return If a notification was received (including notifications that were - * already pending when xTaskNotifyWait was called) then pdPASS is - * returned. Otherwise pdFAIL is returned. - * - * \defgroup xTaskNotifyWait xTaskNotifyWait - * \ingroup TaskNotifications - */ -BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro - * to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * xTaskNotifyGive() is a helper macro intended for use when task notifications - * are used as light weight and faster binary or counting semaphore equivalents. - * Actual FreeRTOS semaphores are given using the xSemaphoreGive() API function, - * the equivalent action that instead uses a task notification is - * xTaskNotifyGive(). - * - * When task notifications are being used as a binary or counting semaphore - * equivalent then the task being notified should wait for the notification - * using the ulTaskNotificationTake() API function rather than the - * xTaskNotifyWait() API function. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details. - * - * @param xTaskToNotify The handle of the task being notified. The handle to a - * task can be returned from the xTaskCreate() API function used to create the - * task, and the handle of the currently running task can be obtained by calling - * xTaskGetCurrentTaskHandle(). - * - * @return xTaskNotifyGive() is a macro that calls xTaskNotify() with the - * eAction parameter set to eIncrement - so pdPASS is always returned. - * - * \defgroup xTaskNotifyGive xTaskNotifyGive - * \ingroup TaskNotifications - */ -#define xTaskNotifyGive( xTaskToNotify ) xTaskGenericNotify( ( xTaskToNotify ), ( 0 ), eIncrement, NULL ) - -/** - * task. h - *
void vTaskNotifyGiveFromISR( TaskHandle_t xTaskHandle, BaseType_t *pxHigherPriorityTaskWoken );
- *
- * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro
- * to be available.
- *
- * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
- * "notification value", which is a 32-bit unsigned integer (uint32_t).
- *
- * A version of xTaskNotifyGive() that can be called from an interrupt service
- * routine (ISR).
- *
- * Events can be sent to a task using an intermediary object.  Examples of such
- * objects are queues, semaphores, mutexes and event groups.  Task notifications
- * are a method of sending an event directly to a task without the need for such
- * an intermediary object.
- *
- * A notification sent to a task can optionally perform an action, such as
- * update, overwrite or increment the task's notification value.  In that way
- * task notifications can be used to send data to a task, or be used as light
- * weight and fast binary or counting semaphores.
- *
- * vTaskNotifyGiveFromISR() is intended for use when task notifications are
- * used as light weight and faster binary or counting semaphore equivalents.
- * Actual FreeRTOS semaphores are given from an ISR using the
- * xSemaphoreGiveFromISR() API function, the equivalent action that instead uses
- * a task notification is vTaskNotifyGiveFromISR().
- *
- * When task notifications are being used as a binary or counting semaphore
- * equivalent then the task being notified should wait for the notification
- * using the ulTaskNotificationTake() API function rather than the
- * xTaskNotifyWait() API function.
- *
- * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details.
- *
- * @param xTaskToNotify The handle of the task being notified.  The handle to a
- * task can be returned from the xTaskCreate() API function used to create the
- * task, and the handle of the currently running task can be obtained by calling
- * xTaskGetCurrentTaskHandle().
- *
- * @param pxHigherPriorityTaskWoken  vTaskNotifyGiveFromISR() will set
- * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the
- * task to which the notification was sent to leave the Blocked state, and the
- * unblocked task has a priority higher than the currently running task.  If
- * vTaskNotifyGiveFromISR() sets this value to pdTRUE then a context switch
- * should be requested before the interrupt is exited.  How a context switch is
- * requested from an ISR is dependent on the port - see the documentation page
- * for the port in use.
- *
- * \defgroup xTaskNotifyWait xTaskNotifyWait
- * \ingroup TaskNotifications
- */
-void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
-
-/**
- * task. h
- * 
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );
- * - * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this - * function to be available. - * - * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private - * "notification value", which is a 32-bit unsigned integer (uint32_t). - * - * Events can be sent to a task using an intermediary object. Examples of such - * objects are queues, semaphores, mutexes and event groups. Task notifications - * are a method of sending an event directly to a task without the need for such - * an intermediary object. - * - * A notification sent to a task can optionally perform an action, such as - * update, overwrite or increment the task's notification value. In that way - * task notifications can be used to send data to a task, or be used as light - * weight and fast binary or counting semaphores. - * - * ulTaskNotifyTake() is intended for use when a task notification is used as a - * faster and lighter weight binary or counting semaphore alternative. Actual - * FreeRTOS semaphores are taken using the xSemaphoreTake() API function, the - * equivalent action that instead uses a task notification is - * ulTaskNotifyTake(). - * - * When a task is using its notification value as a binary or counting semaphore - * other tasks should send notifications to it using the xTaskNotifyGive() - * macro, or xTaskNotify() function with the eAction parameter set to - * eIncrement. - * - * ulTaskNotifyTake() can either clear the task's notification value to - * zero on exit, in which case the notification value acts like a binary - * semaphore, or decrement the task's notification value on exit, in which case - * the notification value acts like a counting semaphore. - * - * A task can use ulTaskNotifyTake() to [optionally] block to wait for a - * the task's notification value to be non-zero. The task does not consume any - * CPU time while it is in the Blocked state. - * - * Where as xTaskNotifyWait() will return when a notification is pending, - * ulTaskNotifyTake() will return when the task's notification value is - * not zero. - * - * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details. - * - * @param xClearCountOnExit if xClearCountOnExit is pdFALSE then the task's - * notification value is decremented when the function exits. In this way the - * notification value acts like a counting semaphore. If xClearCountOnExit is - * not pdFALSE then the task's notification value is cleared to zero when the - * function exits. In this way the notification value acts like a binary - * semaphore. - * - * @param xTicksToWait The maximum amount of time that the task should wait in - * the Blocked state for the task's notification value to be greater than zero, - * should the count not already be greater than zero when - * ulTaskNotifyTake() was called. The task will not consume any processing - * time while it is in the Blocked state. This is specified in kernel ticks, - * the macro pdMS_TO_TICSK( value_in_ms ) can be used to convert a time - * specified in milliseconds to a time specified in ticks. - * - * @return The task's notification count before it is either cleared to zero or - * decremented (see the xClearCountOnExit parameter). - * - * \defgroup ulTaskNotifyTake ulTaskNotifyTake - * \ingroup TaskNotifications - */ -uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * task. h - *
BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask );
- * - * If the notification state of the task referenced by the handle xTask is - * eNotified, then set the task's notification state to eNotWaitingNotification. - * The task's notification value is not altered. Set xTask to NULL to clear the - * notification state of the calling task. - * - * @return pdTRUE if the task's notification state was set to - * eNotWaitingNotification, otherwise pdFALSE. - * \defgroup xTaskNotifyStateClear xTaskNotifyStateClear - * \ingroup TaskNotifications - */ -BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask ); +void vTaskGetRunTimeStats( signed char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*----------------------------------------------------------- * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES @@ -2220,7 +1362,7 @@ BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask ); * + Time slicing is in use and there is a task of equal priority to the * currently running task. */ -BaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION; +portBASE_TYPE xTaskIncrementTick( void ) PRIVILEGED_FUNCTION; /* * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN @@ -2235,26 +1377,15 @@ BaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION; * there be no higher priority tasks waiting on the same event) or * the delay period expires. * - * The 'unordered' version replaces the event list item value with the - * xItemValue value, and inserts the list item at the end of the list. - * - * The 'ordered' version uses the existing event list item value (which is the - * owning tasks priority) to insert the list item into the event list is task - * priority order. - * * @param pxEventList The list containing tasks that are blocked waiting * for the event to occur. * - * @param xItemValue The item value to use for the event list item when the - * event list is not ordered by task priority. - * * @param xTicksToWait The maximum amount of time that the task should wait * for the event to occur. This is specified in kernel ticks,the constant - * portTICK_PERIOD_MS can be used to convert kernel ticks into a real time + * portTICK_RATE_MS can be used to convert kernel ticks into a real time * period. */ -void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; -void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; +void vTaskPlaceOnEventList( xList * const pxEventList, portTickType xTicksToWait ) PRIVILEGED_FUNCTION; /* * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN @@ -2266,8 +1397,10 @@ void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xIte * The difference being that this function does not permit tasks to block * indefinitely, whereas vTaskPlaceOnEventList() does. * + * @return pdTRUE if the task being removed has a higher priority than the task + * making the call, otherwise pdFALSE. */ -void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION; +void vTaskPlaceOnEventListRestricted( xList * const pxEventList, portTickType xTicksToWait ) PRIVILEGED_FUNCTION; /* * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN @@ -2278,23 +1411,13 @@ void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTi * Removes a task from both the specified event list and the list of blocked * tasks, and places it on a ready queue. * - * xTaskRemoveFromEventList()/vTaskRemoveFromUnorderedEventList() will be called - * if either an event occurs to unblock a task, or the block timeout period - * expires. - * - * xTaskRemoveFromEventList() is used when the event list is in task priority - * order. It removes the list item from the head of the event list as that will - * have the highest priority owning task of all the tasks on the event list. - * vTaskRemoveFromUnorderedEventList() is used when the event list is not - * ordered and the event list items hold something other than the owning tasks - * priority. In this case the event list item value is updated to the value - * passed in the xItemValue parameter. + * xTaskRemoveFromEventList () will be called if either an event occurs to + * unblock a task, or the block timeout period expires. * * @return pdTRUE if the task being removed has a higher priority than the task * making the call, otherwise pdFALSE. */ -BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList ) PRIVILEGED_FUNCTION; -void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const TickType_t xItemValue ) PRIVILEGED_FUNCTION; +signed portBASE_TYPE xTaskRemoveFromEventList( const xList * const pxEventList ) PRIVILEGED_FUNCTION; /* * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY @@ -2306,27 +1429,21 @@ void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const Tick */ void vTaskSwitchContext( void ) PRIVILEGED_FUNCTION; -/* - * THESE FUNCTIONS MUST NOT BE USED FROM APPLICATION CODE. THEY ARE USED BY - * THE EVENT BITS MODULE. - */ -TickType_t uxTaskResetEventItemValue( void ) PRIVILEGED_FUNCTION; - /* * Return the handle of the calling task. */ -TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; +xTaskHandle xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; /* * Capture the current time status for future reference. */ -void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION; +void vTaskSetTimeOutState( xTimeOutType * const pxTimeOut ) PRIVILEGED_FUNCTION; /* * Compare the time status now with that previously captured to see if the * timeout has expired. */ -BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) PRIVILEGED_FUNCTION; +portBASE_TYPE xTaskCheckForTimeOut( xTimeOutType * const pxTimeOut, portTickType * const pxTicksToWait ) PRIVILEGED_FUNCTION; /* * Shortcut used by the queue implementation to prevent unnecessary call to @@ -2338,53 +1455,47 @@ void vTaskMissedYield( void ) PRIVILEGED_FUNCTION; * Returns the scheduler state as taskSCHEDULER_RUNNING, * taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED. */ -BaseType_t xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION; +portBASE_TYPE xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION; /* * Raises the priority of the mutex holder to that of the calling task should * the mutex holder have a priority less than the calling task. */ -BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; +void vTaskPriorityInherit( xTaskHandle const pxMutexHolder ) PRIVILEGED_FUNCTION; /* * Set the priority of a task back to its proper priority in the case that it * inherited a higher priority while it was holding a semaphore. */ -BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; +void vTaskPriorityDisinherit( xTaskHandle const pxMutexHolder ) PRIVILEGED_FUNCTION; /* - * If a higher priority task attempting to obtain a mutex caused a lower - * priority task to inherit the higher priority task's priority - but the higher - * priority task then timed out without obtaining the mutex, then the lower - * priority task will disinherit the priority again - but only down as far as - * the highest priority task that is still waiting for the mutex (if there were - * more than one task waiting for the mutex). + * Generic version of the task creation function which is in turn called by the + * xTaskCreate() and xTaskCreateRestricted() macros. */ -void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask ) PRIVILEGED_FUNCTION; +signed portBASE_TYPE xTaskGenericCreate( pdTASK_CODE pxTaskCode, const signed char * const pcName, unsigned short usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask, portSTACK_TYPE *puxStackBuffer, const xMemoryRegion * const xRegions ) PRIVILEGED_FUNCTION; /* * Get the uxTCBNumber assigned to the task referenced by the xTask parameter. */ -UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION; +unsigned portBASE_TYPE uxTaskGetTaskNumber( xTaskHandle xTask ); /* - * Set the uxTaskNumber of the task referenced by the xTask parameter to - * uxHandle. + * Set the uxTCBNumber of the task referenced by the xTask parameter to + * ucHandle. */ -void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) PRIVILEGED_FUNCTION; +void vTaskSetTaskNumber( xTaskHandle xTask, unsigned portBASE_TYPE uxHandle ); /* - * Only available when configUSE_TICKLESS_IDLE is set to 1. * If tickless mode is being used, or a low power mode is implemented, then * the tick interrupt will not execute during idle periods. When this is the * case, the tick count value maintained by the scheduler needs to be kept up - * to date with the actual execution time by being skipped forward by a time - * equal to the idle period. + * to date with the actual execution time by being skipped forward by the by + * a time equal to the idle period. */ -void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION; +void vTaskStepTick( portTickType xTicksToJump ); /* - * Only available when configUSE_TICKLESS_IDLE is set to 1. * Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port * specific sleep function to determine if it is ok to proceed with the sleep, * and if it is ok to proceed, if it is ok to sleep indefinitely. @@ -2397,20 +1508,7 @@ void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION; * critical section between the timer being stopped and the sleep mode being * entered to ensure it is ok to proceed into the sleep mode. */ -eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION; - -/* - * For internal use only. Increment the mutex held count when a mutex is - * taken and return the handle of the task that has taken the mutex. - */ -TaskHandle_t pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION; - -/* - * For internal use only. Same as vTaskSetTimeOutState(), but without a critial - * section. - */ -void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION; - +eSleepModeStatus eTaskConfirmSleepModeStatus( void ); #ifdef __cplusplus } diff --git a/FreeRTOS/Source/include/timers.h b/FreeRTOS/Source/include/timers.h index c372bfb..04ad690 100644 --- a/FreeRTOS/Source/include/timers.h +++ b/FreeRTOS/Source/include/timers.h @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #ifndef TIMERS_H @@ -33,99 +70,68 @@ #error "include FreeRTOS.h must appear in source files before include timers.h" #endif -/*lint -save -e537 This headers are only multiply included if the application code +/*lint -e537 This headers are only multiply included if the application code happens to also be including task.h. */ #include "task.h" -/*lint -restore */ +/*lint +e956 */ #ifdef __cplusplus extern "C" { #endif +/* IDs for commands that can be sent/received on the timer queue. These are to +be used solely through the macros that make up the public software timer API, +as defined below. */ +#define tmrCOMMAND_START ( ( portBASE_TYPE ) 0 ) +#define tmrCOMMAND_STOP ( ( portBASE_TYPE ) 1 ) +#define tmrCOMMAND_CHANGE_PERIOD ( ( portBASE_TYPE ) 2 ) +#define tmrCOMMAND_DELETE ( ( portBASE_TYPE ) 3 ) + /*----------------------------------------------------------- * MACROS AND DEFINITIONS *----------------------------------------------------------*/ -/* IDs for commands that can be sent/received on the timer queue. These are to -be used solely through the macros that make up the public software timer API, -as defined below. The commands that are sent from interrupts must use the -highest numbers as tmrFIRST_FROM_ISR_COMMAND is used to determine if the task -or interrupt version of the queue send function should be used. */ -#define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR ( ( BaseType_t ) -2 ) -#define tmrCOMMAND_EXECUTE_CALLBACK ( ( BaseType_t ) -1 ) -#define tmrCOMMAND_START_DONT_TRACE ( ( BaseType_t ) 0 ) -#define tmrCOMMAND_START ( ( BaseType_t ) 1 ) -#define tmrCOMMAND_RESET ( ( BaseType_t ) 2 ) -#define tmrCOMMAND_STOP ( ( BaseType_t ) 3 ) -#define tmrCOMMAND_CHANGE_PERIOD ( ( BaseType_t ) 4 ) -#define tmrCOMMAND_DELETE ( ( BaseType_t ) 5 ) - -#define tmrFIRST_FROM_ISR_COMMAND ( ( BaseType_t ) 6 ) -#define tmrCOMMAND_START_FROM_ISR ( ( BaseType_t ) 6 ) -#define tmrCOMMAND_RESET_FROM_ISR ( ( BaseType_t ) 7 ) -#define tmrCOMMAND_STOP_FROM_ISR ( ( BaseType_t ) 8 ) -#define tmrCOMMAND_CHANGE_PERIOD_FROM_ISR ( ( BaseType_t ) 9 ) - - -/** + /** * Type by which software timers are referenced. For example, a call to - * xTimerCreate() returns an TimerHandle_t variable that can then be used to + * xTimerCreate() returns an xTimerHandle variable that can then be used to * reference the subject timer in calls to other software timer API functions * (for example, xTimerStart(), xTimerReset(), etc.). */ -struct tmrTimerControl; /* The old naming convention is used to prevent breaking kernel aware debuggers. */ -typedef struct tmrTimerControl * TimerHandle_t; +typedef void * xTimerHandle; -/* - * Defines the prototype to which timer callback functions must conform. - */ -typedef void (*TimerCallbackFunction_t)( TimerHandle_t xTimer ); - -/* - * Defines the prototype to which functions used with the - * xTimerPendFunctionCallFromISR() function must conform. - */ -typedef void (*PendedFunction_t)( void *, uint32_t ); +/* Define the prototype to which timer callback functions must conform. */ +typedef void (*tmrTIMER_CALLBACK)( xTimerHandle xTimer ); /** - * TimerHandle_t xTimerCreate( const char * const pcTimerName, - * TickType_t xTimerPeriodInTicks, - * UBaseType_t uxAutoReload, + * xTimerHandle xTimerCreate( const signed char *pcTimerName, + * portTickType xTimerPeriodInTicks, + * unsigned portBASE_TYPE uxAutoReload, * void * pvTimerID, - * TimerCallbackFunction_t pxCallbackFunction ); + * tmrTIMER_CALLBACK pxCallbackFunction ); * - * Creates a new software timer instance, and returns a handle by which the - * created software timer can be referenced. - * - * Internally, within the FreeRTOS implementation, software timers use a block - * of memory, in which the timer data structure is stored. If a software timer - * is created using xTimerCreate() then the required memory is automatically - * dynamically allocated inside the xTimerCreate() function. (see - * http://www.freertos.org/a00111.html). If a software timer is created using - * xTimerCreateStatic() then the application writer must provide the memory that - * will get used by the software timer. xTimerCreateStatic() therefore allows a - * software timer to be created without using any dynamic memory allocation. + * Creates a new software timer instance. This allocates the storage required + * by the new timer, initialises the new timers internal state, and returns a + * handle by which the new timer can be referenced. * * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and - * xTimerChangePeriodFromISR() API functions can all be used to transition a - * timer into the active state. + * xTimerChangePeriodFromISR() API functions can all be used to transition a timer into the + * active state. * * @param pcTimerName A text name that is assigned to the timer. This is done - * purely to assist debugging. The kernel itself only ever references a timer - * by its handle, and never by its name. + * purely to assist debugging. The kernel itself only ever references a timer by + * its handle, and never by its name. * - * @param xTimerPeriodInTicks The timer period. The time is defined in tick - * periods so the constant portTICK_PERIOD_MS can be used to convert a time that - * has been specified in milliseconds. For example, if the timer must expire - * after 100 ticks, then xTimerPeriodInTicks should be set to 100. - * Alternatively, if the timer must expire after 500ms, then xPeriod can be set - * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or - * equal to 1000. + * @param xTimerPeriodInTicks The timer period. The time is defined in tick periods so + * the constant portTICK_RATE_MS can be used to convert a time that has been + * specified in milliseconds. For example, if the timer must expire after 100 + * ticks, then xTimerPeriodInTicks should be set to 100. Alternatively, if the timer + * must expire after 500ms, then xPeriod can be set to ( 500 / portTICK_RATE_MS ) + * provided configTICK_RATE_HZ is less than or equal to 1000. * * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. - * If uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and + * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. If + * uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and * enter the dormant state after it expires. * * @param pvTimerID An identifier that is assigned to the timer being created. @@ -134,38 +140,38 @@ typedef void (*PendedFunction_t)( void *, uint32_t ); * timer. * * @param pxCallbackFunction The function to call when the timer expires. - * Callback functions must have the prototype defined by TimerCallbackFunction_t, - * which is "void vCallbackFunction( TimerHandle_t xTimer );". + * Callback functions must have the prototype defined by tmrTIMER_CALLBACK, + * which is "void vCallbackFunction( xTimerHandle xTimer );". * - * @return If the timer is successfully created then a handle to the newly + * @return If the timer is successfully create then a handle to the newly * created timer is returned. If the timer cannot be created (because either * there is insufficient FreeRTOS heap remaining to allocate the timer - * structures, or the timer period was set to 0) then NULL is returned. + * structures, or the timer period was set to 0) then 0 is returned. * * Example usage: * @verbatim * #define NUM_TIMERS 5 * * // An array to hold handles to the created timers. - * TimerHandle_t xTimers[ NUM_TIMERS ]; + * xTimerHandle xTimers[ NUM_TIMERS ]; * * // An array to hold a count of the number of times each timer expires. - * int32_t lExpireCounters[ NUM_TIMERS ] = { 0 }; + * long lExpireCounters[ NUM_TIMERS ] = { 0 }; * * // Define a callback function that will be used by multiple timer instances. * // The callback function does nothing but count the number of times the * // associated timer expires, and stop the timer once the timer has expired * // 10 times. - * void vTimerCallback( TimerHandle_t pxTimer ) + * void vTimerCallback( xTimerHandle pxTimer ) * { - * int32_t lArrayIndex; - * const int32_t xMaxExpiryCountBeforeStopping = 10; + * long lArrayIndex; + * const long xMaxExpiryCountBeforeStopping = 10; * * // Optionally do something if the pxTimer parameter is NULL. * configASSERT( pxTimer ); - * + * * // Which timer expired? - * lArrayIndex = ( int32_t ) pvTimerGetTimerID( pxTimer ); + * lArrayIndex = ( long ) pvTimerGetTimerID( pxTimer ); * * // Increment the number of times that pxTimer has expired. * lExpireCounters[ lArrayIndex ] += 1; @@ -181,18 +187,18 @@ typedef void (*PendedFunction_t)( void *, uint32_t ); * * void main( void ) * { - * int32_t x; + * long x; * * // Create then start some timers. Starting the timers before the scheduler * // has been started means the timers will start running immediately that * // the scheduler starts. * for( x = 0; x < NUM_TIMERS; x++ ) * { - * xTimers[ x ] = xTimerCreate( "Timer", // Just a text name, not used by the kernel. - * ( 100 * x ), // The timer period in ticks. - * pdTRUE, // The timers will auto-reload themselves when they expire. - * ( void * ) x, // Assign each timer a unique id equal to its array index. - * vTimerCallback // Each timer calls the same callback when it expires. + * xTimers[ x ] = xTimerCreate( "Timer", // Just a text name, not used by the kernel. + * ( 100 * x ), // The timer period in ticks. + * pdTRUE, // The timers will auto-reload themselves when they expire. + * ( void * ) x, // Assign each timer a unique id equal to its array index. + * vTimerCallback // Each timer calls the same callback when it expires. * ); * * if( xTimers[ x ] == NULL ) @@ -217,163 +223,26 @@ typedef void (*PendedFunction_t)( void *, uint32_t ); * * // Starting the scheduler will start the timers running as they have already * // been set into the active state. - * vTaskStartScheduler(); + * xTaskStartScheduler(); * * // Should not reach here. * for( ;; ); * } * @endverbatim */ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - TimerHandle_t xTimerCreate( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION; -#endif +xTimerHandle xTimerCreate( const signed char * const pcTimerName, portTickType xTimerPeriodInTicks, unsigned portBASE_TYPE uxAutoReload, void * pvTimerID, tmrTIMER_CALLBACK pxCallbackFunction ) PRIVILEGED_FUNCTION; /** - * TimerHandle_t xTimerCreateStatic(const char * const pcTimerName, - * TickType_t xTimerPeriodInTicks, - * UBaseType_t uxAutoReload, - * void * pvTimerID, - * TimerCallbackFunction_t pxCallbackFunction, - * StaticTimer_t *pxTimerBuffer ); - * - * Creates a new software timer instance, and returns a handle by which the - * created software timer can be referenced. - * - * Internally, within the FreeRTOS implementation, software timers use a block - * of memory, in which the timer data structure is stored. If a software timer - * is created using xTimerCreate() then the required memory is automatically - * dynamically allocated inside the xTimerCreate() function. (see - * http://www.freertos.org/a00111.html). If a software timer is created using - * xTimerCreateStatic() then the application writer must provide the memory that - * will get used by the software timer. xTimerCreateStatic() therefore allows a - * software timer to be created without using any dynamic memory allocation. - * - * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), - * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and - * xTimerChangePeriodFromISR() API functions can all be used to transition a - * timer into the active state. - * - * @param pcTimerName A text name that is assigned to the timer. This is done - * purely to assist debugging. The kernel itself only ever references a timer - * by its handle, and never by its name. - * - * @param xTimerPeriodInTicks The timer period. The time is defined in tick - * periods so the constant portTICK_PERIOD_MS can be used to convert a time that - * has been specified in milliseconds. For example, if the timer must expire - * after 100 ticks, then xTimerPeriodInTicks should be set to 100. - * Alternatively, if the timer must expire after 500ms, then xPeriod can be set - * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or - * equal to 1000. - * - * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. - * If uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and - * enter the dormant state after it expires. - * - * @param pvTimerID An identifier that is assigned to the timer being created. - * Typically this would be used in the timer callback function to identify which - * timer expired when the same callback function is assigned to more than one - * timer. - * - * @param pxCallbackFunction The function to call when the timer expires. - * Callback functions must have the prototype defined by TimerCallbackFunction_t, - * which is "void vCallbackFunction( TimerHandle_t xTimer );". - * - * @param pxTimerBuffer Must point to a variable of type StaticTimer_t, which - * will be then be used to hold the software timer's data structures, removing - * the need for the memory to be allocated dynamically. - * - * @return If the timer is created then a handle to the created timer is - * returned. If pxTimerBuffer was NULL then NULL is returned. - * - * Example usage: - * @verbatim - * - * // The buffer used to hold the software timer's data structure. - * static StaticTimer_t xTimerBuffer; - * - * // A variable that will be incremented by the software timer's callback - * // function. - * UBaseType_t uxVariableToIncrement = 0; - * - * // A software timer callback function that increments a variable passed to - * // it when the software timer was created. After the 5th increment the - * // callback function stops the software timer. - * static void prvTimerCallback( TimerHandle_t xExpiredTimer ) - * { - * UBaseType_t *puxVariableToIncrement; - * BaseType_t xReturned; - * - * // Obtain the address of the variable to increment from the timer ID. - * puxVariableToIncrement = ( UBaseType_t * ) pvTimerGetTimerID( xExpiredTimer ); - * - * // Increment the variable to show the timer callback has executed. - * ( *puxVariableToIncrement )++; - * - * // If this callback has executed the required number of times, stop the - * // timer. - * if( *puxVariableToIncrement == 5 ) - * { - * // This is called from a timer callback so must not block. - * xTimerStop( xExpiredTimer, staticDONT_BLOCK ); - * } - * } - * - * - * void main( void ) - * { - * // Create the software time. xTimerCreateStatic() has an extra parameter - * // than the normal xTimerCreate() API function. The parameter is a pointer - * // to the StaticTimer_t structure that will hold the software timer - * // structure. If the parameter is passed as NULL then the structure will be - * // allocated dynamically, just as if xTimerCreate() had been called. - * xTimer = xTimerCreateStatic( "T1", // Text name for the task. Helps debugging only. Not used by FreeRTOS. - * xTimerPeriod, // The period of the timer in ticks. - * pdTRUE, // This is an auto-reload timer. - * ( void * ) &uxVariableToIncrement, // A variable incremented by the software timer's callback function - * prvTimerCallback, // The function to execute when the timer expires. - * &xTimerBuffer ); // The buffer that will hold the software timer structure. - * - * // The scheduler has not started yet so a block time is not used. - * xReturned = xTimerStart( xTimer, 0 ); - * - * // ... - * // Create tasks here. - * // ... - * - * // Starting the scheduler will start the timers running as they have already - * // been set into the active state. - * vTaskStartScheduler(); - * - * // Should not reach here. - * for( ;; ); - * } - * @endverbatim - */ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - TimerHandle_t xTimerCreateStatic( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction, - StaticTimer_t *pxTimerBuffer ) PRIVILEGED_FUNCTION; -#endif /* configSUPPORT_STATIC_ALLOCATION */ - -/** - * void *pvTimerGetTimerID( TimerHandle_t xTimer ); + * void *pvTimerGetTimerID( xTimerHandle xTimer ); * * Returns the ID assigned to the timer. * * IDs are assigned to timers using the pvTimerID parameter of the call to - * xTimerCreated() that was used to create the timer, and by calling the - * vTimerSetTimerID() API function. + * xTimerCreated() that was used to create the timer. * * If the same callback function is assigned to multiple timers then the timer - * ID can be used as time specific (timer local) storage. + * ID can be used within the callback function to identify which timer actually + * expired. * * @param xTimer The timer being queried. * @@ -383,37 +252,16 @@ typedef void (*PendedFunction_t)( void *, uint32_t ); * * See the xTimerCreate() API function example usage scenario. */ -void *pvTimerGetTimerID( const TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; +void *pvTimerGetTimerID( xTimerHandle xTimer ) PRIVILEGED_FUNCTION; /** - * void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ); - * - * Sets the ID assigned to the timer. - * - * IDs are assigned to timers using the pvTimerID parameter of the call to - * xTimerCreated() that was used to create the timer. - * - * If the same callback function is assigned to multiple timers then the timer - * ID can be used as time specific (timer local) storage. - * - * @param xTimer The timer being updated. - * - * @param pvNewID The ID to assign to the timer. - * - * Example usage: - * - * See the xTimerCreate() API function example usage scenario. - */ -void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) PRIVILEGED_FUNCTION; - -/** - * BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ); + * portBASE_TYPE xTimerIsTimerActive( xTimerHandle xTimer ); * * Queries a timer to see if it is active or dormant. * * A timer will be dormant if: * 1) It has been created but not started, or - * 2) It is an expired one-shot timer that has not been restarted. + * 2) It is an expired on-shot timer that has not been restarted. * * Timers are created in the dormant state. The xTimerStart(), xTimerReset(), * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and @@ -428,7 +276,7 @@ void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) PRIVILEGED_FUNCTION * Example usage: * @verbatim * // This function assumes xTimer has already been created. - * void vAFunction( TimerHandle_t xTimer ) + * void vAFunction( xTimerHandle xTimer ) * { * if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently "if( xTimerIsTimerActive( xTimer ) )" * { @@ -441,22 +289,23 @@ void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) PRIVILEGED_FUNCTION * } * @endverbatim */ -BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; +portBASE_TYPE xTimerIsTimerActive( xTimerHandle xTimer ) PRIVILEGED_FUNCTION; /** - * TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ); + * xTimerGetTimerDaemonTaskHandle() is only available if + * INCLUDE_xTimerGetTimerDaemonTaskHandle is set to 1 in FreeRTOSConfig.h. * * Simply returns the handle of the timer service/daemon task. It it not valid * to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started. */ -TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; +xTaskHandle xTimerGetTimerDaemonTaskHandle( void ); /** - * BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait ); + * portBASE_TYPE xTimerStart( xTimerHandle xTimer, portTickType xBlockTime ); * * Timer functionality is provided by a timer service/daemon task. Many of the * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is + * though a queue called the timer command queue. The timer command queue is * private to the kernel itself and is not directly accessible to application * code. The length of the timer command queue is set by the * configTIMER_QUEUE_LENGTH configuration constant. @@ -481,14 +330,14 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * @param xTimer The handle of the timer being started/restarted. * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * @param xBlockTime Specifies the time, in ticks, that the calling task should * be held in the Blocked state to wait for the start command to be successfully * sent to the timer command queue, should the queue already be full when - * xTimerStart() was called. xTicksToWait is ignored if xTimerStart() is called + * xTimerStart() was called. xBlockTime is ignored if xTimerStart() is called * before the scheduler is started. * * @return pdFAIL will be returned if the start command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will + * the timer command queue even after xBlockTime ticks had passed. pdPASS will * be returned if the command was successfully sent to the timer command queue. * When the command is actually processed will depend on the priority of the * timer service/daemon task relative to other tasks in the system, although the @@ -501,14 +350,14 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * See the xTimerCreate() API function example usage scenario. * */ -#define xTimerStart( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) ) +#define xTimerStart( xTimer, xBlockTime ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xBlockTime ) ) /** - * BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait ); + * portBASE_TYPE xTimerStop( xTimerHandle xTimer, portTickType xBlockTime ); * * Timer functionality is provided by a timer service/daemon task. Many of the * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is + * though a queue called the timer command queue. The timer command queue is * private to the kernel itself and is not directly accessible to application * code. The length of the timer command queue is set by the * configTIMER_QUEUE_LENGTH configuration constant. @@ -524,14 +373,14 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * @param xTimer The handle of the timer being stopped. * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * @param xBlockTime Specifies the time, in ticks, that the calling task should * be held in the Blocked state to wait for the stop command to be successfully * sent to the timer command queue, should the queue already be full when - * xTimerStop() was called. xTicksToWait is ignored if xTimerStop() is called + * xTimerStop() was called. xBlockTime is ignored if xTimerStop() is called * before the scheduler is started. * * @return pdFAIL will be returned if the stop command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will + * the timer command queue even after xBlockTime ticks had passed. pdPASS will * be returned if the command was successfully sent to the timer command queue. * When the command is actually processed will depend on the priority of the * timer service/daemon task relative to other tasks in the system. The timer @@ -543,16 +392,16 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * See the xTimerCreate() API function example usage scenario. * */ -#define xTimerStop( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0U, NULL, ( xTicksToWait ) ) +#define xTimerStop( xTimer, xBlockTime ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0U, NULL, ( xBlockTime ) ) /** - * BaseType_t xTimerChangePeriod( TimerHandle_t xTimer, - * TickType_t xNewPeriod, - * TickType_t xTicksToWait ); + * portBASE_TYPE xTimerChangePeriod( xTimerHandle xTimer, + * portTickType xNewPeriod, + * portTickType xBlockTime ); * * Timer functionality is provided by a timer service/daemon task. Many of the * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is + * though a queue called the timer command queue. The timer command queue is * private to the kernel itself and is not directly accessible to application * code. The length of the timer command queue is set by the * configTIMER_QUEUE_LENGTH configuration constant. @@ -569,21 +418,21 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * @param xTimer The handle of the timer that is having its period changed. * * @param xNewPeriod The new period for xTimer. Timer periods are specified in - * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time + * tick periods, so the constant portTICK_RATE_MS can be used to convert a time * that has been specified in milliseconds. For example, if the timer must * expire after 100 ticks, then xNewPeriod should be set to 100. Alternatively, * if the timer must expire after 500ms, then xNewPeriod can be set to - * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than + * ( 500 / portTICK_RATE_MS ) provided configTICK_RATE_HZ is less than * or equal to 1000. * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * @param xBlockTime Specifies the time, in ticks, that the calling task should * be held in the Blocked state to wait for the change period command to be * successfully sent to the timer command queue, should the queue already be - * full when xTimerChangePeriod() was called. xTicksToWait is ignored if + * full when xTimerChangePeriod() was called. xBlockTime is ignored if * xTimerChangePeriod() is called before the scheduler is started. * * @return pdFAIL will be returned if the change period command could not be - * sent to the timer command queue even after xTicksToWait ticks had passed. + * sent to the timer command queue even after xBlockTime ticks had passed. * pdPASS will be returned if the command was successfully sent to the timer * command queue. When the command is actually processed will depend on the * priority of the timer service/daemon task relative to other tasks in the @@ -597,7 +446,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * // is deleted. If the timer referenced by xTimer is not active when it is * // called, then the period of the timer is set to 500ms and the timer is * // started. - * void vAFunction( TimerHandle_t xTimer ) + * void vAFunction( xTimerHandle xTimer ) * { * if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently "if( xTimerIsTimerActive( xTimer ) )" * { @@ -610,7 +459,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * // cause the timer to start. Block for a maximum of 100 ticks if the * // change period command cannot immediately be sent to the timer * // command queue. - * if( xTimerChangePeriod( xTimer, 500 / portTICK_PERIOD_MS, 100 ) == pdPASS ) + * if( xTimerChangePeriod( xTimer, 500 / portTICK_RATE_MS, 100 ) == pdPASS ) * { * // The command was successfully sent. * } @@ -623,14 +472,14 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * } * @endverbatim */ - #define xTimerChangePeriod( xTimer, xNewPeriod, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD, ( xNewPeriod ), NULL, ( xTicksToWait ) ) + #define xTimerChangePeriod( xTimer, xNewPeriod, xBlockTime ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD, ( xNewPeriod ), NULL, ( xBlockTime ) ) /** - * BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait ); + * portBASE_TYPE xTimerDelete( xTimerHandle xTimer, portTickType xBlockTime ); * * Timer functionality is provided by a timer service/daemon task. Many of the * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is + * though a queue called the timer command queue. The timer command queue is * private to the kernel itself and is not directly accessible to application * code. The length of the timer command queue is set by the * configTIMER_QUEUE_LENGTH configuration constant. @@ -643,14 +492,14 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * @param xTimer The handle of the timer being deleted. * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * @param xBlockTime Specifies the time, in ticks, that the calling task should * be held in the Blocked state to wait for the delete command to be * successfully sent to the timer command queue, should the queue already be - * full when xTimerDelete() was called. xTicksToWait is ignored if xTimerDelete() + * full when xTimerDelete() was called. xBlockTime is ignored if xTimerDelete() * is called before the scheduler is started. * * @return pdFAIL will be returned if the delete command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will + * the timer command queue even after xBlockTime ticks had passed. pdPASS will * be returned if the command was successfully sent to the timer command queue. * When the command is actually processed will depend on the priority of the * timer service/daemon task relative to other tasks in the system. The timer @@ -661,14 +510,14 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * See the xTimerChangePeriod() API function example usage scenario. */ -#define xTimerDelete( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) ) +#define xTimerDelete( xTimer, xBlockTime ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xBlockTime ) ) /** - * BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait ); + * portBASE_TYPE xTimerReset( xTimerHandle xTimer, portTickType xBlockTime ); * * Timer functionality is provided by a timer service/daemon task. Many of the * public FreeRTOS timer API functions send commands to the timer service task - * through a queue called the timer command queue. The timer command queue is + * though a queue called the timer command queue. The timer command queue is * private to the kernel itself and is not directly accessible to application * code. The length of the timer command queue is set by the * configTIMER_QUEUE_LENGTH configuration constant. @@ -695,14 +544,14 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * @param xTimer The handle of the timer being reset/started/restarted. * - * @param xTicksToWait Specifies the time, in ticks, that the calling task should + * @param xBlockTime Specifies the time, in ticks, that the calling task should * be held in the Blocked state to wait for the reset command to be successfully * sent to the timer command queue, should the queue already be full when - * xTimerReset() was called. xTicksToWait is ignored if xTimerReset() is called + * xTimerReset() was called. xBlockTime is ignored if xTimerReset() is called * before the scheduler is started. * * @return pdFAIL will be returned if the reset command could not be sent to - * the timer command queue even after xTicksToWait ticks had passed. pdPASS will + * the timer command queue even after xBlockTime ticks had passed. pdPASS will * be returned if the command was successfully sent to the timer command queue. * When the command is actually processed will depend on the priority of the * timer service/daemon task relative to other tasks in the system, although the @@ -716,11 +565,11 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * // without a key being pressed, then the LCD back-light is switched off. In * // this case, the timer is a one-shot timer. * - * TimerHandle_t xBacklightTimer = NULL; + * xTimerHandle xBacklightTimer = NULL; * * // The callback function assigned to the one-shot timer. In this case the * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) + * void vBacklightTimerCallback( xTimerHandle pxTimer ) * { * // The timer expired, therefore 5 seconds must have passed since a key * // was pressed. Switch off the LCD back-light. @@ -746,12 +595,12 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * void main( void ) * { - * int32_t x; + * long x; * * // Create then start the one-shot timer that is responsible for turning * // the back-light off if no keys are pressed within a 5 second period. * xBacklightTimer = xTimerCreate( "BacklightTimer", // Just a text name, not used by the kernel. - * ( 5000 / portTICK_PERIOD_MS), // The timer period in ticks. + * ( 5000 / portTICK_RATE_MS), // The timer period in ticks. * pdFALSE, // The timer is a one-shot timer. * 0, // The id is not used by the callback so can take any value. * vBacklightTimerCallback // The callback function that switches the LCD back-light off. @@ -778,18 +627,18 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * // Starting the scheduler will start the timer running as it has already * // been set into the active state. - * vTaskStartScheduler(); + * xTaskStartScheduler(); * * // Should not reach here. * for( ;; ); * } * @endverbatim */ -#define xTimerReset( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) ) +#define xTimerReset( xTimer, xBlockTime ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xBlockTime ) ) /** - * BaseType_t xTimerStartFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); + * portBASE_TYPE xTimerStartFromISR( xTimerHandle xTimer, + * portBASE_TYPE *pxHigherPriorityTaskWoken ); * * A version of xTimerStart() that can be called from an interrupt service * routine. @@ -813,9 +662,8 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * successfully sent to the timer command queue. When the command is actually * processed will depend on the priority of the timer service/daemon task * relative to other tasks in the system, although the timers expiry time is - * relative to when xTimerStartFromISR() is actually called. The timer - * service/daemon task priority is set by the configTIMER_TASK_PRIORITY - * configuration constant. + * relative to when xTimerStartFromISR() is actually called. The timer service/daemon + * task priority is set by the configTIMER_TASK_PRIORITY configuration constant. * * Example usage: * @verbatim @@ -828,7 +676,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * // The callback function assigned to the one-shot timer. In this case the * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) + * void vBacklightTimerCallback( xTimerHandle pxTimer ) * { * // The timer expired, therefore 5 seconds must have passed since a key * // was pressed. Switch off the LCD back-light. @@ -838,7 +686,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * // The key press interrupt service routine. * void vKeyPressEventInterruptHandler( void ) * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; + * portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; * * // Ensure the LCD back-light is on, then restart the timer that is * // responsible for turning the back-light off after 5 seconds of @@ -866,16 +714,16 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * if( xHigherPriorityTaskWoken != pdFALSE ) * { * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). + * // depends on the FreeRTOS port being used. * } * } * @endverbatim */ -#define xTimerStartFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) +#define xTimerStartFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) /** - * BaseType_t xTimerStopFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); + * portBASE_TYPE xTimerStopFromISR( xTimerHandle xTimer, + * portBASE_TYPE *pxHigherPriorityTaskWoken ); * * A version of xTimerStop() that can be called from an interrupt service * routine. @@ -909,7 +757,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * // The interrupt service routine that stops the timer. * void vAnExampleInterruptServiceRoutine( void ) * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; + * portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; * * // The interrupt has occurred - simply stop the timer. * // xHigherPriorityTaskWoken was set to pdFALSE where it was defined @@ -929,17 +777,17 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * if( xHigherPriorityTaskWoken != pdFALSE ) * { * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). + * // depends on the FreeRTOS port being used. * } * } * @endverbatim */ -#define xTimerStopFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP_FROM_ISR, 0, ( pxHigherPriorityTaskWoken ), 0U ) +#define xTimerStopFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0, ( pxHigherPriorityTaskWoken ), 0U ) /** - * BaseType_t xTimerChangePeriodFromISR( TimerHandle_t xTimer, - * TickType_t xNewPeriod, - * BaseType_t *pxHigherPriorityTaskWoken ); + * portBASE_TYPE xTimerChangePeriodFromISR( xTimerHandle xTimer, + * portTickType xNewPeriod, + * portBASE_TYPE *pxHigherPriorityTaskWoken ); * * A version of xTimerChangePeriod() that can be called from an interrupt * service routine. @@ -947,11 +795,11 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * @param xTimer The handle of the timer that is having its period changed. * * @param xNewPeriod The new period for xTimer. Timer periods are specified in - * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time + * tick periods, so the constant portTICK_RATE_MS can be used to convert a time * that has been specified in milliseconds. For example, if the timer must * expire after 100 ticks, then xNewPeriod should be set to 100. Alternatively, * if the timer must expire after 500ms, then xNewPeriod can be set to - * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than + * ( 500 / portTICK_RATE_MS ) provided configTICK_RATE_HZ is less than * or equal to 1000. * * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most @@ -982,7 +830,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * // The interrupt service routine that changes the period of xTimer. * void vAnExampleInterruptServiceRoutine( void ) * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; + * portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; * * // The interrupt has occurred - change the period of xTimer to 500ms. * // xHigherPriorityTaskWoken was set to pdFALSE where it was defined @@ -1002,16 +850,16 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * if( xHigherPriorityTaskWoken != pdFALSE ) * { * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). + * // depends on the FreeRTOS port being used. * } * } * @endverbatim */ -#define xTimerChangePeriodFromISR( xTimer, xNewPeriod, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD_FROM_ISR, ( xNewPeriod ), ( pxHigherPriorityTaskWoken ), 0U ) +#define xTimerChangePeriodFromISR( xTimer, xNewPeriod, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD, ( xNewPeriod ), ( pxHigherPriorityTaskWoken ), 0U ) /** - * BaseType_t xTimerResetFromISR( TimerHandle_t xTimer, - * BaseType_t *pxHigherPriorityTaskWoken ); + * portBASE_TYPE xTimerResetFromISR( xTimerHandle xTimer, + * portBASE_TYPE *pxHigherPriorityTaskWoken ); * * A version of xTimerReset() that can be called from an interrupt service * routine. @@ -1050,7 +898,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * * // The callback function assigned to the one-shot timer. In this case the * // parameter is not used. - * void vBacklightTimerCallback( TimerHandle_t pxTimer ) + * void vBacklightTimerCallback( xTimerHandle pxTimer ) * { * // The timer expired, therefore 5 seconds must have passed since a key * // was pressed. Switch off the LCD back-light. @@ -1060,7 +908,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * // The key press interrupt service routine. * void vKeyPressEventInterruptHandler( void ) * { - * BaseType_t xHigherPriorityTaskWoken = pdFALSE; + * portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; * * // Ensure the LCD back-light is on, then reset the timer that is * // responsible for turning the back-light off after 5 seconds of @@ -1088,203 +936,19 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION; * if( xHigherPriorityTaskWoken != pdFALSE ) * { * // Call the interrupt safe yield function here (actual function - * // depends on the FreeRTOS port being used). + * // depends on the FreeRTOS port being used. * } * } * @endverbatim */ -#define xTimerResetFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) - - -/** - * BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, - * void *pvParameter1, - * uint32_t ulParameter2, - * BaseType_t *pxHigherPriorityTaskWoken ); - * - * - * Used from application interrupt service routines to defer the execution of a - * function to the RTOS daemon task (the timer service task, hence this function - * is implemented in timers.c and is prefixed with 'Timer'). - * - * Ideally an interrupt service routine (ISR) is kept as short as possible, but - * sometimes an ISR either has a lot of processing to do, or needs to perform - * processing that is not deterministic. In these cases - * xTimerPendFunctionCallFromISR() can be used to defer processing of a function - * to the RTOS daemon task. - * - * A mechanism is provided that allows the interrupt to return directly to the - * task that will subsequently execute the pended callback function. This - * allows the callback function to execute contiguously in time with the - * interrupt - just as if the callback had executed in the interrupt itself. - * - * @param xFunctionToPend The function to execute from the timer service/ - * daemon task. The function must conform to the PendedFunction_t - * prototype. - * - * @param pvParameter1 The value of the callback function's first parameter. - * The parameter has a void * type to allow it to be used to pass any type. - * For example, unsigned longs can be cast to a void *, or the void * can be - * used to point to a structure. - * - * @param ulParameter2 The value of the callback function's second parameter. - * - * @param pxHigherPriorityTaskWoken As mentioned above, calling this function - * will result in a message being sent to the timer daemon task. If the - * priority of the timer daemon task (which is set using - * configTIMER_TASK_PRIORITY in FreeRTOSConfig.h) is higher than the priority of - * the currently running task (the task the interrupt interrupted) then - * *pxHigherPriorityTaskWoken will be set to pdTRUE within - * xTimerPendFunctionCallFromISR(), indicating that a context switch should be - * requested before the interrupt exits. For that reason - * *pxHigherPriorityTaskWoken must be initialised to pdFALSE. See the - * example code below. - * - * @return pdPASS is returned if the message was successfully sent to the - * timer daemon task, otherwise pdFALSE is returned. - * - * Example usage: - * @verbatim - * - * // The callback function that will execute in the context of the daemon task. - * // Note callback functions must all use this same prototype. - * void vProcessInterface( void *pvParameter1, uint32_t ulParameter2 ) - * { - * BaseType_t xInterfaceToService; - * - * // The interface that requires servicing is passed in the second - * // parameter. The first parameter is not used in this case. - * xInterfaceToService = ( BaseType_t ) ulParameter2; - * - * // ...Perform the processing here... - * } - * - * // An ISR that receives data packets from multiple interfaces - * void vAnISR( void ) - * { - * BaseType_t xInterfaceToService, xHigherPriorityTaskWoken; - * - * // Query the hardware to determine which interface needs processing. - * xInterfaceToService = prvCheckInterfaces(); - * - * // The actual processing is to be deferred to a task. Request the - * // vProcessInterface() callback function is executed, passing in the - * // number of the interface that needs processing. The interface to - * // service is passed in the second parameter. The first parameter is - * // not used in this case. - * xHigherPriorityTaskWoken = pdFALSE; - * xTimerPendFunctionCallFromISR( vProcessInterface, NULL, ( uint32_t ) xInterfaceToService, &xHigherPriorityTaskWoken ); - * - * // If xHigherPriorityTaskWoken is now set to pdTRUE then a context - * // switch should be requested. The macro used is port specific and will - * // be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() - refer to - * // the documentation page for the port being used. - * portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); - * - * } - * @endverbatim - */ -BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION; - - /** - * BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, - * void *pvParameter1, - * uint32_t ulParameter2, - * TickType_t xTicksToWait ); - * - * - * Used to defer the execution of a function to the RTOS daemon task (the timer - * service task, hence this function is implemented in timers.c and is prefixed - * with 'Timer'). - * - * @param xFunctionToPend The function to execute from the timer service/ - * daemon task. The function must conform to the PendedFunction_t - * prototype. - * - * @param pvParameter1 The value of the callback function's first parameter. - * The parameter has a void * type to allow it to be used to pass any type. - * For example, unsigned longs can be cast to a void *, or the void * can be - * used to point to a structure. - * - * @param ulParameter2 The value of the callback function's second parameter. - * - * @param xTicksToWait Calling this function will result in a message being - * sent to the timer daemon task on a queue. xTicksToWait is the amount of - * time the calling task should remain in the Blocked state (so not using any - * processing time) for space to become available on the timer queue if the - * queue is found to be full. - * - * @return pdPASS is returned if the message was successfully sent to the - * timer daemon task, otherwise pdFALSE is returned. - * - */ -BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -/** - * const char * const pcTimerGetName( TimerHandle_t xTimer ); - * - * Returns the name that was assigned to a timer when the timer was created. - * - * @param xTimer The handle of the timer being queried. - * - * @return The name assigned to the timer specified by the xTimer parameter. - */ -const char * pcTimerGetName( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - -/** - * void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ); - * - * Updates a timer to be either an autoreload timer, in which case the timer - * automatically resets itself each time it expires, or a one shot timer, in - * which case the timer will only expire once unless it is manually restarted. - * - * @param xTimer The handle of the timer being updated. - * - * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will - * expire repeatedly with a frequency set by the timer's period (see the - * xTimerPeriodInTicks parameter of the xTimerCreate() API function). If - * uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and - * enter the dormant state after it expires. - */ -void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) PRIVILEGED_FUNCTION; - -/** - * TickType_t xTimerGetPeriod( TimerHandle_t xTimer ); - * - * Returns the period of a timer. - * - * @param xTimer The handle of the timer being queried. - * - * @return The period of the timer in ticks. - */ -TickType_t xTimerGetPeriod( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; - -/** -* TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ); -* -* Returns the time in ticks at which the timer will expire. If this is less -* than the current tick count then the expiry time has overflowed from the -* current time. -* -* @param xTimer The handle of the timer being queried. -* -* @return If the timer is running then the time in ticks at which the timer -* will next expire is returned. If the timer is not running then the return -* value is undefined. -*/ -TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; +#define xTimerResetFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U ) /* * Functions beyond this part are not part of the public API and are intended * for use by the kernel only. */ -BaseType_t xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION; -BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION; - -#if( configUSE_TRACE_FACILITY == 1 ) - void vTimerSetTimerNumber( TimerHandle_t xTimer, UBaseType_t uxTimerNumber ) PRIVILEGED_FUNCTION; - UBaseType_t uxTimerGetTimerNumber( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; -#endif +portBASE_TYPE xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION; +portBASE_TYPE xTimerGenericCommand( xTimerHandle xTimer, portBASE_TYPE xCommandID, portTickType xOptionalValue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portTickType xBlockTime ) PRIVILEGED_FUNCTION; #ifdef __cplusplus } diff --git a/FreeRTOS/Source/list.c b/FreeRTOS/Source/list.c index bc02c0c..f7e4a41 100644 --- a/FreeRTOS/Source/list.c +++ b/FreeRTOS/Source/list.c @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #include @@ -34,12 +71,12 @@ * PUBLIC LIST API documented in list.h *----------------------------------------------------------*/ -void vListInitialise( List_t * const pxList ) +void vListInitialise( xList * const pxList ) { /* The list structure contains a list item which is used to mark the end of the list. To initialise the list the list end is inserted as the only list entry. */ - pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ + pxList->pxIndex = ( xListItem * ) &( pxList->xListEnd ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ /* The list end value is the highest possible value in the list to ensure it remains at the end of the list. */ @@ -47,78 +84,56 @@ void vListInitialise( List_t * const pxList ) /* The list end next and previous pointers point to itself so we know when the list is empty. */ - pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ - pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );/*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ + pxList->xListEnd.pxNext = ( xListItem * ) &( pxList->xListEnd ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ + pxList->xListEnd.pxPrevious = ( xListItem * ) &( pxList->xListEnd );/*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ - pxList->uxNumberOfItems = ( UBaseType_t ) 0U; - - /* Write known values into the list if - configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ); - listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ); + pxList->uxNumberOfItems = ( unsigned portBASE_TYPE ) 0U; } /*-----------------------------------------------------------*/ -void vListInitialiseItem( ListItem_t * const pxItem ) +void vListInitialiseItem( xListItem * const pxItem ) { /* Make sure the list item is not recorded as being on a list. */ - pxItem->pxContainer = NULL; - - /* Write known values into the list item if - configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ - listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ); - listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ); + pxItem->pvContainer = NULL; } /*-----------------------------------------------------------*/ -void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem ) +void IRAM vListInsertEnd( xList * const pxList, xListItem * const pxNewListItem ) { -ListItem_t * const pxIndex = pxList->pxIndex; - - /* Only effective when configASSERT() is also defined, these tests may catch - the list data structures being overwritten in memory. They will not catch - data errors caused by incorrect configuration or use of FreeRTOS. */ - listTEST_LIST_INTEGRITY( pxList ); - listTEST_LIST_ITEM_INTEGRITY( pxNewListItem ); +xListItem * pxIndex; /* Insert a new list item into pxList, but rather than sort the list, makes the new list item the last item to be removed by a call to - listGET_OWNER_OF_NEXT_ENTRY(). */ + pvListGetOwnerOfNextEntry. */ + pxIndex = pxList->pxIndex; + pxNewListItem->pxNext = pxIndex; pxNewListItem->pxPrevious = pxIndex->pxPrevious; - - /* Only used during decision coverage testing. */ - mtCOVERAGE_TEST_DELAY(); - pxIndex->pxPrevious->pxNext = pxNewListItem; pxIndex->pxPrevious = pxNewListItem; /* Remember which list the item is in. */ - pxNewListItem->pxContainer = pxList; + pxNewListItem->pvContainer = ( void * ) pxList; ( pxList->uxNumberOfItems )++; } /*-----------------------------------------------------------*/ -void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) +void IRAM vListInsert( xList * const pxList, xListItem * const pxNewListItem ) { -ListItem_t *pxIterator; -const TickType_t xValueOfInsertion = pxNewListItem->xItemValue; +xListItem *pxIterator; +portTickType xValueOfInsertion; - /* Only effective when configASSERT() is also defined, these tests may catch - the list data structures being overwritten in memory. They will not catch - data errors caused by incorrect configuration or use of FreeRTOS. */ - listTEST_LIST_INTEGRITY( pxList ); - listTEST_LIST_ITEM_INTEGRITY( pxNewListItem ); + /* Insert the new list item into the list, sorted in ulListItem order. */ + xValueOfInsertion = pxNewListItem->xItemValue; - /* Insert the new list item into the list, sorted in xItemValue order. - - If the list already contains a list item with the same item value then the - new list item should be placed after it. This ensures that TCBs which are - stored in ready lists (all of which have the same xItemValue value) get a - share of the CPU. However, if the xItemValue is the same as the back marker - the iteration loop below will not end. Therefore the value is checked - first, and the algorithm slightly modified if necessary. */ + /* If the list already contains a list item with the same item value then + the new list item should be placed after it. This ensures that TCB's which + are stored in ready lists (all of which have the same ulListItem value) + get an equal share of the CPU. However, if the xItemValue is the same as + the back marker the iteration loop below will not end. This means we need + to guard against this by checking the value first and modifying the + algorithm slightly if necessary. */ if( xValueOfInsertion == portMAX_DELAY ) { pxIterator = pxList->xListEnd.pxPrevious; @@ -126,31 +141,26 @@ const TickType_t xValueOfInsertion = pxNewListItem->xItemValue; else { /* *** NOTE *********************************************************** - If you find your application is crashing here then likely causes are - listed below. In addition see https://www.freertos.org/FAQHelp.html for - more tips, and ensure configASSERT() is defined! - https://www.freertos.org/a00110.html#configASSERT - + If you find your application is crashing here then likely causes are: 1) Stack overflow - - see https://www.freertos.org/Stacks-and-stack-overflow-checking.html - 2) Incorrect interrupt priority assignment, especially on Cortex-M + see http://www.freertos.org/Stacks-and-stack-overflow-checking.html + 2) Incorrect interrupt priority assignment, especially on Cortex-M3 parts where numerically high priority values denote low actual - interrupt priorities, which can seem counter intuitive. See - https://www.freertos.org/RTOS-Cortex-M3-M4.html and the definition - of configMAX_SYSCALL_INTERRUPT_PRIORITY on - https://www.freertos.org/a00110.html + interrupt priories, which can seem counter intuitive. See + configMAX_SYSCALL_INTERRUPT_PRIORITY on http://www.freertos.org/a00110.html 3) Calling an API function from within a critical section or when the scheduler is suspended, or calling an API function that does not end in "FromISR" from an interrupt. 4) Using a queue or semaphore before it has been initialised or before the scheduler has been started (are interrupts firing before vTaskStartScheduler() has been called?). + See http://www.freertos.org/FAQHelp.html for more tips. **********************************************************************/ - for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. *//*lint !e440 The iterator moves to a different value, not xValueOfInsertion. */ + for( pxIterator = ( xListItem * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */ { - /* There is nothing to do here, just iterating to the wanted - insertion position. */ + /* There is nothing to do here, we are just iterating to the + wanted insertion position. */ } } @@ -161,35 +171,30 @@ const TickType_t xValueOfInsertion = pxNewListItem->xItemValue; /* Remember which list the item is in. This allows fast removal of the item later. */ - pxNewListItem->pxContainer = pxList; + pxNewListItem->pvContainer = ( void * ) pxList; ( pxList->uxNumberOfItems )++; } /*-----------------------------------------------------------*/ -UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) +unsigned portBASE_TYPE IRAM uxListRemove( xListItem * const pxItemToRemove ) { -/* The list item knows which list it is in. Obtain the list from the list -item. */ -List_t * const pxList = pxItemToRemove->pxContainer; +xList * pxList; pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious; pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext; - /* Only used during decision coverage testing. */ - mtCOVERAGE_TEST_DELAY(); + /* The list item knows which list it is in. Obtain the list from the list + item. */ + pxList = ( xList * ) pxItemToRemove->pvContainer; /* Make sure the index is left pointing to a valid item. */ if( pxList->pxIndex == pxItemToRemove ) { pxList->pxIndex = pxItemToRemove->pxPrevious; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - pxItemToRemove->pxContainer = NULL; + pxItemToRemove->pvContainer = NULL; ( pxList->uxNumberOfItems )--; return pxList->uxNumberOfItems; diff --git a/FreeRTOS/Source/portable/esp8266/port.c b/FreeRTOS/Source/portable/esp8266/port.c index 39cdce8..54bca65 100644 --- a/FreeRTOS/Source/portable/esp8266/port.c +++ b/FreeRTOS/Source/portable/esp8266/port.c @@ -1,30 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. If you wish to use our Amazon - * FreeRTOS name, please do so in a fair use way that does not cause confusion. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ /*----------------------------------------------------------- * Implementation of functions defined in portable.h for ESP8266 @@ -37,12 +73,10 @@ #include #include #include -#include #include #include "FreeRTOS.h" #include "task.h" -#include "queue.h" #include "xtensa_rtos.h" unsigned cpu_sr; @@ -57,23 +91,16 @@ char level1_int_disabled; */ void *xPortSupervisorStackPointer; -void vAssertCalled(const char * pcFile, unsigned long ulLine) -{ - printf("rtos assert %s %lu\n", pcFile, ulLine); - abort(); - //for (;;); -} - /* * Stack initialization */ -portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) +portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters ) { #define SET_STKREG(r,v) sp[(r) >> 2] = (portSTACK_TYPE)(v) portSTACK_TYPE *sp, *tp; /* Create interrupt stack frame aligned to 16 byte boundary */ - sp = (portSTACK_TYPE*) (((uint32_t)(pxTopOfStack + 1) - XT_CP_SIZE - XT_STK_FRMSZ) & ~0xf); + sp = (portSTACK_TYPE*) (((uint32_t)(pxTopOfStack+1) - XT_CP_SIZE - XT_STK_FRMSZ) & ~0xf); /* Clear the entire frame (do not use memset() because we don't depend on C library) */ for (tp = sp; tp <= pxTopOfStack; ++tp) @@ -94,29 +121,30 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, TaskFunctio static int pending_soft_sv; static int pending_maclayer_sv; -/* - * The portYIELD macro calls PendSV with SVC_Software to set a pending interrupt - * service callback that allows a task switch, and this occur when interrupts - * are enabled which might be after exiting the critical region below. - * - * The wdev NMI calls this function from pp_post() with SVC_MACLayer to set a - * pending interrupt service callback which flushs the queue of messages that - * the NMI stashes away. This interrupt will be triggered after the return from - * the NMI and when interrupts are enabled. The NMI can not touch the FreeRTOS - * queues itself. The NMI must not touch the interrupt masks so that path must - * not call vPortEnterCritical and vPortExitCritical. - */ +/* PendSV is called in place of vPortYield() to request a supervisor + call. + + The portYIELD macro calls pendSV if it's a software request. + + The libpp and libudhcp libraries also call this function, assuming + always with arg==2 (but maybe sometimes with arg==1?) + + In the original esp_iot_rtos_sdk implementation, arg was a char. Using an + enum is ABI-compatible, though. +*/ void IRAM PendSV(enum SVC_ReqType req) { - if (req == SVC_Software) { - vPortEnterCritical(); - pending_soft_sv = 1; - WSR(BIT(INUM_SOFT), interrupt); - vPortExitCritical(); - } else if (req == SVC_MACLayer) { - pending_maclayer_sv= 1; - WSR(BIT(INUM_SOFT), interrupt); - } + vPortEnterCritical(); + + if(req == SVC_Software) + { + pending_soft_sv = 1; + } + else if(req == SVC_MACLayer) + pending_maclayer_sv= 1; + + xthal_set_intset(BIT(INUM_SOFT)); + vPortExitCritical(); } /* This MAC layer ISR handler is defined in libpp.a, and is called @@ -125,24 +153,31 @@ void IRAM PendSV(enum SVC_ReqType req) */ extern portBASE_TYPE sdk_MacIsrSigPostDefHdl(void); -void IRAM SV_ISR(void *arg) +void IRAM SV_ISR(void) { - portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE ; - if (pending_maclayer_sv) { - xHigherPriorityTaskWoken = sdk_MacIsrSigPostDefHdl(); - pending_maclayer_sv = 0; - } - if (xHigherPriorityTaskWoken || pending_soft_sv) { - sdk__xt_timer_int1(); - pending_soft_sv = 0; - } + portBASE_TYPE xHigherPriorityTaskWoken=pdFALSE ; + if(pending_maclayer_sv) + { + xHigherPriorityTaskWoken = sdk_MacIsrSigPostDefHdl(); + pending_maclayer_sv = 0; + } + if( xHigherPriorityTaskWoken || pending_soft_sv) + { + sdk__xt_timer_int1(); + pending_soft_sv = 0; + } } void xPortSysTickHandle (void) { - if (xTaskIncrementTick() != pdFALSE) { - vTaskSwitchContext(); - } + //CloseNMI(); + { + if(xTaskIncrementTick() !=pdFALSE ) + { + vTaskSwitchContext(); + } + } + //OpenNMI(); } /* @@ -150,11 +185,11 @@ void xPortSysTickHandle (void) */ portBASE_TYPE xPortStartScheduler( void ) { - _xt_isr_attach(INUM_SOFT, SV_ISR, NULL); + _xt_isr_attach(INUM_SOFT, SV_ISR); _xt_isr_unmask(BIT(INUM_SOFT)); /* Initialize system tick timer interrupt and schedule the first tick. */ - _xt_isr_attach(INUM_TICK, sdk__xt_timer_int, NULL); + _xt_isr_attach(INUM_TICK, sdk__xt_timer_int); _xt_isr_unmask(BIT(INUM_TICK)); sdk__xt_tick_timer_init(); @@ -186,10 +221,8 @@ size_t xPortGetFreeHeapSize( void ) uint32_t brk_val = (uint32_t) sbrk(0); intptr_t sp = (intptr_t)xPortSupervisorStackPointer; - if (sp == 0) { - /* scheduler not started */ + if(sp == 0) /* scheduler not started */ SP(sp); - } return sp - brk_val + mi.fordblks; } @@ -200,6 +233,8 @@ void vPortEndScheduler( void ) /*-----------------------------------------------------------*/ +/* Each task maintains its own interrupt status in the critical nesting +variable. */ static unsigned portBASE_TYPE uxCriticalNesting = 0; /* These nested vPortEnter/ExitCritical macros are called by SDK @@ -208,42 +243,18 @@ static unsigned portBASE_TYPE uxCriticalNesting = 0; * It may be possible to replace the global nesting count variable * with a save/restore of interrupt level, although it's difficult as * the functions have no return value. - * - * These should not be called from the NMI in regular operation and - * the NMI must not touch the interrupt mask, but that might occur in - * exceptional paths such as aborts and debug code. */ -void IRAM vPortEnterCritical(void) { +void IRAM vPortEnterCritical( void ) +{ portDISABLE_INTERRUPTS(); uxCriticalNesting++; } - /*-----------------------------------------------------------*/ -void IRAM vPortExitCritical(void) { +void IRAM vPortExitCritical( void ) +{ uxCriticalNesting--; - if (uxCriticalNesting == 0) - portENABLE_INTERRUPTS(); + if( uxCriticalNesting == 0 ) + portENABLE_INTERRUPTS(); } -/* Backward compatibility, for the sdk library. */ - -signed portBASE_TYPE xTaskGenericCreate(TaskFunction_t pxTaskCode, - const signed char * const pcName, - unsigned short usStackDepth, - void *pvParameters, - unsigned portBASE_TYPE uxPriority, - TaskHandle_t *pxCreatedTask, - portSTACK_TYPE *puxStackBuffer, - const MemoryRegion_t * const xRegions) { - (void)puxStackBuffer; - (void)xRegions; - return xTaskCreate(pxTaskCode, (const char * const)pcName, usStackDepth, - pvParameters, uxPriority, pxCreatedTask); -} - -BaseType_t xQueueGenericReceive(QueueHandle_t xQueue, void * const pvBuffer, - TickType_t xTicksToWait, const BaseType_t xJustPeeking) { - configASSERT(xJustPeeking == 0); - return xQueueReceive(xQueue, pvBuffer, xTicksToWait); -} diff --git a/FreeRTOS/Source/portable/esp8266/portmacro.h b/FreeRTOS/Source/portable/esp8266/portmacro.h index 66f029f..3345ab5 100644 --- a/FreeRTOS/Source/portable/esp8266/portmacro.h +++ b/FreeRTOS/Source/portable/esp8266/portmacro.h @@ -1,30 +1,67 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. If you wish to use our Amazon - * FreeRTOS name, please do so in a fair use way that does not cause confusion. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ + #ifndef PORTMACRO_H #define PORTMACRO_H @@ -55,20 +92,15 @@ extern "C" { #define portDOUBLE double #define portLONG long #define portSHORT short -#define portSTACK_TYPE uint32_t +#define portSTACK_TYPE unsigned portLONG #define portBASE_TYPE long -typedef portSTACK_TYPE StackType_t; -typedef portBASE_TYPE BaseType_t; -typedef unsigned portBASE_TYPE UBaseType_t; - -typedef uint32_t TickType_t; -#define portMAX_DELAY ( TickType_t ) 0xffffffffUL +typedef uint32_t portTickType; +#define portMAX_DELAY ( portTickType ) 0xffffffff /* Architecture specifics. */ -#define portARCH_NAME "ESP8266" #define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) +#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) #define portBYTE_ALIGNMENT 8 /*-----------------------------------------------------------*/ @@ -107,7 +139,7 @@ void PendSV(enum SVC_ReqType); ESPTODO: It may be possible to just read the 'ps' register instead of accessing thisvariable. */ -extern uint8_t sdk_NMIIrqIsOn; +extern char sdk_NMIIrqIsOn; extern char level1_int_disabled; extern unsigned cpu_sr; @@ -119,9 +151,6 @@ extern unsigned cpu_sr; prefer to _xt_disable_interrupts & _xt_enable_interrupts and store the ps value in a local variable - that approach is recursive-safe and generally better. - - The NMI must not touch the interrupt mask and it should not in - regular operation, but there is a guard here just in case. */ inline static __attribute__((always_inline)) void portDISABLE_INTERRUPTS(void) { @@ -151,10 +180,6 @@ not necessary for to use this port. They are defined so the common demo files (which build with all the ports) will build. */ #define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) #define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) - -/* FreeRTOS API functions should not be called from the NMI handler. */ -#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() configASSERT(sdk_NMIIrqIsOn == 0) - /*-----------------------------------------------------------*/ #ifdef __cplusplus diff --git a/FreeRTOS/Source/portable/readme.txt b/FreeRTOS/Source/portable/readme.txt deleted file mode 100644 index b68d2d5..0000000 --- a/FreeRTOS/Source/portable/readme.txt +++ /dev/null @@ -1,20 +0,0 @@ -Each real time kernel port consists of three files that contain the core kernel -components and are common to every port, and one or more files that are -specific to a particular microcontroller and/or compiler. - - -+ The FreeRTOS/Source/Portable/MemMang directory contains the five sample -memory allocators as described on the http://www.FreeRTOS.org WEB site. - -+ The other directories each contain files specific to a particular -microcontroller or compiler, where the directory name denotes the compiler -specific files the directory contains. - - - -For example, if you are interested in the [compiler] port for the [architecture] -microcontroller, then the port specific files are contained in -FreeRTOS/Source/Portable/[compiler]/[architecture] directory. If this is the -only port you are interested in then all the other directories can be -ignored. - diff --git a/FreeRTOS/Source/queue.c b/FreeRTOS/Source/queue.c index 9b60797..57fcf96 100644 --- a/FreeRTOS/Source/queue.c +++ b/FreeRTOS/Source/queue.c @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ #include #include @@ -41,99 +78,75 @@ task.h is included from an application file. */ #include "croutine.h" #endif -/* Lint e9021, e961 and e750 are suppressed as a MISRA exception justified -because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined -for the header files above, but not in this file, in order to generate the -correct privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750 !e9021. */ +/* Lint e961 and e750 are suppressed as a MISRA exception justified because the +MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the +header files above, but not in this file, in order to generate the correct +privileged Vs unprivileged linkage and placement. */ +#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */ -/* Constants used with the cRxLock and cTxLock structure members. */ -#define queueUNLOCKED ( ( int8_t ) -1 ) -#define queueLOCKED_UNMODIFIED ( ( int8_t ) 0 ) +/* Constants used with the cRxLock and xTxLock structure members. */ +#define queueUNLOCKED ( ( signed portBASE_TYPE ) -1 ) +#define queueLOCKED_UNMODIFIED ( ( signed portBASE_TYPE ) 0 ) -/* When the Queue_t structure is used to represent a base queue its pcHead and +/* When the xQUEUE structure is used to represent a base queue its pcHead and pcTail members are used as pointers into the queue storage area. When the -Queue_t structure is used to represent a mutex pcHead and pcTail pointers are +xQUEUE structure is used to represent a mutex pcHead and pcTail pointers are not necessary, and the pcHead pointer is set to NULL to indicate that the -structure instead holds a pointer to the mutex holder (if any). Map alternative -names to the pcHead and structure member to ensure the readability of the code -is maintained. The QueuePointers_t and SemaphoreData_t types are used to form -a union as their usage is mutually exclusive dependent on what the queue is -being used for. */ +pcTail pointer actually points to the mutex holder (if any). Map alternative +names to the pcHead and pcTail structure members to ensure the readability of +the code is maintained despite this dual use of two structure members. An +alternative implementation would be to use a union, but use of a union is +against the coding standard (although an exception to the standard has been +permitted where the dual use also significantly changes the type of the +structure member). */ +#define pxMutexHolder pcTail #define uxQueueType pcHead #define queueQUEUE_IS_MUTEX NULL -typedef struct QueuePointers -{ - int8_t *pcTail; /*< Points to the byte at the end of the queue storage area. Once more byte is allocated than necessary to store the queue items, this is used as a marker. */ - int8_t *pcReadFrom; /*< Points to the last place that a queued item was read from when the structure is used as a queue. */ -} QueuePointers_t; - -typedef struct SemaphoreData -{ - TaskHandle_t xMutexHolder; /*< The handle of the task that holds the mutex. */ - UBaseType_t uxRecursiveCallCount;/*< Maintains a count of the number of times a recursive mutex has been recursively 'taken' when the structure is used as a mutex. */ -} SemaphoreData_t; - /* Semaphores do not actually store or copy data, so have an item size of zero. */ -#define queueSEMAPHORE_QUEUE_ITEM_LENGTH ( ( UBaseType_t ) 0 ) -#define queueMUTEX_GIVE_BLOCK_TIME ( ( TickType_t ) 0U ) +#define queueSEMAPHORE_QUEUE_ITEM_LENGTH ( ( unsigned portBASE_TYPE ) 0 ) +#define queueMUTEX_GIVE_BLOCK_TIME ( ( portTickType ) 0U ) -#if( configUSE_PREEMPTION == 0 ) - /* If the cooperative scheduler is being used then a yield should not be - performed just because a higher priority task has been woken. */ - #define queueYIELD_IF_USING_PREEMPTION() -#else - #define queueYIELD_IF_USING_PREEMPTION() portYIELD_WITHIN_API() -#endif /* * Definition of the queue used by the scheduler. - * Items are queued by copy, not reference. See the following link for the - * rationale: https://www.freertos.org/Embedded-RTOS-Queues.html + * Items are queued by copy, not reference. */ -typedef struct QueueDefinition /* The old naming convention is used to prevent breaking kernel aware debuggers. */ +typedef struct QueueDefinition { - int8_t *pcHead; /*< Points to the beginning of the queue storage area. */ - int8_t *pcWriteTo; /*< Points to the free next place in the storage area. */ + signed char *pcHead; /*< Points to the beginning of the queue storage area. */ + signed char *pcTail; /*< Points to the byte at the end of the queue storage area. Once more byte is allocated than necessary to store the queue items, this is used as a marker. */ - union + signed char *pcWriteTo; /*< Points to the free next place in the storage area. */ + + union /* Use of a union is an exception to the coding standard to ensure two mutually exclusive structure members don't appear simultaneously (wasting RAM). */ { - QueuePointers_t xQueue; /*< Data required exclusively when this structure is used as a queue. */ - SemaphoreData_t xSemaphore; /*< Data required exclusively when this structure is used as a semaphore. */ + signed char *pcReadFrom; /*< Points to the last place that a queued item was read from when the structure is used as a queue. */ + unsigned portBASE_TYPE uxRecursiveCallCount;/*< Maintains a count of the numebr of times a recursive mutex has been recursively 'taken' when the structure is used as a mutex. */ } u; - List_t xTasksWaitingToSend; /*< List of tasks that are blocked waiting to post onto this queue. Stored in priority order. */ - List_t xTasksWaitingToReceive; /*< List of tasks that are blocked waiting to read from this queue. Stored in priority order. */ + xList xTasksWaitingToSend; /*< List of tasks that are blocked waiting to post onto this queue. Stored in priority order. */ + xList xTasksWaitingToReceive; /*< List of tasks that are blocked waiting to read from this queue. Stored in priority order. */ - volatile UBaseType_t uxMessagesWaiting;/*< The number of items currently in the queue. */ - UBaseType_t uxLength; /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */ - UBaseType_t uxItemSize; /*< The size of each items that the queue will hold. */ + volatile unsigned portBASE_TYPE uxMessagesWaiting;/*< The number of items currently in the queue. */ + unsigned portBASE_TYPE uxLength; /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */ + unsigned portBASE_TYPE uxItemSize; /*< The size of each items that the queue will hold. */ - volatile int8_t cRxLock; /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ - volatile int8_t cTxLock; /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ + volatile signed portBASE_TYPE xRxLock; /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ + volatile signed portBASE_TYPE xTxLock; /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ - #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the memory used by the queue was statically allocated to ensure no attempt is made to free the memory. */ + #if ( configUSE_TRACE_FACILITY == 1 ) + unsigned char ucQueueNumber; + unsigned char ucQueueType; #endif #if ( configUSE_QUEUE_SETS == 1 ) struct QueueDefinition *pxQueueSetContainer; #endif - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxQueueNumber; - uint8_t ucQueueType; - #endif - } xQUEUE; - -/* The old xQUEUE name is maintained above then typedefed to the new Queue_t -name below to enable the use of older kernel aware debuggers. */ -typedef xQUEUE Queue_t; - /*-----------------------------------------------------------*/ /* @@ -147,19 +160,14 @@ typedef xQUEUE Queue_t; more user friendly. */ typedef struct QUEUE_REGISTRY_ITEM { - const char *pcQueueName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - QueueHandle_t xHandle; + signed char *pcQueueName; + xQueueHandle xHandle; } xQueueRegistryItem; - /* The old xQueueRegistryItem name is maintained above then typedefed to the - new xQueueRegistryItem name below to enable the use of older kernel aware - debuggers. */ - typedef xQueueRegistryItem QueueRegistryItem_t; - - /* The queue registry is simply an array of QueueRegistryItem_t structures. + /* The queue registry is simply an array of xQueueRegistryItem structures. The pcQueueName member of a structure being NULL is indicative of the array position being vacant. */ - PRIVILEGED_DATA QueueRegistryItem_t xQueueRegistry[ configQUEUE_REGISTRY_SIZE ]; + xQueueRegistryItem xQueueRegistry[ configQUEUE_REGISTRY_SIZE ]; #endif /* configQUEUE_REGISTRY_SIZE */ @@ -171,66 +179,41 @@ typedef xQUEUE Queue_t; * to indicate that a task may require unblocking. When the queue in unlocked * these lock counts are inspected, and the appropriate action taken. */ -static void prvUnlockQueue( Queue_t * const pxQueue ) PRIVILEGED_FUNCTION; +static void IRAM prvUnlockQueue( xQUEUE *pxQueue ) PRIVILEGED_FUNCTION; /* * Uses a critical section to determine if there is any data in a queue. * * @return pdTRUE if the queue contains no items, otherwise pdFALSE. */ -static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue ) PRIVILEGED_FUNCTION; +static signed portBASE_TYPE prvIsQueueEmpty( const xQUEUE *pxQueue ) PRIVILEGED_FUNCTION; /* * Uses a critical section to determine if there is any space in a queue. * * @return pdTRUE if there is no space, otherwise pdFALSE; */ -static BaseType_t prvIsQueueFull( const Queue_t *pxQueue ) PRIVILEGED_FUNCTION; +static signed portBASE_TYPE prvIsQueueFull( const xQUEUE *pxQueue ) PRIVILEGED_FUNCTION; /* * Copies an item into the queue, either at the front of the queue or the * back of the queue. */ -static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition ) PRIVILEGED_FUNCTION; +static void prvCopyDataToQueue( xQUEUE *pxQueue, const void *pvItemToQueue, portBASE_TYPE xPosition ) PRIVILEGED_FUNCTION; /* * Copies an item out of a queue. */ -static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION; +static void prvCopyDataFromQueue( xQUEUE * const pxQueue, const void * const pvBuffer ) PRIVILEGED_FUNCTION; #if ( configUSE_QUEUE_SETS == 1 ) /* * Checks to see if a queue is a member of a queue set, and if so, notifies * the queue set that the queue contains data. */ - static BaseType_t prvNotifyQueueSetContainer( const Queue_t * const pxQueue, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION; + static portBASE_TYPE prvNotifyQueueSetContainer( const xQUEUE * const pxQueue, portBASE_TYPE xCopyPosition ) PRIVILEGED_FUNCTION; #endif -/* - * Called after a Queue_t structure has been allocated either statically or - * dynamically to fill in the structure's members. - */ -static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue ) PRIVILEGED_FUNCTION; - -/* - * Mutexes are a special type of queue. When a mutex is created, first the - * queue is created, then prvInitialiseMutex() is called to configure the queue - * as a mutex. - */ -#if( configUSE_MUTEXES == 1 ) - static void prvInitialiseMutex( Queue_t *pxNewQueue ) PRIVILEGED_FUNCTION; -#endif - -#if( configUSE_MUTEXES == 1 ) - /* - * If a task waiting for a mutex causes the mutex holder to inherit a - * priority, but the waiting task times out, then the holder should - * disinherit the priority - but only down to the highest priority of any - * other tasks that are waiting for the same mutex. This function returns - * that priority. - */ - static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue ) PRIVILEGED_FUNCTION; -#endif /*-----------------------------------------------------------*/ /* @@ -240,54 +223,45 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT #define prvLockQueue( pxQueue ) \ taskENTER_CRITICAL(); \ { \ - if( ( pxQueue )->cRxLock == queueUNLOCKED ) \ + if( ( pxQueue )->xRxLock == queueUNLOCKED ) \ { \ - ( pxQueue )->cRxLock = queueLOCKED_UNMODIFIED; \ + ( pxQueue )->xRxLock = queueLOCKED_UNMODIFIED; \ } \ - if( ( pxQueue )->cTxLock == queueUNLOCKED ) \ + if( ( pxQueue )->xTxLock == queueUNLOCKED ) \ { \ - ( pxQueue )->cTxLock = queueLOCKED_UNMODIFIED; \ + ( pxQueue )->xTxLock = queueLOCKED_UNMODIFIED; \ } \ } \ taskEXIT_CRITICAL() /*-----------------------------------------------------------*/ - -BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) +portBASE_TYPE xQueueGenericReset( xQueueHandle xQueue, portBASE_TYPE xNewQueue ) { -Queue_t * const pxQueue = xQueue; +xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; configASSERT( pxQueue ); taskENTER_CRITICAL(); { - pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ - pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U; + pxQueue->pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); + pxQueue->uxMessagesWaiting = ( unsigned portBASE_TYPE ) 0U; pxQueue->pcWriteTo = pxQueue->pcHead; - pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - 1U ) * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ - pxQueue->cRxLock = queueUNLOCKED; - pxQueue->cTxLock = queueUNLOCKED; + pxQueue->u.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - ( unsigned portBASE_TYPE ) 1U ) * pxQueue->uxItemSize ); + pxQueue->xRxLock = queueUNLOCKED; + pxQueue->xTxLock = queueUNLOCKED; if( xNewQueue == pdFALSE ) { /* If there are tasks blocked waiting to read from the queue, then the tasks will remain blocked as after this function exits the queue - will still be empty. If there are tasks blocked waiting to write to + will still be empty. If there are tasks blocked waiting to write to the queue, then one should be unblocked as after this function exits it will be possible to write to it. */ if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) == pdTRUE ) { - queueYIELD_IF_USING_PREEMPTION(); + portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } else @@ -305,252 +279,143 @@ Queue_t * const pxQueue = xQueue; } /*-----------------------------------------------------------*/ -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) - { - Queue_t *pxNewQueue; - - configASSERT( uxQueueLength > ( UBaseType_t ) 0 ); - - /* The StaticQueue_t structure and the queue storage area must be - supplied. */ - configASSERT( pxStaticQueue != NULL ); - - /* A queue storage area should be provided if the item size is not 0, and - should not be provided if the item size is 0. */ - configASSERT( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) ); - configASSERT( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) ); - - #if( configASSERT_DEFINED == 1 ) - { - /* Sanity check that the size of the structure used to declare a - variable of type StaticQueue_t or StaticSemaphore_t equals the size of - the real queue and semaphore structures. */ - volatile size_t xSize = sizeof( StaticQueue_t ); - configASSERT( xSize == sizeof( Queue_t ) ); - ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */ - } - #endif /* configASSERT_DEFINED */ - - /* The address of a statically allocated queue was passed in, use it. - The address of a statically allocated storage area was also passed in - but is already set. */ - pxNewQueue = ( Queue_t * ) pxStaticQueue; /*lint !e740 !e9087 Unusual cast is ok as the structures are designed to have the same alignment, and the size is checked by an assert. */ - - if( pxNewQueue != NULL ) - { - #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - { - /* Queues can be allocated wither statically or dynamically, so - note this queue was allocated statically in case the queue is - later deleted. */ - pxNewQueue->ucStaticallyAllocated = pdTRUE; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - - prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue ); - } - else - { - traceQUEUE_CREATE_FAILED( ucQueueType ); - mtCOVERAGE_TEST_MARKER(); - } - - return pxNewQueue; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) - { - Queue_t *pxNewQueue; - size_t xQueueSizeInBytes; - uint8_t *pucQueueStorage; - - configASSERT( uxQueueLength > ( UBaseType_t ) 0 ); - - if( uxItemSize == ( UBaseType_t ) 0 ) - { - /* There is not going to be a queue storage area. */ - xQueueSizeInBytes = ( size_t ) 0; - } - else - { - /* Allocate enough space to hold the maximum number of items that - can be in the queue at any time. */ - xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - } - - /* Allocate the queue and storage area. Justification for MISRA - deviation as follows: pvPortMalloc() always ensures returned memory - blocks are aligned per the requirements of the MCU stack. In this case - pvPortMalloc() must return a pointer that is guaranteed to meet the - alignment requirements of the Queue_t structure - which in this case - is an int8_t *. Therefore, whenever the stack alignment requirements - are greater than or equal to the pointer to char requirements the cast - is safe. In other cases alignment requirements are not strict (one or - two bytes). */ - pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); /*lint !e9087 !e9079 see comment above. */ - - if( pxNewQueue != NULL ) - { - /* Jump past the queue structure to find the location of the queue - storage area. */ - pucQueueStorage = ( uint8_t * ) pxNewQueue; - pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */ - - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - /* Queues can be created either statically or dynamically, so - note this task was created dynamically in case it is later - deleted. */ - pxNewQueue->ucStaticallyAllocated = pdFALSE; - } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - - prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue ); - } - else - { - traceQUEUE_CREATE_FAILED( ucQueueType ); - mtCOVERAGE_TEST_MARKER(); - } - - return pxNewQueue; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue ) +xQueueHandle xQueueGenericCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize, unsigned char ucQueueType ) { +xQUEUE *pxNewQueue; +size_t xQueueSizeInBytes; +xQueueHandle xReturn = NULL; + /* Remove compiler warnings about unused parameters should configUSE_TRACE_FACILITY not be set to 1. */ ( void ) ucQueueType; - if( uxItemSize == ( UBaseType_t ) 0 ) + /* Allocate the new queue structure. */ + if( uxQueueLength > ( unsigned portBASE_TYPE ) 0 ) { - /* No RAM was allocated for the queue storage area, but PC head cannot - be set to NULL because NULL is used as a key to say the queue is used as - a mutex. Therefore just set pcHead to point to the queue as a benign - value that is known to be within the memory map. */ - pxNewQueue->pcHead = ( int8_t * ) pxNewQueue; - } - else - { - /* Set the head to the start of the queue storage area. */ - pxNewQueue->pcHead = ( int8_t * ) pucQueueStorage; + pxNewQueue = ( xQUEUE * ) pvPortMalloc( sizeof( xQUEUE ) ); + if( pxNewQueue != NULL ) + { + /* Create the list of pointers to queue items. The queue is one byte + longer than asked for to make wrap checking easier/faster. */ + xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ) + ( size_t ) 1; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + + pxNewQueue->pcHead = ( signed char * ) pvPortMalloc( xQueueSizeInBytes ); + if( pxNewQueue->pcHead != NULL ) + { + /* Initialise the queue members as described above where the + queue type is defined. */ + pxNewQueue->uxLength = uxQueueLength; + pxNewQueue->uxItemSize = uxItemSize; + ( void ) xQueueGenericReset( pxNewQueue, pdTRUE ); + + #if ( configUSE_TRACE_FACILITY == 1 ) + { + pxNewQueue->ucQueueType = ucQueueType; + } + #endif /* configUSE_TRACE_FACILITY */ + + #if( configUSE_QUEUE_SETS == 1 ) + { + pxNewQueue->pxQueueSetContainer = NULL; + } + #endif /* configUSE_QUEUE_SETS */ + + traceQUEUE_CREATE( pxNewQueue ); + xReturn = pxNewQueue; + } + else + { + traceQUEUE_CREATE_FAILED( ucQueueType ); + vPortFree( pxNewQueue ); + } + } } - /* Initialise the queue members as described where the queue type is - defined. */ - pxNewQueue->uxLength = uxQueueLength; - pxNewQueue->uxItemSize = uxItemSize; - ( void ) xQueueGenericReset( pxNewQueue, pdTRUE ); + configASSERT( xReturn ); - #if ( configUSE_TRACE_FACILITY == 1 ) - { - pxNewQueue->ucQueueType = ucQueueType; - } - #endif /* configUSE_TRACE_FACILITY */ - - #if( configUSE_QUEUE_SETS == 1 ) - { - pxNewQueue->pxQueueSetContainer = NULL; - } - #endif /* configUSE_QUEUE_SETS */ - - traceQUEUE_CREATE( pxNewQueue ); + return xReturn; } /*-----------------------------------------------------------*/ -#if( configUSE_MUTEXES == 1 ) - - static void prvInitialiseMutex( Queue_t *pxNewQueue ) +#if ( configUSE_MUTEXES == 1 ) + xQueueHandle xQueueCreateMutex( unsigned char ucQueueType ) { - if( pxNewQueue != NULL ) - { - /* The queue create function will set all the queue structure members - correctly for a generic queue, but this function is creating a - mutex. Overwrite those members that need to be set differently - - in particular the information required for priority inheritance. */ - pxNewQueue->u.xSemaphore.xMutexHolder = NULL; - pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX; - - /* In case this is a recursive mutex. */ - pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0; - - traceCREATE_MUTEX( pxNewQueue ); - - /* Start with the semaphore in the expected state. */ - ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK ); - } - else - { - traceCREATE_MUTEX_FAILED(); - } - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - - QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) - { - QueueHandle_t xNewQueue; - const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0; - - xNewQueue = xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType ); - prvInitialiseMutex( ( Queue_t * ) xNewQueue ); - - return xNewQueue; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - - QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) - { - QueueHandle_t xNewQueue; - const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0; + xQUEUE *pxNewQueue; /* Prevent compiler warnings about unused parameters if configUSE_TRACE_FACILITY does not equal 1. */ ( void ) ucQueueType; - xNewQueue = xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType ); - prvInitialiseMutex( ( Queue_t * ) xNewQueue ); + /* Allocate the new queue structure. */ + pxNewQueue = ( xQUEUE * ) pvPortMalloc( sizeof( xQUEUE ) ); + if( pxNewQueue != NULL ) + { + /* Information required for priority inheritance. */ + pxNewQueue->pxMutexHolder = NULL; + pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX; - return xNewQueue; + /* Queues used as a mutex no data is actually copied into or out + of the queue. */ + pxNewQueue->pcWriteTo = NULL; + pxNewQueue->u.pcReadFrom = NULL; + + /* Each mutex has a length of 1 (like a binary semaphore) and + an item size of 0 as nothing is actually copied into or out + of the mutex. */ + pxNewQueue->uxMessagesWaiting = ( unsigned portBASE_TYPE ) 0U; + pxNewQueue->uxLength = ( unsigned portBASE_TYPE ) 1U; + pxNewQueue->uxItemSize = ( unsigned portBASE_TYPE ) 0U; + pxNewQueue->xRxLock = queueUNLOCKED; + pxNewQueue->xTxLock = queueUNLOCKED; + + #if ( configUSE_TRACE_FACILITY == 1 ) + { + pxNewQueue->ucQueueType = ucQueueType; + } + #endif + + #if ( configUSE_QUEUE_SETS == 1 ) + { + pxNewQueue->pxQueueSetContainer = NULL; + } + #endif + + /* Ensure the event queues start with the correct state. */ + vListInitialise( &( pxNewQueue->xTasksWaitingToSend ) ); + vListInitialise( &( pxNewQueue->xTasksWaitingToReceive ) ); + + traceCREATE_MUTEX( pxNewQueue ); + + /* Start with the semaphore in the expected state. */ + ( void ) xQueueGenericSend( pxNewQueue, NULL, ( portTickType ) 0U, queueSEND_TO_BACK ); + } + else + { + traceCREATE_MUTEX_FAILED(); + } + + configASSERT( pxNewQueue ); + return pxNewQueue; } #endif /* configUSE_MUTEXES */ /*-----------------------------------------------------------*/ #if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) ) - - TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) + void* xQueueGetMutexHolder( xQueueHandle xSemaphore ) { - TaskHandle_t pxReturn; - Queue_t * const pxSemaphore = ( Queue_t * ) xSemaphore; + void *pxReturn; /* This function is called by xSemaphoreGetMutexHolder(), and should not - be called directly. Note: This is a good way of determining if the + be called directly. Note: This is is a good way of determining if the calling task is the mutex holder, but not a good way of determining the identity of the mutex holder, as the holder may change between the following critical section exiting and the function returning. */ taskENTER_CRITICAL(); { - if( pxSemaphore->uxQueueType == queueQUEUE_IS_MUTEX ) + if( ( ( xQUEUE * ) xSemaphore )->uxQueueType == queueQUEUE_IS_MUTEX ) { - pxReturn = pxSemaphore->u.xSemaphore.xMutexHolder; + pxReturn = ( void * ) ( ( xQUEUE * ) xSemaphore )->pxMutexHolder; } else { @@ -560,81 +425,49 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT taskEXIT_CRITICAL(); return pxReturn; - } /*lint !e818 xSemaphore cannot be a pointer to const because it is a typedef. */ - -#endif -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) ) - - TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) - { - TaskHandle_t pxReturn; - - configASSERT( xSemaphore ); - - /* Mutexes cannot be used in interrupt service routines, so the mutex - holder should not change in an ISR, and therefore a critical section is - not required here. */ - if( ( ( Queue_t * ) xSemaphore )->uxQueueType == queueQUEUE_IS_MUTEX ) - { - pxReturn = ( ( Queue_t * ) xSemaphore )->u.xSemaphore.xMutexHolder; - } - else - { - pxReturn = NULL; - } - - return pxReturn; - } /*lint !e818 xSemaphore cannot be a pointer to const because it is a typedef. */ + } #endif /*-----------------------------------------------------------*/ #if ( configUSE_RECURSIVE_MUTEXES == 1 ) - - BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) + portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle xMutex ) { - BaseType_t xReturn; - Queue_t * const pxMutex = ( Queue_t * ) xMutex; + portBASE_TYPE xReturn; + xQUEUE * const pxMutex = ( xQUEUE * ) xMutex; configASSERT( pxMutex ); - /* If this is the task that holds the mutex then xMutexHolder will not + /* If this is the task that holds the mutex then pxMutexHolder will not change outside of this task. If this task does not hold the mutex then pxMutexHolder can never coincidentally equal the tasks handle, and as this is the only condition we are interested in it does not matter if pxMutexHolder is accessed simultaneously by another task. Therefore no mutual exclusion is required to test the pxMutexHolder variable. */ - if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() ) + if( pxMutex->pxMutexHolder == ( void * ) xTaskGetCurrentTaskHandle() ) /*lint !e961 Not a redundant cast as xTaskHandle is a typedef. */ { traceGIVE_MUTEX_RECURSIVE( pxMutex ); - /* uxRecursiveCallCount cannot be zero if xMutexHolder is equal to + /* uxRecursiveCallCount cannot be zero if pxMutexHolder is equal to the task handle, therefore no underflow check is required. Also, uxRecursiveCallCount is only modified by the mutex holder, and as there can only be one, no mutual exclusion is required to modify the uxRecursiveCallCount member. */ - ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--; + ( pxMutex->u.uxRecursiveCallCount )--; - /* Has the recursive call count unwound to 0? */ - if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 ) + /* Have we unwound the call count? */ + if( pxMutex->u.uxRecursiveCallCount == ( unsigned portBASE_TYPE ) 0 ) { /* Return the mutex. This will automatically unblock any other task that might be waiting to access the mutex. */ ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } xReturn = pdPASS; } else { - /* The mutex cannot be given because the calling task is not the - holder. */ + /* We cannot give the mutex because we are not the holder. */ xReturn = pdFAIL; traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex ); @@ -647,11 +480,10 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT /*-----------------------------------------------------------*/ #if ( configUSE_RECURSIVE_MUTEXES == 1 ) - - BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) + portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle xMutex, portTickType xBlockTime ) { - BaseType_t xReturn; - Queue_t * const pxMutex = ( Queue_t * ) xMutex; + portBASE_TYPE xReturn; + xQUEUE * const pxMutex = ( xQUEUE * ) xMutex; configASSERT( pxMutex ); @@ -660,21 +492,20 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT traceTAKE_MUTEX_RECURSIVE( pxMutex ); - if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() ) + if( pxMutex->pxMutexHolder == ( void * ) xTaskGetCurrentTaskHandle() ) /*lint !e961 Cast is not redundant as xTaskHandle is a typedef. */ { - ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++; + ( pxMutex->u.uxRecursiveCallCount )++; xReturn = pdPASS; } else { - xReturn = xQueueSemaphoreTake( pxMutex, xTicksToWait ); + xReturn = xQueueGenericReceive( pxMutex, NULL, xBlockTime, pdFALSE ); - /* pdPASS will only be returned if the mutex was successfully - obtained. The calling task may have entered the Blocked state - before reaching here. */ - if( xReturn != pdFAIL ) + /* pdPASS will only be returned if we successfully obtained the mutex, + we may have blocked to reach here. */ + if( xReturn == pdPASS ) { - ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++; + ( pxMutex->u.uxRecursiveCallCount )++; } else { @@ -688,20 +519,16 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT #endif /* configUSE_RECURSIVE_MUTEXES */ /*-----------------------------------------------------------*/ -#if( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - - QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) +#if ( configUSE_COUNTING_SEMAPHORES == 1 ) + xQueueHandle xQueueCreateCountingSemaphore( unsigned portBASE_TYPE uxCountValue, unsigned portBASE_TYPE uxInitialCount ) { - QueueHandle_t xHandle; + xQueueHandle xHandle; - configASSERT( uxMaxCount != 0 ); - configASSERT( uxInitialCount <= uxMaxCount ); - - xHandle = xQueueGenericCreateStatic( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticQueue, queueQUEUE_TYPE_COUNTING_SEMAPHORE ); + xHandle = xQueueGenericCreate( uxCountValue, queueSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_COUNTING_SEMAPHORE ); if( xHandle != NULL ) { - ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount; + ( ( xQUEUE * ) xHandle )->uxMessagesWaiting = uxInitialCount; traceCREATE_COUNTING_SEMAPHORE(); } @@ -710,96 +537,48 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseT traceCREATE_COUNTING_SEMAPHORE_FAILED(); } + configASSERT( xHandle ); return xHandle; } -#endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */ +#endif /* configUSE_COUNTING_SEMAPHORES */ /*-----------------------------------------------------------*/ - -#if( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - - QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) - { - QueueHandle_t xHandle; - - configASSERT( uxMaxCount != 0 ); - configASSERT( uxInitialCount <= uxMaxCount ); - - xHandle = xQueueGenericCreate( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_COUNTING_SEMAPHORE ); - - if( xHandle != NULL ) - { - ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount; - - traceCREATE_COUNTING_SEMAPHORE(); - } - else - { - traceCREATE_COUNTING_SEMAPHORE_FAILED(); - } - - return xHandle; - } - -#endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */ -/*-----------------------------------------------------------*/ - -BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) +signed portBASE_TYPE IRAM xQueueGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ) { -BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired; -TimeOut_t xTimeOut; -Queue_t * const pxQueue = xQueue; +signed portBASE_TYPE xEntryTimeSet = pdFALSE; +xTimeOutType xTimeOut; +xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; configASSERT( pxQueue ); - configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); + configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) ); configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) ); - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - /*lint -save -e904 This function relaxes the coding standard somewhat to - allow return statements within the function itself. This is done in the - interest of execution time efficiency. */ + /* This function relaxes the coding standard somewhat to allow return + statements within the function itself. This is done in the interest + of execution time efficiency. */ for( ;; ) { taskENTER_CRITICAL(); { - /* Is there room on the queue now? The running task must be the - highest priority task wanting to access the queue. If the head item - in the queue is to be overwritten then it does not matter if the - queue is full. */ + /* Is there room on the queue now? The running task must be + the highest priority task wanting to access the queue. If + the head item in the queue is to be overwritten then it does + not matter if the queue is full. */ if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) ) { traceQUEUE_SEND( pxQueue ); + prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); #if ( configUSE_QUEUE_SETS == 1 ) { - UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting; - - xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); - if( pxQueue->pxQueueSetContainer != NULL ) { - if( ( xCopyPosition == queueOVERWRITE ) && ( uxPreviousMessagesWaiting != ( UBaseType_t ) 0 ) ) - { - /* Do not notify the queue set as an existing item - was overwritten in the queue so the number of items - in the queue has not changed. */ - mtCOVERAGE_TEST_MARKER(); - } - else if( prvNotifyQueueSetContainer( pxQueue, xCopyPosition ) != pdFALSE ) + if( prvNotifyQueueSetContainer( pxQueue, xCopyPosition ) == pdTRUE ) { /* The queue is a member of a queue set, and posting to the queue set caused a higher priority task to unblock. A context switch is required. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); + portYIELD_WITHIN_API(); } } else @@ -808,75 +587,44 @@ Queue_t * const pxQueue = xQueue; queue then unblock it now. */ if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) == pdTRUE ) { /* The unblocked task has a priority higher than our own so yield immediately. Yes it is ok to do this from within the critical section - the kernel takes care of that. */ - queueYIELD_IF_USING_PREEMPTION(); + portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else if( xYieldRequired != pdFALSE ) - { - /* This path is a special case that will only get - executed if the task was holding multiple mutexes - and the mutexes were given back in an order that is - different to that in which they were taken. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); } } } #else /* configUSE_QUEUE_SETS */ { - xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); - /* If there was a task waiting for data to arrive on the queue then unblock it now. */ if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) == pdTRUE ) { /* The unblocked task has a priority higher than our own so yield immediately. Yes it is ok to do this from within the critical section - the kernel takes care of that. */ - queueYIELD_IF_USING_PREEMPTION(); + portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else if( xYieldRequired != pdFALSE ) - { - /* This path is a special case that will only get - executed if the task was holding multiple mutexes and - the mutexes were given back in an order that is - different to that in which they were taken. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); } } #endif /* configUSE_QUEUE_SETS */ taskEXIT_CRITICAL(); + + /* Return to the original privilege level before exiting the + function. */ return pdPASS; } else { - if( xTicksToWait == ( TickType_t ) 0 ) + if( xTicksToWait == ( portTickType ) 0 ) { /* The queue was full and no block time is specified (or the block time has expired) so leave now. */ @@ -891,13 +639,12 @@ Queue_t * const pxQueue = xQueue; { /* The queue was full and a block time was specified so configure the timeout structure. */ - vTaskInternalSetTimeOutState( &xTimeOut ); + vTaskSetTimeOutState( &xTimeOut ); xEntryTimeSet = pdTRUE; } else { - /* Entry time was already set. */ - mtCOVERAGE_TEST_MARKER(); + /* Entry time was already set. */ } } } @@ -918,8 +665,8 @@ Queue_t * const pxQueue = xQueue; vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait ); /* Unlocking the queue means queue events can effect the - event list. It is possible that interrupts occurring now - remove this task from the event list again - but as the + event list. It is possible that interrupts occurring now + remove this task from the event list again - but as the scheduler is suspended the task will go onto the pending ready last instead of the actual ready list. */ prvUnlockQueue( pxQueue ); @@ -947,26 +694,235 @@ Queue_t * const pxQueue = xQueue; prvUnlockQueue( pxQueue ); ( void ) xTaskResumeAll(); + /* Return to the original privilege level before exiting the + function. */ traceQUEUE_SEND_FAILED( pxQueue ); return errQUEUE_FULL; } - } /*lint -restore */ + } } /*-----------------------------------------------------------*/ -BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) +#if ( configUSE_ALTERNATIVE_API == 1 ) + signed portBASE_TYPE xQueueAltGenericSend( xQueueHandle xQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ) + { + signed portBASE_TYPE xEntryTimeSet = pdFALSE; + xTimeOutType xTimeOut; + xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; + + configASSERT( pxQueue ); + configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) ); + + for( ;; ) + { + taskENTER_CRITICAL(); + { + /* Is there room on the queue now? To be running we must be + the highest priority task wanting to access the queue. */ + if( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) + { + traceQUEUE_SEND( pxQueue ); + prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); + + /* If there was a task waiting for data to arrive on the + queue then unblock it now. */ + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) + { + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) == pdTRUE ) + { + /* The unblocked task has a priority higher than + our own so yield immediately. */ + portYIELD_WITHIN_API(); + } + } + + taskEXIT_CRITICAL(); + return pdPASS; + } + else + { + if( xTicksToWait == ( portTickType ) 0 ) + { + taskEXIT_CRITICAL(); + return errQUEUE_FULL; + } + else if( xEntryTimeSet == pdFALSE ) + { + vTaskSetTimeOutState( &xTimeOut ); + xEntryTimeSet = pdTRUE; + } + } + } + taskEXIT_CRITICAL(); + + taskENTER_CRITICAL(); + { + if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) + { + if( prvIsQueueFull( pxQueue ) != pdFALSE ) + { + traceBLOCKING_ON_QUEUE_SEND( pxQueue ); + vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait ); + portYIELD_WITHIN_API(); + } + } + else + { + taskEXIT_CRITICAL(); + traceQUEUE_SEND_FAILED( pxQueue ); + return errQUEUE_FULL; + } + } + taskEXIT_CRITICAL(); + } + } + +#endif /* configUSE_ALTERNATIVE_API */ +/*-----------------------------------------------------------*/ + +#if ( configUSE_ALTERNATIVE_API == 1 ) + signed portBASE_TYPE xQueueAltGenericReceive( xQueueHandle xQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ) + { + signed portBASE_TYPE xEntryTimeSet = pdFALSE; + xTimeOutType xTimeOut; + signed char *pcOriginalReadPosition; + xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; + + configASSERT( pxQueue ); + configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) ); + + for( ;; ) + { + taskENTER_CRITICAL(); + { + if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) + { + /* Remember our read position in case we are just peeking. */ + pcOriginalReadPosition = pxQueue->u.pcReadFrom; + + prvCopyDataFromQueue( pxQueue, pvBuffer ); + + if( xJustPeeking == pdFALSE ) + { + traceQUEUE_RECEIVE( pxQueue ); + + /* Data is actually being removed (not just peeked). */ + --( pxQueue->uxMessagesWaiting ); + + #if ( configUSE_MUTEXES == 1 ) + { + if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) + { + /* Record the information required to implement + priority inheritance should it become necessary. */ + pxQueue->pxMutexHolder = ( signed char * ) xTaskGetCurrentTaskHandle(); + } + } + #endif + + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) + { + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) == pdTRUE ) + { + portYIELD_WITHIN_API(); + } + } + } + else + { + traceQUEUE_PEEK( pxQueue ); + + /* We are not removing the data, so reset our read + pointer. */ + pxQueue->u.pcReadFrom = pcOriginalReadPosition; + + /* The data is being left in the queue, so see if there are + any other tasks waiting for the data. */ + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) + { + /* Tasks that are removed from the event list will get added to + the pending ready list as the scheduler is still suspended. */ + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + { + /* The task waiting has a higher priority than this task. */ + portYIELD_WITHIN_API(); + } + } + + } + + taskEXIT_CRITICAL(); + return pdPASS; + } + else + { + if( xTicksToWait == ( portTickType ) 0 ) + { + taskEXIT_CRITICAL(); + traceQUEUE_RECEIVE_FAILED( pxQueue ); + return errQUEUE_EMPTY; + } + else if( xEntryTimeSet == pdFALSE ) + { + vTaskSetTimeOutState( &xTimeOut ); + xEntryTimeSet = pdTRUE; + } + } + } + taskEXIT_CRITICAL(); + + taskENTER_CRITICAL(); + { + if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) + { + if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) + { + traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ); + + #if ( configUSE_MUTEXES == 1 ) + { + if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) + { + portENTER_CRITICAL(); + { + vTaskPriorityInherit( ( void * ) pxQueue->pxMutexHolder ); + } + portEXIT_CRITICAL(); + } + } + #endif + + vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); + portYIELD_WITHIN_API(); + } + } + else + { + taskEXIT_CRITICAL(); + traceQUEUE_RECEIVE_FAILED( pxQueue ); + return errQUEUE_EMPTY; + } + } + taskEXIT_CRITICAL(); + } + } + + +#endif /* configUSE_ALTERNATIVE_API */ +/*-----------------------------------------------------------*/ +signed portBASE_TYPE xQueueGenericSendFromISR( xQueueHandle xQueue, const void * const pvItemToQueue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portBASE_TYPE xCopyPosition ) { -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; -Queue_t * const pxQueue = xQueue; +signed portBASE_TYPE xReturn; +unsigned portBASE_TYPE uxSavedInterruptStatus; +xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; configASSERT( pxQueue ); - configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); + configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) ); configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) ); /* RTOS ports that support interrupt nesting have the concept of a maximum system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even + above the maximum system call priority are keep permanently enabled, even when the RTOS kernel is in a critical section, but cannot make any calls to FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion @@ -980,35 +936,28 @@ Queue_t * const pxQueue = xQueue; link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - /* Similar to xQueueGenericSend, except without blocking if there is no room - in the queue. Also don't directly wake a task that was blocked on a queue - read, instead return a flag to say whether a context switch is required or - not (i.e. has a task with a higher priority than us been woken by this - post). */ + /* Similar to xQueueGenericSend, except we don't block if there is no room + in the queue. Also we don't directly wake a task that was blocked on a + queue read, instead we return a flag to say whether a context switch is + required or not (i.e. has a task with a higher priority than us been woken + by this post). */ uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); { if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) ) { - const int8_t cTxLock = pxQueue->cTxLock; - traceQUEUE_SEND_FROM_ISR( pxQueue ); - /* Semaphores use xQueueGiveFromISR(), so pxQueue will not be a - semaphore or mutex. That means prvCopyDataToQueue() cannot result - in a task disinheriting a priority and prvCopyDataToQueue() can be - called here even though the disinherit function does not check if - the scheduler is suspended before accessing the ready lists. */ - ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); + prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition ); - /* The event list is not altered if the queue is locked. This will + /* If the queue is locked we do not alter the event list. This will be done when the queue is unlocked later. */ - if( cTxLock == queueUNLOCKED ) + if( pxQueue->xTxLock == queueUNLOCKED ) { #if ( configUSE_QUEUE_SETS == 1 ) { if( pxQueue->pxQueueSetContainer != NULL ) { - if( prvNotifyQueueSetContainer( pxQueue, xCopyPosition ) != pdFALSE ) + if( prvNotifyQueueSetContainer( pxQueue, xCopyPosition ) == pdTRUE ) { /* The queue is a member of a queue set, and posting to the queue set caused a higher priority task to @@ -1017,14 +966,6 @@ Queue_t * const pxQueue = xQueue; { *pxHigherPriorityTaskWoken = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } else @@ -1033,25 +974,13 @@ Queue_t * const pxQueue = xQueue; { if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) { - /* The task waiting has a higher priority so - record that a context switch is required. */ + /* The task waiting has a higher priority so record that a + context switch is required. */ if( pxHigherPriorityTaskWoken != NULL ) { *pxHigherPriorityTaskWoken = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } } @@ -1067,19 +996,7 @@ Queue_t * const pxQueue = xQueue; { *pxHigherPriorityTaskWoken = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } #endif /* configUSE_QUEUE_SETS */ @@ -1088,7 +1005,7 @@ Queue_t * const pxQueue = xQueue; { /* Increment the lock count so the task that unlocks the queue knows that data was posted while it was locked. */ - pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 ); + ++( pxQueue->xTxLock ); } xReturn = pdPASS; @@ -1104,228 +1021,80 @@ Queue_t * const pxQueue = xQueue; return xReturn; } /*-----------------------------------------------------------*/ - -BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) +signed portBASE_TYPE xQueueGenericReceive( xQueueHandle xQueue, const void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ) { -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; -Queue_t * const pxQueue = xQueue; - - /* Similar to xQueueGenericSendFromISR() but used with semaphores where the - item size is 0. Don't directly wake a task that was blocked on a queue - read, instead return a flag to say whether a context switch is required or - not (i.e. has a task with a higher priority than us been woken by this - post). */ +signed portBASE_TYPE xEntryTimeSet = pdFALSE; +xTimeOutType xTimeOut; +signed char *pcOriginalReadPosition; +xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; configASSERT( pxQueue ); + configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) ); - /* xQueueGenericSendFromISR() should be used instead of xQueueGiveFromISR() - if the item size is not 0. */ - configASSERT( pxQueue->uxItemSize == 0 ); + /* This function relaxes the coding standard somewhat to allow return + statements within the function itself. This is done in the interest + of execution time efficiency. */ - /* Normally a mutex would not be given from an interrupt, especially if - there is a mutex holder, as priority inheritance makes no sense for an - interrupts, only tasks. */ - configASSERT( !( ( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) && ( pxQueue->u.xSemaphore.xMutexHolder != NULL ) ) ); - - /* RTOS ports that support interrupt nesting have the concept of a maximum - system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even - when the RTOS kernel is in a critical section, but cannot make any calls to - FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h - then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has been - assigned a priority above the configured maximum system call priority. - Only FreeRTOS functions that end in FromISR can be called from interrupts - that have been assigned a priority at or (logically) below the maximum - system call interrupt priority. FreeRTOS maintains a separate interrupt - safe API to ensure interrupt entry is as fast and as simple as possible. - More information (albeit Cortex-M specific) is provided on the following - link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; - - /* When the queue is used to implement a semaphore no data is ever - moved through the queue but it is still valid to see if the queue 'has - space'. */ - if( uxMessagesWaiting < pxQueue->uxLength ) - { - const int8_t cTxLock = pxQueue->cTxLock; - - traceQUEUE_SEND_FROM_ISR( pxQueue ); - - /* A task can only have an inherited priority if it is a mutex - holder - and if there is a mutex holder then the mutex cannot be - given from an ISR. As this is the ISR version of the function it - can be assumed there is no mutex holder and no need to determine if - priority disinheritance is needed. Simply increase the count of - messages (semaphores) available. */ - pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1; - - /* The event list is not altered if the queue is locked. This will - be done when the queue is unlocked later. */ - if( cTxLock == queueUNLOCKED ) - { - #if ( configUSE_QUEUE_SETS == 1 ) - { - if( pxQueue->pxQueueSetContainer != NULL ) - { - if( prvNotifyQueueSetContainer( pxQueue, queueSEND_TO_BACK ) != pdFALSE ) - { - /* The semaphore is a member of a queue set, and - posting to the queue set caused a higher priority - task to unblock. A context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so - record that a context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - #else /* configUSE_QUEUE_SETS */ - { - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority so record that a - context switch is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_QUEUE_SETS */ - } - else - { - /* Increment the lock count so the task that unlocks the queue - knows that data was posted while it was locked. */ - pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 ); - } - - xReturn = pdPASS; - } - else - { - traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ); - xReturn = errQUEUE_FULL; - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) -{ -BaseType_t xEntryTimeSet = pdFALSE; -TimeOut_t xTimeOut; -Queue_t * const pxQueue = xQueue; - - /* Check the pointer is not NULL. */ - configASSERT( ( pxQueue ) ); - - /* The buffer into which data is received can only be NULL if the data size - is zero (so no data is copied into the buffer. */ - configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) ); - - /* Cannot block if the scheduler is suspended. */ - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - - /*lint -save -e904 This function relaxes the coding standard somewhat to - allow return statements within the function itself. This is done in the - interest of execution time efficiency. */ for( ;; ) { taskENTER_CRITICAL(); { - const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; - - /* Is there data in the queue now? To be running the calling task - must be the highest priority task wanting to access the queue. */ - if( uxMessagesWaiting > ( UBaseType_t ) 0 ) + /* Is there data in the queue now? To be running we must be + the highest priority task wanting to access the queue. */ + if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) { - /* Data available, remove one item. */ - prvCopyDataFromQueue( pxQueue, pvBuffer ); - traceQUEUE_RECEIVE( pxQueue ); - pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1; + /* Remember the read position in case the queue is only being + peeked. */ + pcOriginalReadPosition = pxQueue->u.pcReadFrom; - /* There is now space in the queue, were any tasks waiting to - post to the queue? If so, unblock the highest priority waiting - task. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) + prvCopyDataFromQueue( pxQueue, pvBuffer ); + + if( xJustPeeking == pdFALSE ) { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) + traceQUEUE_RECEIVE( pxQueue ); + + /* Actually removing data, not just peeking. */ + --( pxQueue->uxMessagesWaiting ); + + #if ( configUSE_MUTEXES == 1 ) { - queueYIELD_IF_USING_PREEMPTION(); + if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) + { + /* Record the information required to implement + priority inheritance should it become necessary. */ + pxQueue->pxMutexHolder = ( signed char * ) xTaskGetCurrentTaskHandle(); /*lint !e961 Cast is not redundant as xTaskHandle is a typedef. */ + } } - else + #endif + + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) { - mtCOVERAGE_TEST_MARKER(); + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) == pdTRUE ) + { + portYIELD_WITHIN_API(); + } } } else { - mtCOVERAGE_TEST_MARKER(); + traceQUEUE_PEEK( pxQueue ); + + /* The data is not being removed, so reset the read + pointer. */ + pxQueue->u.pcReadFrom = pcOriginalReadPosition; + + /* The data is being left in the queue, so see if there are + any other tasks waiting for the data. */ + if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) + { + /* Tasks that are removed from the event list will get added to + the pending ready list as the scheduler is still suspended. */ + if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) + { + /* The task waiting has a higher priority than this task. */ + portYIELD_WITHIN_API(); + } + } } taskEXIT_CRITICAL(); @@ -1333,7 +1102,7 @@ Queue_t * const pxQueue = xQueue; } else { - if( xTicksToWait == ( TickType_t ) 0 ) + if( xTicksToWait == ( portTickType ) 0 ) { /* The queue was empty and no block time is specified (or the block time has expired) so leave now. */ @@ -1345,13 +1114,12 @@ Queue_t * const pxQueue = xQueue; { /* The queue was empty and a block time was specified so configure the timeout structure. */ - vTaskInternalSetTimeOutState( &xTimeOut ); + vTaskSetTimeOutState( &xTimeOut ); xEntryTimeSet = pdTRUE; } else { /* Entry time was already set. */ - mtCOVERAGE_TEST_MARKER(); } } } @@ -1366,181 +1134,6 @@ Queue_t * const pxQueue = xQueue; /* Update the timeout state to see if it has expired yet. */ if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) { - /* The timeout has not expired. If the queue is still empty place - the task on the list of tasks waiting to receive from the queue. */ - if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) - { - traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ); - vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); - prvUnlockQueue( pxQueue ); - if( xTaskResumeAll() == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* The queue contains data again. Loop back to try and read the - data. */ - prvUnlockQueue( pxQueue ); - ( void ) xTaskResumeAll(); - } - } - else - { - /* Timed out. If there is no data in the queue exit, otherwise loop - back and attempt to read the data. */ - prvUnlockQueue( pxQueue ); - ( void ) xTaskResumeAll(); - - if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) - { - traceQUEUE_RECEIVE_FAILED( pxQueue ); - return errQUEUE_EMPTY; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } /*lint -restore */ -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) -{ -BaseType_t xEntryTimeSet = pdFALSE; -TimeOut_t xTimeOut; -Queue_t * const pxQueue = xQueue; - -#if( configUSE_MUTEXES == 1 ) - BaseType_t xInheritanceOccurred = pdFALSE; -#endif - - /* Check the queue pointer is not NULL. */ - configASSERT( ( pxQueue ) ); - - /* Check this really is a semaphore, in which case the item size will be - 0. */ - configASSERT( pxQueue->uxItemSize == 0 ); - - /* Cannot block if the scheduler is suspended. */ - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); - } - #endif - - - /*lint -save -e904 This function relaxes the coding standard somewhat to allow return - statements within the function itself. This is done in the interest - of execution time efficiency. */ - for( ;; ) - { - taskENTER_CRITICAL(); - { - /* Semaphores are queues with an item size of 0, and where the - number of messages in the queue is the semaphore's count value. */ - const UBaseType_t uxSemaphoreCount = pxQueue->uxMessagesWaiting; - - /* Is there data in the queue now? To be running the calling task - must be the highest priority task wanting to access the queue. */ - if( uxSemaphoreCount > ( UBaseType_t ) 0 ) - { - traceQUEUE_RECEIVE( pxQueue ); - - /* Semaphores are queues with a data size of zero and where the - messages waiting is the semaphore's count. Reduce the count. */ - pxQueue->uxMessagesWaiting = uxSemaphoreCount - ( UBaseType_t ) 1; - - #if ( configUSE_MUTEXES == 1 ) - { - if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) - { - /* Record the information required to implement - priority inheritance should it become necessary. */ - pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_MUTEXES */ - - /* Check to see if other tasks are blocked waiting to give the - semaphore, and if so, unblock the highest priority such task. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE ) - { - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - taskEXIT_CRITICAL(); - return pdPASS; - } - else - { - if( xTicksToWait == ( TickType_t ) 0 ) - { - /* For inheritance to have occurred there must have been an - initial timeout, and an adjusted timeout cannot become 0, as - if it were 0 the function would have exited. */ - #if( configUSE_MUTEXES == 1 ) - { - configASSERT( xInheritanceOccurred == pdFALSE ); - } - #endif /* configUSE_MUTEXES */ - - /* The semaphore count was 0 and no block time is specified - (or the block time has expired) so exit now. */ - taskEXIT_CRITICAL(); - traceQUEUE_RECEIVE_FAILED( pxQueue ); - return errQUEUE_EMPTY; - } - else if( xEntryTimeSet == pdFALSE ) - { - /* The semaphore count was 0 and a block time was specified - so configure the timeout structure ready to block. */ - vTaskInternalSetTimeOutState( &xTimeOut ); - xEntryTimeSet = pdTRUE; - } - else - { - /* Entry time was already set. */ - mtCOVERAGE_TEST_MARKER(); - } - } - } - taskEXIT_CRITICAL(); - - /* Interrupts and other tasks can give to and take from the semaphore - now the critical section has been exited. */ - - vTaskSuspendAll(); - prvLockQueue( pxQueue ); - - /* Update the timeout state to see if it has expired yet. */ - if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) - { - /* A block time is specified and not expired. If the semaphore - count is 0 then enter the Blocked state to wait for a semaphore to - become available. As semaphores are implemented with queues the - queue being empty is equivalent to the semaphore count being 0. */ if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) { traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue ); @@ -1549,15 +1142,11 @@ Queue_t * const pxQueue = xQueue; { if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) { - taskENTER_CRITICAL(); + portENTER_CRITICAL(); { - xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder ); + vTaskPriorityInherit( ( void * ) pxQueue->pxMutexHolder ); } - taskEXIT_CRITICAL(); - } - else - { - mtCOVERAGE_TEST_MARKER(); + portEXIT_CRITICAL(); } } #endif @@ -1568,260 +1157,64 @@ Queue_t * const pxQueue = xQueue; { portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } else { - /* There was no timeout and the semaphore count was not 0, so - attempt to take the semaphore again. */ + /* Try again. */ prvUnlockQueue( pxQueue ); ( void ) xTaskResumeAll(); } } else { - /* Timed out. */ prvUnlockQueue( pxQueue ); ( void ) xTaskResumeAll(); - - /* If the semaphore count is 0 exit now as the timeout has - expired. Otherwise return to attempt to take the semaphore that is - known to be available. As semaphores are implemented by queues the - queue being empty is equivalent to the semaphore count being 0. */ - if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) - { - #if ( configUSE_MUTEXES == 1 ) - { - /* xInheritanceOccurred could only have be set if - pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to - test the mutex type again to check it is actually a mutex. */ - if( xInheritanceOccurred != pdFALSE ) - { - taskENTER_CRITICAL(); - { - UBaseType_t uxHighestWaitingPriority; - - /* This task blocking on the mutex caused another - task to inherit this task's priority. Now this task - has timed out the priority should be disinherited - again, but only as low as the next highest priority - task that is waiting for the same mutex. */ - uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue ); - vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority ); - } - taskEXIT_CRITICAL(); - } - } - #endif /* configUSE_MUTEXES */ - - traceQUEUE_RECEIVE_FAILED( pxQueue ); - return errQUEUE_EMPTY; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + traceQUEUE_RECEIVE_FAILED( pxQueue ); + return errQUEUE_EMPTY; } - } /*lint -restore */ -} -/*-----------------------------------------------------------*/ - -BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) -{ -BaseType_t xEntryTimeSet = pdFALSE; -TimeOut_t xTimeOut; -int8_t *pcOriginalReadPosition; -Queue_t * const pxQueue = xQueue; - - /* Check the pointer is not NULL. */ - configASSERT( ( pxQueue ) ); - - /* The buffer into which data is received can only be NULL if the data size - is zero (so no data is copied into the buffer. */ - configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) ); - - /* Cannot block if the scheduler is suspended. */ - #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - { - configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) ); } - #endif - - - /*lint -save -e904 This function relaxes the coding standard somewhat to - allow return statements within the function itself. This is done in the - interest of execution time efficiency. */ - for( ;; ) - { - taskENTER_CRITICAL(); - { - const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; - - /* Is there data in the queue now? To be running the calling task - must be the highest priority task wanting to access the queue. */ - if( uxMessagesWaiting > ( UBaseType_t ) 0 ) - { - /* Remember the read position so it can be reset after the data - is read from the queue as this function is only peeking the - data, not removing it. */ - pcOriginalReadPosition = pxQueue->u.xQueue.pcReadFrom; - - prvCopyDataFromQueue( pxQueue, pvBuffer ); - traceQUEUE_PEEK( pxQueue ); - - /* The data is not being removed, so reset the read pointer. */ - pxQueue->u.xQueue.pcReadFrom = pcOriginalReadPosition; - - /* The data is being left in the queue, so see if there are - any other tasks waiting for the data. */ - if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) - { - if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority than this task. */ - queueYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - taskEXIT_CRITICAL(); - return pdPASS; - } - else - { - if( xTicksToWait == ( TickType_t ) 0 ) - { - /* The queue was empty and no block time is specified (or - the block time has expired) so leave now. */ - taskEXIT_CRITICAL(); - traceQUEUE_PEEK_FAILED( pxQueue ); - return errQUEUE_EMPTY; - } - else if( xEntryTimeSet == pdFALSE ) - { - /* The queue was empty and a block time was specified so - configure the timeout structure ready to enter the blocked - state. */ - vTaskInternalSetTimeOutState( &xTimeOut ); - xEntryTimeSet = pdTRUE; - } - else - { - /* Entry time was already set. */ - mtCOVERAGE_TEST_MARKER(); - } - } - } - taskEXIT_CRITICAL(); - - /* Interrupts and other tasks can send to and receive from the queue - now the critical section has been exited. */ - - vTaskSuspendAll(); - prvLockQueue( pxQueue ); - - /* Update the timeout state to see if it has expired yet. */ - if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ) - { - /* Timeout has not expired yet, check to see if there is data in the - queue now, and if not enter the Blocked state to wait for data. */ - if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) - { - traceBLOCKING_ON_QUEUE_PEEK( pxQueue ); - vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); - prvUnlockQueue( pxQueue ); - if( xTaskResumeAll() == pdFALSE ) - { - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* There is data in the queue now, so don't enter the blocked - state, instead return to try and obtain the data. */ - prvUnlockQueue( pxQueue ); - ( void ) xTaskResumeAll(); - } - } - else - { - /* The timeout has expired. If there is still no data in the queue - exit, otherwise go back and try to read the data again. */ - prvUnlockQueue( pxQueue ); - ( void ) xTaskResumeAll(); - - if( prvIsQueueEmpty( pxQueue ) != pdFALSE ) - { - traceQUEUE_PEEK_FAILED( pxQueue ); - return errQUEUE_EMPTY; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } /*lint -restore */ } /*-----------------------------------------------------------*/ - -BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) +signed portBASE_TYPE xQueueReceiveFromISR( xQueueHandle xQueue, const void * const pvBuffer, signed portBASE_TYPE *pxHigherPriorityTaskWoken ) { -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; -Queue_t * const pxQueue = xQueue; +signed portBASE_TYPE xReturn; +unsigned portBASE_TYPE uxSavedInterruptStatus; +xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; configASSERT( pxQueue ); - configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); + configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) ); /* RTOS ports that support interrupt nesting have the concept of a maximum system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even + above the maximum system call priority are keep permanently enabled, even when the RTOS kernel is in a critical section, but cannot make any calls to - FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h + FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion failure if a FreeRTOS API function is called from an interrupt that has been assigned a priority above the configured maximum system call priority. Only FreeRTOS functions that end in FromISR can be called from interrupts - that have been assigned a priority at or (logically) below the maximum - system call interrupt priority. FreeRTOS maintains a separate interrupt - safe API to ensure interrupt entry is as fast and as simple as possible. - More information (albeit Cortex-M specific) is provided on the following + that have been assigned a priority at or (logically) below the maximum + system call interrupt priority. FreeRTOS maintains a separate interrupt + safe API to ensure interrupt entry is as fast and as simple as possible. + More information (albeit Cortex-M specific) is provided on the following link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); { - const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting; - /* Cannot block in an ISR, so check there is data available. */ - if( uxMessagesWaiting > ( UBaseType_t ) 0 ) + if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) { - const int8_t cRxLock = pxQueue->cRxLock; - traceQUEUE_RECEIVE_FROM_ISR( pxQueue ); prvCopyDataFromQueue( pxQueue, pvBuffer ); - pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1; + --( pxQueue->uxMessagesWaiting ); /* If the queue is locked the event list will not be modified. Instead update the lock count so the task that unlocks the queue will know that an ISR has removed data while the queue was locked. */ - if( cRxLock == queueUNLOCKED ) + if( pxQueue->xRxLock == queueUNLOCKED ) { if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) { @@ -1833,26 +1226,14 @@ Queue_t * const pxQueue = xQueue; { *pxHigherPriorityTaskWoken = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } else { /* Increment the lock count so the task that unlocks the queue knows that data was removed while it was locked. */ - pxQueue->cRxLock = ( int8_t ) ( cRxLock + 1 ); + ++( pxQueue->xRxLock ); } xReturn = pdPASS; @@ -1868,46 +1249,44 @@ Queue_t * const pxQueue = xQueue; return xReturn; } /*-----------------------------------------------------------*/ - -BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) +signed portBASE_TYPE xQueuePeekFromISR( xQueueHandle xQueue, const void * const pvBuffer ) { -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; -int8_t *pcOriginalReadPosition; -Queue_t * const pxQueue = xQueue; +signed portBASE_TYPE xReturn; +unsigned portBASE_TYPE uxSavedInterruptStatus; +signed char *pcOriginalReadPosition; +xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; configASSERT( pxQueue ); - configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) ); - configASSERT( pxQueue->uxItemSize != 0 ); /* Can't peek a semaphore. */ + configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( unsigned portBASE_TYPE ) 0U ) ) ); /* RTOS ports that support interrupt nesting have the concept of a maximum system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even + above the maximum system call priority are keep permanently enabled, even when the RTOS kernel is in a critical section, but cannot make any calls to - FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h + FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion failure if a FreeRTOS API function is called from an interrupt that has been assigned a priority above the configured maximum system call priority. Only FreeRTOS functions that end in FromISR can be called from interrupts - that have been assigned a priority at or (logically) below the maximum - system call interrupt priority. FreeRTOS maintains a separate interrupt - safe API to ensure interrupt entry is as fast and as simple as possible. - More information (albeit Cortex-M specific) is provided on the following + that have been assigned a priority at or (logically) below the maximum + system call interrupt priority. FreeRTOS maintains a separate interrupt + safe API to ensure interrupt entry is as fast and as simple as possible. + More information (albeit Cortex-M specific) is provided on the following link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); { /* Cannot block in an ISR, so check there is data available. */ - if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 ) + if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) { traceQUEUE_PEEK_FROM_ISR( pxQueue ); /* Remember the read position so it can be reset as nothing is actually being removed from the queue. */ - pcOriginalReadPosition = pxQueue->u.xQueue.pcReadFrom; + pcOriginalReadPosition = pxQueue->u.pcReadFrom; prvCopyDataFromQueue( pxQueue, pvBuffer ); - pxQueue->u.xQueue.pcReadFrom = pcOriginalReadPosition; + pxQueue->u.pcReadFrom = pcOriginalReadPosition; xReturn = pdPASS; } @@ -1923,98 +1302,54 @@ Queue_t * const pxQueue = xQueue; } /*-----------------------------------------------------------*/ -UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) +unsigned portBASE_TYPE uxQueueMessagesWaiting( const xQueueHandle xQueue ) { -UBaseType_t uxReturn; +unsigned portBASE_TYPE uxReturn; configASSERT( xQueue ); taskENTER_CRITICAL(); - { - uxReturn = ( ( Queue_t * ) xQueue )->uxMessagesWaiting; - } + uxReturn = ( ( xQUEUE * ) xQueue )->uxMessagesWaiting; taskEXIT_CRITICAL(); return uxReturn; } /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */ /*-----------------------------------------------------------*/ -UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) +unsigned portBASE_TYPE IRAM uxQueueMessagesWaitingFromISR( const xQueueHandle xQueue ) { -UBaseType_t uxReturn; -Queue_t * const pxQueue = xQueue; +unsigned portBASE_TYPE uxReturn; - configASSERT( pxQueue ); + configASSERT( xQueue ); - taskENTER_CRITICAL(); - { - uxReturn = pxQueue->uxLength - pxQueue->uxMessagesWaiting; - } - taskEXIT_CRITICAL(); + uxReturn = ( ( xQUEUE * ) xQueue )->uxMessagesWaiting; return uxReturn; } /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */ /*-----------------------------------------------------------*/ -UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) +void vQueueDelete( xQueueHandle xQueue ) { -UBaseType_t uxReturn; -Queue_t * const pxQueue = xQueue; +xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; configASSERT( pxQueue ); - uxReturn = pxQueue->uxMessagesWaiting; - return uxReturn; -} /*lint !e818 Pointer cannot be declared const as xQueue is a typedef not pointer. */ -/*-----------------------------------------------------------*/ - -void vQueueDelete( QueueHandle_t xQueue ) -{ -Queue_t * const pxQueue = xQueue; - - configASSERT( pxQueue ); traceQUEUE_DELETE( pxQueue ); - #if ( configQUEUE_REGISTRY_SIZE > 0 ) { vQueueUnregisterQueue( pxQueue ); } #endif - - #if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) ) - { - /* The queue can only have been allocated dynamically - free it - again. */ - vPortFree( pxQueue ); - } - #elif( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - { - /* The queue could have been allocated statically or dynamically, so - check before attempting to free the memory. */ - if( pxQueue->ucStaticallyAllocated == ( uint8_t ) pdFALSE ) - { - vPortFree( pxQueue ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #else - { - /* The queue must have been statically allocated, so is not going to be - deleted. Avoid compiler warnings about the unused parameter. */ - ( void ) pxQueue; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ + vPortFree( pxQueue->pcHead ); + vPortFree( pxQueue ); } /*-----------------------------------------------------------*/ #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) + unsigned char ucQueueGetQueueNumber( xQueueHandle xQueue ) { - return ( ( Queue_t * ) xQueue )->uxQueueNumber; + return ( ( xQUEUE * ) xQueue )->ucQueueNumber; } #endif /* configUSE_TRACE_FACILITY */ @@ -2022,9 +1357,9 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_TRACE_FACILITY == 1 ) - void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) + void vQueueSetQueueNumber( xQueueHandle xQueue, unsigned char ucQueueNumber ) { - ( ( Queue_t * ) xQueue )->uxQueueNumber = uxQueueNumber; + ( ( xQUEUE * ) xQueue )->ucQueueNumber = ucQueueNumber; } #endif /* configUSE_TRACE_FACILITY */ @@ -2032,139 +1367,76 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_TRACE_FACILITY == 1 ) - uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) + unsigned char ucQueueGetQueueType( xQueueHandle xQueue ) { - return ( ( Queue_t * ) xQueue )->ucQueueType; + return ( ( xQUEUE * ) xQueue )->ucQueueType; } #endif /* configUSE_TRACE_FACILITY */ /*-----------------------------------------------------------*/ - -#if( configUSE_MUTEXES == 1 ) - - static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue ) - { - UBaseType_t uxHighestPriorityOfWaitingTasks; - - /* If a task waiting for a mutex causes the mutex holder to inherit a - priority, but the waiting task times out, then the holder should - disinherit the priority - but only down to the highest priority of any - other tasks that are waiting for the same mutex. For this purpose, - return the priority of the highest priority task that is waiting for the - mutex. */ - if( listCURRENT_LIST_LENGTH( &( pxQueue->xTasksWaitingToReceive ) ) > 0U ) - { - uxHighestPriorityOfWaitingTasks = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) listGET_ITEM_VALUE_OF_HEAD_ENTRY( &( pxQueue->xTasksWaitingToReceive ) ); - } - else - { - uxHighestPriorityOfWaitingTasks = tskIDLE_PRIORITY; - } - - return uxHighestPriorityOfWaitingTasks; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition ) +static void IRAM prvCopyDataToQueue( xQUEUE *pxQueue, const void *pvItemToQueue, portBASE_TYPE xPosition ) { -BaseType_t xReturn = pdFALSE; -UBaseType_t uxMessagesWaiting; - - /* This function is called from a critical section. */ - - uxMessagesWaiting = pxQueue->uxMessagesWaiting; - - if( pxQueue->uxItemSize == ( UBaseType_t ) 0 ) + if( pxQueue->uxItemSize == ( unsigned portBASE_TYPE ) 0 ) { #if ( configUSE_MUTEXES == 1 ) { if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) { /* The mutex is no longer being held. */ - xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder ); - pxQueue->u.xSemaphore.xMutexHolder = NULL; - } - else - { - mtCOVERAGE_TEST_MARKER(); + vTaskPriorityDisinherit( ( void * ) pxQueue->pxMutexHolder ); + pxQueue->pxMutexHolder = NULL; } } #endif /* configUSE_MUTEXES */ } else if( xPosition == queueSEND_TO_BACK ) { - ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */ - pxQueue->pcWriteTo += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */ - if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ + ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0. */ + pxQueue->pcWriteTo += pxQueue->uxItemSize; + if( pxQueue->pcWriteTo >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ { pxQueue->pcWriteTo = pxQueue->pcHead; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } else { - ( void ) memcpy( ( void * ) pxQueue->u.xQueue.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e9087 !e418 MISRA exception as the casts are only redundant for some ports. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. Assert checks null pointer only used when length is 0. */ - pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize; - if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ + ( void ) memcpy( ( void * ) pxQueue->u.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + pxQueue->u.pcReadFrom -= pxQueue->uxItemSize; + if( pxQueue->u.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */ { - pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize ); - } - else - { - mtCOVERAGE_TEST_MARKER(); + pxQueue->u.pcReadFrom = ( pxQueue->pcTail - pxQueue->uxItemSize ); } if( xPosition == queueOVERWRITE ) { - if( uxMessagesWaiting > ( UBaseType_t ) 0 ) + if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) { /* An item is not being added but overwritten, so subtract one from the recorded number of items in the queue so when one is added again below the number of recorded items remains correct. */ - --uxMessagesWaiting; + --( pxQueue->uxMessagesWaiting ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } - pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1; - - return xReturn; + ++( pxQueue->uxMessagesWaiting ); } /*-----------------------------------------------------------*/ - -static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer ) +static void prvCopyDataFromQueue( xQUEUE * const pxQueue, const void * const pvBuffer ) { - if( pxQueue->uxItemSize != ( UBaseType_t ) 0 ) + if( pxQueue->uxQueueType != queueQUEUE_IS_MUTEX ) { - pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */ - if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */ + pxQueue->u.pcReadFrom += pxQueue->uxItemSize; + if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */ { - pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead; + pxQueue->u.pcReadFrom = pxQueue->pcHead; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports. Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */ + ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 MISRA exception as the casts are only redundant for some ports. Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0. */ } } /*-----------------------------------------------------------*/ - -static void prvUnlockQueue( Queue_t * const pxQueue ) +static void IRAM prvUnlockQueue( xQUEUE *pxQueue ) { /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. */ @@ -2174,10 +1446,8 @@ static void prvUnlockQueue( Queue_t * const pxQueue ) updated. */ taskENTER_CRITICAL(); { - int8_t cTxLock = pxQueue->cTxLock; - /* See if data was added to the queue while it was locked. */ - while( cTxLock > queueLOCKED_UNMODIFIED ) + while( pxQueue->xTxLock > queueLOCKED_UNMODIFIED ) { /* Data was posted while the queue was locked. Are any tasks blocked waiting for data to become available? */ @@ -2185,23 +1455,18 @@ static void prvUnlockQueue( Queue_t * const pxQueue ) { if( pxQueue->pxQueueSetContainer != NULL ) { - if( prvNotifyQueueSetContainer( pxQueue, queueSEND_TO_BACK ) != pdFALSE ) + if( prvNotifyQueueSetContainer( pxQueue, queueSEND_TO_BACK ) == pdTRUE ) { /* The queue is a member of a queue set, and posting to the queue set caused a higher priority task to unblock. A context switch is required. */ vTaskMissedYield(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } else { - /* Tasks that are removed from the event list will get - added to the pending ready list as the scheduler is still - suspended. */ + /* Tasks that are removed from the event list will get added to + the pending ready list as the scheduler is still suspended. */ if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE ) { if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) @@ -2210,10 +1475,6 @@ static void prvUnlockQueue( Queue_t * const pxQueue ) context switch is required. */ vTaskMissedYield(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } else { @@ -2229,14 +1490,10 @@ static void prvUnlockQueue( Queue_t * const pxQueue ) { if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE ) { - /* The task waiting has a higher priority so record that - a context switch is required. */ + /* The task waiting has a higher priority so record that a + context switch is required. */ vTaskMissedYield(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } else { @@ -2245,19 +1502,17 @@ static void prvUnlockQueue( Queue_t * const pxQueue ) } #endif /* configUSE_QUEUE_SETS */ - --cTxLock; + --( pxQueue->xTxLock ); } - pxQueue->cTxLock = queueUNLOCKED; + pxQueue->xTxLock = queueUNLOCKED; } taskEXIT_CRITICAL(); /* Do the same for the Rx lock. */ taskENTER_CRITICAL(); { - int8_t cRxLock = pxQueue->cRxLock; - - while( cRxLock > queueLOCKED_UNMODIFIED ) + while( pxQueue->xRxLock > queueLOCKED_UNMODIFIED ) { if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE ) { @@ -2265,12 +1520,8 @@ static void prvUnlockQueue( Queue_t * const pxQueue ) { vTaskMissedYield(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - --cRxLock; + --( pxQueue->xRxLock ); } else { @@ -2278,19 +1529,18 @@ static void prvUnlockQueue( Queue_t * const pxQueue ) } } - pxQueue->cRxLock = queueUNLOCKED; + pxQueue->xRxLock = queueUNLOCKED; } taskEXIT_CRITICAL(); } /*-----------------------------------------------------------*/ - -static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue ) +static signed portBASE_TYPE prvIsQueueEmpty( const xQUEUE *pxQueue ) { -BaseType_t xReturn; +signed portBASE_TYPE xReturn; taskENTER_CRITICAL(); { - if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 ) + if( pxQueue->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0 ) { xReturn = pdTRUE; } @@ -2304,14 +1554,12 @@ BaseType_t xReturn; return xReturn; } /*-----------------------------------------------------------*/ - -BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) +signed portBASE_TYPE xQueueIsQueueEmptyFromISR( const xQueueHandle xQueue ) { -BaseType_t xReturn; -Queue_t * const pxQueue = xQueue; +signed portBASE_TYPE xReturn; - configASSERT( pxQueue ); - if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 ) + configASSERT( xQueue ); + if( ( ( xQUEUE * ) xQueue )->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0 ) { xReturn = pdTRUE; } @@ -2323,10 +1571,9 @@ Queue_t * const pxQueue = xQueue; return xReturn; } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */ /*-----------------------------------------------------------*/ - -static BaseType_t prvIsQueueFull( const Queue_t *pxQueue ) +static signed portBASE_TYPE prvIsQueueFull( const xQUEUE *pxQueue ) { -BaseType_t xReturn; +signed portBASE_TYPE xReturn; taskENTER_CRITICAL(); { @@ -2344,14 +1591,12 @@ BaseType_t xReturn; return xReturn; } /*-----------------------------------------------------------*/ - -BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) +signed portBASE_TYPE xQueueIsQueueFullFromISR( const xQueueHandle xQueue ) { -BaseType_t xReturn; -Queue_t * const pxQueue = xQueue; +signed portBASE_TYPE xReturn; - configASSERT( pxQueue ); - if( pxQueue->uxMessagesWaiting == pxQueue->uxLength ) + configASSERT( xQueue ); + if( ( ( xQUEUE * ) xQueue )->uxMessagesWaiting == ( ( xQUEUE * ) xQueue )->uxLength ) { xReturn = pdTRUE; } @@ -2365,11 +1610,10 @@ Queue_t * const pxQueue = xQueue; /*-----------------------------------------------------------*/ #if ( configUSE_CO_ROUTINES == 1 ) - - BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait ) + signed portBASE_TYPE xQueueCRSend( xQueueHandle xQueue, const void *pvItemToQueue, portTickType xTicksToWait ) { - BaseType_t xReturn; - Queue_t * const pxQueue = xQueue; + signed portBASE_TYPE xReturn; + xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; /* If the queue is already full we may have to block. A critical section is required to prevent an interrupt removing something from the queue @@ -2380,7 +1624,7 @@ Queue_t * const pxQueue = xQueue; { /* The queue is full - do we want to block or just leave without posting? */ - if( xTicksToWait > ( TickType_t ) 0 ) + if( xTicksToWait > ( portTickType ) 0 ) { /* As this is called from a coroutine we cannot block directly, but return indicating that we need to block. */ @@ -2418,14 +1662,6 @@ Queue_t * const pxQueue = xQueue; that a yield might be appropriate. */ xReturn = errQUEUE_YIELD; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } else @@ -2442,22 +1678,21 @@ Queue_t * const pxQueue = xQueue; /*-----------------------------------------------------------*/ #if ( configUSE_CO_ROUTINES == 1 ) - - BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait ) + signed portBASE_TYPE xQueueCRReceive( xQueueHandle xQueue, void *pvBuffer, portTickType xTicksToWait ) { - BaseType_t xReturn; - Queue_t * const pxQueue = xQueue; + signed portBASE_TYPE xReturn; + xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; /* If the queue is already empty we may have to block. A critical section is required to prevent an interrupt adding something to the queue between the check to see if the queue is empty and blocking on the queue. */ portDISABLE_INTERRUPTS(); { - if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 ) + if( pxQueue->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0 ) { /* There are no messages in the queue, do we want to block or just leave with nothing? */ - if( xTicksToWait > ( TickType_t ) 0 ) + if( xTicksToWait > ( portTickType ) 0 ) { /* As this is a co-routine we cannot block directly, but return indicating that we need to block. */ @@ -2471,29 +1706,21 @@ Queue_t * const pxQueue = xQueue; return errQUEUE_FULL; } } - else - { - mtCOVERAGE_TEST_MARKER(); - } } portENABLE_INTERRUPTS(); portDISABLE_INTERRUPTS(); { - if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 ) + if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) { /* Data is available from the queue. */ - pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize; - if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) + pxQueue->u.pcReadFrom += pxQueue->uxItemSize; + if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) { - pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead; - } - else - { - mtCOVERAGE_TEST_MARKER(); + pxQueue->u.pcReadFrom = pxQueue->pcHead; } --( pxQueue->uxMessagesWaiting ); - ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); + ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); xReturn = pdPASS; @@ -2508,14 +1735,6 @@ Queue_t * const pxQueue = xQueue; { xReturn = errQUEUE_YIELD; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } else @@ -2532,10 +1751,9 @@ Queue_t * const pxQueue = xQueue; /*-----------------------------------------------------------*/ #if ( configUSE_CO_ROUTINES == 1 ) - - BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken ) + signed portBASE_TYPE xQueueCRSendFromISR( xQueueHandle xQueue, const void *pvItemToQueue, signed portBASE_TYPE xCoRoutinePreviouslyWoken ) { - Queue_t * const pxQueue = xQueue; + xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; /* Cannot block within an ISR so if there is no space on the queue then exit without doing anything. */ @@ -2553,24 +1771,8 @@ Queue_t * const pxQueue = xQueue; { return pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } return xCoRoutinePreviouslyWoken; @@ -2581,27 +1783,23 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_CO_ROUTINES == 1 ) - BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxCoRoutineWoken ) + signed portBASE_TYPE xQueueCRReceiveFromISR( xQueueHandle xQueue, void *pvBuffer, signed portBASE_TYPE *pxCoRoutineWoken ) { - BaseType_t xReturn; - Queue_t * const pxQueue = xQueue; + signed portBASE_TYPE xReturn; + xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; /* We cannot block from an ISR, so check there is data available. If not then just leave without doing anything. */ - if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 ) + if( pxQueue->uxMessagesWaiting > ( unsigned portBASE_TYPE ) 0 ) { /* Copy the data from the queue. */ - pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize; - if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) + pxQueue->u.pcReadFrom += pxQueue->uxItemSize; + if( pxQueue->u.pcReadFrom >= pxQueue->pcTail ) { - pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead; - } - else - { - mtCOVERAGE_TEST_MARKER(); + pxQueue->u.pcReadFrom = pxQueue->pcHead; } --( pxQueue->uxMessagesWaiting ); - ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); + ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.pcReadFrom, ( unsigned ) pxQueue->uxItemSize ); if( ( *pxCoRoutineWoken ) == pdFALSE ) { @@ -2611,19 +1809,7 @@ Queue_t * const pxQueue = xQueue; { *pxCoRoutineWoken = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } xReturn = pdPASS; @@ -2641,27 +1827,21 @@ Queue_t * const pxQueue = xQueue; #if ( configQUEUE_REGISTRY_SIZE > 0 ) - void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + void vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcQueueName ) { - UBaseType_t ux; + unsigned portBASE_TYPE ux; /* See if there is an empty space in the registry. A NULL name denotes a free slot. */ - for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) + for( ux = ( unsigned portBASE_TYPE ) 0U; ux < ( unsigned portBASE_TYPE ) configQUEUE_REGISTRY_SIZE; ux++ ) { if( xQueueRegistry[ ux ].pcQueueName == NULL ) { /* Store the information on this queue. */ xQueueRegistry[ ux ].pcQueueName = pcQueueName; xQueueRegistry[ ux ].xHandle = xQueue; - - traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName ); break; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } } @@ -2670,57 +1850,20 @@ Queue_t * const pxQueue = xQueue; #if ( configQUEUE_REGISTRY_SIZE > 0 ) - const char *pcQueueGetName( QueueHandle_t xQueue ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ + void vQueueUnregisterQueue( xQueueHandle xQueue ) { - UBaseType_t ux; - const char *pcReturn = NULL; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - - /* Note there is nothing here to protect against another task adding or - removing entries from the registry while it is being searched. */ - for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) - { - if( xQueueRegistry[ ux ].xHandle == xQueue ) - { - pcReturn = xQueueRegistry[ ux ].pcQueueName; - break; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - return pcReturn; - } /*lint !e818 xQueue cannot be a pointer to const because it is a typedef. */ - -#endif /* configQUEUE_REGISTRY_SIZE */ -/*-----------------------------------------------------------*/ - -#if ( configQUEUE_REGISTRY_SIZE > 0 ) - - void vQueueUnregisterQueue( QueueHandle_t xQueue ) - { - UBaseType_t ux; + unsigned portBASE_TYPE ux; /* See if the handle of the queue being unregistered in actually in the registry. */ - for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ ) + for( ux = ( unsigned portBASE_TYPE ) 0U; ux < ( unsigned portBASE_TYPE ) configQUEUE_REGISTRY_SIZE; ux++ ) { if( xQueueRegistry[ ux ].xHandle == xQueue ) { /* Set the name to NULL to show that this slot if free again. */ xQueueRegistry[ ux ].pcQueueName = NULL; - - /* Set the handle to NULL to ensure the same queue handle cannot - appear in the registry twice if it is added, removed, then - added again. */ - xQueueRegistry[ ux ].xHandle = ( QueueHandle_t ) 0; break; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */ @@ -2730,9 +1873,9 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_TIMERS == 1 ) - void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) + void vQueueWaitForMessageRestricted( xQueueHandle xQueue, portTickType xTicksToWait ) { - Queue_t * const pxQueue = xQueue; + xQUEUE * const pxQueue = ( xQUEUE * ) xQueue; /* This function should not be called by application code hence the 'Restricted' in its name. It is not part of the public API. It is @@ -2749,14 +1892,10 @@ Queue_t * const pxQueue = xQueue; the queue is locked, and the calling task blocks on the queue, then the calling task will be immediately unblocked when the queue is unlocked. */ prvLockQueue( pxQueue ); - if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U ) + if( pxQueue->uxMessagesWaiting == ( unsigned portBASE_TYPE ) 0U ) { /* There is nothing in the queue, block for the specified period. */ - vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely ); - } - else - { - mtCOVERAGE_TEST_MARKER(); + vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait ); } prvUnlockQueue( pxQueue ); } @@ -2764,13 +1903,13 @@ Queue_t * const pxQueue = xQueue; #endif /* configUSE_TIMERS */ /*-----------------------------------------------------------*/ -#if( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) +#if ( configUSE_QUEUE_SETS == 1 ) - QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) + xQueueSetHandle xQueueCreateSet( unsigned portBASE_TYPE uxEventQueueLength ) { - QueueSetHandle_t pxQueue; + xQueueSetHandle pxQueue; - pxQueue = xQueueGenericCreate( uxEventQueueLength, ( UBaseType_t ) sizeof( Queue_t * ), queueQUEUE_TYPE_SET ); + pxQueue = xQueueGenericCreate( uxEventQueueLength, sizeof( xQUEUE * ), queueQUEUE_TYPE_SET ); return pxQueue; } @@ -2780,30 +1919,30 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_QUEUE_SETS == 1 ) - BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) + portBASE_TYPE xQueueAddToSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet ) { - BaseType_t xReturn; + portBASE_TYPE xReturn; - taskENTER_CRITICAL(); + if( ( ( xQUEUE * ) xQueueOrSemaphore )->pxQueueSetContainer != NULL ) { - if( ( ( Queue_t * ) xQueueOrSemaphore )->pxQueueSetContainer != NULL ) - { - /* Cannot add a queue/semaphore to more than one queue set. */ - xReturn = pdFAIL; - } - else if( ( ( Queue_t * ) xQueueOrSemaphore )->uxMessagesWaiting != ( UBaseType_t ) 0 ) - { - /* Cannot add a queue/semaphore to a queue set if there are already - items in the queue/semaphore. */ - xReturn = pdFAIL; - } - else - { - ( ( Queue_t * ) xQueueOrSemaphore )->pxQueueSetContainer = xQueueSet; - xReturn = pdPASS; - } + /* Cannot add a queue/semaphore to more than one queue set. */ + xReturn = pdFAIL; + } + else if( ( ( xQUEUE * ) xQueueOrSemaphore )->uxMessagesWaiting != ( unsigned portBASE_TYPE ) 0 ) + { + /* Cannot add a queue/semaphore to a queue set if there are already + items in the queue/semaphore. */ + xReturn = pdFAIL; + } + else + { + taskENTER_CRITICAL(); + { + ( ( xQUEUE * ) xQueueOrSemaphore )->pxQueueSetContainer = xQueueSet; + } + taskEXIT_CRITICAL(); + xReturn = pdPASS; } - taskEXIT_CRITICAL(); return xReturn; } @@ -2813,17 +1952,17 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_QUEUE_SETS == 1 ) - BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) + portBASE_TYPE xQueueRemoveFromSet( xQueueSetMemberHandle xQueueOrSemaphore, xQueueSetHandle xQueueSet ) { - BaseType_t xReturn; - Queue_t * const pxQueueOrSemaphore = ( Queue_t * ) xQueueOrSemaphore; + portBASE_TYPE xReturn; + xQUEUE * const pxQueueOrSemaphore = ( xQUEUE * ) xQueueOrSemaphore; if( pxQueueOrSemaphore->pxQueueSetContainer != xQueueSet ) { /* The queue was not a member of the set. */ xReturn = pdFAIL; } - else if( pxQueueOrSemaphore->uxMessagesWaiting != ( UBaseType_t ) 0 ) + else if( pxQueueOrSemaphore->uxMessagesWaiting != ( unsigned portBASE_TYPE ) 0 ) { /* It is dangerous to remove a queue from a set when the queue is not empty because the queue set will still hold pending events for @@ -2849,11 +1988,11 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_QUEUE_SETS == 1 ) - QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, TickType_t const xTicksToWait ) + xQueueSetMemberHandle xQueueSelectFromSet( xQueueSetHandle xQueueSet, portTickType xBlockTimeTicks ) { - QueueSetMemberHandle_t xReturn = NULL; + xQueueSetMemberHandle xReturn = NULL; - ( void ) xQueueReceive( ( QueueHandle_t ) xQueueSet, &xReturn, xTicksToWait ); /*lint !e961 Casting from one typedef to another is not redundant. */ + ( void ) xQueueGenericReceive( ( xQueueHandle ) xQueueSet, &xReturn, xBlockTimeTicks, pdFALSE ); /*lint !e961 Casting from one typedef to another is not redundant. */ return xReturn; } @@ -2862,11 +2001,11 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_QUEUE_SETS == 1 ) - QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) + xQueueSetMemberHandle xQueueSelectFromSetFromISR( xQueueSetHandle xQueueSet ) { - QueueSetMemberHandle_t xReturn = NULL; + xQueueSetMemberHandle xReturn = NULL; - ( void ) xQueueReceiveFromISR( ( QueueHandle_t ) xQueueSet, &xReturn, NULL ); /*lint !e961 Casting from one typedef to another is not redundant. */ + ( void ) xQueueReceiveFromISR( ( xQueueHandle ) xQueueSet, &xReturn, NULL ); /*lint !e961 Casting from one typedef to another is not redundant. */ return xReturn; } @@ -2875,52 +2014,27 @@ Queue_t * const pxQueue = xQueue; #if ( configUSE_QUEUE_SETS == 1 ) - static BaseType_t prvNotifyQueueSetContainer( const Queue_t * const pxQueue, const BaseType_t xCopyPosition ) + static portBASE_TYPE prvNotifyQueueSetContainer( const xQUEUE * const pxQueue, portBASE_TYPE xCopyPosition ) { - Queue_t *pxQueueSetContainer = pxQueue->pxQueueSetContainer; - BaseType_t xReturn = pdFALSE; - - /* This function must be called form a critical section. */ + xQUEUE *pxQueueSetContainer = pxQueue->pxQueueSetContainer; + portBASE_TYPE xReturn = pdFALSE; configASSERT( pxQueueSetContainer ); configASSERT( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength ); if( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength ) { - const int8_t cTxLock = pxQueueSetContainer->cTxLock; - traceQUEUE_SEND( pxQueueSetContainer ); - - /* The data copied is the handle of the queue that contains data. */ - xReturn = prvCopyDataToQueue( pxQueueSetContainer, &pxQueue, xCopyPosition ); - - if( cTxLock == queueUNLOCKED ) + /* The data copies is the handle of the queue that contains data. */ + prvCopyDataToQueue( pxQueueSetContainer, &pxQueue, xCopyPosition ); + if( listLIST_IS_EMPTY( &( pxQueueSetContainer->xTasksWaitingToReceive ) ) == pdFALSE ) { - if( listLIST_IS_EMPTY( &( pxQueueSetContainer->xTasksWaitingToReceive ) ) == pdFALSE ) + if( xTaskRemoveFromEventList( &( pxQueueSetContainer->xTasksWaitingToReceive ) ) != pdFALSE ) { - if( xTaskRemoveFromEventList( &( pxQueueSetContainer->xTasksWaitingToReceive ) ) != pdFALSE ) - { - /* The task waiting has a higher priority. */ - xReturn = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); + /* The task waiting has a higher priority */ + xReturn = pdTRUE; } } - else - { - pxQueueSetContainer->cTxLock = ( int8_t ) ( cTxLock + 1 ); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } return xReturn; @@ -2928,14 +2042,3 @@ Queue_t * const pxQueue = xQueue; #endif /* configUSE_QUEUE_SETS */ - - - - - - - - - - - diff --git a/FreeRTOS/Source/stream_buffer.c b/FreeRTOS/Source/stream_buffer.c deleted file mode 100644 index 134c741..0000000 --- a/FreeRTOS/Source/stream_buffer.c +++ /dev/null @@ -1,1263 +0,0 @@ -/* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -/* Standard includes. */ -#include -#include - -/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining -all the API functions to use the MPU wrappers. That should only be done when -task.h is included from an application file. */ -#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE - -/* FreeRTOS includes. */ -#include "FreeRTOS.h" -#include "task.h" -#include "stream_buffer.h" - -#if( configUSE_TASK_NOTIFICATIONS != 1 ) - #error configUSE_TASK_NOTIFICATIONS must be set to 1 to build stream_buffer.c -#endif - -/* Lint e961, e9021 and e750 are suppressed as a MISRA exception justified -because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined -for the header files above, but not in this file, in order to generate the -correct privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750 !e9021. */ - -/* If the user has not provided application specific Rx notification macros, -or #defined the notification macros away, them provide default implementations -that uses task notifications. */ -/*lint -save -e9026 Function like macros allowed and needed here so they can be overidden. */ -#ifndef sbRECEIVE_COMPLETED - #define sbRECEIVE_COMPLETED( pxStreamBuffer ) \ - vTaskSuspendAll(); \ - { \ - if( ( pxStreamBuffer )->xTaskWaitingToSend != NULL ) \ - { \ - ( void ) xTaskNotify( ( pxStreamBuffer )->xTaskWaitingToSend, \ - ( uint32_t ) 0, \ - eNoAction ); \ - ( pxStreamBuffer )->xTaskWaitingToSend = NULL; \ - } \ - } \ - ( void ) xTaskResumeAll(); -#endif /* sbRECEIVE_COMPLETED */ - -#ifndef sbRECEIVE_COMPLETED_FROM_ISR - #define sbRECEIVE_COMPLETED_FROM_ISR( pxStreamBuffer, \ - pxHigherPriorityTaskWoken ) \ - { \ - UBaseType_t uxSavedInterruptStatus; \ - \ - uxSavedInterruptStatus = ( UBaseType_t ) portSET_INTERRUPT_MASK_FROM_ISR(); \ - { \ - if( ( pxStreamBuffer )->xTaskWaitingToSend != NULL ) \ - { \ - ( void ) xTaskNotifyFromISR( ( pxStreamBuffer )->xTaskWaitingToSend, \ - ( uint32_t ) 0, \ - eNoAction, \ - pxHigherPriorityTaskWoken ); \ - ( pxStreamBuffer )->xTaskWaitingToSend = NULL; \ - } \ - } \ - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \ - } -#endif /* sbRECEIVE_COMPLETED_FROM_ISR */ - -/* If the user has not provided an application specific Tx notification macro, -or #defined the notification macro away, them provide a default implementation -that uses task notifications. */ -#ifndef sbSEND_COMPLETED - #define sbSEND_COMPLETED( pxStreamBuffer ) \ - vTaskSuspendAll(); \ - { \ - if( ( pxStreamBuffer )->xTaskWaitingToReceive != NULL ) \ - { \ - ( void ) xTaskNotify( ( pxStreamBuffer )->xTaskWaitingToReceive, \ - ( uint32_t ) 0, \ - eNoAction ); \ - ( pxStreamBuffer )->xTaskWaitingToReceive = NULL; \ - } \ - } \ - ( void ) xTaskResumeAll(); -#endif /* sbSEND_COMPLETED */ - -#ifndef sbSEND_COMPLETE_FROM_ISR - #define sbSEND_COMPLETE_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken ) \ - { \ - UBaseType_t uxSavedInterruptStatus; \ - \ - uxSavedInterruptStatus = ( UBaseType_t ) portSET_INTERRUPT_MASK_FROM_ISR(); \ - { \ - if( ( pxStreamBuffer )->xTaskWaitingToReceive != NULL ) \ - { \ - ( void ) xTaskNotifyFromISR( ( pxStreamBuffer )->xTaskWaitingToReceive, \ - ( uint32_t ) 0, \ - eNoAction, \ - pxHigherPriorityTaskWoken ); \ - ( pxStreamBuffer )->xTaskWaitingToReceive = NULL; \ - } \ - } \ - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); \ - } -#endif /* sbSEND_COMPLETE_FROM_ISR */ -/*lint -restore (9026) */ - -/* The number of bytes used to hold the length of a message in the buffer. */ -#define sbBYTES_TO_STORE_MESSAGE_LENGTH ( sizeof( configMESSAGE_BUFFER_LENGTH_TYPE ) ) - -/* Bits stored in the ucFlags field of the stream buffer. */ -#define sbFLAGS_IS_MESSAGE_BUFFER ( ( uint8_t ) 1 ) /* Set if the stream buffer was created as a message buffer, in which case it holds discrete messages rather than a stream. */ -#define sbFLAGS_IS_STATICALLY_ALLOCATED ( ( uint8_t ) 2 ) /* Set if the stream buffer was created using statically allocated memory. */ - -/*-----------------------------------------------------------*/ - -/* Structure that hold state information on the buffer. */ -typedef struct StreamBufferDef_t /*lint !e9058 Style convention uses tag. */ -{ - volatile size_t xTail; /* Index to the next item to read within the buffer. */ - volatile size_t xHead; /* Index to the next item to write within the buffer. */ - size_t xLength; /* The length of the buffer pointed to by pucBuffer. */ - size_t xTriggerLevelBytes; /* The number of bytes that must be in the stream buffer before a task that is waiting for data is unblocked. */ - volatile TaskHandle_t xTaskWaitingToReceive; /* Holds the handle of a task waiting for data, or NULL if no tasks are waiting. */ - volatile TaskHandle_t xTaskWaitingToSend; /* Holds the handle of a task waiting to send data to a message buffer that is full. */ - uint8_t *pucBuffer; /* Points to the buffer itself - that is - the RAM that stores the data passed through the buffer. */ - uint8_t ucFlags; - - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxStreamBufferNumber; /* Used for tracing purposes. */ - #endif -} StreamBuffer_t; - -/* - * The number of bytes available to be read from the buffer. - */ -static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer ) PRIVILEGED_FUNCTION; - -/* - * Add xCount bytes from pucData into the pxStreamBuffer message buffer. - * Returns the number of bytes written, which will either equal xCount in the - * success case, or 0 if there was not enough space in the buffer (in which case - * no data is written into the buffer). - */ -static size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer, const uint8_t *pucData, size_t xCount ) PRIVILEGED_FUNCTION; - -/* - * If the stream buffer is being used as a message buffer, then reads an entire - * message out of the buffer. If the stream buffer is being used as a stream - * buffer then read as many bytes as possible from the buffer. - * prvReadBytesFromBuffer() is called to actually extract the bytes from the - * buffer's data storage area. - */ -static size_t prvReadMessageFromBuffer( StreamBuffer_t *pxStreamBuffer, - void *pvRxData, - size_t xBufferLengthBytes, - size_t xBytesAvailable, - size_t xBytesToStoreMessageLength ) PRIVILEGED_FUNCTION; - -/* - * If the stream buffer is being used as a message buffer, then writes an entire - * message to the buffer. If the stream buffer is being used as a stream - * buffer then write as many bytes as possible to the buffer. - * prvWriteBytestoBuffer() is called to actually send the bytes to the buffer's - * data storage area. - */ -static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer, - const void * pvTxData, - size_t xDataLengthBytes, - size_t xSpace, - size_t xRequiredSpace ) PRIVILEGED_FUNCTION; - -/* - * Read xMaxCount bytes from the pxStreamBuffer message buffer and write them - * to pucData. - */ -static size_t prvReadBytesFromBuffer( StreamBuffer_t *pxStreamBuffer, - uint8_t *pucData, - size_t xMaxCount, - size_t xBytesAvailable ) PRIVILEGED_FUNCTION; - -/* - * Called by both pxStreamBufferCreate() and pxStreamBufferCreateStatic() to - * initialise the members of the newly created stream buffer structure. - */ -static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer, - uint8_t * const pucBuffer, - size_t xBufferSizeBytes, - size_t xTriggerLevelBytes, - uint8_t ucFlags ) PRIVILEGED_FUNCTION; - -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - StreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes, size_t xTriggerLevelBytes, BaseType_t xIsMessageBuffer ) - { - uint8_t *pucAllocatedMemory; - uint8_t ucFlags; - - /* In case the stream buffer is going to be used as a message buffer - (that is, it will hold discrete messages with a little meta data that - says how big the next message is) check the buffer will be large enough - to hold at least one message. */ - if( xIsMessageBuffer == pdTRUE ) - { - /* Is a message buffer but not statically allocated. */ - ucFlags = sbFLAGS_IS_MESSAGE_BUFFER; - configASSERT( xBufferSizeBytes > sbBYTES_TO_STORE_MESSAGE_LENGTH ); - } - else - { - /* Not a message buffer and not statically allocated. */ - ucFlags = 0; - configASSERT( xBufferSizeBytes > 0 ); - } - configASSERT( xTriggerLevelBytes <= xBufferSizeBytes ); - - /* A trigger level of 0 would cause a waiting task to unblock even when - the buffer was empty. */ - if( xTriggerLevelBytes == ( size_t ) 0 ) - { - xTriggerLevelBytes = ( size_t ) 1; - } - - /* A stream buffer requires a StreamBuffer_t structure and a buffer. - Both are allocated in a single call to pvPortMalloc(). The - StreamBuffer_t structure is placed at the start of the allocated memory - and the buffer follows immediately after. The requested size is - incremented so the free space is returned as the user would expect - - this is a quirk of the implementation that means otherwise the free - space would be reported as one byte smaller than would be logically - expected. */ - xBufferSizeBytes++; - pucAllocatedMemory = ( uint8_t * ) pvPortMalloc( xBufferSizeBytes + sizeof( StreamBuffer_t ) ); /*lint !e9079 malloc() only returns void*. */ - - if( pucAllocatedMemory != NULL ) - { - prvInitialiseNewStreamBuffer( ( StreamBuffer_t * ) pucAllocatedMemory, /* Structure at the start of the allocated memory. */ /*lint !e9087 Safe cast as allocated memory is aligned. */ /*lint !e826 Area is not too small and alignment is guaranteed provided malloc() behaves as expected and returns aligned buffer. */ - pucAllocatedMemory + sizeof( StreamBuffer_t ), /* Storage area follows. */ /*lint !e9016 Indexing past structure valid for uint8_t pointer, also storage area has no alignment requirement. */ - xBufferSizeBytes, - xTriggerLevelBytes, - ucFlags ); - - traceSTREAM_BUFFER_CREATE( ( ( StreamBuffer_t * ) pucAllocatedMemory ), xIsMessageBuffer ); - } - else - { - traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ); - } - - return ( StreamBufferHandle_t ) pucAllocatedMemory; /*lint !e9087 !e826 Safe cast as allocated memory is aligned. */ - } - -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes, - size_t xTriggerLevelBytes, - BaseType_t xIsMessageBuffer, - uint8_t * const pucStreamBufferStorageArea, - StaticStreamBuffer_t * const pxStaticStreamBuffer ) - { - StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) pxStaticStreamBuffer; /*lint !e740 !e9087 Safe cast as StaticStreamBuffer_t is opaque Streambuffer_t. */ - StreamBufferHandle_t xReturn; - uint8_t ucFlags; - - configASSERT( pucStreamBufferStorageArea ); - configASSERT( pxStaticStreamBuffer ); - configASSERT( xTriggerLevelBytes <= xBufferSizeBytes ); - - /* A trigger level of 0 would cause a waiting task to unblock even when - the buffer was empty. */ - if( xTriggerLevelBytes == ( size_t ) 0 ) - { - xTriggerLevelBytes = ( size_t ) 1; - } - - if( xIsMessageBuffer != pdFALSE ) - { - /* Statically allocated message buffer. */ - ucFlags = sbFLAGS_IS_MESSAGE_BUFFER | sbFLAGS_IS_STATICALLY_ALLOCATED; - } - else - { - /* Statically allocated stream buffer. */ - ucFlags = sbFLAGS_IS_STATICALLY_ALLOCATED; - } - - /* In case the stream buffer is going to be used as a message buffer - (that is, it will hold discrete messages with a little meta data that - says how big the next message is) check the buffer will be large enough - to hold at least one message. */ - configASSERT( xBufferSizeBytes > sbBYTES_TO_STORE_MESSAGE_LENGTH ); - - #if( configASSERT_DEFINED == 1 ) - { - /* Sanity check that the size of the structure used to declare a - variable of type StaticStreamBuffer_t equals the size of the real - message buffer structure. */ - volatile size_t xSize = sizeof( StaticStreamBuffer_t ); - configASSERT( xSize == sizeof( StreamBuffer_t ) ); - } /*lint !e529 xSize is referenced is configASSERT() is defined. */ - #endif /* configASSERT_DEFINED */ - - if( ( pucStreamBufferStorageArea != NULL ) && ( pxStaticStreamBuffer != NULL ) ) - { - prvInitialiseNewStreamBuffer( pxStreamBuffer, - pucStreamBufferStorageArea, - xBufferSizeBytes, - xTriggerLevelBytes, - ucFlags ); - - /* Remember this was statically allocated in case it is ever deleted - again. */ - pxStreamBuffer->ucFlags |= sbFLAGS_IS_STATICALLY_ALLOCATED; - - traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ); - - xReturn = ( StreamBufferHandle_t ) pxStaticStreamBuffer; /*lint !e9087 Data hiding requires cast to opaque type. */ - } - else - { - xReturn = NULL; - traceSTREAM_BUFFER_CREATE_STATIC_FAILED( xReturn, xIsMessageBuffer ); - } - - return xReturn; - } - -#endif /* ( configSUPPORT_STATIC_ALLOCATION == 1 ) */ -/*-----------------------------------------------------------*/ - -void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) -{ -StreamBuffer_t * pxStreamBuffer = xStreamBuffer; - - configASSERT( pxStreamBuffer ); - - traceSTREAM_BUFFER_DELETE( xStreamBuffer ); - - if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) pdFALSE ) - { - #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - { - /* Both the structure and the buffer were allocated using a single call - to pvPortMalloc(), hence only one call to vPortFree() is required. */ - vPortFree( ( void * ) pxStreamBuffer ); /*lint !e9087 Standard free() semantics require void *, plus pxStreamBuffer was allocated by pvPortMalloc(). */ - } - #else - { - /* Should not be possible to get here, ucFlags must be corrupt. - Force an assert. */ - configASSERT( xStreamBuffer == ( StreamBufferHandle_t ) ~0 ); - } - #endif - } - else - { - /* The structure and buffer were not allocated dynamically and cannot be - freed - just scrub the structure so future use will assert. */ - ( void ) memset( pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) ); - } -} -/*-----------------------------------------------------------*/ - -BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -BaseType_t xReturn = pdFAIL; - -#if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxStreamBufferNumber; -#endif - - configASSERT( pxStreamBuffer ); - - #if( configUSE_TRACE_FACILITY == 1 ) - { - /* Store the stream buffer number so it can be restored after the - reset. */ - uxStreamBufferNumber = pxStreamBuffer->uxStreamBufferNumber; - } - #endif - - /* Can only reset a message buffer if there are no tasks blocked on it. */ - taskENTER_CRITICAL(); - { - if( pxStreamBuffer->xTaskWaitingToReceive == NULL ) - { - if( pxStreamBuffer->xTaskWaitingToSend == NULL ) - { - prvInitialiseNewStreamBuffer( pxStreamBuffer, - pxStreamBuffer->pucBuffer, - pxStreamBuffer->xLength, - pxStreamBuffer->xTriggerLevelBytes, - pxStreamBuffer->ucFlags ); - xReturn = pdPASS; - - #if( configUSE_TRACE_FACILITY == 1 ) - { - pxStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber; - } - #endif - - traceSTREAM_BUFFER_RESET( xStreamBuffer ); - } - } - } - taskEXIT_CRITICAL(); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -BaseType_t xReturn; - - configASSERT( pxStreamBuffer ); - - /* It is not valid for the trigger level to be 0. */ - if( xTriggerLevel == ( size_t ) 0 ) - { - xTriggerLevel = ( size_t ) 1; - } - - /* The trigger level is the number of bytes that must be in the stream - buffer before a task that is waiting for data is unblocked. */ - if( xTriggerLevel <= pxStreamBuffer->xLength ) - { - pxStreamBuffer->xTriggerLevelBytes = xTriggerLevel; - xReturn = pdPASS; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) -{ -const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -size_t xSpace; - - configASSERT( pxStreamBuffer ); - - xSpace = pxStreamBuffer->xLength + pxStreamBuffer->xTail; - xSpace -= pxStreamBuffer->xHead; - xSpace -= ( size_t ) 1; - - if( xSpace >= pxStreamBuffer->xLength ) - { - xSpace -= pxStreamBuffer->xLength; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xSpace; -} -/*-----------------------------------------------------------*/ - -size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) -{ -const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -size_t xReturn; - - configASSERT( pxStreamBuffer ); - - xReturn = prvBytesInBuffer( pxStreamBuffer ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer, - const void *pvTxData, - size_t xDataLengthBytes, - TickType_t xTicksToWait ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -size_t xReturn, xSpace = 0; -size_t xRequiredSpace = xDataLengthBytes; -TimeOut_t xTimeOut; - - configASSERT( pvTxData ); - configASSERT( pxStreamBuffer ); - - /* This send function is used to write to both message buffers and stream - buffers. If this is a message buffer then the space needed must be - increased by the amount of bytes needed to store the length of the - message. */ - if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 ) - { - xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH; - - /* Overflow? */ - configASSERT( xRequiredSpace > xDataLengthBytes ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( xTicksToWait != ( TickType_t ) 0 ) - { - vTaskSetTimeOutState( &xTimeOut ); - - do - { - /* Wait until the required number of bytes are free in the message - buffer. */ - taskENTER_CRITICAL(); - { - xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer ); - - if( xSpace < xRequiredSpace ) - { - /* Clear notification state as going to wait for space. */ - ( void ) xTaskNotifyStateClear( NULL ); - - /* Should only be one writer. */ - configASSERT( pxStreamBuffer->xTaskWaitingToSend == NULL ); - pxStreamBuffer->xTaskWaitingToSend = xTaskGetCurrentTaskHandle(); - } - else - { - taskEXIT_CRITICAL(); - break; - } - } - taskEXIT_CRITICAL(); - - traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer ); - ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait ); - pxStreamBuffer->xTaskWaitingToSend = NULL; - - } while( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( xSpace == ( size_t ) 0 ) - { - xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace ); - - if( xReturn > ( size_t ) 0 ) - { - traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn ); - - /* Was a task waiting for the data? */ - if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes ) - { - sbSEND_COMPLETED( pxStreamBuffer ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer ); - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer, - const void *pvTxData, - size_t xDataLengthBytes, - BaseType_t * const pxHigherPriorityTaskWoken ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -size_t xReturn, xSpace; -size_t xRequiredSpace = xDataLengthBytes; - - configASSERT( pvTxData ); - configASSERT( pxStreamBuffer ); - - /* This send function is used to write to both message buffers and stream - buffers. If this is a message buffer then the space needed must be - increased by the amount of bytes needed to store the length of the - message. */ - if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 ) - { - xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer ); - xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace ); - - if( xReturn > ( size_t ) 0 ) - { - /* Was a task waiting for the data? */ - if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes ) - { - sbSEND_COMPLETE_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xReturn ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer, - const void * pvTxData, - size_t xDataLengthBytes, - size_t xSpace, - size_t xRequiredSpace ) -{ - BaseType_t xShouldWrite; - size_t xReturn; - - if( xSpace == ( size_t ) 0 ) - { - /* Doesn't matter if this is a stream buffer or a message buffer, there - is no space to write. */ - xShouldWrite = pdFALSE; - } - else if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) == ( uint8_t ) 0 ) - { - /* This is a stream buffer, as opposed to a message buffer, so writing a - stream of bytes rather than discrete messages. Write as many bytes as - possible. */ - xShouldWrite = pdTRUE; - xDataLengthBytes = configMIN( xDataLengthBytes, xSpace ); - } - else if( xSpace >= xRequiredSpace ) - { - /* This is a message buffer, as opposed to a stream buffer, and there - is enough space to write both the message length and the message itself - into the buffer. Start by writing the length of the data, the data - itself will be written later in this function. */ - xShouldWrite = pdTRUE; - ( void ) prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xDataLengthBytes ), sbBYTES_TO_STORE_MESSAGE_LENGTH ); - } - else - { - /* There is space available, but not enough space. */ - xShouldWrite = pdFALSE; - } - - if( xShouldWrite != pdFALSE ) - { - /* Writes the data itself. */ - xReturn = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) pvTxData, xDataLengthBytes ); /*lint !e9079 Storage buffer is implemented as uint8_t for ease of sizing, alighment and access. */ - } - else - { - xReturn = 0; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer, - void *pvRxData, - size_t xBufferLengthBytes, - TickType_t xTicksToWait ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -size_t xReceivedLength = 0, xBytesAvailable, xBytesToStoreMessageLength; - - configASSERT( pvRxData ); - configASSERT( pxStreamBuffer ); - - /* This receive function is used by both message buffers, which store - discrete messages, and stream buffers, which store a continuous stream of - bytes. Discrete messages include an additional - sbBYTES_TO_STORE_MESSAGE_LENGTH bytes that hold the length of the - message. */ - if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 ) - { - xBytesToStoreMessageLength = sbBYTES_TO_STORE_MESSAGE_LENGTH; - } - else - { - xBytesToStoreMessageLength = 0; - } - - if( xTicksToWait != ( TickType_t ) 0 ) - { - /* Checking if there is data and clearing the notification state must be - performed atomically. */ - taskENTER_CRITICAL(); - { - xBytesAvailable = prvBytesInBuffer( pxStreamBuffer ); - - /* If this function was invoked by a message buffer read then - xBytesToStoreMessageLength holds the number of bytes used to hold - the length of the next discrete message. If this function was - invoked by a stream buffer read then xBytesToStoreMessageLength will - be 0. */ - if( xBytesAvailable <= xBytesToStoreMessageLength ) - { - /* Clear notification state as going to wait for data. */ - ( void ) xTaskNotifyStateClear( NULL ); - - /* Should only be one reader. */ - configASSERT( pxStreamBuffer->xTaskWaitingToReceive == NULL ); - pxStreamBuffer->xTaskWaitingToReceive = xTaskGetCurrentTaskHandle(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - if( xBytesAvailable <= xBytesToStoreMessageLength ) - { - /* Wait for data to be available. */ - traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer ); - ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait ); - pxStreamBuffer->xTaskWaitingToReceive = NULL; - - /* Recheck the data available after blocking. */ - xBytesAvailable = prvBytesInBuffer( pxStreamBuffer ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - xBytesAvailable = prvBytesInBuffer( pxStreamBuffer ); - } - - /* Whether receiving a discrete message (where xBytesToStoreMessageLength - holds the number of bytes used to store the message length) or a stream of - bytes (where xBytesToStoreMessageLength is zero), the number of bytes - available must be greater than xBytesToStoreMessageLength to be able to - read bytes from the buffer. */ - if( xBytesAvailable > xBytesToStoreMessageLength ) - { - xReceivedLength = prvReadMessageFromBuffer( pxStreamBuffer, pvRxData, xBufferLengthBytes, xBytesAvailable, xBytesToStoreMessageLength ); - - /* Was a task waiting for space in the buffer? */ - if( xReceivedLength != ( size_t ) 0 ) - { - traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength ); - sbRECEIVE_COMPLETED( pxStreamBuffer ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer ); - mtCOVERAGE_TEST_MARKER(); - } - - return xReceivedLength; -} -/*-----------------------------------------------------------*/ - -size_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -size_t xReturn, xBytesAvailable, xOriginalTail; -configMESSAGE_BUFFER_LENGTH_TYPE xTempReturn; - - configASSERT( pxStreamBuffer ); - - /* Ensure the stream buffer is being used as a message buffer. */ - if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 ) - { - xBytesAvailable = prvBytesInBuffer( pxStreamBuffer ); - if( xBytesAvailable > sbBYTES_TO_STORE_MESSAGE_LENGTH ) - { - /* The number of bytes available is greater than the number of bytes - required to hold the length of the next message, so another message - is available. Return its length without removing the length bytes - from the buffer. A copy of the tail is stored so the buffer can be - returned to its prior state as the message is not actually being - removed from the buffer. */ - xOriginalTail = pxStreamBuffer->xTail; - ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xTempReturn, sbBYTES_TO_STORE_MESSAGE_LENGTH, xBytesAvailable ); - xReturn = ( size_t ) xTempReturn; - pxStreamBuffer->xTail = xOriginalTail; - } - else - { - /* The minimum amount of bytes in a message buffer is - ( sbBYTES_TO_STORE_MESSAGE_LENGTH + 1 ), so if xBytesAvailable is - less than sbBYTES_TO_STORE_MESSAGE_LENGTH the only other valid - value is 0. */ - configASSERT( xBytesAvailable == 0 ); - xReturn = 0; - } - } - else - { - xReturn = 0; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -size_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer, - void *pvRxData, - size_t xBufferLengthBytes, - BaseType_t * const pxHigherPriorityTaskWoken ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -size_t xReceivedLength = 0, xBytesAvailable, xBytesToStoreMessageLength; - - configASSERT( pvRxData ); - configASSERT( pxStreamBuffer ); - - /* This receive function is used by both message buffers, which store - discrete messages, and stream buffers, which store a continuous stream of - bytes. Discrete messages include an additional - sbBYTES_TO_STORE_MESSAGE_LENGTH bytes that hold the length of the - message. */ - if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 ) - { - xBytesToStoreMessageLength = sbBYTES_TO_STORE_MESSAGE_LENGTH; - } - else - { - xBytesToStoreMessageLength = 0; - } - - xBytesAvailable = prvBytesInBuffer( pxStreamBuffer ); - - /* Whether receiving a discrete message (where xBytesToStoreMessageLength - holds the number of bytes used to store the message length) or a stream of - bytes (where xBytesToStoreMessageLength is zero), the number of bytes - available must be greater than xBytesToStoreMessageLength to be able to - read bytes from the buffer. */ - if( xBytesAvailable > xBytesToStoreMessageLength ) - { - xReceivedLength = prvReadMessageFromBuffer( pxStreamBuffer, pvRxData, xBufferLengthBytes, xBytesAvailable, xBytesToStoreMessageLength ); - - /* Was a task waiting for space in the buffer? */ - if( xReceivedLength != ( size_t ) 0 ) - { - sbRECEIVE_COMPLETED_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength ); - - return xReceivedLength; -} -/*-----------------------------------------------------------*/ - -static size_t prvReadMessageFromBuffer( StreamBuffer_t *pxStreamBuffer, - void *pvRxData, - size_t xBufferLengthBytes, - size_t xBytesAvailable, - size_t xBytesToStoreMessageLength ) -{ -size_t xOriginalTail, xReceivedLength, xNextMessageLength; -configMESSAGE_BUFFER_LENGTH_TYPE xTempNextMessageLength; - - if( xBytesToStoreMessageLength != ( size_t ) 0 ) - { - /* A discrete message is being received. First receive the length - of the message. A copy of the tail is stored so the buffer can be - returned to its prior state if the length of the message is too - large for the provided buffer. */ - xOriginalTail = pxStreamBuffer->xTail; - ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xTempNextMessageLength, xBytesToStoreMessageLength, xBytesAvailable ); - xNextMessageLength = ( size_t ) xTempNextMessageLength; - - /* Reduce the number of bytes available by the number of bytes just - read out. */ - xBytesAvailable -= xBytesToStoreMessageLength; - - /* Check there is enough space in the buffer provided by the - user. */ - if( xNextMessageLength > xBufferLengthBytes ) - { - /* The user has provided insufficient space to read the message - so return the buffer to its previous state (so the length of - the message is in the buffer again). */ - pxStreamBuffer->xTail = xOriginalTail; - xNextMessageLength = 0; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - /* A stream of bytes is being received (as opposed to a discrete - message), so read as many bytes as possible. */ - xNextMessageLength = xBufferLengthBytes; - } - - /* Read the actual data. */ - xReceivedLength = prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) pvRxData, xNextMessageLength, xBytesAvailable ); /*lint !e9079 Data storage area is implemented as uint8_t array for ease of sizing, indexing and alignment. */ - - return xReceivedLength; -} -/*-----------------------------------------------------------*/ - -BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) -{ -const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -BaseType_t xReturn; -size_t xTail; - - configASSERT( pxStreamBuffer ); - - /* True if no bytes are available. */ - xTail = pxStreamBuffer->xTail; - if( pxStreamBuffer->xHead == xTail ) - { - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) -{ -BaseType_t xReturn; -size_t xBytesToStoreMessageLength; -const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; - - configASSERT( pxStreamBuffer ); - - /* This generic version of the receive function is used by both message - buffers, which store discrete messages, and stream buffers, which store a - continuous stream of bytes. Discrete messages include an additional - sbBYTES_TO_STORE_MESSAGE_LENGTH bytes that hold the length of the message. */ - if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 ) - { - xBytesToStoreMessageLength = sbBYTES_TO_STORE_MESSAGE_LENGTH; - } - else - { - xBytesToStoreMessageLength = 0; - } - - /* True if the available space equals zero. */ - if( xStreamBufferSpacesAvailable( xStreamBuffer ) <= xBytesToStoreMessageLength ) - { - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; - - configASSERT( pxStreamBuffer ); - - uxSavedInterruptStatus = ( UBaseType_t ) portSET_INTERRUPT_MASK_FROM_ISR(); - { - if( ( pxStreamBuffer )->xTaskWaitingToReceive != NULL ) - { - ( void ) xTaskNotifyFromISR( ( pxStreamBuffer )->xTaskWaitingToReceive, - ( uint32_t ) 0, - eNoAction, - pxHigherPriorityTaskWoken ); - ( pxStreamBuffer )->xTaskWaitingToReceive = NULL; - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken ) -{ -StreamBuffer_t * const pxStreamBuffer = xStreamBuffer; -BaseType_t xReturn; -UBaseType_t uxSavedInterruptStatus; - - configASSERT( pxStreamBuffer ); - - uxSavedInterruptStatus = ( UBaseType_t ) portSET_INTERRUPT_MASK_FROM_ISR(); - { - if( ( pxStreamBuffer )->xTaskWaitingToSend != NULL ) - { - ( void ) xTaskNotifyFromISR( ( pxStreamBuffer )->xTaskWaitingToSend, - ( uint32_t ) 0, - eNoAction, - pxHigherPriorityTaskWoken ); - ( pxStreamBuffer )->xTaskWaitingToSend = NULL; - xReturn = pdTRUE; - } - else - { - xReturn = pdFALSE; - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; -} -/*-----------------------------------------------------------*/ - -static size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer, const uint8_t *pucData, size_t xCount ) -{ -size_t xNextHead, xFirstLength; - - configASSERT( xCount > ( size_t ) 0 ); - - xNextHead = pxStreamBuffer->xHead; - - /* Calculate the number of bytes that can be added in the first write - - which may be less than the total number of bytes that need to be added if - the buffer will wrap back to the beginning. */ - xFirstLength = configMIN( pxStreamBuffer->xLength - xNextHead, xCount ); - - /* Write as many bytes as can be written in the first write. */ - configASSERT( ( xNextHead + xFirstLength ) <= pxStreamBuffer->xLength ); - ( void ) memcpy( ( void* ) ( &( pxStreamBuffer->pucBuffer[ xNextHead ] ) ), ( const void * ) pucData, xFirstLength ); /*lint !e9087 memcpy() requires void *. */ - - /* If the number of bytes written was less than the number that could be - written in the first write... */ - if( xCount > xFirstLength ) - { - /* ...then write the remaining bytes to the start of the buffer. */ - configASSERT( ( xCount - xFirstLength ) <= pxStreamBuffer->xLength ); - ( void ) memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - xNextHead += xCount; - if( xNextHead >= pxStreamBuffer->xLength ) - { - xNextHead -= pxStreamBuffer->xLength; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - pxStreamBuffer->xHead = xNextHead; - - return xCount; -} -/*-----------------------------------------------------------*/ - -static size_t prvReadBytesFromBuffer( StreamBuffer_t *pxStreamBuffer, uint8_t *pucData, size_t xMaxCount, size_t xBytesAvailable ) -{ -size_t xCount, xFirstLength, xNextTail; - - /* Use the minimum of the wanted bytes and the available bytes. */ - xCount = configMIN( xBytesAvailable, xMaxCount ); - - if( xCount > ( size_t ) 0 ) - { - xNextTail = pxStreamBuffer->xTail; - - /* Calculate the number of bytes that can be read - which may be - less than the number wanted if the data wraps around to the start of - the buffer. */ - xFirstLength = configMIN( pxStreamBuffer->xLength - xNextTail, xCount ); - - /* Obtain the number of bytes it is possible to obtain in the first - read. Asserts check bounds of read and write. */ - configASSERT( xFirstLength <= xMaxCount ); - configASSERT( ( xNextTail + xFirstLength ) <= pxStreamBuffer->xLength ); - ( void ) memcpy( ( void * ) pucData, ( const void * ) &( pxStreamBuffer->pucBuffer[ xNextTail ] ), xFirstLength ); /*lint !e9087 memcpy() requires void *. */ - - /* If the total number of wanted bytes is greater than the number - that could be read in the first read... */ - if( xCount > xFirstLength ) - { - /*...then read the remaining bytes from the start of the buffer. */ - configASSERT( xCount <= xMaxCount ); - ( void ) memcpy( ( void * ) &( pucData[ xFirstLength ] ), ( void * ) ( pxStreamBuffer->pucBuffer ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Move the tail pointer to effectively remove the data read from - the buffer. */ - xNextTail += xCount; - - if( xNextTail >= pxStreamBuffer->xLength ) - { - xNextTail -= pxStreamBuffer->xLength; - } - - pxStreamBuffer->xTail = xNextTail; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xCount; -} -/*-----------------------------------------------------------*/ - -static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer ) -{ -/* Returns the distance between xTail and xHead. */ -size_t xCount; - - xCount = pxStreamBuffer->xLength + pxStreamBuffer->xHead; - xCount -= pxStreamBuffer->xTail; - if ( xCount >= pxStreamBuffer->xLength ) - { - xCount -= pxStreamBuffer->xLength; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xCount; -} -/*-----------------------------------------------------------*/ - -static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer, - uint8_t * const pucBuffer, - size_t xBufferSizeBytes, - size_t xTriggerLevelBytes, - uint8_t ucFlags ) -{ - /* Assert here is deliberately writing to the entire buffer to ensure it can - be written to without generating exceptions, and is setting the buffer to a - known value to assist in development/debugging. */ - #if( configASSERT_DEFINED == 1 ) - { - /* The value written just has to be identifiable when looking at the - memory. Don't use 0xA5 as that is the stack fill value and could - result in confusion as to what is actually being observed. */ - const BaseType_t xWriteValue = 0x55; - configASSERT( memset( pucBuffer, ( int ) xWriteValue, xBufferSizeBytes ) == pucBuffer ); - } /*lint !e529 !e438 xWriteValue is only used if configASSERT() is defined. */ - #endif - - ( void ) memset( ( void * ) pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) ); /*lint !e9087 memset() requires void *. */ - pxStreamBuffer->pucBuffer = pucBuffer; - pxStreamBuffer->xLength = xBufferSizeBytes; - pxStreamBuffer->xTriggerLevelBytes = xTriggerLevelBytes; - pxStreamBuffer->ucFlags = ucFlags; -} - -#if ( configUSE_TRACE_FACILITY == 1 ) - - UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer ) - { - return xStreamBuffer->uxStreamBufferNumber; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer, UBaseType_t uxStreamBufferNumber ) - { - xStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer ) - { - return ( xStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ); - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ diff --git a/FreeRTOS/Source/tasks.c b/FreeRTOS/Source/tasks.c index ff65773..e8b24d2 100644 --- a/FreeRTOS/Source/tasks.c +++ b/FreeRTOS/Source/tasks.c @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ /* Standard includes. */ #include @@ -38,36 +75,154 @@ task.h is included from an application file. */ #include "FreeRTOS.h" #include "task.h" #include "timers.h" -#include "stack_macros.h" +#include "StackMacros.h" -/* Lint e9021, e961 and e750 are suppressed as a MISRA exception justified -because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined -for the header files above, but not in this file, in order to generate the -correct privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750 !e9021. */ +/* Lint e961 and e750 are suppressed as a MISRA exception justified because the +MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the +header files above, but not in this file, in order to generate the correct +privileged Vs unprivileged linkage and placement. */ +#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */ -/* Set configUSE_STATS_FORMATTING_FUNCTIONS to 2 to include the stats formatting -functions but without including stdio.h here. */ #if ( configUSE_STATS_FORMATTING_FUNCTIONS == 1 ) /* At the bottom of this file are two optional functions that can be used to generate human readable text from the raw data generated by the uxTaskGetSystemState() function. Note the formatting functions are provided for convenience only, and are NOT considered part of the kernel. */ #include -#endif /* configUSE_STATS_FORMATTING_FUNCTIONS == 1 ) */ +#endif /* ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS == 1 ) ) */ -#if( configUSE_PREEMPTION == 0 ) - /* If the cooperative scheduler is being used then a yield should not be - performed just because a higher priority task has been woken. */ - #define taskYIELD_IF_USING_PREEMPTION() -#else - #define taskYIELD_IF_USING_PREEMPTION() portYIELD_WITHIN_API() +/* Sanity check the configuration. */ +#if configUSE_TICKLESS_IDLE != 0 + #if INCLUDE_vTaskSuspend != 1 + #error INCLUDE_vTaskSuspend must be set to 1 if configUSE_TICKLESS_IDLE is not set to 0 + #endif /* INCLUDE_vTaskSuspend */ +#endif /* configUSE_TICKLESS_IDLE */ + +/* + * Defines the size, in words, of the stack allocated to the idle task. + */ +#define tskIDLE_STACK_SIZE configMINIMAL_STACK_SIZE + +/* + * Task control block. A task control block (TCB) is allocated for each task, + * and stores task state information, including a pointer to the task's context + * (the task's run time environment, including register values) + */ +typedef struct tskTaskControlBlock +{ + volatile portSTACK_TYPE *pxTopOfStack; /*< Points to the location of the last item placed on the tasks stack. THIS MUST BE THE FIRST MEMBER OF THE TCB STRUCT. */ + + #if ( portUSING_MPU_WRAPPERS == 1 ) + xMPU_SETTINGS xMPUSettings; /*< The MPU settings are defined as part of the port layer. THIS MUST BE THE SECOND MEMBER OF THE TCB STRUCT. */ + #endif + + xListItem xGenericListItem; /*< The list that the state list item of a task is reference from denotes the state of that task (Ready, Blocked, Suspended ). */ + xListItem xEventListItem; /*< Used to reference a task from an event list. */ + unsigned portBASE_TYPE uxPriority; /*< The priority of the task. 0 is the lowest priority. */ + portSTACK_TYPE *pxStack; /*< Points to the start of the stack. */ + signed char pcTaskName[ configMAX_TASK_NAME_LEN ];/*< Descriptive name given to the task when created. Facilitates debugging only. */ + + #if ( portSTACK_GROWTH > 0 ) + portSTACK_TYPE *pxEndOfStack; /*< Points to the end of the stack on architectures where the stack grows up from low memory. */ + #endif + + #if ( portCRITICAL_NESTING_IN_TCB == 1 ) + unsigned portBASE_TYPE uxCriticalNesting; /*< Holds the critical section nesting depth for ports that do not maintain their own count in the port layer. */ + #endif + + #if ( configUSE_TRACE_FACILITY == 1 ) + unsigned portBASE_TYPE uxTCBNumber; /*< Stores a number that increments each time a TCB is created. It allows debuggers to determine when a task has been deleted and then recreated. */ + unsigned portBASE_TYPE uxTaskNumber; /*< Stores a number specifically for use by third party trace code. */ + #endif + + #if ( configUSE_MUTEXES == 1 ) + unsigned portBASE_TYPE uxBasePriority; /*< The priority last assigned to the task - used by the priority inheritance mechanism. */ + #endif + + #if ( configUSE_APPLICATION_TASK_TAG == 1 ) + pdTASK_HOOK_CODE pxTaskTag; + #endif + + #if ( configGENERATE_RUN_TIME_STATS == 1 ) + unsigned long ulRunTimeCounter; /*< Stores the amount of time the task has spent in the Running state. */ + #endif + + #if ( configUSE_NEWLIB_REENTRANT == 1 ) + /* Allocate a Newlib reent structure that is specific to this task. + Note Newlib support has been included by popular demand, but is not + used by the FreeRTOS maintainers themselves. FreeRTOS is not + responsible for resulting newlib operation. User must be familiar with + newlib and must provide system-wide implementations of the necessary + stubs. Be warned that (at the time of writing) the current newlib design + implements a system-wide malloc() that must be provided with locks. */ + struct _reent xNewLib_reent; + #endif + +} tskTCB; + + +/* + * Some kernel aware debuggers require the data the debugger needs access to to + * be global, rather than file scope. + */ +#ifdef portREMOVE_STATIC_QUALIFIER + #define static #endif -/* Values that can be assigned to the ucNotifyState member of the TCB. */ -#define taskNOT_WAITING_NOTIFICATION ( ( uint8_t ) 0 ) -#define taskWAITING_NOTIFICATION ( ( uint8_t ) 1 ) -#define taskNOTIFICATION_RECEIVED ( ( uint8_t ) 2 ) +/*lint -e956 A manual analysis and inspection has been used to determine which +static variables must be declared volatile. */ + +PRIVILEGED_DATA tskTCB * volatile pxCurrentTCB = NULL; + +/* Lists for ready and blocked tasks. --------------------*/ +PRIVILEGED_DATA static xList pxReadyTasksLists[ configMAX_PRIORITIES ]; /*< Prioritised ready tasks. */ +PRIVILEGED_DATA static xList xDelayedTaskList1; /*< Delayed tasks. */ +PRIVILEGED_DATA static xList xDelayedTaskList2; /*< Delayed tasks (two lists are used - one for delays that have overflowed the current tick count. */ +PRIVILEGED_DATA static xList * volatile pxDelayedTaskList; /*< Points to the delayed task list currently being used. */ +PRIVILEGED_DATA static xList * volatile pxOverflowDelayedTaskList; /*< Points to the delayed task list currently being used to hold tasks that have overflowed the current tick count. */ +PRIVILEGED_DATA static xList xPendingReadyList; /*< Tasks that have been readied while the scheduler was suspended. They will be moved to the ready list when the scheduler is resumed. */ + +#if ( INCLUDE_vTaskDelete == 1 ) + + PRIVILEGED_DATA static xList xTasksWaitingTermination; /*< Tasks that have been deleted - but the their memory not yet freed. */ + PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxTasksDeleted = ( unsigned portBASE_TYPE ) 0U; + +#endif + +#if ( INCLUDE_vTaskSuspend == 1 ) + + PRIVILEGED_DATA static xList xSuspendedTaskList; /*< Tasks that are currently suspended. */ + +#endif + +#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) + + PRIVILEGED_DATA static xTaskHandle xIdleTaskHandle = NULL; /*< Holds the handle of the idle task. The idle task is created automatically when the scheduler is started. */ + +#endif + +/* Other file private variables. --------------------------------*/ +PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxCurrentNumberOfTasks = ( unsigned portBASE_TYPE ) 0U; +PRIVILEGED_DATA static volatile portTickType xTickCount = ( portTickType ) 0U; +PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxTopReadyPriority = tskIDLE_PRIORITY; +PRIVILEGED_DATA static volatile signed portBASE_TYPE xSchedulerRunning = pdFALSE; +PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxSchedulerSuspended = ( unsigned portBASE_TYPE ) pdFALSE; +PRIVILEGED_DATA static volatile unsigned portBASE_TYPE uxPendedTicks = ( unsigned portBASE_TYPE ) 0U; +PRIVILEGED_DATA static volatile portBASE_TYPE xYieldPending = pdFALSE; +PRIVILEGED_DATA static volatile portBASE_TYPE xNumOfOverflows = ( portBASE_TYPE ) 0; +PRIVILEGED_DATA static unsigned portBASE_TYPE uxTaskNumber = ( unsigned portBASE_TYPE ) 0U; +PRIVILEGED_DATA static volatile portTickType xNextTaskUnblockTime = portMAX_DELAY; + +#if ( configGENERATE_RUN_TIME_STATS == 1 ) + + PRIVILEGED_DATA static unsigned long ulTaskSwitchedInTime = 0UL; /*< Holds the value of a timer/counter the last time a task was switched in. */ + PRIVILEGED_DATA static unsigned long ulTotalRunTime = 0UL; /*< Holds the total amount of execution time as defined by the run time counter clock. */ + +#endif + +/*lint +e956 */ + +/* Debugging and trace facilities private variables and macros. ------------*/ /* * The value used to fill the stack of a task when the task is created. This @@ -75,42 +230,15 @@ functions but without including stdio.h here. */ */ #define tskSTACK_FILL_BYTE ( 0xa5U ) -/* Bits used to recored how a task's stack and TCB were allocated. */ -#define tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ( ( uint8_t ) 0 ) -#define tskSTATICALLY_ALLOCATED_STACK_ONLY ( ( uint8_t ) 1 ) -#define tskSTATICALLY_ALLOCATED_STACK_AND_TCB ( ( uint8_t ) 2 ) - -/* If any of the following are set then task stacks are filled with a known -value so the high water mark can be determined. If none of the following are -set then don't fill the stack so there is no unnecessary dependency on memset. */ -#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) ) - #define tskSET_NEW_STACKS_TO_KNOWN_VALUE 1 -#else - #define tskSET_NEW_STACKS_TO_KNOWN_VALUE 0 -#endif - /* * Macros used by vListTask to indicate which state a task is in. */ -#define tskRUNNING_CHAR ( 'X' ) -#define tskBLOCKED_CHAR ( 'B' ) -#define tskREADY_CHAR ( 'R' ) -#define tskDELETED_CHAR ( 'D' ) -#define tskSUSPENDED_CHAR ( 'S' ) +#define tskBLOCKED_CHAR ( ( signed char ) 'B' ) +#define tskREADY_CHAR ( ( signed char ) 'R' ) +#define tskDELETED_CHAR ( ( signed char ) 'D' ) +#define tskSUSPENDED_CHAR ( ( signed char ) 'S' ) -/* - * Some kernel aware debuggers require the data the debugger needs access to be - * global, rather than file scope. - */ -#ifdef portREMOVE_STATIC_QUALIFIER - #define static -#endif - -/* The name allocated to the Idle task. This can be overridden by defining -configIDLE_TASK_NAME in FreeRTOSConfig.h. */ -#ifndef configIDLE_TASK_NAME - #define configIDLE_TASK_NAME "IDLE" -#endif +/*-----------------------------------------------------------*/ #if ( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 ) @@ -120,31 +248,28 @@ configIDLE_TASK_NAME in FreeRTOSConfig.h. */ /* uxTopReadyPriority holds the priority of the highest priority ready state task. */ - #define taskRECORD_READY_PRIORITY( uxPriority ) \ - { \ - if( ( uxPriority ) > uxTopReadyPriority ) \ - { \ - uxTopReadyPriority = ( uxPriority ); \ - } \ + #define taskRECORD_READY_PRIORITY( uxPriority ) \ + { \ + if( ( uxPriority ) > uxTopReadyPriority ) \ + { \ + uxTopReadyPriority = ( uxPriority ); \ + } \ } /* taskRECORD_READY_PRIORITY */ /*-----------------------------------------------------------*/ - #define taskSELECT_HIGHEST_PRIORITY_TASK() \ - { \ - UBaseType_t uxTopPriority = uxTopReadyPriority; \ - \ - /* Find the highest priority queue that contains ready tasks. */ \ - while( listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxTopPriority ] ) ) ) \ - { \ - configASSERT( uxTopPriority ); \ - --uxTopPriority; \ - } \ - \ - /* listGET_OWNER_OF_NEXT_ENTRY indexes through the list, so the tasks of \ - the same priority get an equal share of the processor time. */ \ - listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) ); \ - uxTopReadyPriority = uxTopPriority; \ + #define taskSELECT_HIGHEST_PRIORITY_TASK() \ + { \ + /* Find the highest priority queue that contains ready tasks. */ \ + while( listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxTopReadyPriority ] ) ) ) \ + { \ + configASSERT( uxTopReadyPriority ); \ + --uxTopReadyPriority; \ + } \ + \ + /* listGET_OWNER_OF_NEXT_ENTRY indexes through the list, so the tasks of \ + the same priority get an equal share of the processor time. */ \ + listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopReadyPriority ] ) ); \ } /* taskSELECT_HIGHEST_PRIORITY_TASK */ /*-----------------------------------------------------------*/ @@ -168,9 +293,9 @@ configIDLE_TASK_NAME in FreeRTOSConfig.h. */ #define taskSELECT_HIGHEST_PRIORITY_TASK() \ { \ - UBaseType_t uxTopPriority; \ + unsigned portBASE_TYPE uxTopPriority; \ \ - /* Find the highest priority list that contains ready tasks. */ \ + /* Find the highest priority queue that contains ready tasks. */ \ portGET_HIGHEST_PRIORITY( uxTopPriority, uxTopReadyPriority ); \ configASSERT( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ uxTopPriority ] ) ) > 0 ); \ listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) ); \ @@ -181,12 +306,12 @@ configIDLE_TASK_NAME in FreeRTOSConfig.h. */ /* A port optimised version is provided, call it only if the TCB being reset is being referenced from a ready list. If it is referenced from a delayed or suspended list then it won't be in a ready list. */ - #define taskRESET_READY_PRIORITY( uxPriority ) \ - { \ - if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ ( uxPriority ) ] ) ) == ( UBaseType_t ) 0 ) \ - { \ - portRESET_READY_PRIORITY( ( uxPriority ), ( uxTopReadyPriority ) ); \ - } \ + #define taskRESET_READY_PRIORITY( uxPriority ) \ + { \ + if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ ( uxPriority ) ] ) ) == 0 ) \ + { \ + portRESET_READY_PRIORITY( ( uxPriority ), ( uxTopReadyPriority ) ); \ + } \ } #endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */ @@ -197,7 +322,7 @@ configIDLE_TASK_NAME in FreeRTOSConfig.h. */ count overflows. */ #define taskSWITCH_DELAYED_LISTS() \ { \ - List_t *pxTemp; \ + xList *pxTemp; \ \ /* The delayed tasks list should be empty when the lists are switched. */ \ configASSERT( ( listLIST_IS_EMPTY( pxDelayedTaskList ) ) ); \ @@ -206,7 +331,25 @@ count overflows. */ pxDelayedTaskList = pxOverflowDelayedTaskList; \ pxOverflowDelayedTaskList = pxTemp; \ xNumOfOverflows++; \ - prvResetNextTaskUnblockTime(); \ + \ + if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) \ + { \ + /* The new current delayed list is empty. Set \ + xNextTaskUnblockTime to the maximum possible value so it is \ + extremely unlikely that the \ + if( xTickCount >= xNextTaskUnblockTime ) test will pass until \ + there is an item in the delayed list. */ \ + xNextTaskUnblockTime = portMAX_DELAY; \ + } \ + else \ + { \ + /* The new current delayed list is not empty, get the value of \ + the item at the head of the delayed list. This is the time at \ + which the task at the head of the delayed list should be removed \ + from the Blocked state. */ \ + pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); \ + xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( pxTCB->xGenericListItem ) ); \ + } \ } /*-----------------------------------------------------------*/ @@ -215,220 +358,31 @@ count overflows. */ * Place the task represented by pxTCB into the appropriate ready list for * the task. It is inserted at the end of the list. */ -#define prvAddTaskToReadyList( pxTCB ) \ - traceMOVED_TASK_TO_READY_STATE( pxTCB ); \ - taskRECORD_READY_PRIORITY( ( pxTCB )->uxPriority ); \ - vListInsertEnd( &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xStateListItem ) ); \ - tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB ) +#define prvAddTaskToReadyList( pxTCB ) \ + traceMOVED_TASK_TO_READY_STATE( pxTCB ) \ + taskRECORD_READY_PRIORITY( ( pxTCB )->uxPriority ); \ + vListInsertEnd( &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xGenericListItem ) ) /*-----------------------------------------------------------*/ /* - * Several functions take an TaskHandle_t parameter that can optionally be NULL, + * Several functions take an xTaskHandle parameter that can optionally be NULL, * where NULL is used to indicate that the handle of the currently executing * task should be used in place of the parameter. This macro simply checks to * see if the parameter is NULL and returns a pointer to the appropriate TCB. */ -#define prvGetTCBFromHandle( pxHandle ) ( ( ( pxHandle ) == NULL ) ? pxCurrentTCB : ( pxHandle ) ) - -/* The item value of the event list item is normally used to hold the priority -of the task to which it belongs (coded to allow it to be held in reverse -priority order). However, it is occasionally borrowed for other purposes. It -is important its value is not updated due to a task priority change while it is -being used for another purpose. The following bit definition is used to inform -the scheduler that the value should not be changed - in which case it is the -responsibility of whichever module is using the value to ensure it gets set back -to its original value when it is released. */ -#if( configUSE_16_BIT_TICKS == 1 ) - #define taskEVENT_LIST_ITEM_VALUE_IN_USE 0x8000U -#else - #define taskEVENT_LIST_ITEM_VALUE_IN_USE 0x80000000UL -#endif - -/* - * Task control block. A task control block (TCB) is allocated for each task, - * and stores task state information, including a pointer to the task's context - * (the task's run time environment, including register values) - */ -typedef struct tskTaskControlBlock /* The old naming convention is used to prevent breaking kernel aware debuggers. */ -{ - volatile StackType_t *pxTopOfStack; /*< Points to the location of the last item placed on the tasks stack. THIS MUST BE THE FIRST MEMBER OF THE TCB STRUCT. */ - - #if ( portUSING_MPU_WRAPPERS == 1 ) - xMPU_SETTINGS xMPUSettings; /*< The MPU settings are defined as part of the port layer. THIS MUST BE THE SECOND MEMBER OF THE TCB STRUCT. */ - #endif - - ListItem_t xStateListItem; /*< The list that the state list item of a task is reference from denotes the state of that task (Ready, Blocked, Suspended ). */ - ListItem_t xEventListItem; /*< Used to reference a task from an event list. */ - UBaseType_t uxPriority; /*< The priority of the task. 0 is the lowest priority. */ - StackType_t *pxStack; /*< Points to the start of the stack. */ - char pcTaskName[ configMAX_TASK_NAME_LEN ];/*< Descriptive name given to the task when created. Facilitates debugging only. */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - - #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) ) - StackType_t *pxEndOfStack; /*< Points to the highest valid address for the stack. */ - #endif - - #if ( portCRITICAL_NESTING_IN_TCB == 1 ) - UBaseType_t uxCriticalNesting; /*< Holds the critical section nesting depth for ports that do not maintain their own count in the port layer. */ - #endif - - #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxTCBNumber; /*< Stores a number that increments each time a TCB is created. It allows debuggers to determine when a task has been deleted and then recreated. */ - UBaseType_t uxTaskNumber; /*< Stores a number specifically for use by third party trace code. */ - #endif - - #if ( configUSE_MUTEXES == 1 ) - UBaseType_t uxBasePriority; /*< The priority last assigned to the task - used by the priority inheritance mechanism. */ - UBaseType_t uxMutexesHeld; - #endif - - #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - TaskHookFunction_t pxTaskTag; - #endif - - #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) - void *pvThreadLocalStoragePointers[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; - #endif - - #if( configGENERATE_RUN_TIME_STATS == 1 ) - uint32_t ulRunTimeCounter; /*< Stores the amount of time the task has spent in the Running state. */ - #endif - - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - /* Allocate a Newlib reent structure that is specific to this task. - Note Newlib support has been included by popular demand, but is not - used by the FreeRTOS maintainers themselves. FreeRTOS is not - responsible for resulting newlib operation. User must be familiar with - newlib and must provide system-wide implementations of the necessary - stubs. Be warned that (at the time of writing) the current newlib design - implements a system-wide malloc() that must be provided with locks. */ - struct _reent xNewLib_reent; - #endif - - #if( configUSE_TASK_NOTIFICATIONS == 1 ) - volatile uint32_t ulNotifiedValue; - volatile uint8_t ucNotifyState; - #endif - - /* See the comments in FreeRTOS.h with the definition of - tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE. */ - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */ - uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the task is a statically allocated to ensure no attempt is made to free the memory. */ - #endif - - #if( INCLUDE_xTaskAbortDelay == 1 ) - uint8_t ucDelayAborted; - #endif - - #if( configUSE_POSIX_ERRNO == 1 ) - int iTaskErrno; - #endif - -} tskTCB; - -/* The old tskTCB name is maintained above then typedefed to the new TCB_t name -below to enable the use of older kernel aware debuggers. */ -typedef tskTCB TCB_t; - -/*lint -save -e956 A manual analysis and inspection has been used to determine -which static variables must be declared volatile. */ -PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL; - -/* Lists for ready and blocked tasks. -------------------- -xDelayedTaskList1 and xDelayedTaskList2 could be move to function scople but -doing so breaks some kernel aware debuggers and debuggers that rely on removing -the static qualifier. */ -PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ];/*< Prioritised ready tasks. */ -PRIVILEGED_DATA static List_t xDelayedTaskList1; /*< Delayed tasks. */ -PRIVILEGED_DATA static List_t xDelayedTaskList2; /*< Delayed tasks (two lists are used - one for delays that have overflowed the current tick count. */ -PRIVILEGED_DATA static List_t * volatile pxDelayedTaskList; /*< Points to the delayed task list currently being used. */ -PRIVILEGED_DATA static List_t * volatile pxOverflowDelayedTaskList; /*< Points to the delayed task list currently being used to hold tasks that have overflowed the current tick count. */ -PRIVILEGED_DATA static List_t xPendingReadyList; /*< Tasks that have been readied while the scheduler was suspended. They will be moved to the ready list when the scheduler is resumed. */ - -#if( INCLUDE_vTaskDelete == 1 ) - - PRIVILEGED_DATA static List_t xTasksWaitingTermination; /*< Tasks that have been deleted - but their memory not yet freed. */ - PRIVILEGED_DATA static volatile UBaseType_t uxDeletedTasksWaitingCleanUp = ( UBaseType_t ) 0U; - -#endif - -#if ( INCLUDE_vTaskSuspend == 1 ) - - PRIVILEGED_DATA static List_t xSuspendedTaskList; /*< Tasks that are currently suspended. */ - -#endif - -/* Global POSIX errno. Its value is changed upon context switching to match -the errno of the currently running task. */ -#if ( configUSE_POSIX_ERRNO == 1 ) - int FreeRTOS_errno = 0; -#endif - -/* Other file private variables. --------------------------------*/ -PRIVILEGED_DATA static volatile UBaseType_t uxCurrentNumberOfTasks = ( UBaseType_t ) 0U; -PRIVILEGED_DATA static volatile TickType_t xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT; -PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY; -PRIVILEGED_DATA static volatile BaseType_t xSchedulerRunning = pdFALSE; -PRIVILEGED_DATA static volatile UBaseType_t uxPendedTicks = ( UBaseType_t ) 0U; -PRIVILEGED_DATA static volatile BaseType_t xYieldPending = pdFALSE; -PRIVILEGED_DATA static volatile BaseType_t xNumOfOverflows = ( BaseType_t ) 0; -PRIVILEGED_DATA static UBaseType_t uxTaskNumber = ( UBaseType_t ) 0U; -PRIVILEGED_DATA static volatile TickType_t xNextTaskUnblockTime = ( TickType_t ) 0U; /* Initialised to portMAX_DELAY before the scheduler starts. */ -PRIVILEGED_DATA static TaskHandle_t xIdleTaskHandle = NULL; /*< Holds the handle of the idle task. The idle task is created automatically when the scheduler is started. */ - -/* Context switches are held pending while the scheduler is suspended. Also, -interrupts must not manipulate the xStateListItem of a TCB, or any of the -lists the xStateListItem can be referenced from, if the scheduler is suspended. -If an interrupt needs to unblock a task while the scheduler is suspended then it -moves the task's event list item into the xPendingReadyList, ready for the -kernel to move the task from the pending ready list into the real ready list -when the scheduler is unsuspended. The pending ready list itself can only be -accessed from a critical section. */ -PRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t ) pdFALSE; - -#if ( configGENERATE_RUN_TIME_STATS == 1 ) - - /* Do not move these variables to function scope as doing so prevents the - code working with debuggers that need to remove the static qualifier. */ - PRIVILEGED_DATA static uint32_t ulTaskSwitchedInTime = 0UL; /*< Holds the value of a timer/counter the last time a task was switched in. */ - PRIVILEGED_DATA static uint32_t ulTotalRunTime = 0UL; /*< Holds the total amount of execution time as defined by the run time counter clock. */ - -#endif - -/*lint -restore */ - -/*-----------------------------------------------------------*/ +#define prvGetTCBFromHandle( pxHandle ) ( ( ( pxHandle ) == NULL ) ? ( tskTCB * ) pxCurrentTCB : ( tskTCB * ) ( pxHandle ) ) /* Callback function prototypes. --------------------------*/ -#if( configCHECK_FOR_STACK_OVERFLOW > 0 ) - - extern void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName ); - -#endif - -#if( configUSE_TICK_HOOK > 0 ) - - extern void vApplicationTickHook( void ); /*lint !e526 Symbol not defined as it is an application callback. */ - -#endif - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - extern void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ); /*lint !e526 Symbol not defined as it is an application callback. */ - -#endif +extern void vApplicationStackOverflowHook( xTaskHandle xTask, signed char *pcTaskName ); +extern void vApplicationTickHook( void ); /* File private functions. --------------------------------*/ -/** - * Utility task that simply returns pdTRUE if the task referenced by xTask is - * currently in the Suspended state, or pdFALSE if the task referenced by xTask - * is in any other state. +/* + * Utility to ready a TCB for a given task. Mainly just copies the parameters + * into the TCB structure. */ -#if ( INCLUDE_vTaskSuspend == 1 ) - - static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION; - -#endif /* INCLUDE_vTaskSuspend */ +static void prvInitialiseTCBVariables( tskTCB *pxTCB, const signed char * const pcName, unsigned portBASE_TYPE uxPriority, const xMemoryRegion * const xRegions, unsigned short usStackDepth ) PRIVILEGED_FUNCTION; /* * Utility to ready all the lists used by the scheduler. This is called @@ -458,7 +412,7 @@ static portTASK_FUNCTION_PROTO( prvIdleTask, pvParameters ); */ #if ( INCLUDE_vTaskDelete == 1 ) - static void prvDeleteTCB( TCB_t *pxTCB ) PRIVILEGED_FUNCTION; + static void prvDeleteTCB( tskTCB *pxTCB ) PRIVILEGED_FUNCTION; #endif @@ -473,10 +427,16 @@ static void prvCheckTasksWaitingTermination( void ) PRIVILEGED_FUNCTION; * The currently executing task is entering the Blocked state. Add the task to * either the current or the overflow delayed task list. */ -static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely ) PRIVILEGED_FUNCTION; +static void IRAM prvAddCurrentTaskToDelayedList( portTickType xTimeToWake ) PRIVILEGED_FUNCTION; /* - * Fills an TaskStatus_t structure with information on each task that is + * Allocates memory from the heap for a TCB and associated stack. Checks the + * allocation was successful. + */ +static tskTCB *prvAllocateTCBAndStack( unsigned short usStackDepth, portSTACK_TYPE *puxStackBuffer ) PRIVILEGED_FUNCTION; + +/* + * Fills an xTaskStatusType structure with information on each task that is * referenced from the pxList list (which may be a ready list, a delayed list, * a suspended list, etc.). * @@ -485,17 +445,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseT */ #if ( configUSE_TRACE_FACILITY == 1 ) - static UBaseType_t prvListTasksWithinSingleList( TaskStatus_t *pxTaskStatusArray, List_t *pxList, eTaskState eState ) PRIVILEGED_FUNCTION; - -#endif - -/* - * Searches pxList for a task with name pcNameToQuery - returning a handle to - * the task if it is found, or NULL if the task is not found. - */ -#if ( INCLUDE_xTaskGetHandle == 1 ) - - static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] ) PRIVILEGED_FUNCTION; + static unsigned portBASE_TYPE prvListTaskWithinSingleList( xTaskStatusType *pxTaskStatusArray, xList *pxList, eTaskState eState ) PRIVILEGED_FUNCTION; #endif @@ -504,9 +454,9 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseT * This function determines the 'high water mark' of the task stack by * determining how much of the stack remains at the original preset value. */ -#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) ) +#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) - static configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte ) PRIVILEGED_FUNCTION; + static unsigned short prvTaskCheckFreeStackSpace( const unsigned char * pucStackByte ) PRIVILEGED_FUNCTION; #endif @@ -521,723 +471,212 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseT */ #if ( configUSE_TICKLESS_IDLE != 0 ) - static TickType_t prvGetExpectedIdleTime( void ) PRIVILEGED_FUNCTION; + static portTickType prvGetExpectedIdleTime( void ) PRIVILEGED_FUNCTION; #endif -/* - * Set xNextTaskUnblockTime to the time at which the next Blocked state task - * will exit the Blocked state. - */ -static void prvResetNextTaskUnblockTime( void ); +signed portBASE_TYPE xTaskGenericCreate( pdTASK_CODE pxTaskCode, const signed char * const pcName, unsigned short usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask, portSTACK_TYPE *puxStackBuffer, const xMemoryRegion * const xRegions ) +{ +signed portBASE_TYPE xReturn; +tskTCB * pxNewTCB; -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) + configASSERT( pxTaskCode ); + configASSERT( ( ( uxPriority & ( ~portPRIVILEGE_BIT ) ) < configMAX_PRIORITIES ) ); - /* - * Helper function used to pad task names with spaces when printing out - * human readable tables of task information. - */ - static char *prvWriteNameToBuffer( char *pcBuffer, const char *pcTaskName ) PRIVILEGED_FUNCTION; + /* Allocate the memory required by the TCB and stack for the new task, + checking that the allocation was successful. */ + pxNewTCB = prvAllocateTCBAndStack( usStackDepth, puxStackBuffer ); -#endif - -/* - * Called after a Task_t structure has been allocated either statically or - * dynamically to fill in the structure's members. - */ -static void prvInitialiseNewTask( TaskFunction_t pxTaskCode, - const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask, - TCB_t *pxNewTCB, - const MemoryRegion_t * const xRegions ) PRIVILEGED_FUNCTION; - -/* - * Called after a new task has been created and initialised to place the task - * under the control of the scheduler. - */ -static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) PRIVILEGED_FUNCTION; - -/* - * freertos_tasks_c_additions_init() should only be called if the user definable - * macro FREERTOS_TASKS_C_ADDITIONS_INIT() is defined, as that is the only macro - * called by the function. - */ -#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT - - static void freertos_tasks_c_additions_init( void ) PRIVILEGED_FUNCTION; - -#endif - -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode, - const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - StackType_t * const puxStackBuffer, - StaticTask_t * const pxTaskBuffer ) + if( pxNewTCB != NULL ) { - TCB_t *pxNewTCB; - TaskHandle_t xReturn; + portSTACK_TYPE *pxTopOfStack; - configASSERT( puxStackBuffer != NULL ); - configASSERT( pxTaskBuffer != NULL ); - - #if( configASSERT_DEFINED == 1 ) - { - /* Sanity check that the size of the structure used to declare a - variable of type StaticTask_t equals the size of the real task - structure. */ - volatile size_t xSize = sizeof( StaticTask_t ); - configASSERT( xSize == sizeof( TCB_t ) ); - ( void ) xSize; /* Prevent lint warning when configASSERT() is not used. */ - } - #endif /* configASSERT_DEFINED */ - - - if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) ) - { - /* The memory used for the task's TCB and stack are passed into this - function - use them. */ - pxNewTCB = ( TCB_t * ) pxTaskBuffer; /*lint !e740 !e9087 Unusual cast is ok as the structures are designed to have the same alignment, and the size is checked by an assert. */ - pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer; - - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */ + #if( portUSING_MPU_WRAPPERS == 1 ) + /* Should the task be created in privileged mode? */ + portBASE_TYPE xRunPrivileged; + if( ( uxPriority & portPRIVILEGE_BIT ) != 0U ) { - /* Tasks can be created statically or dynamically, so note this - task was created statically in case the task is later deleted. */ - pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB; + xRunPrivileged = pdTRUE; } - #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */ - - prvInitialiseNewTask( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, &xReturn, pxNewTCB, NULL ); - prvAddNewTaskToReadyList( pxNewTCB ); - } - else - { - xReturn = NULL; - } - - return xReturn; - } - -#endif /* SUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) - - BaseType_t xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) - { - TCB_t *pxNewTCB; - BaseType_t xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - - configASSERT( pxTaskDefinition->puxStackBuffer != NULL ); - configASSERT( pxTaskDefinition->pxTaskBuffer != NULL ); - - if( ( pxTaskDefinition->puxStackBuffer != NULL ) && ( pxTaskDefinition->pxTaskBuffer != NULL ) ) - { - /* Allocate space for the TCB. Where the memory comes from depends - on the implementation of the port malloc function and whether or - not static allocation is being used. */ - pxNewTCB = ( TCB_t * ) pxTaskDefinition->pxTaskBuffer; - - /* Store the stack location in the TCB. */ - pxNewTCB->pxStack = pxTaskDefinition->puxStackBuffer; - - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) + else { - /* Tasks can be created statically or dynamically, so note this - task was created statically in case the task is later deleted. */ - pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB; + xRunPrivileged = pdFALSE; } - #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */ + uxPriority &= ~portPRIVILEGE_BIT; + #endif /* portUSING_MPU_WRAPPERS == 1 */ - prvInitialiseNewTask( pxTaskDefinition->pvTaskCode, - pxTaskDefinition->pcName, - ( uint32_t ) pxTaskDefinition->usStackDepth, - pxTaskDefinition->pvParameters, - pxTaskDefinition->uxPriority, - pxCreatedTask, pxNewTCB, - pxTaskDefinition->xRegions ); - - prvAddNewTaskToReadyList( pxNewTCB ); - xReturn = pdPASS; - } - - return xReturn; - } - -#endif /* ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) */ -/*-----------------------------------------------------------*/ - -#if( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - - BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) - { - TCB_t *pxNewTCB; - BaseType_t xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - - configASSERT( pxTaskDefinition->puxStackBuffer ); - - if( pxTaskDefinition->puxStackBuffer != NULL ) + /* Calculate the top of stack address. This depends on whether the + stack grows from high memory to low (as per the 80x86) or visa versa. + portSTACK_GROWTH is used to make the result positive or negative as + required by the port. */ + #if( portSTACK_GROWTH < 0 ) { - /* Allocate space for the TCB. Where the memory comes from depends - on the implementation of the port malloc function and whether or - not static allocation is being used. */ - pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); + pxTopOfStack = pxNewTCB->pxStack + ( usStackDepth - ( unsigned short ) 1 ); + pxTopOfStack = ( portSTACK_TYPE * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ( portPOINTER_SIZE_TYPE ) ~portBYTE_ALIGNMENT_MASK ) ); /*lint !e923 MISRA exception. Avoiding casts between pointers and integers is not practical. Size differences accounted for using portPOINTER_SIZE_TYPE type. */ - if( pxNewTCB != NULL ) - { - /* Store the stack location in the TCB. */ - pxNewTCB->pxStack = pxTaskDefinition->puxStackBuffer; - - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) - { - /* Tasks can be created statically or dynamically, so note - this task had a statically allocated stack in case it is - later deleted. The TCB was allocated dynamically. */ - pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_ONLY; - } - #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */ - - prvInitialiseNewTask( pxTaskDefinition->pvTaskCode, - pxTaskDefinition->pcName, - ( uint32_t ) pxTaskDefinition->usStackDepth, - pxTaskDefinition->pvParameters, - pxTaskDefinition->uxPriority, - pxCreatedTask, pxNewTCB, - pxTaskDefinition->xRegions ); - - prvAddNewTaskToReadyList( pxNewTCB ); - xReturn = pdPASS; - } - } - - return xReturn; - } - -#endif /* portUSING_MPU_WRAPPERS */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, - const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const configSTACK_DEPTH_TYPE usStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask ) - { - TCB_t *pxNewTCB; - BaseType_t xReturn; - - /* If the stack grows down then allocate the stack then the TCB so the stack - does not grow into the TCB. Likewise if the stack grows up then allocate - the TCB then the stack. */ - #if( portSTACK_GROWTH > 0 ) - { - /* Allocate space for the TCB. Where the memory comes from depends on - the implementation of the port malloc function and whether or not static - allocation is being used. */ - pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); - - if( pxNewTCB != NULL ) - { - /* Allocate space for the stack used by the task being created. - The base of the stack memory stored in the TCB so the task can - be deleted later if required. */ - pxNewTCB->pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - if( pxNewTCB->pxStack == NULL ) - { - /* Could not allocate the stack. Delete the allocated TCB. */ - vPortFree( pxNewTCB ); - pxNewTCB = NULL; - } - } + /* Check the alignment of the calculated top of stack is correct. */ + configASSERT( ( ( ( unsigned long ) pxTopOfStack & ( unsigned long ) portBYTE_ALIGNMENT_MASK ) == 0UL ) ); } #else /* portSTACK_GROWTH */ { - StackType_t *pxStack; + pxTopOfStack = pxNewTCB->pxStack; - /* Allocate space for the stack used by the task being created. */ - pxStack = pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack and this allocation is the stack. */ + /* Check the alignment of the stack buffer is correct. */ + configASSERT( ( ( ( unsigned long ) pxNewTCB->pxStack & ( unsigned long ) portBYTE_ALIGNMENT_MASK ) == 0UL ) ); - if( pxStack != NULL ) - { - /* Allocate space for the TCB. */ - pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); /*lint !e9087 !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack, and the first member of TCB_t is always a pointer to the task's stack. */ - - if( pxNewTCB != NULL ) - { - /* Store the stack location in the TCB. */ - pxNewTCB->pxStack = pxStack; - } - else - { - /* The stack cannot be used as the TCB was not created. Free - it again. */ - vPortFree( pxStack ); - } - } - else - { - pxNewTCB = NULL; - } + /* If we want to use stack checking on architectures that use + a positive stack growth direction then we also need to store the + other extreme of the stack space. */ + pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( usStackDepth - 1 ); } #endif /* portSTACK_GROWTH */ - if( pxNewTCB != NULL ) - { - #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e9029 !e731 Macro has been consolidated for readability reasons. */ - { - /* Tasks can be created statically or dynamically, so note this - task was created dynamically in case it is later deleted. */ - pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB; - } - #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */ + /* Setup the newly allocated TCB with the initial state of the task. */ + prvInitialiseTCBVariables( pxNewTCB, pcName, uxPriority, xRegions, usStackDepth ); - prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL ); - prvAddNewTaskToReadyList( pxNewTCB ); - xReturn = pdPASS; - } - else - { - xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; - } - - return xReturn; - } - -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -static void prvInitialiseNewTask( TaskFunction_t pxTaskCode, - const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const uint32_t ulStackDepth, - void * const pvParameters, - UBaseType_t uxPriority, - TaskHandle_t * const pxCreatedTask, - TCB_t *pxNewTCB, - const MemoryRegion_t * const xRegions ) -{ -StackType_t *pxTopOfStack; -UBaseType_t x; - - #if( portUSING_MPU_WRAPPERS == 1 ) - /* Should the task be created in privileged mode? */ - BaseType_t xRunPrivileged; - if( ( uxPriority & portPRIVILEGE_BIT ) != 0U ) - { - xRunPrivileged = pdTRUE; - } - else - { - xRunPrivileged = pdFALSE; - } - uxPriority &= ~portPRIVILEGE_BIT; - #endif /* portUSING_MPU_WRAPPERS == 1 */ - - /* Avoid dependency on memset() if it is not required. */ - #if( tskSET_NEW_STACKS_TO_KNOWN_VALUE == 1 ) - { - /* Fill the stack with a known value to assist debugging. */ - ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) ); - } - #endif /* tskSET_NEW_STACKS_TO_KNOWN_VALUE */ - - /* Calculate the top of stack address. This depends on whether the stack - grows from high memory to low (as per the 80x86) or vice versa. - portSTACK_GROWTH is used to make the result positive or negative as required - by the port. */ - #if( portSTACK_GROWTH < 0 ) - { - pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] ); - pxTopOfStack = ( StackType_t * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ~( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) ) ); /*lint !e923 !e9033 !e9078 MISRA exception. Avoiding casts between pointers and integers is not practical. Size differences accounted for using portPOINTER_SIZE_TYPE type. Checked by assert(). */ - - /* Check the alignment of the calculated top of stack is correct. */ - configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) ); - - #if( configRECORD_STACK_HIGH_ADDRESS == 1 ) - { - /* Also record the stack's high address, which may assist - debugging. */ - pxNewTCB->pxEndOfStack = pxTopOfStack; - } - #endif /* configRECORD_STACK_HIGH_ADDRESS */ - } - #else /* portSTACK_GROWTH */ - { - pxTopOfStack = pxNewTCB->pxStack; - - /* Check the alignment of the stack buffer is correct. */ - configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxNewTCB->pxStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) ); - - /* The other extreme of the stack space is required if stack checking is - performed. */ - pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 ); - } - #endif /* portSTACK_GROWTH */ - - /* Store the task name in the TCB. */ - if( pcName != NULL ) - { - for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ ) - { - pxNewTCB->pcTaskName[ x ] = pcName[ x ]; - - /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than - configMAX_TASK_NAME_LEN characters just in case the memory after the - string is not accessible (extremely unlikely). */ - if( pcName[ x ] == ( char ) 0x00 ) - { - break; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - /* Ensure the name string is terminated in the case that the string length - was greater or equal to configMAX_TASK_NAME_LEN. */ - pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0'; - } - else - { - /* The task has not been given a name, so just ensure there is a NULL - terminator when it is read out. */ - pxNewTCB->pcTaskName[ 0 ] = 0x00; - } - - /* This is used as an array index so must ensure it's not too large. First - remove the privilege bit if one is present. */ - if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES ) - { - uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - pxNewTCB->uxPriority = uxPriority; - #if ( configUSE_MUTEXES == 1 ) - { - pxNewTCB->uxBasePriority = uxPriority; - pxNewTCB->uxMutexesHeld = 0; - } - #endif /* configUSE_MUTEXES */ - - vListInitialiseItem( &( pxNewTCB->xStateListItem ) ); - vListInitialiseItem( &( pxNewTCB->xEventListItem ) ); - - /* Set the pxNewTCB as a link back from the ListItem_t. This is so we can get - back to the containing TCB from a generic item in a list. */ - listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB ); - - /* Event lists are always in priority order. */ - listSET_LIST_ITEM_VALUE( &( pxNewTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB ); - - #if ( portCRITICAL_NESTING_IN_TCB == 1 ) - { - pxNewTCB->uxCriticalNesting = ( UBaseType_t ) 0U; - } - #endif /* portCRITICAL_NESTING_IN_TCB */ - - #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - { - pxNewTCB->pxTaskTag = NULL; - } - #endif /* configUSE_APPLICATION_TASK_TAG */ - - #if ( configGENERATE_RUN_TIME_STATS == 1 ) - { - pxNewTCB->ulRunTimeCounter = 0UL; - } - #endif /* configGENERATE_RUN_TIME_STATS */ - - #if ( portUSING_MPU_WRAPPERS == 1 ) - { - vPortStoreTaskMPUSettings( &( pxNewTCB->xMPUSettings ), xRegions, pxNewTCB->pxStack, ulStackDepth ); - } - #else - { - /* Avoid compiler warning about unreferenced parameter. */ - ( void ) xRegions; - } - #endif - - #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 ) - { - for( x = 0; x < ( UBaseType_t ) configNUM_THREAD_LOCAL_STORAGE_POINTERS; x++ ) - { - pxNewTCB->pvThreadLocalStoragePointers[ x ] = NULL; - } - } - #endif - - #if ( configUSE_TASK_NOTIFICATIONS == 1 ) - { - pxNewTCB->ulNotifiedValue = 0; - pxNewTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - } - #endif - - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - { - /* Initialise this task's Newlib reent structure. */ - _REENT_INIT_PTR( ( &( pxNewTCB->xNewLib_reent ) ) ); - } - #endif - - #if( INCLUDE_xTaskAbortDelay == 1 ) - { - pxNewTCB->ucDelayAborted = pdFALSE; - } - #endif - - /* Initialize the TCB stack to look as if the task was already running, - but had been interrupted by the scheduler. The return address is set - to the start of the task function. Once the stack has been initialised - the top of stack variable is updated. */ - #if( portUSING_MPU_WRAPPERS == 1 ) - { - /* If the port has capability to detect stack overflow, - pass the stack end address to the stack initialization - function as well. */ - #if( portHAS_STACK_OVERFLOW_CHECKING == 1 ) - { - #if( portSTACK_GROWTH < 0 ) - { - pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxNewTCB->pxStack, pxTaskCode, pvParameters, xRunPrivileged ); - } - #else /* portSTACK_GROWTH */ - { - pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxNewTCB->pxEndOfStack, pxTaskCode, pvParameters, xRunPrivileged ); - } - #endif /* portSTACK_GROWTH */ - } - #else /* portHAS_STACK_OVERFLOW_CHECKING */ + /* Initialize the TCB stack to look as if the task was already running, + but had been interrupted by the scheduler. The return address is set + to the start of the task function. Once the stack has been initialised + the top of stack variable is updated. */ + #if( portUSING_MPU_WRAPPERS == 1 ) { pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters, xRunPrivileged ); } - #endif /* portHAS_STACK_OVERFLOW_CHECKING */ - } - #else /* portUSING_MPU_WRAPPERS */ - { - /* If the port has capability to detect stack overflow, - pass the stack end address to the stack initialization - function as well. */ - #if( portHAS_STACK_OVERFLOW_CHECKING == 1 ) - { - #if( portSTACK_GROWTH < 0 ) - { - pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxNewTCB->pxStack, pxTaskCode, pvParameters ); - } - #else /* portSTACK_GROWTH */ - { - pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxNewTCB->pxEndOfStack, pxTaskCode, pvParameters ); - } - #endif /* portSTACK_GROWTH */ - } - #else /* portHAS_STACK_OVERFLOW_CHECKING */ + #else /* portUSING_MPU_WRAPPERS */ { pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters ); } - #endif /* portHAS_STACK_OVERFLOW_CHECKING */ - } - #endif /* portUSING_MPU_WRAPPERS */ + #endif /* portUSING_MPU_WRAPPERS */ - if( pxCreatedTask != NULL ) - { - /* Pass the handle out in an anonymous way. The handle can be used to - change the created task's priority, delete the created task, etc.*/ - *pxCreatedTask = ( TaskHandle_t ) pxNewTCB; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } -} -/*-----------------------------------------------------------*/ - -static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) -{ - /* Ensure interrupts don't access the task lists while the lists are being - updated. */ - taskENTER_CRITICAL(); - { - uxCurrentNumberOfTasks++; - if( pxCurrentTCB == NULL ) + if( ( void * ) pxCreatedTask != NULL ) { - /* There are no other tasks, or all the other tasks are in - the suspended state - make this the current task. */ - pxCurrentTCB = pxNewTCB; - - if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 ) - { - /* This is the first task to be created so do the preliminary - initialisation required. We will not recover if this call - fails, but we will report the failure. */ - prvInitialiseTaskLists(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + /* Pass the TCB out - in an anonymous way. The calling function/ + task can use this as a handle to delete the task later if + required.*/ + *pxCreatedTask = ( xTaskHandle ) pxNewTCB; } - else + + /* Ensure interrupts don't access the task lists while they are being + updated. */ + taskENTER_CRITICAL(); { - /* If the scheduler is not already running, make this task the - current task if it is the highest priority task to be created - so far. */ - if( xSchedulerRunning == pdFALSE ) + uxCurrentNumberOfTasks++; + if( pxCurrentTCB == NULL ) { - if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority ) + /* There are no other tasks, or all the other tasks are in + the suspended state - make this the current task. */ + pxCurrentTCB = pxNewTCB; + + if( uxCurrentNumberOfTasks == ( unsigned portBASE_TYPE ) 1 ) { - pxCurrentTCB = pxNewTCB; - } - else - { - mtCOVERAGE_TEST_MARKER(); + /* This is the first task to be created so do the preliminary + initialisation required. We will not recover if this call + fails, but we will report the failure. */ + prvInitialiseTaskLists(); } } else { - mtCOVERAGE_TEST_MARKER(); + /* If the scheduler is not already running, make this task the + current task if it is the highest priority task to be created + so far. */ + if( xSchedulerRunning == pdFALSE ) + { + if( pxCurrentTCB->uxPriority <= uxPriority ) + { + pxCurrentTCB = pxNewTCB; + } + } } + + uxTaskNumber++; + + #if ( configUSE_TRACE_FACILITY == 1 ) + { + /* Add a counter into the TCB for tracing only. */ + pxNewTCB->uxTCBNumber = uxTaskNumber; + } + #endif /* configUSE_TRACE_FACILITY */ + traceTASK_CREATE( pxNewTCB ); + + prvAddTaskToReadyList( pxNewTCB ); + + xReturn = pdPASS; + portSETUP_TCB( pxNewTCB ); } - - uxTaskNumber++; - - #if ( configUSE_TRACE_FACILITY == 1 ) - { - /* Add a counter into the TCB for tracing only. */ - pxNewTCB->uxTCBNumber = uxTaskNumber; - } - #endif /* configUSE_TRACE_FACILITY */ - traceTASK_CREATE( pxNewTCB ); - - prvAddTaskToReadyList( pxNewTCB ); - - portSETUP_TCB( pxNewTCB ); - } - taskEXIT_CRITICAL(); - - if( xSchedulerRunning != pdFALSE ) - { - /* If the created task is of a higher priority than the current task - then it should run now. */ - if( pxCurrentTCB->uxPriority < pxNewTCB->uxPriority ) - { - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + taskEXIT_CRITICAL(); } else { - mtCOVERAGE_TEST_MARKER(); + xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; + traceTASK_CREATE_FAILED(); } + + if( xReturn == pdPASS ) + { + if( xSchedulerRunning != pdFALSE ) + { + /* If the created task is of a higher priority than the current task + then it should run now. */ + if( pxCurrentTCB->uxPriority < uxPriority ) + { + portYIELD_WITHIN_API(); + } + } + } + + return xReturn; } /*-----------------------------------------------------------*/ #if ( INCLUDE_vTaskDelete == 1 ) - void vTaskDelete( TaskHandle_t xTaskToDelete ) + void vTaskDelete( xTaskHandle xTaskToDelete ) { - TCB_t *pxTCB; + tskTCB *pxTCB; taskENTER_CRITICAL(); { - /* If null is passed in here then it is the calling task that is - being deleted. */ + /* If null is passed in here then we are deleting ourselves. */ pxTCB = prvGetTCBFromHandle( xTaskToDelete ); - /* Remove task from the ready list. */ - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + /* Remove task from the ready list and place in the termination list. + This will stop the task from be scheduled. The idle task will check + the termination list and free up any memory allocated by the + scheduler for the TCB and stack. */ + if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) { taskRESET_READY_PRIORITY( pxTCB->uxPriority ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } /* Is the task waiting on an event also? */ if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) { ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - /* Increment the uxTaskNumber also so kernel aware debuggers can - detect that the task lists need re-generating. This is done before - portPRE_TASK_DELETE_HOOK() as in the Windows port that macro will - not return. */ + vListInsertEnd( &xTasksWaitingTermination, &( pxTCB->xGenericListItem ) ); + + /* Increment the ucTasksDeleted variable so the idle task knows + there is a task that has been deleted and that it should therefore + check the xTasksWaitingTermination list. */ + ++uxTasksDeleted; + + /* Increment the uxTaskNumberVariable also so kernel aware debuggers + can detect that the task lists need re-generating. */ uxTaskNumber++; - if( pxTCB == pxCurrentTCB ) - { - /* A task is deleting itself. This cannot complete within the - task itself, as a context switch to another task is required. - Place the task in the termination list. The idle task will - check the termination list and free up any memory allocated by - the scheduler for the TCB and stack of the deleted task. */ - vListInsertEnd( &xTasksWaitingTermination, &( pxTCB->xStateListItem ) ); - - /* Increment the ucTasksDeleted variable so the idle task knows - there is a task that has been deleted and that it should therefore - check the xTasksWaitingTermination list. */ - ++uxDeletedTasksWaitingCleanUp; - - /* The pre-delete hook is primarily for the Windows simulator, - in which Windows specific clean up operations are performed, - after which it is not possible to yield away from this task - - hence xYieldPending is used to latch that a context switch is - required. */ - portPRE_TASK_DELETE_HOOK( pxTCB, &xYieldPending ); - } - else - { - --uxCurrentNumberOfTasks; - prvDeleteTCB( pxTCB ); - - /* Reset the next expected unblock time in case it referred to - the task that has just been deleted. */ - prvResetNextTaskUnblockTime(); - } - traceTASK_DELETE( pxTCB ); } taskEXIT_CRITICAL(); - /* Force a reschedule if it is the currently running task that has just - been deleted. */ + /* Force a reschedule if we have just deleted the current task. */ if( xSchedulerRunning != pdFALSE ) { if( pxTCB == pxCurrentTCB ) { - configASSERT( uxSchedulerSuspended == 0 ); portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } } @@ -1246,20 +685,19 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) #if ( INCLUDE_vTaskDelayUntil == 1 ) - void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) + void vTaskDelayUntil( portTickType * const pxPreviousWakeTime, portTickType xTimeIncrement ) { - TickType_t xTimeToWake; - BaseType_t xAlreadyYielded, xShouldDelay = pdFALSE; + portTickType xTimeToWake; + portBASE_TYPE xAlreadyYielded, xShouldDelay = pdFALSE; configASSERT( pxPreviousWakeTime ); configASSERT( ( xTimeIncrement > 0U ) ); - configASSERT( uxSchedulerSuspended == 0 ); vTaskSuspendAll(); { /* Minor optimisation. The tick count cannot change in this block. */ - const TickType_t xConstTickCount = xTickCount; + const portTickType xConstTickCount = xTickCount; /* Generate the tick time at which the task wants to wake. */ xTimeToWake = *pxPreviousWakeTime + xTimeIncrement; @@ -1275,10 +713,6 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) { xShouldDelay = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } else { @@ -1289,10 +723,6 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) { xShouldDelay = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } /* Update the wake time ready for the next call. */ @@ -1300,15 +730,20 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) if( xShouldDelay != pdFALSE ) { - traceTASK_DELAY_UNTIL( xTimeToWake ); + traceTASK_DELAY_UNTIL(); - /* prvAddCurrentTaskToDelayedList() needs the block time, not - the time to wake, so subtract the current tick count. */ - prvAddCurrentTaskToDelayedList( xTimeToWake - xConstTickCount, pdFALSE ); - } - else - { - mtCOVERAGE_TEST_MARKER(); + /* We must remove ourselves from the ready list before adding + ourselves to the blocked list as the same list item is used for + both lists. */ + if( uxListRemove( &( pxCurrentTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) + { + /* The current task must be in a ready list, so there is + no need to check, and the port reset macro can be called + directly. */ + portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority ); + } + + prvAddCurrentTaskToDelayedList( xTimeToWake ); } } xAlreadyYielded = xTaskResumeAll(); @@ -1319,10 +754,6 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) { portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } #endif /* INCLUDE_vTaskDelayUntil */ @@ -1330,14 +761,14 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) #if ( INCLUDE_vTaskDelay == 1 ) - void vTaskDelay( const TickType_t xTicksToDelay ) + void vTaskDelay( portTickType xTicksToDelay ) { - BaseType_t xAlreadyYielded = pdFALSE; + portTickType xTimeToWake; + signed portBASE_TYPE xAlreadyYielded = pdFALSE; /* A delay time of zero just forces a reschedule. */ - if( xTicksToDelay > ( TickType_t ) 0U ) + if( xTicksToDelay > ( portTickType ) 0U ) { - configASSERT( uxSchedulerSuspended == 0 ); vTaskSuspendAll(); { traceTASK_DELAY(); @@ -1349,14 +780,25 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) This task cannot be in an event list as it is the currently executing task. */ - prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE ); + + /* Calculate the time to wake - this may overflow but this is + not a problem. */ + xTimeToWake = xTickCount + xTicksToDelay; + + /* We must remove ourselves from the ready list before adding + ourselves to the blocked list as the same list item is used for + both lists. */ + if( uxListRemove( &( pxCurrentTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) + { + /* The current task must be in a ready list, so there is + no need to check, and the port reset macro can be called + directly. */ + portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority ); + } + prvAddCurrentTaskToDelayedList( xTimeToWake ); } xAlreadyYielded = xTaskResumeAll(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } /* Force a reschedule if xTaskResumeAll has not already done so, we may have put ourselves to sleep. */ @@ -1364,24 +806,18 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) { portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } #endif /* INCLUDE_vTaskDelay */ /*-----------------------------------------------------------*/ -#if( ( INCLUDE_eTaskGetState == 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_xTaskAbortDelay == 1 ) ) +#if ( INCLUDE_eTaskGetState == 1 ) - eTaskState eTaskGetState( TaskHandle_t xTask ) + eTaskState eTaskGetState( xTaskHandle xTask ) { eTaskState eReturn; - List_t const * pxStateList, *pxDelayedList, *pxOverflowedDelayedList; - const TCB_t * const pxTCB = xTask; - - configASSERT( pxTCB ); + xList *pxStateList; + const tskTCB * const pxTCB = ( tskTCB * ) xTask; if( pxTCB == pxCurrentTCB ) { @@ -1392,13 +828,11 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) { taskENTER_CRITICAL(); { - pxStateList = listLIST_ITEM_CONTAINER( &( pxTCB->xStateListItem ) ); - pxDelayedList = pxDelayedTaskList; - pxOverflowedDelayedList = pxOverflowDelayedTaskList; + pxStateList = ( xList * ) listLIST_ITEM_CONTAINER( &( pxTCB->xGenericListItem ) ); } taskEXIT_CRITICAL(); - if( ( pxStateList == pxDelayedList ) || ( pxStateList == pxOverflowedDelayedList ) ) + if( ( pxStateList == pxDelayedTaskList ) || ( pxStateList == pxOverflowDelayedTaskList ) ) { /* The task being queried is referenced from one of the Blocked lists. */ @@ -1409,49 +843,21 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) else if( pxStateList == &xSuspendedTaskList ) { /* The task being queried is referenced from the suspended - list. Is it genuinely suspended or is it blocked - indefinitely? */ - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL ) - { - #if( configUSE_TASK_NOTIFICATIONS == 1 ) - { - /* The task does not appear on the event list item of - and of the RTOS objects, but could still be in the - blocked state if it is waiting on its notification - rather than waiting on an object. */ - if( pxTCB->ucNotifyState == taskWAITING_NOTIFICATION ) - { - eReturn = eBlocked; - } - else - { - eReturn = eSuspended; - } - } - #else - { - eReturn = eSuspended; - } - #endif - } - else - { - eReturn = eBlocked; - } + list. */ + eReturn = eSuspended; } #endif #if ( INCLUDE_vTaskDelete == 1 ) - else if( ( pxStateList == &xTasksWaitingTermination ) || ( pxStateList == NULL ) ) + else if( pxStateList == &xTasksWaitingTermination ) { /* The task being queried is referenced from the deleted - tasks list, or it is not referenced from any lists at - all. */ + tasks list. */ eReturn = eDeleted; } #endif - else /*lint !e525 Negative indentation is intended to make use of pre-processor clearer. */ + else { /* If the task is not in any other state, it must be in the Ready (including pending ready) state. */ @@ -1460,22 +866,22 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) } return eReturn; - } /*lint !e818 xTask cannot be a pointer to const because it is a typedef. */ + } #endif /* INCLUDE_eTaskGetState */ /*-----------------------------------------------------------*/ #if ( INCLUDE_uxTaskPriorityGet == 1 ) - UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask ) + unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle xTask ) { - TCB_t const *pxTCB; - UBaseType_t uxReturn; + tskTCB *pxTCB; + unsigned portBASE_TYPE uxReturn; taskENTER_CRITICAL(); { - /* If null is passed in here then it is the priority of the task - that called uxTaskPriorityGet() that is being queried. */ + /* If null is passed in here then we are changing the + priority of the calling function. */ pxTCB = prvGetTCBFromHandle( xTask ); uxReturn = pxTCB->uxPriority; } @@ -1487,64 +893,20 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) #endif /* INCLUDE_uxTaskPriorityGet */ /*-----------------------------------------------------------*/ -#if ( INCLUDE_uxTaskPriorityGet == 1 ) - - UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) - { - TCB_t const *pxTCB; - UBaseType_t uxReturn, uxSavedInterruptState; - - /* RTOS ports that support interrupt nesting have the concept of a - maximum system call (or maximum API call) interrupt priority. - Interrupts that are above the maximum system call priority are keep - permanently enabled, even when the RTOS kernel is in a critical section, - but cannot make any calls to FreeRTOS API functions. If configASSERT() - is defined in FreeRTOSConfig.h then - portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has - been assigned a priority above the configured maximum system call - priority. Only FreeRTOS functions that end in FromISR can be called - from interrupts that have been assigned a priority at or (logically) - below the maximum system call interrupt priority. FreeRTOS maintains a - separate interrupt safe API to ensure interrupt entry is as fast and as - simple as possible. More information (albeit Cortex-M specific) is - provided on the following link: - https://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - uxSavedInterruptState = portSET_INTERRUPT_MASK_FROM_ISR(); - { - /* If null is passed in here then it is the priority of the calling - task that is being queried. */ - pxTCB = prvGetTCBFromHandle( xTask ); - uxReturn = pxTCB->uxPriority; - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptState ); - - return uxReturn; - } - -#endif /* INCLUDE_uxTaskPriorityGet */ -/*-----------------------------------------------------------*/ - #if ( INCLUDE_vTaskPrioritySet == 1 ) - void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) + void vTaskPrioritySet( xTaskHandle xTask, unsigned portBASE_TYPE uxNewPriority ) { - TCB_t *pxTCB; - UBaseType_t uxCurrentBasePriority, uxPriorityUsedOnEntry; - BaseType_t xYieldRequired = pdFALSE; + tskTCB *pxTCB; + unsigned portBASE_TYPE uxCurrentBasePriority, uxPriorityUsedOnEntry; + portBASE_TYPE xYieldRequired = pdFALSE; configASSERT( ( uxNewPriority < configMAX_PRIORITIES ) ); /* Ensure the new priority is valid. */ - if( uxNewPriority >= ( UBaseType_t ) configMAX_PRIORITIES ) + if( uxNewPriority >= ( unsigned portBASE_TYPE ) configMAX_PRIORITIES ) { - uxNewPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U; - } - else - { - mtCOVERAGE_TEST_MARKER(); + uxNewPriority = ( unsigned portBASE_TYPE ) configMAX_PRIORITIES - ( unsigned portBASE_TYPE ) 1U; } taskENTER_CRITICAL(); @@ -1577,13 +939,9 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) running task is being raised. Is the priority being raised above that of the running task? */ if( uxNewPriority >= pxCurrentTCB->uxPriority ) - { + { xYieldRequired = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } else { @@ -1594,8 +952,8 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) } else if( pxTCB == pxCurrentTCB ) { - /* Setting the priority of the running task down means - there may now be another task of higher priority that + /* Setting the priority of the running task down means + there may now be another task of higher priority that is ready to execute. */ xYieldRequired = pdTRUE; } @@ -1619,10 +977,6 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) { pxTCB->uxPriority = uxNewPriority; } - else - { - mtCOVERAGE_TEST_MARKER(); - } /* The base priority gets set whatever. */ pxTCB->uxBasePriority = uxNewPriority; @@ -1633,51 +987,30 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) } #endif - /* Only reset the event list item value if the value is not - being used for anything else. */ - if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) - { - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxNewPriority ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( ( portTickType ) configMAX_PRIORITIES - ( portTickType ) uxNewPriority ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ /* If the task is in the blocked or suspended list we need do - nothing more than change its priority variable. However, if + nothing more than change it's priority variable. However, if the task is in a ready list it needs to be removed and placed in the list appropriate to its new priority. */ - if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) + if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xGenericListItem ) ) != pdFALSE ) { - /* The task is currently in its ready list - remove before - adding it to it's new ready list. As we are in a critical - section we can do this even if the scheduler is suspended. */ - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + /* The task is currently in its ready list - remove before adding + it to it's new ready list. As we are in a critical section we + can do this even if the scheduler is suspended. */ + if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) { /* It is known that the task is in its ready list so there is no need to check again and the port level reset macro can be called directly. */ portRESET_READY_PRIORITY( uxPriorityUsedOnEntry, uxTopReadyPriority ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } prvAddTaskToReadyList( pxTCB ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - if( xYieldRequired != pdFALSE ) + if( xYieldRequired == pdTRUE ) { - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); + portYIELD_WITHIN_API(); } /* Remove compiler warning about unused variables when the port @@ -1693,9 +1026,9 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) #if ( INCLUDE_vTaskSuspend == 1 ) - void vTaskSuspend( TaskHandle_t xTaskToSuspend ) + void vTaskSuspend( xTaskHandle xTaskToSuspend ) { - TCB_t *pxTCB; + tskTCB *pxTCB; taskENTER_CRITICAL(); { @@ -1705,63 +1038,27 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) traceTASK_SUSPEND( pxTCB ); - /* Remove task from the ready/delayed list and place in the - suspended list. */ - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + /* Remove task from the ready/delayed list and place in the suspended list. */ + if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) { taskRESET_READY_PRIORITY( pxTCB->uxPriority ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } /* Is the task waiting on an event also? */ if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) { ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - vListInsertEnd( &xSuspendedTaskList, &( pxTCB->xStateListItem ) ); - - #if( configUSE_TASK_NOTIFICATIONS == 1 ) - { - if( pxTCB->ucNotifyState == taskWAITING_NOTIFICATION ) - { - /* The task was blocked to wait for a notification, but is - now suspended, so no notification was received. */ - pxTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - } - } - #endif + vListInsertEnd( &xSuspendedTaskList, &( pxTCB->xGenericListItem ) ); } taskEXIT_CRITICAL(); - if( xSchedulerRunning != pdFALSE ) - { - /* Reset the next expected unblock time in case it referred to the - task that is now in the Suspended state. */ - taskENTER_CRITICAL(); - { - prvResetNextTaskUnblockTime(); - } - taskEXIT_CRITICAL(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - if( pxTCB == pxCurrentTCB ) { if( xSchedulerRunning != pdFALSE ) { /* The current task has just been suspended. */ - configASSERT( uxSchedulerSuspended == 0 ); portYIELD_WITHIN_API(); } else @@ -1769,7 +1066,7 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) /* The scheduler is not running, but the task that was pointed to by pxCurrentTCB has just been suspended and pxCurrentTCB must be adjusted to point to a different task. */ - if( listCURRENT_LIST_LENGTH( &xSuspendedTaskList ) == uxCurrentNumberOfTasks ) /*lint !e931 Right has no side effect, just volatile. */ + if( listCURRENT_LIST_LENGTH( &xSuspendedTaskList ) == uxCurrentNumberOfTasks ) { /* No other tasks are ready, so set pxCurrentTCB back to NULL so when the next task is created pxCurrentTCB will @@ -1783,10 +1080,6 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) } } } - else - { - mtCOVERAGE_TEST_MARKER(); - } } #endif /* INCLUDE_vTaskSuspend */ @@ -1794,42 +1087,30 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) #if ( INCLUDE_vTaskSuspend == 1 ) - static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) + signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask ) { - BaseType_t xReturn = pdFALSE; - const TCB_t * const pxTCB = xTask; - - /* Accesses xPendingReadyList so must be called from a critical - section. */ + portBASE_TYPE xReturn = pdFALSE; + const tskTCB * const pxTCB = ( tskTCB * ) xTask; /* It does not make sense to check if the calling task is suspended. */ configASSERT( xTask ); - /* Is the task being resumed actually in the suspended list? */ - if( listIS_CONTAINED_WITHIN( &xSuspendedTaskList, &( pxTCB->xStateListItem ) ) != pdFALSE ) + /* Is the task we are attempting to resume actually in the + suspended list? */ + if( listIS_CONTAINED_WITHIN( &xSuspendedTaskList, &( pxTCB->xGenericListItem ) ) != pdFALSE ) { /* Has the task already been resumed from within an ISR? */ if( listIS_CONTAINED_WITHIN( &xPendingReadyList, &( pxTCB->xEventListItem ) ) == pdFALSE ) { - /* Is it in the suspended list because it is in the Suspended - state, or because is is blocked with no timeout? */ - if( listIS_CONTAINED_WITHIN( NULL, &( pxTCB->xEventListItem ) ) != pdFALSE ) /*lint !e961. The cast is only redundant when NULL is used. */ + /* Is it in the suspended list because it is in the + Suspended state? It is possible to be in the suspended + list because it is blocked on a task with no timeout + specified. */ + if( listIS_CONTAINED_WITHIN( NULL, &( pxTCB->xEventListItem ) ) != pdFALSE ) { xReturn = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } return xReturn; @@ -1840,52 +1121,39 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) #if ( INCLUDE_vTaskSuspend == 1 ) - void vTaskResume( TaskHandle_t xTaskToResume ) + void vTaskResume( xTaskHandle xTaskToResume ) { - TCB_t * const pxTCB = xTaskToResume; + tskTCB * const pxTCB = ( tskTCB * ) xTaskToResume; /* It does not make sense to resume the calling task. */ configASSERT( xTaskToResume ); /* The parameter cannot be NULL as it is impossible to resume the currently executing task. */ - if( ( pxTCB != pxCurrentTCB ) && ( pxTCB != NULL ) ) + if( ( pxTCB != NULL ) && ( pxTCB != pxCurrentTCB ) ) { taskENTER_CRITICAL(); { - if( prvTaskIsTaskSuspended( pxTCB ) != pdFALSE ) + if( xTaskIsTaskSuspended( pxTCB ) == pdTRUE ) { traceTASK_RESUME( pxTCB ); - /* The ready list can be accessed even if the scheduler is - suspended because this is inside a critical section. */ - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); + /* As we are in a critical section we can access the ready + lists even if the scheduler is suspended. */ + ( void ) uxListRemove( &( pxTCB->xGenericListItem ) ); prvAddTaskToReadyList( pxTCB ); - /* A higher priority task may have just been resumed. */ + /* We may have just resumed a higher priority task. */ if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) { - /* This yield may not cause the task just resumed to run, - but will leave the lists in the correct state for the - next yield. */ - taskYIELD_IF_USING_PREEMPTION(); + /* This yield may not cause the task just resumed to run, but + will leave the lists in the correct state for the next yield. */ + portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } taskEXIT_CRITICAL(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } #endif /* INCLUDE_vTaskSuspend */ @@ -1894,11 +1162,11 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) #if ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) - BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) + portBASE_TYPE xTaskResumeFromISR( xTaskHandle xTaskToResume ) { - BaseType_t xYieldRequired = pdFALSE; - TCB_t * const pxTCB = xTaskToResume; - UBaseType_t uxSavedInterruptStatus; + portBASE_TYPE xYieldRequired = pdFALSE; + tskTCB * const pxTCB = ( tskTCB * ) xTaskToResume; + unsigned portBASE_TYPE uxSavedInterruptStatus; configASSERT( xTaskToResume ); @@ -1917,44 +1185,29 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) separate interrupt safe API to ensure interrupt entry is as fast and as simple as possible. More information (albeit Cortex-M specific) is provided on the following link: - https://www.freertos.org/RTOS-Cortex-M3-M4.html */ + http://www.freertos.org/RTOS-Cortex-M3-M4.html */ portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); { - if( prvTaskIsTaskSuspended( pxTCB ) != pdFALSE ) + if( xTaskIsTaskSuspended( pxTCB ) == pdTRUE ) { traceTASK_RESUME_FROM_ISR( pxTCB ); - /* Check the ready lists can be accessed. */ - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) { - /* Ready lists can be accessed so move the task from the - suspended list to the ready list directly. */ - if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) - { - xYieldRequired = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); + xYieldRequired = ( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ); + ( void ) uxListRemove( &( pxTCB->xGenericListItem ) ); prvAddTaskToReadyList( pxTCB ); } else { - /* The delayed or ready lists cannot be accessed so the task - is held in the pending ready list until the scheduler is - unsuspended. */ + /* We cannot access the delayed or ready lists, so will hold this + task pending until the scheduler is resumed, at which point a + yield will be performed if necessary. */ vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) ); } } - else - { - mtCOVERAGE_TEST_MARKER(); - } } portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); @@ -1966,46 +1219,21 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB ) void vTaskStartScheduler( void ) { -BaseType_t xReturn; +portBASE_TYPE xReturn; /* Add the idle task at the lowest priority. */ - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) + #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) { - StaticTask_t *pxIdleTaskTCBBuffer = NULL; - StackType_t *pxIdleTaskStackBuffer = NULL; - uint32_t ulIdleTaskStackSize; - - /* The Idle task is created using user provided RAM - obtain the - address of the RAM then create the idle task. */ - vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize ); - xIdleTaskHandle = xTaskCreateStatic( prvIdleTask, - configIDLE_TASK_NAME, - ulIdleTaskStackSize, - ( void * ) NULL, /*lint !e961. The cast is not redundant for all compilers. */ - portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */ - pxIdleTaskStackBuffer, - pxIdleTaskTCBBuffer ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */ - - if( xIdleTaskHandle != NULL ) - { - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - } + /* Create the idle task, storing its handle in xIdleTaskHandle so it can + be returned by the xTaskGetIdleTaskHandle() function. */ + xReturn = xTaskCreate( prvIdleTask, ( signed char * ) "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), &xIdleTaskHandle ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */ } #else { - /* The Idle task is being created using dynamically allocated RAM. */ - xReturn = xTaskCreate( prvIdleTask, - configIDLE_TASK_NAME, - configMINIMAL_STACK_SIZE, - ( void * ) NULL, - portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */ - &xIdleTaskHandle ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */ + /* Create the idle task without storing its handle. */ + xReturn = xTaskCreate( prvIdleTask, ( signed char * ) "IDLE", tskIDLE_STACK_SIZE, ( void * ) NULL, ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), NULL ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */ } - #endif /* configSUPPORT_STATIC_ALLOCATION */ + #endif /* INCLUDE_xTaskGetIdleTaskHandle */ #if ( configUSE_TIMERS == 1 ) { @@ -2013,53 +1241,29 @@ BaseType_t xReturn; { xReturn = xTimerCreateTimerTask(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } #endif /* configUSE_TIMERS */ if( xReturn == pdPASS ) { - /* freertos_tasks_c_additions_init() should only be called if the user - definable macro FREERTOS_TASKS_C_ADDITIONS_INIT() is defined, as that is - the only macro called by the function. */ - #ifdef FREERTOS_TASKS_C_ADDITIONS_INIT - { - freertos_tasks_c_additions_init(); - } - #endif - /* Interrupts are turned off here, to ensure a tick does not occur before or during the call to xPortStartScheduler(). The stacks of the created tasks contain a status word with interrupts switched on so interrupts will automatically get re-enabled when the first task - starts to run. */ + starts to run. + + STEPPING THROUGH HERE USING A DEBUGGER CAN CAUSE BIG PROBLEMS IF THE + DEBUGGER ALLOWS INTERRUPTS TO BE PROCESSED. */ portDISABLE_INTERRUPTS(); - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - { - /* Switch Newlib's _impure_ptr variable to point to the _reent - structure specific to the task that will run first. */ - _impure_ptr = &( pxCurrentTCB->xNewLib_reent ); - } - #endif /* configUSE_NEWLIB_REENTRANT */ - - xNextTaskUnblockTime = portMAX_DELAY; xSchedulerRunning = pdTRUE; - xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT; + xTickCount = ( portTickType ) 0U; /* If configGENERATE_RUN_TIME_STATS is defined then the following macro must be defined to configure the timer/counter used to generate - the run time counter time base. NOTE: If configGENERATE_RUN_TIME_STATS - is set to 0 and the following line fails to build then ensure you do not - have portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() defined in your - FreeRTOSConfig.h file. */ + the run time counter time base. */ portCONFIGURE_TIMER_FOR_RUN_TIME_STATS(); - traceTASK_SWITCHED_IN(); - /* Setting up the timer tick is hardware specific and thus in the portable interface. */ if( xPortStartScheduler() != pdFALSE ) @@ -2077,12 +1281,8 @@ BaseType_t xReturn; /* This line will only be reached if the kernel could not be started, because there was not enough FreeRTOS heap to create the idle task or the timer task. */ - configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ); + configASSERT( xReturn ); } - - /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0, - meaning xIdleTaskHandle is not used anywhere else. */ - ( void ) xIdleTaskHandle; } /*-----------------------------------------------------------*/ @@ -2097,49 +1297,19 @@ void vTaskEndScheduler( void ) } /*----------------------------------------------------------*/ -void vTaskSuspendAll( void ) +void IRAM vTaskSuspendAll( void ) { /* A critical section is not required as the variable is of type - BaseType_t. Please read Richard Barry's reply in the following link to a - post in the FreeRTOS support forum before reporting this as a bug! - - http://goo.gl/wu4acr */ + portBASE_TYPE. */ ++uxSchedulerSuspended; } /*----------------------------------------------------------*/ #if ( configUSE_TICKLESS_IDLE != 0 ) - static TickType_t prvGetExpectedIdleTime( void ) + static portTickType prvGetExpectedIdleTime( void ) { - TickType_t xReturn; - UBaseType_t uxHigherPriorityReadyTasks = pdFALSE; - - /* uxHigherPriorityReadyTasks takes care of the case where - configUSE_PREEMPTION is 0, so there may be tasks above the idle priority - task that are in the Ready state, even though the idle task is - running. */ - #if( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 ) - { - if( uxTopReadyPriority > tskIDLE_PRIORITY ) - { - uxHigherPriorityReadyTasks = pdTRUE; - } - } - #else - { - const UBaseType_t uxLeastSignificantBit = ( UBaseType_t ) 0x01; - - /* When port optimised task selection is used the uxTopReadyPriority - variable is used as a bit map. If bits other than the least - significant bit are set then there are tasks that have a priority - above the idle priority that are in the Ready state. This takes - care of the case where the co-operative scheduler is in use. */ - if( uxTopReadyPriority > uxLeastSignificantBit ) - { - uxHigherPriorityReadyTasks = pdTRUE; - } - } - #endif + portTickType xReturn; if( pxCurrentTCB->uxPriority > tskIDLE_PRIORITY ) { @@ -2152,13 +1322,6 @@ void vTaskSuspendAll( void ) processed. */ xReturn = 0; } - else if( uxHigherPriorityReadyTasks != pdFALSE ) - { - /* There are tasks in the Ready state that have a priority above the - idle priority. This path can only be reached if - configUSE_PREEMPTION is 0. */ - xReturn = 0; - } else { xReturn = xNextTaskUnblockTime - xTickCount; @@ -2170,10 +1333,11 @@ void vTaskSuspendAll( void ) #endif /* configUSE_TICKLESS_IDLE */ /*----------------------------------------------------------*/ -BaseType_t xTaskResumeAll( void ) +signed portBASE_TYPE IRAM xTaskResumeAll( void ) { -TCB_t *pxTCB = NULL; -BaseType_t xAlreadyYielded = pdFALSE; +tskTCB *pxTCB; +portBASE_TYPE xAlreadyYielded = pdFALSE; +portBASE_TYPE xYieldRequired = pdFALSE; /* If uxSchedulerSuspended is zero then this function does not match a previous call to vTaskSuspendAll(). */ @@ -2188,91 +1352,50 @@ BaseType_t xAlreadyYielded = pdFALSE; { --uxSchedulerSuspended; - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) { - if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U ) + if( uxCurrentNumberOfTasks > ( unsigned portBASE_TYPE ) 0U ) { /* Move any readied tasks from the pending list into the appropriate ready list. */ while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE ) { - pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) ); ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); + ( void ) uxListRemove( &( pxTCB->xGenericListItem ) ); prvAddTaskToReadyList( pxTCB ); - /* If the moved task has a priority higher than the current - task then a yield must be performed. */ + /* If we have moved a task that has a priority higher than + the current task then we should yield. */ if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) { - xYieldPending = pdTRUE; + xYieldRequired = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - if( pxTCB != NULL ) - { - /* A task was unblocked while the scheduler was suspended, - which may have prevented the next unblock time from being - re-calculated, in which case re-calculate it now. Mainly - important for low power tickless implementations, where - this can prevent an unnecessary exit from low power - state. */ - prvResetNextTaskUnblockTime(); } /* If any ticks occurred while the scheduler was suspended then - they should be processed now. This ensures the tick count does - not slip, and that any delayed tasks are resumed at the correct - time. */ + they should be processed now. This ensures the tick count does not + slip, and that any delayed tasks are resumed at the correct time. */ + if( uxPendedTicks > ( unsigned portBASE_TYPE ) 0U ) { - UBaseType_t uxPendedCounts = uxPendedTicks; /* Non-volatile copy. */ - - if( uxPendedCounts > ( UBaseType_t ) 0U ) + while( uxPendedTicks > ( unsigned portBASE_TYPE ) 0U ) { - do + if( xTaskIncrementTick() != pdFALSE ) { - if( xTaskIncrementTick() != pdFALSE ) - { - xYieldPending = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - --uxPendedCounts; - } while( uxPendedCounts > ( UBaseType_t ) 0U ); - - uxPendedTicks = 0; - } - else - { - mtCOVERAGE_TEST_MARKER(); + xYieldRequired = pdTRUE; + } + --uxPendedTicks; } } - if( xYieldPending != pdFALSE ) + if( ( xYieldRequired == pdTRUE ) || ( xYieldPending == pdTRUE ) ) { - #if( configUSE_PREEMPTION != 0 ) - { - xAlreadyYielded = pdTRUE; - } - #endif - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); + xAlreadyYielded = pdTRUE; + xYieldPending = pdFALSE; + portYIELD_WITHIN_API(); } } } - else - { - mtCOVERAGE_TEST_MARKER(); - } } taskEXIT_CRITICAL(); @@ -2280,29 +1403,29 @@ BaseType_t xAlreadyYielded = pdFALSE; } /*-----------------------------------------------------------*/ -TickType_t xTaskGetTickCount( void ) +portTickType xTaskGetTickCount( void ) { -TickType_t xTicks; +portTickType xTicks; /* Critical section required if running on a 16 bit processor. */ - portTICK_TYPE_ENTER_CRITICAL(); + taskENTER_CRITICAL(); { xTicks = xTickCount; } - portTICK_TYPE_EXIT_CRITICAL(); + taskEXIT_CRITICAL(); return xTicks; } /*-----------------------------------------------------------*/ -TickType_t xTaskGetTickCountFromISR( void ) +portTickType xTaskGetTickCountFromISR( void ) { -TickType_t xReturn; -UBaseType_t uxSavedInterruptStatus; +portTickType xReturn; +unsigned portBASE_TYPE uxSavedInterruptStatus; /* RTOS ports that support interrupt nesting have the concept of a maximum system call (or maximum API call) interrupt priority. Interrupts that are - above the maximum system call priority are kept permanently enabled, even + above the maximum system call priority are keep permanently enabled, even when the RTOS kernel is in a critical section, but cannot make any calls to FreeRTOS API functions. If configASSERT() is defined in FreeRTOSConfig.h then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion @@ -2313,210 +1436,78 @@ UBaseType_t uxSavedInterruptStatus; system call interrupt priority. FreeRTOS maintains a separate interrupt safe API to ensure interrupt entry is as fast and as simple as possible. More information (albeit Cortex-M specific) is provided on the following - link: https://www.freertos.org/RTOS-Cortex-M3-M4.html */ + link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */ portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - uxSavedInterruptStatus = portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR(); - { - xReturn = xTickCount; - } - portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); + uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); + xReturn = xTickCount; + portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); return xReturn; } /*-----------------------------------------------------------*/ -UBaseType_t uxTaskGetNumberOfTasks( void ) +unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void ) { /* A critical section is not required because the variables are of type - BaseType_t. */ + portBASE_TYPE. */ return uxCurrentNumberOfTasks; } /*-----------------------------------------------------------*/ -char *pcTaskGetName( TaskHandle_t xTaskToQuery ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -{ -TCB_t *pxTCB; +#if ( INCLUDE_pcTaskGetTaskName == 1 ) - /* If null is passed in here then the name of the calling task is being - queried. */ - pxTCB = prvGetTCBFromHandle( xTaskToQuery ); - configASSERT( pxTCB ); - return &( pxTCB->pcTaskName[ 0 ] ); -} -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetHandle == 1 ) - - static TCB_t *prvSearchForNameWithinSingleList( List_t *pxList, const char pcNameToQuery[] ) + signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery ) { - TCB_t *pxNextTCB, *pxFirstTCB, *pxReturn = NULL; - UBaseType_t x; - char cNextChar; - BaseType_t xBreakLoop; + tskTCB *pxTCB; - /* This function is called with the scheduler suspended. */ - - if( listCURRENT_LIST_LENGTH( pxList ) > ( UBaseType_t ) 0 ) - { - listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ - - do - { - listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ - - /* Check each character in the name looking for a match or - mismatch. */ - xBreakLoop = pdFALSE; - for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ ) - { - cNextChar = pxNextTCB->pcTaskName[ x ]; - - if( cNextChar != pcNameToQuery[ x ] ) - { - /* Characters didn't match. */ - xBreakLoop = pdTRUE; - } - else if( cNextChar == ( char ) 0x00 ) - { - /* Both strings terminated, a match must have been - found. */ - pxReturn = pxNextTCB; - xBreakLoop = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( xBreakLoop != pdFALSE ) - { - break; - } - } - - if( pxReturn != NULL ) - { - /* The handle has been found. */ - break; - } - - } while( pxNextTCB != pxFirstTCB ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return pxReturn; + /* If null is passed in here then the name of the calling task is being queried. */ + pxTCB = prvGetTCBFromHandle( xTaskToQuery ); + configASSERT( pxTCB ); + return &( pxTCB->pcTaskName[ 0 ] ); } -#endif /* INCLUDE_xTaskGetHandle */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_xTaskGetHandle == 1 ) - - TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - { - UBaseType_t uxQueue = configMAX_PRIORITIES; - TCB_t* pxTCB; - - /* Task names will be truncated to configMAX_TASK_NAME_LEN - 1 bytes. */ - configASSERT( strlen( pcNameToQuery ) < configMAX_TASK_NAME_LEN ); - - vTaskSuspendAll(); - { - /* Search the ready lists. */ - do - { - uxQueue--; - pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) &( pxReadyTasksLists[ uxQueue ] ), pcNameToQuery ); - - if( pxTCB != NULL ) - { - /* Found the handle. */ - break; - } - - } while( uxQueue > ( UBaseType_t ) tskIDLE_PRIORITY ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - /* Search the delayed lists. */ - if( pxTCB == NULL ) - { - pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) pxDelayedTaskList, pcNameToQuery ); - } - - if( pxTCB == NULL ) - { - pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) pxOverflowDelayedTaskList, pcNameToQuery ); - } - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - if( pxTCB == NULL ) - { - /* Search the suspended list. */ - pxTCB = prvSearchForNameWithinSingleList( &xSuspendedTaskList, pcNameToQuery ); - } - } - #endif - - #if( INCLUDE_vTaskDelete == 1 ) - { - if( pxTCB == NULL ) - { - /* Search the deleted list. */ - pxTCB = prvSearchForNameWithinSingleList( &xTasksWaitingTermination, pcNameToQuery ); - } - } - #endif - } - ( void ) xTaskResumeAll(); - - return pxTCB; - } - -#endif /* INCLUDE_xTaskGetHandle */ +#endif /* INCLUDE_pcTaskGetTaskName */ /*-----------------------------------------------------------*/ #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) + unsigned portBASE_TYPE uxTaskGetSystemState( xTaskStatusType *pxTaskStatusArray, unsigned portBASE_TYPE uxArraySize, unsigned long *pulTotalRunTime ) { - UBaseType_t uxTask = 0, uxQueue = configMAX_PRIORITIES; + unsigned portBASE_TYPE uxTask = 0, uxQueue = configMAX_PRIORITIES; vTaskSuspendAll(); { /* Is there a space in the array for each task in the system? */ if( uxArraySize >= uxCurrentNumberOfTasks ) { - /* Fill in an TaskStatus_t structure with information on each + /* Fill in an xTaskStatusType structure with information on each task in the Ready state. */ do { uxQueue--; - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &( pxReadyTasksLists[ uxQueue ] ), eReady ); + uxTask += prvListTaskWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &( pxReadyTasksLists[ uxQueue ] ), eReady ); - } while( uxQueue > ( UBaseType_t ) tskIDLE_PRIORITY ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + } while( uxQueue > ( unsigned portBASE_TYPE ) tskIDLE_PRIORITY ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - /* Fill in an TaskStatus_t structure with information on each + /* Fill in an xTaskStatusType structure with information on each task in the Blocked state. */ - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), ( List_t * ) pxDelayedTaskList, eBlocked ); - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), ( List_t * ) pxOverflowDelayedTaskList, eBlocked ); + uxTask += prvListTaskWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), ( xList * ) pxDelayedTaskList, eBlocked ); + uxTask += prvListTaskWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), ( xList * ) pxOverflowDelayedTaskList, eBlocked ); #if( INCLUDE_vTaskDelete == 1 ) { - /* Fill in an TaskStatus_t structure with information on + /* Fill in an xTaskStatusType structure with information on each task that has been deleted but not yet cleaned up. */ - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xTasksWaitingTermination, eDeleted ); + uxTask += prvListTaskWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xTasksWaitingTermination, eDeleted ); } #endif #if ( INCLUDE_vTaskSuspend == 1 ) { - /* Fill in an TaskStatus_t structure with information on + /* Fill in an xTaskStatusType structure with information on each task in the Suspended state. */ - uxTask += prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xSuspendedTaskList, eSuspended ); + uxTask += prvListTaskWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xSuspendedTaskList, eSuspended ); } #endif @@ -2524,11 +1515,7 @@ TCB_t *pxTCB; { if( pulTotalRunTime != NULL ) { - #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE - portALT_GET_RUN_TIME_COUNTER_VALUE( ( *pulTotalRunTime ) ); - #else - *pulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE(); - #endif + *pulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE(); } } #else @@ -2540,10 +1527,6 @@ TCB_t *pxTCB; } #endif } - else - { - mtCOVERAGE_TEST_MARKER(); - } } ( void ) xTaskResumeAll(); @@ -2555,7 +1538,7 @@ TCB_t *pxTCB; #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) - TaskHandle_t xTaskGetIdleTaskHandle( void ) + xTaskHandle xTaskGetIdleTaskHandle( void ) { /* If xTaskGetIdleTaskHandle() is called before the scheduler has been started, then xIdleTaskHandle will be NULL. */ @@ -2572,7 +1555,7 @@ implementations require configUSE_TICKLESS_IDLE to be set to a value other than 1. */ #if ( configUSE_TICKLESS_IDLE != 0 ) - void vTaskStepTick( const TickType_t xTicksToJump ) + void vTaskStepTick( portTickType xTicksToJump ) { /* Correct the tick count value after a period during which the tick was suppressed. Note this does *not* call the tick hook function for @@ -2585,189 +1568,97 @@ implementations require configUSE_TICKLESS_IDLE to be set to a value other than #endif /* configUSE_TICKLESS_IDLE */ /*----------------------------------------------------------*/ -#if ( INCLUDE_xTaskAbortDelay == 1 ) - - BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) - { - TCB_t *pxTCB = xTask; - BaseType_t xReturn; - - configASSERT( pxTCB ); - - vTaskSuspendAll(); - { - /* A task can only be prematurely removed from the Blocked state if - it is actually in the Blocked state. */ - if( eTaskGetState( xTask ) == eBlocked ) - { - xReturn = pdPASS; - - /* Remove the reference to the task from the blocked list. An - interrupt won't touch the xStateListItem because the - scheduler is suspended. */ - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - - /* Is the task waiting on an event also? If so remove it from - the event list too. Interrupts can touch the event list item, - even though the scheduler is suspended, so a critical section - is used. */ - taskENTER_CRITICAL(); - { - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) - { - ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); - pxTCB->ucDelayAborted = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - /* Place the unblocked task into the appropriate ready list. */ - prvAddTaskToReadyList( pxTCB ); - - /* A task being unblocked cannot cause an immediate context - switch if preemption is turned off. */ - #if ( configUSE_PREEMPTION == 1 ) - { - /* Preemption is on, but a context switch should only be - performed if the unblocked task has a priority that is - equal to or higher than the currently executing task. */ - if( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* Pend the yield to be performed when the scheduler - is unsuspended. */ - xYieldPending = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_PREEMPTION */ - } - else - { - xReturn = pdFAIL; - } - } - ( void ) xTaskResumeAll(); - - return xReturn; - } - -#endif /* INCLUDE_xTaskAbortDelay */ -/*----------------------------------------------------------*/ - -BaseType_t xTaskIncrementTick( void ) +portBASE_TYPE IRAM xTaskIncrementTick( void ) { -TCB_t * pxTCB; -TickType_t xItemValue; -BaseType_t xSwitchRequired = pdFALSE; +tskTCB * pxTCB; +portTickType xItemValue; +portBASE_TYPE xSwitchRequired = pdFALSE; /* Called by the portable layer each time a tick interrupt occurs. Increments the tick then checks to see if the new tick value will cause any tasks to be unblocked. */ traceTASK_INCREMENT_TICK( xTickCount ); - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) { - /* Minor optimisation. The tick count cannot change in this - block. */ - const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1; - /* Increment the RTOS tick, switching the delayed and overflowed delayed lists if it wraps to 0. */ - xTickCount = xConstTickCount; + ++xTickCount; - if( xConstTickCount == ( TickType_t ) 0U ) /*lint !e774 'if' does not always evaluate to false as it is looking for an overflow. */ { - taskSWITCH_DELAYED_LISTS(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + /* Minor optimisation. The tick count cannot change in this + block. */ + const portTickType xConstTickCount = xTickCount; - /* See if this tick has made a timeout expire. Tasks are stored in - the queue in the order of their wake time - meaning once one task - has been found whose block time has not expired there is no need to - look any further down the list. */ - if( xConstTickCount >= xNextTaskUnblockTime ) - { - for( ;; ) + if( xConstTickCount == ( portTickType ) 0U ) { - if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) - { - /* The delayed list is empty. Set xNextTaskUnblockTime - to the maximum possible value so it is extremely - unlikely that the - if( xTickCount >= xNextTaskUnblockTime ) test will pass - next time through. */ - xNextTaskUnblockTime = portMAX_DELAY; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - break; - } - else - { - /* The delayed list is not empty, get the value of the - item at the head of the delayed list. This is the time - at which the task at the head of the delayed list must - be removed from the Blocked state. */ - pxTCB = listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ - xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) ); + taskSWITCH_DELAYED_LISTS(); + } - if( xConstTickCount < xItemValue ) + /* See if this tick has made a timeout expire. Tasks are stored in the + queue in the order of their wake time - meaning once one tasks has been + found whose block time has not expired there is no need not look any + further down the list. */ + if( xConstTickCount >= xNextTaskUnblockTime ) + { + for( ;; ) + { + if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) { - /* It is not time to unblock this item yet, but the - item value is the time at which the task at the head - of the blocked list must be removed from the Blocked - state - so record the item value in - xNextTaskUnblockTime. */ - xNextTaskUnblockTime = xItemValue; - break; /*lint !e9011 Code structure here is deedmed easier to understand with multiple breaks. */ + /* The delayed list is empty. Set xNextTaskUnblockTime to + the maximum possible value so it is extremely unlikely that + the if( xTickCount >= xNextTaskUnblockTime ) test will pass + next time through. */ + xNextTaskUnblockTime = portMAX_DELAY; + break; } else { - mtCOVERAGE_TEST_MARKER(); - } + /* The delayed list is not empty, get the value of the item + at the head of the delayed list. This is the time at which + the task at the head of the delayed list must be removed + from the Blocked state. */ + pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); + xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xGenericListItem ) ); - /* It is time to remove the item from the Blocked state. */ - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - - /* Is the task waiting on an event also? If so remove - it from the event list. */ - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) - { - ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Place the unblocked task into the appropriate ready - list. */ - prvAddTaskToReadyList( pxTCB ); - - /* A task being unblocked cannot cause an immediate - context switch if preemption is turned off. */ - #if ( configUSE_PREEMPTION == 1 ) - { - /* Preemption is on, but a context switch should - only be performed if the unblocked task has a - priority that is equal to or higher than the - currently executing task. */ - if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) + if( xConstTickCount < xItemValue ) { - xSwitchRequired = pdTRUE; + /* It is not time to unblock this item yet, but the item + value is the time at which the task at the head of the + blocked list must be removed from the Blocked state - + so record the item value in xNextTaskUnblockTime. */ + xNextTaskUnblockTime = xItemValue; + break; } - else + + /* It is time to remove the item from the Blocked state. */ + ( void ) uxListRemove( &( pxTCB->xGenericListItem ) ); + + /* Is the task waiting on an event also? If so remove it + from the event list. */ + if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) { - mtCOVERAGE_TEST_MARKER(); + ( void ) uxListRemove( &( pxTCB->xEventListItem ) ); } + + /* Place the unblocked task into the appropriate ready + list. */ + prvAddTaskToReadyList( pxTCB ); + + /* A task being unblocked cannot cause an immediate context + switch if preemption is turned off. */ + #if ( configUSE_PREEMPTION == 1 ) + { + /* Preemption is on, but a context switch should only + be performed if the unblocked task has a priority that + is equal to or higher than the currently executing + task. */ + if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ) + { + xSwitchRequired = pdTRUE; + } + } + #endif /* configUSE_PREEMPTION */ } - #endif /* configUSE_PREEMPTION */ } } } @@ -2777,31 +1668,12 @@ BaseType_t xSwitchRequired = pdFALSE; writer has not explicitly turned time slicing off. */ #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) ) { - if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 ) + if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( unsigned portBASE_TYPE ) 1 ) { xSwitchRequired = pdTRUE; } - else - { - mtCOVERAGE_TEST_MARKER(); - } } #endif /* ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) ) */ - - #if ( configUSE_TICK_HOOK == 1 ) - { - /* Guard against the tick hook being called when the pended tick - count is being unwound (when the scheduler is being unlocked). */ - if( uxPendedTicks == ( UBaseType_t ) 0U ) - { - vApplicationTickHook(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configUSE_TICK_HOOK */ } else { @@ -2816,18 +1688,16 @@ BaseType_t xSwitchRequired = pdFALSE; #endif } - #if ( configUSE_PREEMPTION == 1 ) + #if ( configUSE_TICK_HOOK == 1 ) { - if( xYieldPending != pdFALSE ) + /* Guard against the tick hook being called when the missed tick + count is being unwound (when the scheduler is being unlocked). */ + if( uxPendedTicks == ( unsigned portBASE_TYPE ) 0U ) { - xSwitchRequired = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); + vApplicationTickHook(); } } - #endif /* configUSE_PREEMPTION */ + #endif /* configUSE_TICK_HOOK */ return xSwitchRequired; } @@ -2835,27 +1705,24 @@ BaseType_t xSwitchRequired = pdFALSE; #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) + void vTaskSetApplicationTaskTag( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction ) { - TCB_t *xTCB; + tskTCB *xTCB; - /* If xTask is NULL then it is the task hook of the calling task that is - getting set. */ + /* If xTask is NULL then we are setting our own task hook. */ if( xTask == NULL ) { - xTCB = ( TCB_t * ) pxCurrentTCB; + xTCB = ( tskTCB * ) pxCurrentTCB; } else { - xTCB = xTask; + xTCB = ( tskTCB * ) xTask; } /* Save the hook function in the TCB. A critical section is required as the value can be accessed from an interrupt. */ taskENTER_CRITICAL(); - { xTCB->pxTaskTag = pxHookFunction; - } taskEXIT_CRITICAL(); } @@ -2864,20 +1731,25 @@ BaseType_t xSwitchRequired = pdFALSE; #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) + pdTASK_HOOK_CODE xTaskGetApplicationTaskTag( xTaskHandle xTask ) { - TCB_t *pxTCB; - TaskHookFunction_t xReturn; + tskTCB *xTCB; + pdTASK_HOOK_CODE xReturn; - /* If xTask is NULL then set the calling task's hook. */ - pxTCB = prvGetTCBFromHandle( xTask ); + /* If xTask is NULL then we are setting our own task hook. */ + if( xTask == NULL ) + { + xTCB = ( tskTCB * ) pxCurrentTCB; + } + else + { + xTCB = ( tskTCB * ) xTask; + } /* Save the hook function in the TCB. A critical section is required as the value can be accessed from an interrupt. */ taskENTER_CRITICAL(); - { - xReturn = pxTCB->pxTaskTag; - } + xReturn = xTCB->pxTaskTag; taskEXIT_CRITICAL(); return xReturn; @@ -2888,44 +1760,19 @@ BaseType_t xSwitchRequired = pdFALSE; #if ( configUSE_APPLICATION_TASK_TAG == 1 ) - TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask ) + portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, void *pvParameter ) { - TCB_t *pxTCB; - TaskHookFunction_t xReturn; - UBaseType_t uxSavedInterruptStatus; - - /* If xTask is NULL then set the calling task's hook. */ - pxTCB = prvGetTCBFromHandle( xTask ); - - /* Save the hook function in the TCB. A critical section is required as - the value can be accessed from an interrupt. */ - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - xReturn = pxTCB->pxTaskTag; - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; - } - -#endif /* configUSE_APPLICATION_TASK_TAG */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_APPLICATION_TASK_TAG == 1 ) - - BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) - { - TCB_t *xTCB; - BaseType_t xReturn; + tskTCB *xTCB; + portBASE_TYPE xReturn; /* If xTask is NULL then we are calling our own task hook. */ if( xTask == NULL ) { - xTCB = pxCurrentTCB; + xTCB = ( tskTCB * ) pxCurrentTCB; } else { - xTCB = xTask; + xTCB = ( tskTCB * ) xTask; } if( xTCB->pxTaskTag != NULL ) @@ -2945,7 +1792,7 @@ BaseType_t xSwitchRequired = pdFALSE; void vTaskSwitchContext( void ) { - if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE ) + if( uxSchedulerSuspended != ( unsigned portBASE_TYPE ) pdFALSE ) { /* The scheduler is currently suspended - do not allow a context switch. */ @@ -2953,58 +1800,38 @@ void vTaskSwitchContext( void ) } else { - xYieldPending = pdFALSE; traceTASK_SWITCHED_OUT(); #if ( configGENERATE_RUN_TIME_STATS == 1 ) { - #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE - portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalRunTime ); - #else - ulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE(); - #endif + #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE + portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalRunTime ); + #else + ulTotalRunTime = portGET_RUN_TIME_COUNTER_VALUE(); + #endif - /* Add the amount of time the task has been running to the - accumulated time so far. The time the task started running was - stored in ulTaskSwitchedInTime. Note that there is no overflow - protection here so count values are only valid until the timer - overflows. The guard against negative values is to protect - against suspect run time stat counter implementations - which - are provided by the application, not the kernel. */ - if( ulTotalRunTime > ulTaskSwitchedInTime ) - { - pxCurrentTCB->ulRunTimeCounter += ( ulTotalRunTime - ulTaskSwitchedInTime ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - ulTaskSwitchedInTime = ulTotalRunTime; + /* Add the amount of time the task has been running to the + accumulated time so far. The time the task started running was + stored in ulTaskSwitchedInTime. Note that there is no overflow + protection here so count values are only valid until the timer + overflows. The guard against negative values is to protect + against suspect run time stat counter implementations - which + are provided by the application, not the kernel. */ + if( ulTotalRunTime > ulTaskSwitchedInTime ) + { + pxCurrentTCB->ulRunTimeCounter += ( ulTotalRunTime - ulTaskSwitchedInTime ); + } + ulTaskSwitchedInTime = ulTotalRunTime; } #endif /* configGENERATE_RUN_TIME_STATS */ - /* Check for stack overflow, if configured. */ - taskCHECK_FOR_STACK_OVERFLOW(); + taskFIRST_CHECK_FOR_STACK_OVERFLOW(); + taskSECOND_CHECK_FOR_STACK_OVERFLOW(); - /* Before the currently running task is switched out, save its errno. */ - #if( configUSE_POSIX_ERRNO == 1 ) - { - pxCurrentTCB->iTaskErrno = FreeRTOS_errno; - } - #endif + taskSELECT_HIGHEST_PRIORITY_TASK(); - /* Select a new task to run using either the generic C or port - optimised asm code. */ - taskSELECT_HIGHEST_PRIORITY_TASK(); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ traceTASK_SWITCHED_IN(); - /* After the new task is switched in, update the global errno. */ - #if( configUSE_POSIX_ERRNO == 1 ) - { - FreeRTOS_errno = pxCurrentTCB->iTaskErrno; - } - #endif - #if ( configUSE_NEWLIB_REENTRANT == 1 ) { /* Switch Newlib's _impure_ptr variable to point to the _reent @@ -3016,57 +1843,70 @@ void vTaskSwitchContext( void ) } /*-----------------------------------------------------------*/ -void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait ) +void IRAM vTaskPlaceOnEventList( xList * const pxEventList, portTickType xTicksToWait ) { +portTickType xTimeToWake; + configASSERT( pxEventList ); - /* THIS FUNCTION MUST BE CALLED WITH EITHER INTERRUPTS DISABLED OR THE - SCHEDULER SUSPENDED AND THE QUEUE BEING ACCESSED LOCKED. */ + /* THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED OR THE + SCHEDULER SUSPENDED. */ /* Place the event list item of the TCB in the appropriate event list. This is placed in the list in priority order so the highest priority task - is the first to be woken by the event. The queue that contains the event - list is locked, preventing simultaneous access from interrupts. */ + is the first to be woken by the event. */ vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) ); - prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); -} -/*-----------------------------------------------------------*/ - -void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait ) -{ - configASSERT( pxEventList ); - - /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. It is used by - the event groups implementation. */ - configASSERT( uxSchedulerSuspended != 0 ); - - /* Store the item value in the event list item. It is safe to access the - event list item here as interrupts won't access the event list item of a - task that is not in the Blocked state. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ), xItemValue | taskEVENT_LIST_ITEM_VALUE_IN_USE ); - - /* Place the event list item of the TCB at the end of the appropriate event - list. It is safe to access the event list here because it is part of an - event group implementation - and interrupts don't access event groups - directly (instead they access them indirectly by pending function calls to - the task level). */ - vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) ); - - prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); -} -/*-----------------------------------------------------------*/ - -#if( configUSE_TIMERS == 1 ) - - void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) + /* We must remove ourselves from the ready list before adding ourselves + to the blocked list as the same list item is used for both lists. We have + exclusive access to the ready lists as the scheduler is locked. */ + if( uxListRemove( &( pxCurrentTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) { + /* The current task must be in a ready list, so there is no need to + check, and the port reset macro can be called directly. */ + portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority ); + } + + #if ( INCLUDE_vTaskSuspend == 1 ) + { + if( xTicksToWait == portMAX_DELAY ) + { + /* Add ourselves to the suspended task list instead of a delayed task + list to ensure we are not woken by a timing event. We will block + indefinitely. */ + vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xGenericListItem ) ); + } + else + { + /* Calculate the time at which the task should be woken if the event does + not occur. This may overflow but this doesn't matter. */ + xTimeToWake = xTickCount + xTicksToWait; + prvAddCurrentTaskToDelayedList( xTimeToWake ); + } + } + #else /* INCLUDE_vTaskSuspend */ + { + /* Calculate the time at which the task should be woken if the event does + not occur. This may overflow but this doesn't matter. */ + xTimeToWake = xTickCount + xTicksToWait; + prvAddCurrentTaskToDelayedList( xTimeToWake ); + } + #endif /* INCLUDE_vTaskSuspend */ +} +/*-----------------------------------------------------------*/ + +#if configUSE_TIMERS == 1 + + void vTaskPlaceOnEventListRestricted( xList * const pxEventList, portTickType xTicksToWait ) + { + portTickType xTimeToWake; + configASSERT( pxEventList ); /* This function should not be called by application code hence the 'Restricted' in its name. It is not part of the public API. It is designed for use by kernel code, and has special calling requirements - - it should be called with the scheduler suspended. */ + it should be called from a critical section. */ /* Place the event list item of the TCB in the appropriate event list. @@ -3075,79 +1915,68 @@ void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xIte can be used in place of vListInsert. */ vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) ); - /* If the task should block indefinitely then set the block time to a - value that will be recognised as an indefinite delay inside the - prvAddCurrentTaskToDelayedList() function. */ - if( xWaitIndefinitely != pdFALSE ) + /* We must remove this task from the ready list before adding it to the + blocked list as the same list item is used for both lists. This + function is called form a critical section. */ + if( uxListRemove( &( pxCurrentTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) { - xTicksToWait = portMAX_DELAY; + /* The current task must be in a ready list, so there is no need to + check, and the port reset macro can be called directly. */ + portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority ); } - traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) ); - prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely ); + /* Calculate the time at which the task should be woken if the event does + not occur. This may overflow but this doesn't matter. */ + xTimeToWake = xTickCount + xTicksToWait; + + traceTASK_DELAY_UNTIL(); + prvAddCurrentTaskToDelayedList( xTimeToWake ); } #endif /* configUSE_TIMERS */ /*-----------------------------------------------------------*/ -BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList ) +signed portBASE_TYPE IRAM xTaskRemoveFromEventList( const xList * const pxEventList ) { -TCB_t *pxUnblockedTCB; -BaseType_t xReturn; +tskTCB *pxUnblockedTCB; +portBASE_TYPE xReturn; - /* THIS FUNCTION MUST BE CALLED FROM A CRITICAL SECTION. It can also be - called from a critical section within an ISR. */ + /* THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED OR THE + SCHEDULER SUSPENDED. It can also be called from within an ISR. */ - /* The event list is sorted in priority order, so the first in the list can - be removed as it is known to be the highest priority. Remove the TCB from - the delayed list, and add it to the ready list. + /* The event list is sorted in priority order, so we can remove the + first in the list, remove the TCB from the delayed list, and add + it to the ready list. If an event is for a queue that is locked then this function will never get called - the lock count on the queue will get modified instead. This - means exclusive access to the event list is guaranteed here. + means we can always expect exclusive access to the event list here. This function assumes that a check has already been made to ensure that pxEventList is not empty. */ - pxUnblockedTCB = listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + pxUnblockedTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); configASSERT( pxUnblockedTCB ); ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) ); - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) { - ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) ); + ( void ) uxListRemove( &( pxUnblockedTCB->xGenericListItem ) ); prvAddTaskToReadyList( pxUnblockedTCB ); - - #if( configUSE_TICKLESS_IDLE != 0 ) - { - /* If a task is blocked on a kernel object then xNextTaskUnblockTime - might be set to the blocked task's time out time. If the task is - unblocked for a reason other than a timeout xNextTaskUnblockTime is - normally left unchanged, because it is automatically reset to a new - value when the tick count equals xNextTaskUnblockTime. However if - tickless idling is used it might be more important to enter sleep mode - at the earliest possible time - so reset xNextTaskUnblockTime here to - ensure it is updated at the earliest possible time. */ - prvResetNextTaskUnblockTime(); - } - #endif } else { - /* The delayed and ready lists cannot be accessed, so hold this task - pending until the scheduler is resumed. */ + /* We cannot access the delayed or ready lists, so will hold this + task pending until the scheduler is resumed. */ vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) ); } - if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority ) + if( pxUnblockedTCB->uxPriority >= pxCurrentTCB->uxPriority ) { - /* Return true if the task removed from the event list has a higher - priority than the calling task. This allows the calling task to know if - it should force a context switch now. */ + /* Return true if the task removed from the event list has + a higher priority than the calling task. This allows + the calling task to know if it should force a context + switch now. */ xReturn = pdTRUE; - - /* Mark that a yield is pending in case the user is not using the - "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */ - xYieldPending = pdTRUE; } else { @@ -3158,63 +1987,17 @@ BaseType_t xReturn; } /*-----------------------------------------------------------*/ -void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const TickType_t xItemValue ) -{ -TCB_t *pxUnblockedTCB; - - /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. It is used by - the event flags implementation. */ - configASSERT( uxSchedulerSuspended != pdFALSE ); - - /* Store the new item value in the event list. */ - listSET_LIST_ITEM_VALUE( pxEventListItem, xItemValue | taskEVENT_LIST_ITEM_VALUE_IN_USE ); - - /* Remove the event list form the event flag. Interrupts do not access - event flags. */ - pxUnblockedTCB = listGET_LIST_ITEM_OWNER( pxEventListItem ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ - configASSERT( pxUnblockedTCB ); - ( void ) uxListRemove( pxEventListItem ); - - /* Remove the task from the delayed list and add it to the ready list. The - scheduler is suspended so interrupts will not be accessing the ready - lists. */ - ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxUnblockedTCB ); - - if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* The unblocked task has a priority above that of the calling task, so - a context switch is required. This function is called with the - scheduler suspended so xYieldPending is set so the context switch - occurs immediately that the scheduler is resumed (unsuspended). */ - xYieldPending = pdTRUE; - } -} -/*-----------------------------------------------------------*/ - -void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) +void IRAM vTaskSetTimeOutState( xTimeOutType * const pxTimeOut ) { configASSERT( pxTimeOut ); - taskENTER_CRITICAL(); - { - pxTimeOut->xOverflowCount = xNumOfOverflows; - pxTimeOut->xTimeOnEntering = xTickCount; - } - taskEXIT_CRITICAL(); -} -/*-----------------------------------------------------------*/ - -void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut ) -{ - /* For internal use only as it does not use a critical section. */ pxTimeOut->xOverflowCount = xNumOfOverflows; pxTimeOut->xTimeOnEntering = xTickCount; } /*-----------------------------------------------------------*/ -BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) +portBASE_TYPE IRAM xTaskCheckForTimeOut( xTimeOutType * const pxTimeOut, portTickType * const pxTicksToWait ) { -BaseType_t xReturn; +portBASE_TYPE xReturn; configASSERT( pxTimeOut ); configASSERT( pxTicksToWait ); @@ -3222,50 +2005,36 @@ BaseType_t xReturn; taskENTER_CRITICAL(); { /* Minor optimisation. The tick count cannot change in this block. */ - const TickType_t xConstTickCount = xTickCount; - const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering; - - #if( INCLUDE_xTaskAbortDelay == 1 ) - if( pxCurrentTCB->ucDelayAborted != ( uint8_t ) pdFALSE ) - { - /* The delay was aborted, which is not the same as a time out, - but has the same result. */ - pxCurrentTCB->ucDelayAborted = pdFALSE; - xReturn = pdTRUE; - } - else - #endif + const portTickType xConstTickCount = xTickCount; #if ( INCLUDE_vTaskSuspend == 1 ) + /* If INCLUDE_vTaskSuspend is set to 1 and the block time specified is + the maximum block time then the task should block indefinitely, and + therefore never time out. */ if( *pxTicksToWait == portMAX_DELAY ) { - /* If INCLUDE_vTaskSuspend is set to 1 and the block time - specified is the maximum block time then the task should block - indefinitely, and therefore never time out. */ xReturn = pdFALSE; } - else + else /* We are not blocking indefinitely, perform the checks below. */ #endif if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */ { - /* The tick count is greater than the time at which - vTaskSetTimeout() was called, but has also overflowed since - vTaskSetTimeOut() was called. It must have wrapped all the way - around and gone past again. This passed since vTaskSetTimeout() - was called. */ + /* The tick count is greater than the time at which vTaskSetTimeout() + was called, but has also overflowed since vTaskSetTimeOut() was called. + It must have wrapped all the way around and gone past us again. This + passed since vTaskSetTimeout() was called. */ xReturn = pdTRUE; } - else if( xElapsedTime < *pxTicksToWait ) /*lint !e961 Explicit casting is only redundant with some compilers, whereas others require it to prevent integer conversion errors. */ + else if( ( xConstTickCount - pxTimeOut->xTimeOnEntering ) < *pxTicksToWait ) { /* Not a genuine timeout. Adjust parameters for time remaining. */ - *pxTicksToWait -= xElapsedTime; - vTaskInternalSetTimeOutState( pxTimeOut ); + *pxTicksToWait -= ( xConstTickCount - pxTimeOut->xTimeOnEntering ); + vTaskSetTimeOutState( pxTimeOut ); xReturn = pdFALSE; } else { - *pxTicksToWait = 0; xReturn = pdTRUE; } } @@ -3275,7 +2044,7 @@ BaseType_t xReturn; } /*-----------------------------------------------------------*/ -void vTaskMissedYield( void ) +void IRAM vTaskMissedYield( void ) { xYieldPending = pdTRUE; } @@ -3283,14 +2052,14 @@ void vTaskMissedYield( void ) #if ( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) + unsigned portBASE_TYPE uxTaskGetTaskNumber( xTaskHandle xTask ) { - UBaseType_t uxReturn; - TCB_t const *pxTCB; + unsigned portBASE_TYPE uxReturn; + tskTCB *pxTCB; if( xTask != NULL ) { - pxTCB = xTask; + pxTCB = ( tskTCB * ) xTask; uxReturn = pxTCB->uxTaskNumber; } else @@ -3306,13 +2075,13 @@ void vTaskMissedYield( void ) #if ( configUSE_TRACE_FACILITY == 1 ) - void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) + void vTaskSetTaskNumber( xTaskHandle xTask, unsigned portBASE_TYPE uxHandle ) { - TCB_t * pxTCB; + tskTCB *pxTCB; if( xTask != NULL ) { - pxTCB = xTask; + pxTCB = ( tskTCB * ) xTask; pxTCB->uxTaskNumber = uxHandle; } } @@ -3335,18 +2104,9 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters ) /* Stop warnings. */ ( void ) pvParameters; - /** THIS IS THE RTOS IDLE TASK - WHICH IS CREATED AUTOMATICALLY WHEN THE - SCHEDULER IS STARTED. **/ - - /* In case a task that has a secure context deletes itself, in which case - the idle task is responsible for deleting the task's secure context, if - any. */ - portALLOCATE_SECURE_CONTEXT( configMINIMAL_SECURE_STACK_SIZE ); - for( ;; ) { - /* See if any tasks have deleted themselves - if so then the idle task - is responsible for freeing the deleted task's TCB and stack. */ + /* See if any tasks have been deleted. */ prvCheckTasksWaitingTermination(); #if ( configUSE_PREEMPTION == 0 ) @@ -3370,14 +2130,10 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters ) the list, and an occasional incorrect value will not matter. If the ready list at the idle priority contains more than one task then a task other than the idle task is ready to execute. */ - if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 ) + if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( unsigned portBASE_TYPE ) 1 ) { taskYIELD(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } #endif /* ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) ) */ @@ -3400,7 +2156,7 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters ) configUSE_TICKLESS_IDLE to be set to a value other than 1. */ #if ( configUSE_TICKLESS_IDLE != 0 ) { - TickType_t xExpectedIdleTime; + portTickType xExpectedIdleTime; /* It is not desirable to suspend then resume the scheduler on each iteration of the idle task. Therefore, a preliminary @@ -3419,40 +2175,25 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters ) configASSERT( xNextTaskUnblockTime >= xTickCount ); xExpectedIdleTime = prvGetExpectedIdleTime(); - /* Define the following macro to set xExpectedIdleTime to 0 - if the application does not want - portSUPPRESS_TICKS_AND_SLEEP() to be called. */ - configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( xExpectedIdleTime ); - if( xExpectedIdleTime >= configEXPECTED_IDLE_TIME_BEFORE_SLEEP ) { traceLOW_POWER_IDLE_BEGIN(); portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ); traceLOW_POWER_IDLE_END(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } ( void ) xTaskResumeAll(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } #endif /* configUSE_TICKLESS_IDLE */ } } /*-----------------------------------------------------------*/ -#if( configUSE_TICKLESS_IDLE != 0 ) +#if configUSE_TICKLESS_IDLE != 0 eSleepModeStatus eTaskConfirmSleepModeStatus( void ) { - /* The idle task exists in addition to the application tasks. */ - const UBaseType_t uxNonApplicationTasks = 1; eSleepModeStatus eReturn = eStandardSleep; if( listCURRENT_LIST_LENGTH( &xPendingReadyList ) != 0 ) @@ -3467,76 +2208,123 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters ) } else { - /* If all the tasks are in the suspended list (which might mean they - have an infinite block time rather than actually being suspended) - then it is safe to turn all clocks off and just wait for external - interrupts. */ - if( listCURRENT_LIST_LENGTH( &xSuspendedTaskList ) == ( uxCurrentNumberOfTasks - uxNonApplicationTasks ) ) + #if configUSE_TIMERS == 0 { - eReturn = eNoTasksWaitingTimeout; - } - else - { - mtCOVERAGE_TEST_MARKER(); + /* The idle task exists in addition to the application tasks. */ + const unsigned portBASE_TYPE uxNonApplicationTasks = 1; + + /* If timers are not being used and all the tasks are in the + suspended list (which might mean they have an infinite block + time rather than actually being suspended) then it is safe to + turn all clocks off and just wait for external interrupts. */ + if( listCURRENT_LIST_LENGTH( &xSuspendedTaskList ) == ( uxCurrentNumberOfTasks - uxNonApplicationTasks ) ) + { + eReturn = eNoTasksWaitingTimeout; + } } + #endif /* configUSE_TIMERS */ } return eReturn; } - #endif /* configUSE_TICKLESS_IDLE */ /*-----------------------------------------------------------*/ -#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 ) +static void prvInitialiseTCBVariables( tskTCB *pxTCB, const signed char * const pcName, unsigned portBASE_TYPE uxPriority, const xMemoryRegion * const xRegions, unsigned short usStackDepth ) +{ +unsigned portBASE_TYPE x; - void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) + /* Store the task name in the TCB. */ + for( x = ( unsigned portBASE_TYPE ) 0; x < ( unsigned portBASE_TYPE ) configMAX_TASK_NAME_LEN; x++ ) { - TCB_t *pxTCB; + pxTCB->pcTaskName[ x ] = pcName[ x ]; - if( xIndex < configNUM_THREAD_LOCAL_STORAGE_POINTERS ) + /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than + configMAX_TASK_NAME_LEN characters just in case the memory after the + string is not accessible (extremely unlikely). */ + if( pcName[ x ] == 0x00 ) { - pxTCB = prvGetTCBFromHandle( xTaskToSet ); - pxTCB->pvThreadLocalStoragePointers[ xIndex ] = pvValue; + break; } } -#endif /* configNUM_THREAD_LOCAL_STORAGE_POINTERS */ -/*-----------------------------------------------------------*/ + /* Ensure the name string is terminated in the case that the string length + was greater or equal to configMAX_TASK_NAME_LEN. */ + pxTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = ( signed char ) '\0'; -#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 ) - - void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) + /* This is used as an array index so must ensure it's not too large. First + remove the privilege bit if one is present. */ + if( uxPriority >= ( unsigned portBASE_TYPE ) configMAX_PRIORITIES ) { - void *pvReturn = NULL; - TCB_t *pxTCB; - - if( xIndex < configNUM_THREAD_LOCAL_STORAGE_POINTERS ) - { - pxTCB = prvGetTCBFromHandle( xTaskToQuery ); - pvReturn = pxTCB->pvThreadLocalStoragePointers[ xIndex ]; - } - else - { - pvReturn = NULL; - } - - return pvReturn; + uxPriority = ( unsigned portBASE_TYPE ) configMAX_PRIORITIES - ( unsigned portBASE_TYPE ) 1U; } -#endif /* configNUM_THREAD_LOCAL_STORAGE_POINTERS */ + pxTCB->uxPriority = uxPriority; + #if ( configUSE_MUTEXES == 1 ) + { + pxTCB->uxBasePriority = uxPriority; + } + #endif /* configUSE_MUTEXES */ + + vListInitialiseItem( &( pxTCB->xGenericListItem ) ); + vListInitialiseItem( &( pxTCB->xEventListItem ) ); + + /* Set the pxTCB as a link back from the xListItem. This is so we can get + back to the containing TCB from a generic item in a list. */ + listSET_LIST_ITEM_OWNER( &( pxTCB->xGenericListItem ), pxTCB ); + + /* Event lists are always in priority order. */ + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( portTickType ) configMAX_PRIORITIES - ( portTickType ) uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + listSET_LIST_ITEM_OWNER( &( pxTCB->xEventListItem ), pxTCB ); + + #if ( portCRITICAL_NESTING_IN_TCB == 1 ) + { + pxTCB->uxCriticalNesting = ( unsigned portBASE_TYPE ) 0U; + } + #endif /* portCRITICAL_NESTING_IN_TCB */ + + #if ( configUSE_APPLICATION_TASK_TAG == 1 ) + { + pxTCB->pxTaskTag = NULL; + } + #endif /* configUSE_APPLICATION_TASK_TAG */ + + #if ( configGENERATE_RUN_TIME_STATS == 1 ) + { + pxTCB->ulRunTimeCounter = 0UL; + } + #endif /* configGENERATE_RUN_TIME_STATS */ + + #if ( portUSING_MPU_WRAPPERS == 1 ) + { + vPortStoreTaskMPUSettings( &( pxTCB->xMPUSettings ), xRegions, pxTCB->pxStack, usStackDepth ); + } + #else /* portUSING_MPU_WRAPPERS */ + { + ( void ) xRegions; + ( void ) usStackDepth; + } + #endif /* portUSING_MPU_WRAPPERS */ + + #if ( configUSE_NEWLIB_REENTRANT == 1 ) + { + /* Initialise this task's Newlib reent structure. */ + _REENT_INIT_PTR( ( &( pxTCB->xNewLib_reent ) ) ); + } + #endif /* configUSE_NEWLIB_REENTRANT */ +} /*-----------------------------------------------------------*/ #if ( portUSING_MPU_WRAPPERS == 1 ) - void vTaskAllocateMPURegions( TaskHandle_t xTaskToModify, const MemoryRegion_t * const xRegions ) + void vTaskAllocateMPURegions( xTaskHandle xTaskToModify, const xMemoryRegion * const xRegions ) { - TCB_t *pxTCB; + tskTCB *pxTCB; - /* If null is passed in here then we are modifying the MPU settings of - the calling task. */ + /* If null is passed in here then we are deleting ourselves. */ pxTCB = prvGetTCBFromHandle( xTaskToModify ); - vPortStoreTaskMPUSettings( &( pxTCB->xMPUSettings ), xRegions, NULL, 0 ); + vPortStoreTaskMPUSettings( &( pxTCB->xMPUSettings ), xRegions, NULL, 0 ); } #endif /* portUSING_MPU_WRAPPERS */ @@ -3544,9 +2332,9 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters ) static void prvInitialiseTaskLists( void ) { -UBaseType_t uxPriority; +unsigned portBASE_TYPE uxPriority; - for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ ) + for( uxPriority = ( unsigned portBASE_TYPE ) 0U; uxPriority < ( unsigned portBASE_TYPE ) configMAX_PRIORITIES; uxPriority++ ) { vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) ); } @@ -3576,155 +2364,156 @@ UBaseType_t uxPriority; static void prvCheckTasksWaitingTermination( void ) { - - /** THIS FUNCTION IS CALLED FROM THE RTOS IDLE TASK **/ - #if ( INCLUDE_vTaskDelete == 1 ) { - TCB_t *pxTCB; + portBASE_TYPE xListIsEmpty; - /* uxDeletedTasksWaitingCleanUp is used to prevent taskENTER_CRITICAL() - being called too often in the idle task. */ - while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U ) + /* ucTasksDeleted is used to prevent vTaskSuspendAll() being called + too often in the idle task. */ + while( uxTasksDeleted > ( unsigned portBASE_TYPE ) 0U ) { - taskENTER_CRITICAL(); - { - pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - --uxCurrentNumberOfTasks; - --uxDeletedTasksWaitingCleanUp; - } - taskEXIT_CRITICAL(); + vTaskSuspendAll(); + xListIsEmpty = listLIST_IS_EMPTY( &xTasksWaitingTermination ); + ( void ) xTaskResumeAll(); - prvDeleteTCB( pxTCB ); + if( xListIsEmpty == pdFALSE ) + { + tskTCB *pxTCB; + + taskENTER_CRITICAL(); + { + pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) ); + ( void ) uxListRemove( &( pxTCB->xGenericListItem ) ); + --uxCurrentNumberOfTasks; + --uxTasksDeleted; + } + taskEXIT_CRITICAL(); + + prvDeleteTCB( pxTCB ); + } } } - #endif /* INCLUDE_vTaskDelete */ + #endif /* vTaskDelete */ } /*-----------------------------------------------------------*/ -#if( configUSE_TRACE_FACILITY == 1 ) +static void IRAM prvAddCurrentTaskToDelayedList( portTickType xTimeToWake ) +{ + /* The list item will be inserted in wake time order. */ + listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake ); - void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) + if( xTimeToWake < xTickCount ) { - TCB_t *pxTCB; + /* Wake time has overflowed. Place this item in the overflow list. */ + vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xGenericListItem ) ); + } + else + { + /* The wake time has not overflowed, so we can use the current block list. */ + vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xGenericListItem ) ); - /* xTask is NULL then get the state of the calling task. */ - pxTCB = prvGetTCBFromHandle( xTask ); - - pxTaskStatus->xHandle = ( TaskHandle_t ) pxTCB; - pxTaskStatus->pcTaskName = ( const char * ) &( pxTCB->pcTaskName [ 0 ] ); - pxTaskStatus->uxCurrentPriority = pxTCB->uxPriority; - pxTaskStatus->pxStackBase = pxTCB->pxStack; - pxTaskStatus->xTaskNumber = pxTCB->uxTCBNumber; - - #if ( configUSE_MUTEXES == 1 ) + /* If the task entering the blocked state was placed at the head of the + list of blocked tasks then xNextTaskUnblockTime needs to be updated + too. */ + if( xTimeToWake < xNextTaskUnblockTime ) { - pxTaskStatus->uxBasePriority = pxTCB->uxBasePriority; + xNextTaskUnblockTime = xTimeToWake; } - #else - { - pxTaskStatus->uxBasePriority = 0; - } - #endif + } +} +/*-----------------------------------------------------------*/ - #if ( configGENERATE_RUN_TIME_STATS == 1 ) - { - pxTaskStatus->ulRunTimeCounter = pxTCB->ulRunTimeCounter; - } - #else - { - pxTaskStatus->ulRunTimeCounter = 0; - } - #endif +static tskTCB *prvAllocateTCBAndStack( unsigned short usStackDepth, portSTACK_TYPE *puxStackBuffer ) +{ +tskTCB *pxNewTCB; - /* Obtaining the task state is a little fiddly, so is only done if the - value of eState passed into this function is eInvalid - otherwise the - state is just set to whatever is passed in. */ - if( eState != eInvalid ) - { - if( pxTCB == pxCurrentTCB ) - { - pxTaskStatus->eCurrentState = eRunning; - } - else - { - pxTaskStatus->eCurrentState = eState; + /* Allocate space for the TCB. Where the memory comes from depends on + the implementation of the port malloc function. */ + pxNewTCB = ( tskTCB * ) pvPortMalloc( sizeof( tskTCB ) ); - #if ( INCLUDE_vTaskSuspend == 1 ) - { - /* If the task is in the suspended list then there is a - chance it is actually just blocked indefinitely - so really - it should be reported as being in the Blocked state. */ - if( eState == eSuspended ) - { - vTaskSuspendAll(); - { - if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL ) - { - pxTaskStatus->eCurrentState = eBlocked; - } - } - ( void ) xTaskResumeAll(); - } - } - #endif /* INCLUDE_vTaskSuspend */ - } + if( pxNewTCB != NULL ) + { + /* Allocate space for the stack used by the task being created. + The base of the stack memory stored in the TCB so the task can + be deleted later if required. */ + pxNewTCB->pxStack = ( portSTACK_TYPE * ) pvPortMallocAligned( ( ( ( size_t ) usStackDepth ) * sizeof( portSTACK_TYPE ) ), puxStackBuffer ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + + if( pxNewTCB->pxStack == NULL ) + { + /* Could not allocate the stack. Delete the allocated TCB. */ + vPortFree( pxNewTCB ); + pxNewTCB = NULL; } else { - pxTaskStatus->eCurrentState = eTaskGetState( pxTCB ); - } - - /* Obtaining the stack space takes some time, so the xGetFreeStackSpace - parameter is provided to allow it to be skipped. */ - if( xGetFreeStackSpace != pdFALSE ) - { - #if ( portSTACK_GROWTH > 0 ) - { - pxTaskStatus->usStackHighWaterMark = prvTaskCheckFreeStackSpace( ( uint8_t * ) pxTCB->pxEndOfStack ); - } - #else - { - pxTaskStatus->usStackHighWaterMark = prvTaskCheckFreeStackSpace( ( uint8_t * ) pxTCB->pxStack ); - } - #endif - } - else - { - pxTaskStatus->usStackHighWaterMark = 0; + /* Just to help debugging. */ + ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) usStackDepth * sizeof( portSTACK_TYPE ) ); } } -#endif /* configUSE_TRACE_FACILITY */ + return pxNewTCB; +} /*-----------------------------------------------------------*/ #if ( configUSE_TRACE_FACILITY == 1 ) - static UBaseType_t prvListTasksWithinSingleList( TaskStatus_t *pxTaskStatusArray, List_t *pxList, eTaskState eState ) + static unsigned portBASE_TYPE prvListTaskWithinSingleList( xTaskStatusType *pxTaskStatusArray, xList *pxList, eTaskState eState ) { - configLIST_VOLATILE TCB_t *pxNextTCB, *pxFirstTCB; - UBaseType_t uxTask = 0; + volatile tskTCB *pxNextTCB, *pxFirstTCB; + unsigned portBASE_TYPE uxTask = 0; - if( listCURRENT_LIST_LENGTH( pxList ) > ( UBaseType_t ) 0 ) + if( listCURRENT_LIST_LENGTH( pxList ) > ( unsigned portBASE_TYPE ) 0 ) { - listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList ); - /* Populate an TaskStatus_t structure within the + /* Populate an xTaskStatusType structure within the pxTaskStatusArray array for each task that is referenced from - pxList. See the definition of TaskStatus_t in task.h for the - meaning of each TaskStatus_t structure member. */ + pxList. See the definition of xTaskStatusType in task.h for the + meaning of each xTaskStatusType structure member. */ do { - listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ - vTaskGetInfo( ( TaskHandle_t ) pxNextTCB, &( pxTaskStatusArray[ uxTask ] ), pdTRUE, eState ); + listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList ); + + pxTaskStatusArray[ uxTask ].xHandle = ( xTaskHandle ) pxNextTCB; + pxTaskStatusArray[ uxTask ].pcTaskName = ( const signed char * ) &( pxNextTCB->pcTaskName [ 0 ] ); + pxTaskStatusArray[ uxTask ].xTaskNumber = pxNextTCB->uxTCBNumber; + pxTaskStatusArray[ uxTask ].eCurrentState = eState; + pxTaskStatusArray[ uxTask ].uxCurrentPriority = pxNextTCB->uxPriority; + + #if ( configUSE_MUTEXES == 1 ) + { + pxTaskStatusArray[ uxTask ].uxBasePriority = pxNextTCB->uxBasePriority; + } + #else + { + pxTaskStatusArray[ uxTask ].uxBasePriority = 0; + } + #endif + + #if ( configGENERATE_RUN_TIME_STATS == 1 ) + { + pxTaskStatusArray[ uxTask ].ulRunTimeCounter = pxNextTCB->ulRunTimeCounter; + } + #else + { + pxTaskStatusArray[ uxTask ].ulRunTimeCounter = 0; + } + #endif + + #if ( portSTACK_GROWTH > 0 ) + { + ppxTaskStatusArray[ uxTask ].usStackHighWaterMark = prvTaskCheckFreeStackSpace( ( unsigned char * ) pxNextTCB->pxEndOfStack ); + } + #else + { + pxTaskStatusArray[ uxTask ].usStackHighWaterMark = prvTaskCheckFreeStackSpace( ( unsigned char * ) pxNextTCB->pxStack ); + } + #endif + uxTask++; + } while( pxNextTCB != pxFirstTCB ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } return uxTask; } @@ -3732,87 +2521,47 @@ static void prvCheckTasksWaitingTermination( void ) #endif /* configUSE_TRACE_FACILITY */ /*-----------------------------------------------------------*/ -#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) ) +#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) - static configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte ) + static unsigned short prvTaskCheckFreeStackSpace( const unsigned char * pucStackByte ) { - uint32_t ulCount = 0U; + register unsigned short usCount = 0U; - while( *pucStackByte == ( uint8_t ) tskSTACK_FILL_BYTE ) + while( *pucStackByte == tskSTACK_FILL_BYTE ) { pucStackByte -= portSTACK_GROWTH; - ulCount++; + usCount++; } - ulCount /= ( uint32_t ) sizeof( StackType_t ); /*lint !e961 Casting is not redundant on smaller architectures. */ + usCount /= sizeof( portSTACK_TYPE ); - return ( configSTACK_DEPTH_TYPE ) ulCount; + return usCount; } -#endif /* ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) ) */ -/*-----------------------------------------------------------*/ - -#if ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) - - /* uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the - same except for their return type. Using configSTACK_DEPTH_TYPE allows the - user to determine the return type. It gets around the problem of the value - overflowing on 8-bit types without breaking backward compatibility for - applications that expect an 8-bit return type. */ - configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) - { - TCB_t *pxTCB; - uint8_t *pucEndOfStack; - configSTACK_DEPTH_TYPE uxReturn; - - /* uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are - the same except for their return type. Using configSTACK_DEPTH_TYPE - allows the user to determine the return type. It gets around the - problem of the value overflowing on 8-bit types without breaking - backward compatibility for applications that expect an 8-bit return - type. */ - - pxTCB = prvGetTCBFromHandle( xTask ); - - #if portSTACK_GROWTH < 0 - { - pucEndOfStack = ( uint8_t * ) pxTCB->pxStack; - } - #else - { - pucEndOfStack = ( uint8_t * ) pxTCB->pxEndOfStack; - } - #endif - - uxReturn = prvTaskCheckFreeStackSpace( pucEndOfStack ); - - return uxReturn; - } - -#endif /* INCLUDE_uxTaskGetStackHighWaterMark2 */ +#endif /* ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) */ /*-----------------------------------------------------------*/ #if ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) - UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) + unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask ) { - TCB_t *pxTCB; - uint8_t *pucEndOfStack; - UBaseType_t uxReturn; + tskTCB *pxTCB; + unsigned char *pcEndOfStack; + unsigned portBASE_TYPE uxReturn; pxTCB = prvGetTCBFromHandle( xTask ); #if portSTACK_GROWTH < 0 { - pucEndOfStack = ( uint8_t * ) pxTCB->pxStack; + pcEndOfStack = ( unsigned char * ) pxTCB->pxStack; } #else { - pucEndOfStack = ( uint8_t * ) pxTCB->pxEndOfStack; + pcEndOfStack = ( unsigned char * ) pxTCB->pxEndOfStack; } #endif - uxReturn = ( UBaseType_t ) prvTaskCheckFreeStackSpace( pucEndOfStack ); + uxReturn = ( unsigned portBASE_TYPE ) prvTaskCheckFreeStackSpace( pcEndOfStack ); return uxReturn; } @@ -3822,89 +2571,27 @@ static void prvCheckTasksWaitingTermination( void ) #if ( INCLUDE_vTaskDelete == 1 ) - static void prvDeleteTCB( TCB_t *pxTCB ) + static void prvDeleteTCB( tskTCB *pxTCB ) { /* This call is required specifically for the TriCore port. It must be above the vPortFree() calls. The call is also used by ports/demos that want to allocate and clean RAM statically. */ portCLEAN_UP_TCB( pxTCB ); - /* Free up the memory allocated by the scheduler for the task. It is up - to the task to free any memory allocated at the application level. */ - #if ( configUSE_NEWLIB_REENTRANT == 1 ) - { - _reclaim_reent( &( pxTCB->xNewLib_reent ) ); - } - #endif /* configUSE_NEWLIB_REENTRANT */ - - #if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( portUSING_MPU_WRAPPERS == 0 ) ) - { - /* The task can only have been allocated dynamically - free both - the stack and TCB. */ - vPortFree( pxTCB->pxStack ); - vPortFree( pxTCB ); - } - #elif( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */ - { - /* The task could have been allocated statically or dynamically, so - check what was statically allocated before trying to free the - memory. */ - if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ) - { - /* Both the stack and TCB were allocated dynamically, so both - must be freed. */ - vPortFree( pxTCB->pxStack ); - vPortFree( pxTCB ); - } - else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY ) - { - /* Only the stack was statically allocated, so the TCB is the - only memory that must be freed. */ - vPortFree( pxTCB ); - } - else - { - /* Neither the stack nor the TCB were allocated dynamically, so - nothing needs to be freed. */ - configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB ); - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ + /* Free up the memory allocated by the scheduler for the task. It is up to + the task to free any memory allocated at the application level. */ + vPortFreeAligned( pxTCB->pxStack ); + vPortFree( pxTCB ); } #endif /* INCLUDE_vTaskDelete */ /*-----------------------------------------------------------*/ -static void prvResetNextTaskUnblockTime( void ) -{ -TCB_t *pxTCB; - - if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) - { - /* The new current delayed list is empty. Set xNextTaskUnblockTime to - the maximum possible value so it is extremely unlikely that the - if( xTickCount >= xNextTaskUnblockTime ) test will pass until - there is an item in the delayed list. */ - xNextTaskUnblockTime = portMAX_DELAY; - } - else - { - /* The new current delayed list is not empty, get the value of - the item at the head of the delayed list. This is the time at - which the task at the head of the delayed list should be removed - from the Blocked state. */ - ( pxTCB ) = listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ - xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) ); - } -} -/*-----------------------------------------------------------*/ - #if ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) ) - TaskHandle_t xTaskGetCurrentTaskHandle( void ) + xTaskHandle xTaskGetCurrentTaskHandle( void ) { - TaskHandle_t xReturn; + xTaskHandle xReturn; /* A critical section is not required as this is not called from an interrupt and the current TCB will always be the same for any @@ -3919,9 +2606,9 @@ TCB_t *pxTCB; #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) - BaseType_t xTaskGetSchedulerState( void ) + portBASE_TYPE xTaskGetSchedulerState( void ) { - BaseType_t xReturn; + portBASE_TYPE xReturn; if( xSchedulerRunning == pdFALSE ) { @@ -3929,7 +2616,7 @@ TCB_t *pxTCB; } else { - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) + if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE ) { xReturn = taskSCHEDULER_RUNNING; } @@ -3947,86 +2634,41 @@ TCB_t *pxTCB; #if ( configUSE_MUTEXES == 1 ) - BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) + void vTaskPriorityInherit( xTaskHandle const pxMutexHolder ) { - TCB_t * const pxMutexHolderTCB = pxMutexHolder; - BaseType_t xReturn = pdFALSE; + tskTCB * const pxTCB = ( tskTCB * ) pxMutexHolder; /* If the mutex was given back by an interrupt while the queue was - locked then the mutex holder might now be NULL. _RB_ Is this still - needed as interrupts can no longer use mutexes? */ + locked then the mutex holder might now be NULL. */ if( pxMutexHolder != NULL ) { - /* If the holder of the mutex has a priority below the priority of - the task attempting to obtain the mutex then it will temporarily - inherit the priority of the task attempting to obtain the mutex. */ - if( pxMutexHolderTCB->uxPriority < pxCurrentTCB->uxPriority ) + if( pxTCB->uxPriority < pxCurrentTCB->uxPriority ) { - /* Adjust the mutex holder state to account for its new - priority. Only reset the event list item value if the value is - not being used for anything else. */ - if( ( listGET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) - { - listSET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + /* Adjust the mutex holder state to account for its new priority. */ + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( portTickType ) configMAX_PRIORITIES - ( portTickType ) pxCurrentTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - /* If the task being modified is in the ready state it will need - to be moved into a new list. */ - if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxMutexHolderTCB->uxPriority ] ), &( pxMutexHolderTCB->xStateListItem ) ) != pdFALSE ) + /* If the task being modified is in the ready state it will need to + be moved into a new list. */ + if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxTCB->uxPriority ] ), &( pxTCB->xGenericListItem ) ) != pdFALSE ) { - if( uxListRemove( &( pxMutexHolderTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) + if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) { - taskRESET_READY_PRIORITY( pxMutexHolderTCB->uxPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); + taskRESET_READY_PRIORITY( pxTCB->uxPriority ); } /* Inherit the priority before being moved into the new list. */ - pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority; - prvAddTaskToReadyList( pxMutexHolderTCB ); + pxTCB->uxPriority = pxCurrentTCB->uxPriority; + prvAddTaskToReadyList( pxTCB ); } else { /* Just inherit the priority. */ - pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority; + pxTCB->uxPriority = pxCurrentTCB->uxPriority; } - traceTASK_PRIORITY_INHERIT( pxMutexHolderTCB, pxCurrentTCB->uxPriority ); - - /* Inheritance occurred. */ - xReturn = pdTRUE; - } - else - { - if( pxMutexHolderTCB->uxBasePriority < pxCurrentTCB->uxPriority ) - { - /* The base priority of the mutex holder is lower than the - priority of the task attempting to take the mutex, but the - current priority of the mutex holder is not lower than the - priority of the task attempting to take the mutex. - Therefore the mutex holder must have already inherited a - priority, but inheritance would have occurred if that had - not been the case. */ - xReturn = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + traceTASK_PRIORITY_INHERIT( pxTCB, pxCurrentTCB->uxPriority ); } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xReturn; } #endif /* configUSE_MUTEXES */ @@ -4034,180 +2676,28 @@ TCB_t *pxTCB; #if ( configUSE_MUTEXES == 1 ) - BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) + void IRAM vTaskPriorityDisinherit( xTaskHandle const pxMutexHolder ) { - TCB_t * const pxTCB = pxMutexHolder; - BaseType_t xReturn = pdFALSE; + tskTCB * const pxTCB = ( tskTCB * ) pxMutexHolder; if( pxMutexHolder != NULL ) { - /* A task can only have an inherited priority if it holds the mutex. - If the mutex is held by a task then it cannot be given from an - interrupt, and if a mutex is given by the holding task then it must - be the running state task. */ - configASSERT( pxTCB == pxCurrentTCB ); - configASSERT( pxTCB->uxMutexesHeld ); - ( pxTCB->uxMutexesHeld )--; - - /* Has the holder of the mutex inherited the priority of another - task? */ if( pxTCB->uxPriority != pxTCB->uxBasePriority ) { - /* Only disinherit if no other mutexes are held. */ - if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 ) + /* We must be the running task to be able to give the mutex back. + Remove ourselves from the ready list we currently appear in. */ + if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( unsigned portBASE_TYPE ) 0 ) { - /* A task can only have an inherited priority if it holds - the mutex. If the mutex is held by a task then it cannot be - given from an interrupt, and if a mutex is given by the - holding task then it must be the running state task. Remove - the holding task from the ready list. */ - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - taskRESET_READY_PRIORITY( pxTCB->uxPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* Disinherit the priority before adding the task into the - new ready list. */ - traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority ); - pxTCB->uxPriority = pxTCB->uxBasePriority; - - /* Reset the event list item value. It cannot be in use for - any other purpose if this task is running, and it must be - running to give back the mutex. */ - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - prvAddTaskToReadyList( pxTCB ); - - /* Return true to indicate that a context switch is required. - This is only actually required in the corner case whereby - multiple mutexes were held and the mutexes were given back - in an order different to that in which they were taken. - If a context switch did not occur when the first mutex was - returned, even if a task was waiting on it, then a context - switch should occur when the last mutex is returned whether - a task is waiting on it or not. */ - xReturn = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); + taskRESET_READY_PRIORITY( pxTCB->uxPriority ); } + + /* Disinherit the priority before adding the task into the new + ready list. */ + traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority ); + pxTCB->uxPriority = pxTCB->uxBasePriority; + listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( portTickType ) configMAX_PRIORITIES - ( portTickType ) pxTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + prvAddTaskToReadyList( pxTCB ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - return xReturn; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_MUTEXES == 1 ) - - void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask ) - { - TCB_t * const pxTCB = pxMutexHolder; - UBaseType_t uxPriorityUsedOnEntry, uxPriorityToUse; - const UBaseType_t uxOnlyOneMutexHeld = ( UBaseType_t ) 1; - - if( pxMutexHolder != NULL ) - { - /* If pxMutexHolder is not NULL then the holder must hold at least - one mutex. */ - configASSERT( pxTCB->uxMutexesHeld ); - - /* Determine the priority to which the priority of the task that - holds the mutex should be set. This will be the greater of the - holding task's base priority and the priority of the highest - priority task that is waiting to obtain the mutex. */ - if( pxTCB->uxBasePriority < uxHighestPriorityWaitingTask ) - { - uxPriorityToUse = uxHighestPriorityWaitingTask; - } - else - { - uxPriorityToUse = pxTCB->uxBasePriority; - } - - /* Does the priority need to change? */ - if( pxTCB->uxPriority != uxPriorityToUse ) - { - /* Only disinherit if no other mutexes are held. This is a - simplification in the priority inheritance implementation. If - the task that holds the mutex is also holding other mutexes then - the other mutexes may have caused the priority inheritance. */ - if( pxTCB->uxMutexesHeld == uxOnlyOneMutexHeld ) - { - /* If a task has timed out because it already holds the - mutex it was trying to obtain then it cannot of inherited - its own priority. */ - configASSERT( pxTCB != pxCurrentTCB ); - - /* Disinherit the priority, remembering the previous - priority to facilitate determining the subject task's - state. */ - traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority ); - uxPriorityUsedOnEntry = pxTCB->uxPriority; - pxTCB->uxPriority = uxPriorityToUse; - - /* Only reset the event list item value if the value is not - being used for anything else. */ - if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL ) - { - listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriorityToUse ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* If the running task is not the task that holds the mutex - then the task that holds the mutex could be in either the - Ready, Blocked or Suspended states. Only remove the task - from its current state list if it is in the Ready state as - the task's priority is going to change and there is one - Ready list per priority. */ - if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE ) - { - if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - taskRESET_READY_PRIORITY( pxTCB->uxPriority ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - prvAddTaskToReadyList( pxTCB ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } @@ -4223,21 +2713,6 @@ TCB_t *pxTCB; if( xSchedulerRunning != pdFALSE ) { ( pxCurrentTCB->uxCriticalNesting )++; - - /* This is not the interrupt safe version of the enter critical - function so assert() if it is being called from an interrupt - context. Only API functions that end in "FromISR" can be used in an - interrupt. Only assert if the critical nesting count is 1 to - protect against recursive calls if the assert function also uses a - critical section. */ - if( pxCurrentTCB->uxCriticalNesting == 1 ) - { - portASSERT_IF_IN_ISR(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } @@ -4258,57 +2733,19 @@ TCB_t *pxTCB; { portENABLE_INTERRUPTS(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); } } #endif /* portCRITICAL_NESTING_IN_TCB */ /*-----------------------------------------------------------*/ -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) +#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS == 1 ) ) - static char *prvWriteNameToBuffer( char *pcBuffer, const char *pcTaskName ) + void vTaskList( signed char *pcWriteBuffer ) { - size_t x; - - /* Start by copying the entire string. */ - strcpy( pcBuffer, pcTaskName ); - - /* Pad the end of the string with spaces to ensure columns line up when - printed out. */ - for( x = strlen( pcBuffer ); x < ( size_t ) ( configMAX_TASK_NAME_LEN - 1 ); x++ ) - { - pcBuffer[ x ] = ' '; - } - - /* Terminate. */ - pcBuffer[ x ] = ( char ) 0x00; - - /* Return the new end of string. */ - return &( pcBuffer[ x ] ); - } - -#endif /* ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) */ -/*-----------------------------------------------------------*/ - -#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) - - void vTaskList( char * pcWriteBuffer ) - { - TaskStatus_t *pxTaskStatusArray; - UBaseType_t uxArraySize, x; + xTaskStatusType *pxTaskStatusArray; + volatile unsigned portBASE_TYPE uxArraySize, x; char cStatus; /* @@ -4337,16 +2774,14 @@ TCB_t *pxTCB; /* Make sure the write buffer does not contain a string. */ - *pcWriteBuffer = ( char ) 0x00; + *pcWriteBuffer = 0x00; /* Take a snapshot of the number of tasks in case it changes while this function is executing. */ uxArraySize = uxCurrentNumberOfTasks; - /* Allocate an array index for each task. NOTE! if - configSUPPORT_DYNAMIC_ALLOCATION is set to 0 then pvPortMalloc() will - equate to NULL. */ - pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( TaskStatus_t ) ); /*lint !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack and this allocation allocates a struct that has the alignment requirements of a pointer. */ + /* Allocate an array index for each task. */ + pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( xTaskStatusType ) ); if( pxTaskStatusArray != NULL ) { @@ -4358,63 +2793,43 @@ TCB_t *pxTCB; { switch( pxTaskStatusArray[ x ].eCurrentState ) { - case eRunning: cStatus = tskRUNNING_CHAR; - break; + case eReady: cStatus = tskREADY_CHAR; + break; - case eReady: cStatus = tskREADY_CHAR; - break; + case eBlocked: cStatus = tskBLOCKED_CHAR; + break; - case eBlocked: cStatus = tskBLOCKED_CHAR; - break; + case eSuspended: cStatus = tskSUSPENDED_CHAR; + break; - case eSuspended: cStatus = tskSUSPENDED_CHAR; - break; + case eDeleted: cStatus = tskDELETED_CHAR; + break; - case eDeleted: cStatus = tskDELETED_CHAR; - break; - - case eInvalid: /* Fall through. */ - default: /* Should not get here, but it is included - to prevent static checking errors. */ - cStatus = ( char ) 0x00; - break; + default: /* Should not get here, but it is included + to prevent static checking errors. */ + cStatus = 0x00; + break; } - /* Write the task name to the string, padding with spaces so it - can be printed in tabular form more easily. */ - pcWriteBuffer = prvWriteNameToBuffer( pcWriteBuffer, pxTaskStatusArray[ x ].pcTaskName ); - - /* Write the rest of the string. */ - sprintf( pcWriteBuffer, "\t%c\t%u\t%u\t%u\r\n", cStatus, ( unsigned int ) pxTaskStatusArray[ x ].uxCurrentPriority, ( unsigned int ) pxTaskStatusArray[ x ].usStackHighWaterMark, ( unsigned int ) pxTaskStatusArray[ x ].xTaskNumber ); /*lint !e586 sprintf() allowed as this is compiled with many compilers and this is a utility function only - not part of the core kernel implementation. */ - pcWriteBuffer += strlen( pcWriteBuffer ); /*lint !e9016 Pointer arithmetic ok on char pointers especially as in this case where it best denotes the intent of the code. */ + sprintf( ( char * ) pcWriteBuffer, ( char * ) "%s\t\t%c\t%u\t%u\t%u\r\n", pxTaskStatusArray[ x ].pcTaskName, cStatus, ( unsigned int ) pxTaskStatusArray[ x ].uxCurrentPriority, ( unsigned int ) pxTaskStatusArray[ x ].usStackHighWaterMark, ( unsigned int ) pxTaskStatusArray[ x ].xTaskNumber ); + pcWriteBuffer += strlen( ( char * ) pcWriteBuffer ); } - /* Free the array again. NOTE! If configSUPPORT_DYNAMIC_ALLOCATION - is 0 then vPortFree() will be #defined to nothing. */ + /* Free the array again. */ vPortFree( pxTaskStatusArray ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } -#endif /* ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */ +#endif /* configUSE_TRACE_FACILITY */ /*----------------------------------------------------------*/ -#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) +#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS == 1 ) ) - void vTaskGetRunTimeStats( char *pcWriteBuffer ) + void vTaskGetRunTimeStats( signed char *pcWriteBuffer ) { - TaskStatus_t *pxTaskStatusArray; - UBaseType_t uxArraySize, x; - uint32_t ulTotalTime, ulStatsAsPercentage; - - #if( configUSE_TRACE_FACILITY != 1 ) - { - #error configUSE_TRACE_FACILITY must also be set to 1 in FreeRTOSConfig.h to use vTaskGetRunTimeStats(). - } - #endif + xTaskStatusType *pxTaskStatusArray; + volatile unsigned portBASE_TYPE uxArraySize, x; + unsigned long ulTotalTime, ulStatsAsPercentage; /* * PLEASE NOTE: @@ -4442,16 +2857,14 @@ TCB_t *pxTCB; */ /* Make sure the write buffer does not contain a string. */ - *pcWriteBuffer = ( char ) 0x00; + *pcWriteBuffer = 0x00; /* Take a snapshot of the number of tasks in case it changes while this function is executing. */ uxArraySize = uxCurrentNumberOfTasks; - /* Allocate an array index for each task. NOTE! If - configSUPPORT_DYNAMIC_ALLOCATION is set to 0 then pvPortMalloc() will - equate to NULL. */ - pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( TaskStatus_t ) ); /*lint !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack and this allocation allocates a struct that has the alignment requirements of a pointer. */ + /* Allocate an array index for each task. */ + pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( xTaskStatusType ) ); if( pxTaskStatusArray != NULL ) { @@ -4462,7 +2875,7 @@ TCB_t *pxTCB; ulTotalTime /= 100UL; /* Avoid divide by zero errors. */ - if( ulTotalTime > 0UL ) + if( ulTotalTime > 0 ) { /* Create a human readable table from the binary data. */ for( x = 0; x < uxArraySize; x++ ) @@ -4472,22 +2885,17 @@ TCB_t *pxTCB; ulTotalRunTimeDiv100 has already been divided by 100. */ ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalTime; - /* Write the task name to the string, padding with - spaces so it can be printed in tabular form more - easily. */ - pcWriteBuffer = prvWriteNameToBuffer( pcWriteBuffer, pxTaskStatusArray[ x ].pcTaskName ); - if( ulStatsAsPercentage > 0UL ) { #ifdef portLU_PRINTF_SPECIFIER_REQUIRED { - sprintf( pcWriteBuffer, "\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage ); + sprintf( ( char * ) pcWriteBuffer, ( char * ) "%s\t\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage ); } #else { /* sizeof( int ) == sizeof( long ) so a smaller printf() library can be used. */ - sprintf( pcWriteBuffer, "\t%u\t\t%u%%\r\n", ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter, ( unsigned int ) ulStatsAsPercentage ); /*lint !e586 sprintf() allowed as this is compiled with many compilers and this is a utility function only - not part of the core kernel implementation. */ + sprintf( ( char * ) pcWriteBuffer, ( char * ) "%s\t\t%u\t\t%u%%\r\n", pxTaskStatusArray[ x ].pcTaskName, ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter, ( unsigned int ) ulStatsAsPercentage ); } #endif } @@ -4497,717 +2905,27 @@ TCB_t *pxTCB; consumed less than 1% of the total run time. */ #ifdef portLU_PRINTF_SPECIFIER_REQUIRED { - sprintf( pcWriteBuffer, "\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].ulRunTimeCounter ); + sprintf( ( char * ) pcWriteBuffer, ( char * ) "%s\t\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter ); } #else { /* sizeof( int ) == sizeof( long ) so a smaller printf() library can be used. */ - sprintf( pcWriteBuffer, "\t%u\t\t<1%%\r\n", ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter ); /*lint !e586 sprintf() allowed as this is compiled with many compilers and this is a utility function only - not part of the core kernel implementation. */ + sprintf( ( char * ) pcWriteBuffer, ( char * ) "%s\t\t%u\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter ); } #endif } - pcWriteBuffer += strlen( pcWriteBuffer ); /*lint !e9016 Pointer arithmetic ok on char pointers especially as in this case where it best denotes the intent of the code. */ + pcWriteBuffer += strlen( ( char * ) pcWriteBuffer ); } } - else - { - mtCOVERAGE_TEST_MARKER(); - } - /* Free the array again. NOTE! If configSUPPORT_DYNAMIC_ALLOCATION - is 0 then vPortFree() will be #defined to nothing. */ + /* Free the array again. */ vPortFree( pxTaskStatusArray ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } -#endif /* ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */ -/*-----------------------------------------------------------*/ +#endif /* configGENERATE_RUN_TIME_STATS */ -TickType_t uxTaskResetEventItemValue( void ) -{ -TickType_t uxReturn; - - uxReturn = listGET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ) ); - - /* Reset the event list item to its normal value - so it can be used with - queues and semaphores. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ), ( ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ - - return uxReturn; -} -/*-----------------------------------------------------------*/ - -#if ( configUSE_MUTEXES == 1 ) - - TaskHandle_t pvTaskIncrementMutexHeldCount( void ) - { - /* If xSemaphoreCreateMutex() is called before any tasks have been created - then pxCurrentTCB will be NULL. */ - if( pxCurrentTCB != NULL ) - { - ( pxCurrentTCB->uxMutexesHeld )++; - } - - return pxCurrentTCB; - } - -#endif /* configUSE_MUTEXES */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) - { - uint32_t ulReturn; - - taskENTER_CRITICAL(); - { - /* Only block if the notification count is not already non-zero. */ - if( pxCurrentTCB->ulNotifiedValue == 0UL ) - { - /* Mark this task as waiting for a notification. */ - pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION; - - if( xTicksToWait > ( TickType_t ) 0 ) - { - prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); - traceTASK_NOTIFY_TAKE_BLOCK(); - - /* All ports are written to allow a yield in a critical - section (some will yield immediately, others wait until the - critical section exits) - but it is not something that - application code should ever do. */ - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - taskENTER_CRITICAL(); - { - traceTASK_NOTIFY_TAKE(); - ulReturn = pxCurrentTCB->ulNotifiedValue; - - if( ulReturn != 0UL ) - { - if( xClearCountOnExit != pdFALSE ) - { - pxCurrentTCB->ulNotifiedValue = 0UL; - } - else - { - pxCurrentTCB->ulNotifiedValue = ulReturn - ( uint32_t ) 1; - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - } - taskEXIT_CRITICAL(); - - return ulReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) - { - BaseType_t xReturn; - - taskENTER_CRITICAL(); - { - /* Only block if a notification is not already pending. */ - if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED ) - { - /* Clear bits in the task's notification value as bits may get - set by the notifying task or interrupt. This can be used to - clear the value to zero. */ - pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnEntry; - - /* Mark this task as waiting for a notification. */ - pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION; - - if( xTicksToWait > ( TickType_t ) 0 ) - { - prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE ); - traceTASK_NOTIFY_WAIT_BLOCK(); - - /* All ports are written to allow a yield in a critical - section (some will yield immediately, others wait until the - critical section exits) - but it is not something that - application code should ever do. */ - portYIELD_WITHIN_API(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - taskENTER_CRITICAL(); - { - traceTASK_NOTIFY_WAIT(); - - if( pulNotificationValue != NULL ) - { - /* Output the current notification value, which may or may not - have changed. */ - *pulNotificationValue = pxCurrentTCB->ulNotifiedValue; - } - - /* If ucNotifyValue is set then either the task never entered the - blocked state (because a notification was already pending) or the - task unblocked because of a notification. Otherwise the task - unblocked because of a timeout. */ - if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED ) - { - /* A notification was not received. */ - xReturn = pdFALSE; - } - else - { - /* A notification was already pending or a notification was - received while the task was waiting. */ - pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnExit; - xReturn = pdTRUE; - } - - pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) - { - TCB_t * pxTCB; - BaseType_t xReturn = pdPASS; - uint8_t ucOriginalNotifyState; - - configASSERT( xTaskToNotify ); - pxTCB = xTaskToNotify; - - taskENTER_CRITICAL(); - { - if( pulPreviousNotificationValue != NULL ) - { - *pulPreviousNotificationValue = pxTCB->ulNotifiedValue; - } - - ucOriginalNotifyState = pxTCB->ucNotifyState; - - pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED; - - switch( eAction ) - { - case eSetBits : - pxTCB->ulNotifiedValue |= ulValue; - break; - - case eIncrement : - ( pxTCB->ulNotifiedValue )++; - break; - - case eSetValueWithOverwrite : - pxTCB->ulNotifiedValue = ulValue; - break; - - case eSetValueWithoutOverwrite : - if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED ) - { - pxTCB->ulNotifiedValue = ulValue; - } - else - { - /* The value could not be written to the task. */ - xReturn = pdFAIL; - } - break; - - case eNoAction: - /* The task is being notified without its notify value being - updated. */ - break; - - default: - /* Should not get here if all enums are handled. - Artificially force an assert by testing a value the - compiler can't assume is const. */ - configASSERT( pxTCB->ulNotifiedValue == ~0UL ); - - break; - } - - traceTASK_NOTIFY(); - - /* If the task is in the blocked state specifically to wait for a - notification then unblock it now. */ - if( ucOriginalNotifyState == taskWAITING_NOTIFICATION ) - { - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - - /* The task should not have been on an event list. */ - configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL ); - - #if( configUSE_TICKLESS_IDLE != 0 ) - { - /* If a task is blocked waiting for a notification then - xNextTaskUnblockTime might be set to the blocked task's time - out time. If the task is unblocked for a reason other than - a timeout xNextTaskUnblockTime is normally left unchanged, - because it will automatically get reset to a new value when - the tick count equals xNextTaskUnblockTime. However if - tickless idling is used it might be more important to enter - sleep mode at the earliest possible time - so reset - xNextTaskUnblockTime here to ensure it is updated at the - earliest possible time. */ - prvResetNextTaskUnblockTime(); - } - #endif - - if( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* The notified task has a priority above the currently - executing task so a yield is required. */ - taskYIELD_IF_USING_PREEMPTION(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken ) - { - TCB_t * pxTCB; - uint8_t ucOriginalNotifyState; - BaseType_t xReturn = pdPASS; - UBaseType_t uxSavedInterruptStatus; - - configASSERT( xTaskToNotify ); - - /* RTOS ports that support interrupt nesting have the concept of a - maximum system call (or maximum API call) interrupt priority. - Interrupts that are above the maximum system call priority are keep - permanently enabled, even when the RTOS kernel is in a critical section, - but cannot make any calls to FreeRTOS API functions. If configASSERT() - is defined in FreeRTOSConfig.h then - portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has - been assigned a priority above the configured maximum system call - priority. Only FreeRTOS functions that end in FromISR can be called - from interrupts that have been assigned a priority at or (logically) - below the maximum system call interrupt priority. FreeRTOS maintains a - separate interrupt safe API to ensure interrupt entry is as fast and as - simple as possible. More information (albeit Cortex-M specific) is - provided on the following link: - http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - pxTCB = xTaskToNotify; - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - if( pulPreviousNotificationValue != NULL ) - { - *pulPreviousNotificationValue = pxTCB->ulNotifiedValue; - } - - ucOriginalNotifyState = pxTCB->ucNotifyState; - pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED; - - switch( eAction ) - { - case eSetBits : - pxTCB->ulNotifiedValue |= ulValue; - break; - - case eIncrement : - ( pxTCB->ulNotifiedValue )++; - break; - - case eSetValueWithOverwrite : - pxTCB->ulNotifiedValue = ulValue; - break; - - case eSetValueWithoutOverwrite : - if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED ) - { - pxTCB->ulNotifiedValue = ulValue; - } - else - { - /* The value could not be written to the task. */ - xReturn = pdFAIL; - } - break; - - case eNoAction : - /* The task is being notified without its notify value being - updated. */ - break; - - default: - /* Should not get here if all enums are handled. - Artificially force an assert by testing a value the - compiler can't assume is const. */ - configASSERT( pxTCB->ulNotifiedValue == ~0UL ); - break; - } - - traceTASK_NOTIFY_FROM_ISR(); - - /* If the task is in the blocked state specifically to wait for a - notification then unblock it now. */ - if( ucOriginalNotifyState == taskWAITING_NOTIFICATION ) - { - /* The task should not have been on an event list. */ - configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL ); - - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - } - else - { - /* The delayed and ready lists cannot be accessed, so hold - this task pending until the scheduler is resumed. */ - vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) ); - } - - if( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* The notified task has a priority above the currently - executing task so a yield is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - - /* Mark that a yield is pending in case the user is not - using the "xHigherPriorityTaskWoken" parameter to an ISR - safe FreeRTOS function. */ - xYieldPending = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - - return xReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) - { - TCB_t * pxTCB; - uint8_t ucOriginalNotifyState; - UBaseType_t uxSavedInterruptStatus; - - configASSERT( xTaskToNotify ); - - /* RTOS ports that support interrupt nesting have the concept of a - maximum system call (or maximum API call) interrupt priority. - Interrupts that are above the maximum system call priority are keep - permanently enabled, even when the RTOS kernel is in a critical section, - but cannot make any calls to FreeRTOS API functions. If configASSERT() - is defined in FreeRTOSConfig.h then - portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion - failure if a FreeRTOS API function is called from an interrupt that has - been assigned a priority above the configured maximum system call - priority. Only FreeRTOS functions that end in FromISR can be called - from interrupts that have been assigned a priority at or (logically) - below the maximum system call interrupt priority. FreeRTOS maintains a - separate interrupt safe API to ensure interrupt entry is as fast and as - simple as possible. More information (albeit Cortex-M specific) is - provided on the following link: - http://www.freertos.org/RTOS-Cortex-M3-M4.html */ - portASSERT_IF_INTERRUPT_PRIORITY_INVALID(); - - pxTCB = xTaskToNotify; - - uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); - { - ucOriginalNotifyState = pxTCB->ucNotifyState; - pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED; - - /* 'Giving' is equivalent to incrementing a count in a counting - semaphore. */ - ( pxTCB->ulNotifiedValue )++; - - traceTASK_NOTIFY_GIVE_FROM_ISR(); - - /* If the task is in the blocked state specifically to wait for a - notification then unblock it now. */ - if( ucOriginalNotifyState == taskWAITING_NOTIFICATION ) - { - /* The task should not have been on an event list. */ - configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL ); - - if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE ) - { - ( void ) uxListRemove( &( pxTCB->xStateListItem ) ); - prvAddTaskToReadyList( pxTCB ); - } - else - { - /* The delayed and ready lists cannot be accessed, so hold - this task pending until the scheduler is resumed. */ - vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) ); - } - - if( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) - { - /* The notified task has a priority above the currently - executing task so a yield is required. */ - if( pxHigherPriorityTaskWoken != NULL ) - { - *pxHigherPriorityTaskWoken = pdTRUE; - } - - /* Mark that a yield is pending in case the user is not - using the "xHigherPriorityTaskWoken" parameter in an ISR - safe FreeRTOS function. */ - xYieldPending = pdTRUE; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ - -/*-----------------------------------------------------------*/ - -#if( configUSE_TASK_NOTIFICATIONS == 1 ) - - BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask ) - { - TCB_t *pxTCB; - BaseType_t xReturn; - - /* If null is passed in here then it is the calling task that is having - its notification state cleared. */ - pxTCB = prvGetTCBFromHandle( xTask ); - - taskENTER_CRITICAL(); - { - if( pxTCB->ucNotifyState == taskNOTIFICATION_RECEIVED ) - { - pxTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION; - xReturn = pdPASS; - } - else - { - xReturn = pdFAIL; - } - } - taskEXIT_CRITICAL(); - - return xReturn; - } - -#endif /* configUSE_TASK_NOTIFICATIONS */ -/*-----------------------------------------------------------*/ - -#if( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) - TickType_t xTaskGetIdleRunTimeCounter( void ) - { - return xIdleTaskHandle->ulRunTimeCounter; - } -#endif -/*-----------------------------------------------------------*/ - -static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely ) -{ -TickType_t xTimeToWake; -const TickType_t xConstTickCount = xTickCount; - - #if( INCLUDE_xTaskAbortDelay == 1 ) - { - /* About to enter a delayed list, so ensure the ucDelayAborted flag is - reset to pdFALSE so it can be detected as having been set to pdTRUE - when the task leaves the Blocked state. */ - pxCurrentTCB->ucDelayAborted = pdFALSE; - } - #endif - - /* Remove the task from the ready list before adding it to the blocked list - as the same list item is used for both lists. */ - if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 ) - { - /* The current task must be in a ready list, so there is no need to - check, and the port reset macro can be called directly. */ - portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority ); /*lint !e931 pxCurrentTCB cannot change as it is the calling task. pxCurrentTCB->uxPriority and uxTopReadyPriority cannot change as called with scheduler suspended or in a critical section. */ - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - #if ( INCLUDE_vTaskSuspend == 1 ) - { - if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) ) - { - /* Add the task to the suspended task list instead of a delayed task - list to ensure it is not woken by a timing event. It will block - indefinitely. */ - vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) ); - } - else - { - /* Calculate the time at which the task should be woken if the event - does not occur. This may overflow but this doesn't matter, the - kernel will manage it correctly. */ - xTimeToWake = xConstTickCount + xTicksToWait; - - /* The list item will be inserted in wake time order. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake ); - - if( xTimeToWake < xConstTickCount ) - { - /* Wake time has overflowed. Place this item in the overflow - list. */ - vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); - } - else - { - /* The wake time has not overflowed, so the current block list - is used. */ - vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); - - /* If the task entering the blocked state was placed at the - head of the list of blocked tasks then xNextTaskUnblockTime - needs to be updated too. */ - if( xTimeToWake < xNextTaskUnblockTime ) - { - xNextTaskUnblockTime = xTimeToWake; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - } - } - #else /* INCLUDE_vTaskSuspend */ - { - /* Calculate the time at which the task should be woken if the event - does not occur. This may overflow but this doesn't matter, the kernel - will manage it correctly. */ - xTimeToWake = xConstTickCount + xTicksToWait; - - /* The list item will be inserted in wake time order. */ - listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake ); - - if( xTimeToWake < xConstTickCount ) - { - /* Wake time has overflowed. Place this item in the overflow list. */ - vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); - } - else - { - /* The wake time has not overflowed, so the current block list is used. */ - vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); - - /* If the task entering the blocked state was placed at the head of the - list of blocked tasks then xNextTaskUnblockTime needs to be updated - too. */ - if( xTimeToWake < xNextTaskUnblockTime ) - { - xNextTaskUnblockTime = xTimeToWake; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - - /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */ - ( void ) xCanBlockIndefinitely; - } - #endif /* INCLUDE_vTaskSuspend */ -} - -/* Code below here allows additional code to be inserted into this source file, -especially where access to file scope functions and data is needed (for example -when performing module tests). */ - -#ifdef FREERTOS_MODULE_TEST - #include "tasks_test_access_functions.h" -#endif - - -#if( configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H == 1 ) - - #include "freertos_tasks_c_additions.h" - - #ifdef FREERTOS_TASKS_C_ADDITIONS_INIT - static void freertos_tasks_c_additions_init( void ) - { - FREERTOS_TASKS_C_ADDITIONS_INIT(); - } - #endif - -#endif diff --git a/FreeRTOS/Source/timers.c b/FreeRTOS/Source/timers.c index b97e70d..783a461 100644 --- a/FreeRTOS/Source/timers.c +++ b/FreeRTOS/Source/timers.c @@ -1,29 +1,66 @@ /* - * FreeRTOS Kernel V10.2.0 - * Copyright (C) 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ + FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd. + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that has become a de facto standard. * + * * + * Help yourself get started quickly and support the FreeRTOS * + * project by purchasing a FreeRTOS tutorial book, reference * + * manual, or both from: http://www.FreeRTOS.org/Documentation * + * * + * Thank you! * + * * + *************************************************************************** + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. + + >>! NOTE: The modification to the GPL is included to allow you to distribute + >>! a combined work that includes FreeRTOS without being obliged to provide + >>! the source code for proprietary components outside of the FreeRTOS + >>! kernel. + + FreeRTOS 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. Full license text is available from the following + link: http://www.freertos.org/a00114.html + + 1 tab == 4 spaces! + + *************************************************************************** + * * + * Having a problem? Start by reading the FAQ "My application does * + * not run, what could be wrong?" * + * * + * http://www.FreeRTOS.org/FAQHelp.html * + * * + *************************************************************************** + + http://www.FreeRTOS.org - Documentation, books, training, latest versions, + license and Real Time Engineers Ltd. contact details. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + + 1 tab == 4 spaces! +*/ /* Standard includes. */ #include @@ -38,15 +75,11 @@ task.h is included from an application file. */ #include "queue.h" #include "timers.h" -#if ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 0 ) - #error configUSE_TIMERS must be set to 1 to make the xTimerPendFunctionCall() function available. -#endif - -/* Lint e9021, e961 and e750 are suppressed as a MISRA exception justified -because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined -for the header files above, but not in this file, in order to generate the -correct privileged Vs unprivileged linkage and placement. */ -#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e9021 !e961 !e750. */ +/* Lint e961 and e750 are suppressed as a MISRA exception justified because the +MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the +header files above, but not in this file, in order to generate the correct +privileged Vs unprivileged linkage and placement. */ +#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */ /* This entire source file will be skipped if the application is not configured @@ -56,105 +89,52 @@ configUSE_TIMERS is set to 1 in FreeRTOSConfig.h. */ #if ( configUSE_TIMERS == 1 ) /* Misc definitions. */ -#define tmrNO_DELAY ( TickType_t ) 0U - -/* The name assigned to the timer service task. This can be overridden by -defining trmTIMER_SERVICE_TASK_NAME in FreeRTOSConfig.h. */ -#ifndef configTIMER_SERVICE_TASK_NAME - #define configTIMER_SERVICE_TASK_NAME "Tmr Svc" -#endif - -/* Bit definitions used in the ucStatus member of a timer structure. */ -#define tmrSTATUS_IS_ACTIVE ( ( uint8_t ) 0x01 ) -#define tmrSTATUS_IS_STATICALLY_ALLOCATED ( ( uint8_t ) 0x02 ) -#define tmrSTATUS_IS_AUTORELOAD ( ( uint8_t ) 0x04 ) +#define tmrNO_DELAY ( portTickType ) 0U /* The definition of the timers themselves. */ -typedef struct tmrTimerControl /* The old naming convention is used to prevent breaking kernel aware debuggers. */ +typedef struct tmrTimerControl { - const char *pcTimerName; /*<< Text name. This is not used by the kernel, it is included simply to make debugging easier. */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - ListItem_t xTimerListItem; /*<< Standard linked list item as used by all kernel features for event management. */ - TickType_t xTimerPeriodInTicks;/*<< How quickly and often the timer expires. */ + const signed char *pcTimerName; /*<< Text name. This is not used by the kernel, it is included simply to make debugging easier. */ + xListItem xTimerListItem; /*<< Standard linked list item as used by all kernel features for event management. */ + portTickType xTimerPeriodInTicks;/*<< How quickly and often the timer expires. */ + unsigned portBASE_TYPE uxAutoReload; /*<< Set to pdTRUE if the timer should be automatically restarted once expired. Set to pdFALSE if the timer is, in effect, a one shot timer. */ void *pvTimerID; /*<< An ID to identify the timer. This allows the timer to be identified when the same callback is used for multiple timers. */ - TimerCallbackFunction_t pxCallbackFunction; /*<< The function that will be called when the timer expires. */ - #if( configUSE_TRACE_FACILITY == 1 ) - UBaseType_t uxTimerNumber; /*<< An ID assigned by trace tools such as FreeRTOS+Trace */ - #endif - uint8_t ucStatus; /*<< Holds bits to say if the timer was statically allocated or not, and if it is active or not. */ + tmrTIMER_CALLBACK pxCallbackFunction; /*<< The function that will be called when the timer expires. */ } xTIMER; -/* The old xTIMER name is maintained above then typedefed to the new Timer_t -name below to enable the use of older kernel aware debuggers. */ -typedef xTIMER Timer_t; - -/* The definition of messages that can be sent and received on the timer queue. -Two types of message can be queued - messages that manipulate a software timer, -and messages that request the execution of a non-timer related callback. The -two message types are defined in two separate structures, xTimerParametersType -and xCallbackParametersType respectively. */ -typedef struct tmrTimerParameters -{ - TickType_t xMessageValue; /*<< An optional value used by a subset of commands, for example, when changing the period of a timer. */ - Timer_t * pxTimer; /*<< The timer to which the command will be applied. */ -} TimerParameter_t; - - -typedef struct tmrCallbackParameters -{ - PendedFunction_t pxCallbackFunction; /* << The callback function to execute. */ - void *pvParameter1; /* << The value that will be used as the callback functions first parameter. */ - uint32_t ulParameter2; /* << The value that will be used as the callback functions second parameter. */ -} CallbackParameters_t; - -/* The structure that contains the two message types, along with an identifier -that is used to determine which message type is valid. */ +/* The definition of messages that can be sent and received on the timer +queue. */ typedef struct tmrTimerQueueMessage { - BaseType_t xMessageID; /*<< The command being sent to the timer service task. */ - union - { - TimerParameter_t xTimerParameters; + portBASE_TYPE xMessageID; /*<< The command being sent to the timer service task. */ + portTickType xMessageValue; /*<< An optional value used by a subset of commands, for example, when changing the period of a timer. */ + xTIMER * pxTimer; /*<< The timer to which the command will be applied. */ +} xTIMER_MESSAGE; - /* Don't include xCallbackParameters if it is not going to be used as - it makes the structure (and therefore the timer queue) larger. */ - #if ( INCLUDE_xTimerPendFunctionCall == 1 ) - CallbackParameters_t xCallbackParameters; - #endif /* INCLUDE_xTimerPendFunctionCall */ - } u; -} DaemonTaskMessage_t; - -/*lint -save -e956 A manual analysis and inspection has been used to determine -which static variables must be declared volatile. */ +/*lint -e956 A manual analysis and inspection has been used to determine which +static variables must be declared volatile. */ /* The list in which active timers are stored. Timers are referenced in expire time order, with the nearest expiry time at the front of the list. Only the -timer service task is allowed to access these lists. -xActiveTimerList1 and xActiveTimerList2 could be at function scope but that -breaks some kernel aware debuggers, and debuggers that reply on removing the -static qualifier. */ -PRIVILEGED_DATA static List_t xActiveTimerList1; -PRIVILEGED_DATA static List_t xActiveTimerList2; -PRIVILEGED_DATA static List_t *pxCurrentTimerList; -PRIVILEGED_DATA static List_t *pxOverflowTimerList; +timer service task is allowed to access xActiveTimerList. */ +PRIVILEGED_DATA static xList xActiveTimerList1; +PRIVILEGED_DATA static xList xActiveTimerList2; +PRIVILEGED_DATA static xList *pxCurrentTimerList; +PRIVILEGED_DATA static xList *pxOverflowTimerList; /* A queue that is used to send commands to the timer service task. */ -PRIVILEGED_DATA static QueueHandle_t xTimerQueue = NULL; -PRIVILEGED_DATA static TaskHandle_t xTimerTaskHandle = NULL; +PRIVILEGED_DATA static xQueueHandle xTimerQueue = NULL; -/*lint -restore */ +#if ( INCLUDE_xTimerGetTimerDaemonTaskHandle == 1 ) -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - /* If static allocation is supported then the application must provide the - following callback function - which enables the application to optionally - provide the memory that will be used by the timer task as the task's stack - and TCB. */ - extern void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize ); + PRIVILEGED_DATA static xTaskHandle xTimerTaskHandle = NULL; #endif +/*lint +e956 */ + +/*-----------------------------------------------------------*/ + /* * Initialise the infrastructure used by the timer service task if it has not * been initialised already. @@ -166,37 +146,37 @@ static void prvCheckForValidListAndQueue( void ) PRIVILEGED_FUNCTION; * task. Other tasks communicate with the timer service task using the * xTimerQueue queue. */ -static portTASK_FUNCTION_PROTO( prvTimerTask, pvParameters ) PRIVILEGED_FUNCTION; +static void prvTimerTask( void *pvParameters ) PRIVILEGED_FUNCTION; /* * Called by the timer service task to interpret and process a command it * received on the timer queue. */ -static void prvProcessReceivedCommands( void ) PRIVILEGED_FUNCTION; +static void prvProcessReceivedCommands( void ) PRIVILEGED_FUNCTION; /* * Insert the timer into either xActiveTimerList1, or xActiveTimerList2, * depending on if the expire time causes a timer counter overflow. */ -static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime ) PRIVILEGED_FUNCTION; +static portBASE_TYPE prvInsertTimerInActiveList( xTIMER *pxTimer, portTickType xNextExpiryTime, portTickType xTimeNow, portTickType xCommandTime ) PRIVILEGED_FUNCTION; /* * An active timer has reached its expire time. Reload the timer if it is an * auto reload timer, then call its callback. */ -static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow ) PRIVILEGED_FUNCTION; +static void prvProcessExpiredTimer( portTickType xNextExpireTime, portTickType xTimeNow ) PRIVILEGED_FUNCTION; /* * The tick count has overflowed. Switch the timer lists after ensuring the * current timer list does not still reference some timers. */ -static void prvSwitchTimerLists( void ) PRIVILEGED_FUNCTION; +static void prvSwitchTimerLists( portTickType xLastTime ) PRIVILEGED_FUNCTION; /* * Obtain the current tick count, setting *pxTimerListsWereSwitched to pdTRUE * if a tick count overflow occurred since prvSampleTimeNow() was last called. */ -static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched ) PRIVILEGED_FUNCTION; +static portTickType prvSampleTimeNow( portBASE_TYPE *pxTimerListsWereSwitched ) PRIVILEGED_FUNCTION; /* * If the timer list contains any active timers then return the expire time of @@ -204,29 +184,19 @@ static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched * timer list does not contain any timers then return 0 and set *pxListWasEmpty * to pdTRUE. */ -static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) PRIVILEGED_FUNCTION; +static portTickType prvGetNextExpireTime( portBASE_TYPE *pxListWasEmpty ) PRIVILEGED_FUNCTION; /* * If a timer has expired, process it. Otherwise, block the timer service task * until either a timer does expire or a command is received. */ -static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty ) PRIVILEGED_FUNCTION; +static void prvProcessTimerOrBlockTask( portTickType xNextExpireTime, portBASE_TYPE xListWasEmpty ) PRIVILEGED_FUNCTION; -/* - * Called after a Timer_t structure has been allocated either statically or - * dynamically to fill in the structure's members. - */ -static void prvInitialiseNewTimer( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction, - Timer_t *pxNewTimer ) PRIVILEGED_FUNCTION; /*-----------------------------------------------------------*/ -BaseType_t xTimerCreateTimerTask( void ) +portBASE_TYPE xTimerCreateTimerTask( void ) { -BaseType_t xReturn = pdFAIL; +portBASE_TYPE xReturn = pdFAIL; /* This function is called when the scheduler is started if configUSE_TIMERS is set to 1. Check that the infrastructure used by the @@ -236,40 +206,18 @@ BaseType_t xReturn = pdFAIL; if( xTimerQueue != NULL ) { - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) + #if ( INCLUDE_xTimerGetTimerDaemonTaskHandle == 1 ) { - StaticTask_t *pxTimerTaskTCBBuffer = NULL; - StackType_t *pxTimerTaskStackBuffer = NULL; - uint32_t ulTimerTaskStackSize; - - vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize ); - xTimerTaskHandle = xTaskCreateStatic( prvTimerTask, - configTIMER_SERVICE_TASK_NAME, - ulTimerTaskStackSize, - NULL, - ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, - pxTimerTaskStackBuffer, - pxTimerTaskTCBBuffer ); - - if( xTimerTaskHandle != NULL ) - { - xReturn = pdPASS; - } + /* Create the timer task, storing its handle in xTimerTaskHandle so + it can be returned by the xTimerGetTimerDaemonTaskHandle() function. */ + xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, &xTimerTaskHandle ); } #else { - xReturn = xTaskCreate( prvTimerTask, - configTIMER_SERVICE_TASK_NAME, - configTIMER_TASK_STACK_DEPTH, - NULL, - ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, - &xTimerTaskHandle ); + /* Create the timer task without storing its handle. */ + xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, NULL); } - #endif /* configSUPPORT_STATIC_ALLOCATION */ - } - else - { - mtCOVERAGE_TEST_MARKER(); + #endif } configASSERT( xReturn ); @@ -277,113 +225,49 @@ BaseType_t xReturn = pdFAIL; } /*-----------------------------------------------------------*/ -#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - - TimerHandle_t xTimerCreate( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction ) - { - Timer_t *pxNewTimer; - - pxNewTimer = ( Timer_t * ) pvPortMalloc( sizeof( Timer_t ) ); /*lint !e9087 !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack, and the first member of Timer_t is always a pointer to the timer's mame. */ - - if( pxNewTimer != NULL ) - { - /* Status is thus far zero as the timer is not created statically - and has not been started. The autoreload bit may get set in - prvInitialiseNewTimer. */ - pxNewTimer->ucStatus = 0x00; - prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer ); - } - - return pxNewTimer; - } - -#endif /* configSUPPORT_DYNAMIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -#if( configSUPPORT_STATIC_ALLOCATION == 1 ) - - TimerHandle_t xTimerCreateStatic( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction, - StaticTimer_t *pxTimerBuffer ) - { - Timer_t *pxNewTimer; - - #if( configASSERT_DEFINED == 1 ) - { - /* Sanity check that the size of the structure used to declare a - variable of type StaticTimer_t equals the size of the real timer - structure. */ - volatile size_t xSize = sizeof( StaticTimer_t ); - configASSERT( xSize == sizeof( Timer_t ) ); - ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */ - } - #endif /* configASSERT_DEFINED */ - - /* A pointer to a StaticTimer_t structure MUST be provided, use it. */ - configASSERT( pxTimerBuffer ); - pxNewTimer = ( Timer_t * ) pxTimerBuffer; /*lint !e740 !e9087 StaticTimer_t is a pointer to a Timer_t, so guaranteed to be aligned and sized correctly (checked by an assert()), so this is safe. */ - - if( pxNewTimer != NULL ) - { - /* Timers can be created statically or dynamically so note this - timer was created statically in case it is later deleted. The - autoreload bit may get set in prvInitialiseNewTimer(). */ - pxNewTimer->ucStatus = tmrSTATUS_IS_STATICALLY_ALLOCATED; - - prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer ); - } - - return pxNewTimer; - } - -#endif /* configSUPPORT_STATIC_ALLOCATION */ -/*-----------------------------------------------------------*/ - -static void prvInitialiseNewTimer( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - const TickType_t xTimerPeriodInTicks, - const UBaseType_t uxAutoReload, - void * const pvTimerID, - TimerCallbackFunction_t pxCallbackFunction, - Timer_t *pxNewTimer ) +xTimerHandle xTimerCreate( const signed char * const pcTimerName, portTickType xTimerPeriodInTicks, unsigned portBASE_TYPE uxAutoReload, void *pvTimerID, tmrTIMER_CALLBACK pxCallbackFunction ) { - /* 0 is not a valid value for xTimerPeriodInTicks. */ - configASSERT( ( xTimerPeriodInTicks > 0 ) ); +xTIMER *pxNewTimer; - if( pxNewTimer != NULL ) + /* Allocate the timer structure. */ + if( xTimerPeriodInTicks == ( portTickType ) 0U ) { - /* Ensure the infrastructure used by the timer service task has been - created/initialised. */ - prvCheckForValidListAndQueue(); - - /* Initialise the timer structure members using the function - parameters. */ - pxNewTimer->pcTimerName = pcTimerName; - pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks; - pxNewTimer->pvTimerID = pvTimerID; - pxNewTimer->pxCallbackFunction = pxCallbackFunction; - vListInitialiseItem( &( pxNewTimer->xTimerListItem ) ); - if( uxAutoReload != pdFALSE ) - { - pxNewTimer->ucStatus |= tmrSTATUS_IS_AUTORELOAD; - } - traceTIMER_CREATE( pxNewTimer ); + pxNewTimer = NULL; + configASSERT( ( xTimerPeriodInTicks > 0 ) ); } + else + { + pxNewTimer = ( xTIMER * ) pvPortMalloc( sizeof( xTIMER ) ); + if( pxNewTimer != NULL ) + { + /* Ensure the infrastructure used by the timer service task has been + created/initialised. */ + prvCheckForValidListAndQueue(); + + /* Initialise the timer structure members using the function parameters. */ + pxNewTimer->pcTimerName = pcTimerName; + pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks; + pxNewTimer->uxAutoReload = uxAutoReload; + pxNewTimer->pvTimerID = pvTimerID; + pxNewTimer->pxCallbackFunction = pxCallbackFunction; + vListInitialiseItem( &( pxNewTimer->xTimerListItem ) ); + + traceTIMER_CREATE( pxNewTimer ); + } + else + { + traceTIMER_CREATE_FAILED(); + } + } + + return ( xTimerHandle ) pxNewTimer; } /*-----------------------------------------------------------*/ -BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) +portBASE_TYPE xTimerGenericCommand( xTimerHandle xTimer, portBASE_TYPE xCommandID, portTickType xOptionalValue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portTickType xBlockTime ) { -BaseType_t xReturn = pdFAIL; -DaemonTaskMessage_t xMessage; - - configASSERT( xTimer ); +portBASE_TYPE xReturn = pdFAIL; +xTIMER_MESSAGE xMessage; /* Send a message to the timer service task to perform a particular action on a particular timer definition. */ @@ -391,14 +275,14 @@ DaemonTaskMessage_t xMessage; { /* Send a command to the timer service task to start the xTimer timer. */ xMessage.xMessageID = xCommandID; - xMessage.u.xTimerParameters.xMessageValue = xOptionalValue; - xMessage.u.xTimerParameters.pxTimer = xTimer; + xMessage.xMessageValue = xOptionalValue; + xMessage.pxTimer = ( xTIMER * ) xTimer; - if( xCommandID < tmrFIRST_FROM_ISR_COMMAND ) + if( pxHigherPriorityTaskWoken == NULL ) { if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING ) { - xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait ); + xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xBlockTime ); } else { @@ -412,134 +296,68 @@ DaemonTaskMessage_t xMessage; traceTIMER_COMMAND_SEND( xTimer, xCommandID, xOptionalValue, xReturn ); } - else - { - mtCOVERAGE_TEST_MARKER(); - } return xReturn; } /*-----------------------------------------------------------*/ -TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) -{ - /* If xTimerGetTimerDaemonTaskHandle() is called before the scheduler has been - started, then xTimerTaskHandle will be NULL. */ - configASSERT( ( xTimerTaskHandle != NULL ) ); - return xTimerTaskHandle; -} -/*-----------------------------------------------------------*/ +#if ( INCLUDE_xTimerGetTimerDaemonTaskHandle == 1 ) -TickType_t xTimerGetPeriod( TimerHandle_t xTimer ) -{ -Timer_t *pxTimer = xTimer; - - configASSERT( xTimer ); - return pxTimer->xTimerPeriodInTicks; -} -/*-----------------------------------------------------------*/ - -void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) -{ -Timer_t * pxTimer = xTimer; - - configASSERT( xTimer ); - taskENTER_CRITICAL(); + xTaskHandle xTimerGetTimerDaemonTaskHandle( void ) { - if( uxAutoReload != pdFALSE ) - { - pxTimer->ucStatus |= tmrSTATUS_IS_AUTORELOAD; - } - else - { - pxTimer->ucStatus &= ~tmrSTATUS_IS_AUTORELOAD; - } + /* If xTimerGetTimerDaemonTaskHandle() is called before the scheduler has been + started, then xTimerTaskHandle will be NULL. */ + configASSERT( ( xTimerTaskHandle != NULL ) ); + return xTimerTaskHandle; } - taskEXIT_CRITICAL(); -} + +#endif /*-----------------------------------------------------------*/ -TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) +static void prvProcessExpiredTimer( portTickType xNextExpireTime, portTickType xTimeNow ) { -Timer_t * pxTimer = xTimer; -TickType_t xReturn; - - configASSERT( xTimer ); - xReturn = listGET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ) ); - return xReturn; -} -/*-----------------------------------------------------------*/ - -const char * pcTimerGetName( TimerHandle_t xTimer ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ -{ -Timer_t *pxTimer = xTimer; - - configASSERT( xTimer ); - return pxTimer->pcTimerName; -} -/*-----------------------------------------------------------*/ - -static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow ) -{ -BaseType_t xResult; -Timer_t * const pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); /*lint !e9087 !e9079 void * is used as this macro is used with tasks and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ +xTIMER *pxTimer; +portBASE_TYPE xResult; /* Remove the timer from the list of active timers. A check has already been performed to ensure the list is not empty. */ + pxTimer = ( xTIMER * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); traceTIMER_EXPIRED( pxTimer ); /* If the timer is an auto reload timer then calculate the next expiry time and re-insert the timer in the list of active timers. */ - if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 ) + if( pxTimer->uxAutoReload == ( unsigned portBASE_TYPE ) pdTRUE ) { - /* The timer is inserted into a list using a time relative to anything - other than the current time. It will therefore be inserted into the - correct list relative to the time this task thinks it is now. */ - if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) != pdFALSE ) + /* This is the only time a timer is inserted into a list using + a time relative to anything other than the current time. It + will therefore be inserted into the correct list relative to + the time this task thinks it is now, even if a command to + switch lists due to a tick count overflow is already waiting in + the timer queue. */ + if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) == pdTRUE ) { /* The timer expired before it was added to the active timer list. Reload it now. */ - xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY ); + xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xNextExpireTime, NULL, tmrNO_DELAY ); configASSERT( xResult ); ( void ) xResult; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; - mtCOVERAGE_TEST_MARKER(); } /* Call the timer callback. */ - pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); + pxTimer->pxCallbackFunction( ( xTimerHandle ) pxTimer ); } /*-----------------------------------------------------------*/ -static portTASK_FUNCTION( prvTimerTask, pvParameters ) +static void prvTimerTask( void *pvParameters ) { -TickType_t xNextExpireTime; -BaseType_t xListWasEmpty; +portTickType xNextExpireTime; +portBASE_TYPE xListWasEmpty; /* Just to avoid compiler warnings. */ ( void ) pvParameters; - #if( configUSE_DAEMON_TASK_STARTUP_HOOK == 1 ) - { - extern void vApplicationDaemonTaskStartupHook( void ); - - /* Allow the application writer to execute some code in the context of - this task at the point the task starts executing. This is useful if the - application includes initialisation code that would benefit from - executing after the scheduler has been started. */ - vApplicationDaemonTaskStartupHook(); - } - #endif /* configUSE_DAEMON_TASK_STARTUP_HOOK */ - for( ;; ) { /* Query the timers list to see if it contains any timers, and if so, @@ -556,10 +374,10 @@ BaseType_t xListWasEmpty; } /*-----------------------------------------------------------*/ -static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty ) +static void prvProcessTimerOrBlockTask( portTickType xNextExpireTime, portBASE_TYPE xListWasEmpty ) { -TickType_t xTimeNow; -BaseType_t xTimerListsWereSwitched; +portTickType xTimeNow; +portBASE_TYPE xTimerListsWereSwitched; vTaskSuspendAll(); { @@ -567,7 +385,7 @@ BaseType_t xTimerListsWereSwitched; has expired or not. If obtaining the time causes the lists to switch then don't process this timer as any timers that remained in the list when the lists were switched will have been processed within the - prvSampleTimeNow() function. */ + prvSampelTimeNow() function. */ xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); if( xTimerListsWereSwitched == pdFALSE ) { @@ -585,27 +403,16 @@ BaseType_t xTimerListsWereSwitched; received - whichever comes first. The following line cannot be reached unless xNextExpireTime > xTimeNow, except in the case when the current timer list is empty. */ - if( xListWasEmpty != pdFALSE ) - { - /* The current timer list is empty - is the overflow list - also empty? */ - xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList ); - } - - vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty ); + vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ) ); if( xTaskResumeAll() == pdFALSE ) { - /* Yield to wait for either a command to arrive, or the - block time to expire. If a command arrived between the - critical section being exited and this yield then the yield - will not cause the task to block. */ + /* Yield to wait for either a command to arrive, or the block time + to expire. If a command arrived between the critical section being + exited and this yield then the yield will not cause the task + to block. */ portYIELD_WITHIN_API(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } } } else @@ -616,9 +423,9 @@ BaseType_t xTimerListsWereSwitched; } /*-----------------------------------------------------------*/ -static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) +static portTickType prvGetNextExpireTime( portBASE_TYPE *pxListWasEmpty ) { -TickType_t xNextExpireTime; +portTickType xNextExpireTime; /* Timers are listed in expiry time order, with the head of the list referencing the task that will expire first. Obtain the time at which @@ -635,23 +442,23 @@ TickType_t xNextExpireTime; else { /* Ensure the task unblocks when the tick count rolls over. */ - xNextExpireTime = ( TickType_t ) 0U; + xNextExpireTime = ( portTickType ) 0U; } return xNextExpireTime; } /*-----------------------------------------------------------*/ -static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched ) +static portTickType prvSampleTimeNow( portBASE_TYPE *pxTimerListsWereSwitched ) { -TickType_t xTimeNow; -PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */ +portTickType xTimeNow; +PRIVILEGED_DATA static portTickType xLastTime = ( portTickType ) 0U; /*lint !e956 Variable is only accessible to one task. */ xTimeNow = xTaskGetTickCount(); if( xTimeNow < xLastTime ) { - prvSwitchTimerLists(); + prvSwitchTimerLists( xLastTime ); *pxTimerListsWereSwitched = pdTRUE; } else @@ -665,9 +472,9 @@ PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Va } /*-----------------------------------------------------------*/ -static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime ) +static portBASE_TYPE prvInsertTimerInActiveList( xTIMER *pxTimer, portTickType xNextExpiryTime, portTickType xTimeNow, portTickType xCommandTime ) { -BaseType_t xProcessTimerNow = pdFALSE; +portBASE_TYPE xProcessTimerNow = pdFALSE; listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime ); listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer ); @@ -676,7 +483,7 @@ BaseType_t xProcessTimerNow = pdFALSE; { /* Has the expiry time elapsed between the command to start/reset a timer was issued, and the time the command was processed? */ - if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks ) /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ + if( ( xTimeNow - xCommandTime ) >= pxTimer->xTimerPeriodInTicks ) { /* The time between a command being issued and the command being processed actually exceeds the timers period. */ @@ -708,158 +515,84 @@ BaseType_t xProcessTimerNow = pdFALSE; static void prvProcessReceivedCommands( void ) { -DaemonTaskMessage_t xMessage; -Timer_t *pxTimer; -BaseType_t xTimerListsWereSwitched, xResult; -TickType_t xTimeNow; +xTIMER_MESSAGE xMessage; +xTIMER *pxTimer; +portBASE_TYPE xTimerListsWereSwitched, xResult; +portTickType xTimeNow; while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL ) /*lint !e603 xMessage does not have to be initialised as it is passed out, not in, and it is not used unless xQueueReceive() returns pdTRUE. */ { - #if ( INCLUDE_xTimerPendFunctionCall == 1 ) + pxTimer = xMessage.pxTimer; + + if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) { - /* Negative commands are pended function calls rather than timer - commands. */ - if( xMessage.xMessageID < ( BaseType_t ) 0 ) - { - const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters ); - - /* The timer uses the xCallbackParameters member to request a - callback be executed. Check the callback is not NULL. */ - configASSERT( pxCallback ); - - /* Call the function. */ - pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + /* The timer is in a list, remove it. */ + ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); } - #endif /* INCLUDE_xTimerPendFunctionCall */ - /* Commands that are positive are timer commands rather than pended - function calls. */ - if( xMessage.xMessageID >= ( BaseType_t ) 0 ) + traceTIMER_COMMAND_RECEIVED( pxTimer, xMessage.xMessageID, xMessage.xMessageValue ); + + /* In this case the xTimerListsWereSwitched parameter is not used, but + it must be present in the function call. prvSampleTimeNow() must be + called after the message is received from xTimerQueue so there is no + possibility of a higher priority task adding a message to the message + queue with a time that is ahead of the timer daemon task (because it + pre-empted the timer daemon task after the xTimeNow value was set). */ + xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); + + switch( xMessage.xMessageID ) { - /* The messages uses the xTimerParameters member to work on a - software timer. */ - pxTimer = xMessage.u.xTimerParameters.pxTimer; + case tmrCOMMAND_START : + /* Start or restart a timer. */ + if( prvInsertTimerInActiveList( pxTimer, xMessage.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.xMessageValue ) == pdTRUE ) + { + /* The timer expired before it was added to the active timer + list. Process it now. */ + pxTimer->pxCallbackFunction( ( xTimerHandle ) pxTimer ); - if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) /*lint !e961. The cast is only redundant when NULL is passed into the macro. */ - { - /* The timer is in a list, remove it. */ - ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - traceTIMER_COMMAND_RECEIVED( pxTimer, xMessage.xMessageID, xMessage.u.xTimerParameters.xMessageValue ); - - /* In this case the xTimerListsWereSwitched parameter is not used, but - it must be present in the function call. prvSampleTimeNow() must be - called after the message is received from xTimerQueue so there is no - possibility of a higher priority task adding a message to the message - queue with a time that is ahead of the timer daemon task (because it - pre-empted the timer daemon task after the xTimeNow value was set). */ - xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched ); - - switch( xMessage.xMessageID ) - { - case tmrCOMMAND_START : - case tmrCOMMAND_START_FROM_ISR : - case tmrCOMMAND_RESET : - case tmrCOMMAND_RESET_FROM_ISR : - case tmrCOMMAND_START_DONT_TRACE : - /* Start or restart a timer. */ - pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE; - if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE ) + if( pxTimer->uxAutoReload == ( unsigned portBASE_TYPE ) pdTRUE ) { - /* The timer expired before it was added to the active - timer list. Process it now. */ - pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); - traceTIMER_EXPIRED( pxTimer ); - - if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 ) - { - xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY ); - configASSERT( xResult ); - ( void ) xResult; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xMessage.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY ); + configASSERT( xResult ); + ( void ) xResult; } - else - { - mtCOVERAGE_TEST_MARKER(); - } - break; + } + break; - case tmrCOMMAND_STOP : - case tmrCOMMAND_STOP_FROM_ISR : - /* The timer has already been removed from the active list. */ - pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; - break; + case tmrCOMMAND_STOP : + /* The timer has already been removed from the active list. + There is nothing to do here. */ + break; - case tmrCOMMAND_CHANGE_PERIOD : - case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR : - pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE; - pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue; - configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) ); + case tmrCOMMAND_CHANGE_PERIOD : + pxTimer->xTimerPeriodInTicks = xMessage.xMessageValue; + configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) ); + ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow ); + break; - /* The new period does not really have a reference, and can - be longer or shorter than the old one. The command time is - therefore set to the current time, and as the period cannot - be zero the next expiry time can only be in the future, - meaning (unlike for the xTimerStart() case above) there is - no fail case that needs to be handled here. */ - ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow ); - break; + case tmrCOMMAND_DELETE : + /* The timer has already been removed from the active list, + just free up the memory. */ + vPortFree( pxTimer ); + break; - case tmrCOMMAND_DELETE : - #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - { - /* The timer has already been removed from the active list, - just free up the memory if the memory was dynamically - allocated. */ - if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 ) - { - vPortFree( pxTimer ); - } - else - { - pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; - } - } - #else - { - /* If dynamic allocation is not enabled, the memory - could not have been dynamically allocated. So there is - no need to free the memory - just mark the timer as - "not active". */ - pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE; - } - #endif /* configSUPPORT_DYNAMIC_ALLOCATION */ - break; - - default : - /* Don't expect to get here. */ - break; - } + default : + /* Don't expect to get here. */ + break; } } } /*-----------------------------------------------------------*/ -static void prvSwitchTimerLists( void ) +static void prvSwitchTimerLists( portTickType xLastTime ) { -TickType_t xNextExpireTime, xReloadTime; -List_t *pxTemp; -Timer_t *pxTimer; -BaseType_t xResult; +portTickType xNextExpireTime, xReloadTime; +xList *pxTemp; +xTIMER *pxTimer; +portBASE_TYPE xResult; + + /* Remove compiler warnings if configASSERT() is not defined. */ + ( void ) xLastTime; /* The tick count has overflowed. The timer lists must be switched. If there are any timers still referenced from the current timer list @@ -870,16 +603,15 @@ BaseType_t xResult; xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList ); /* Remove the timer from the list. */ - pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); /*lint !e9087 !e9079 void * is used as this macro is used with tasks and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */ + pxTimer = ( xTIMER * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); ( void ) uxListRemove( &( pxTimer->xTimerListItem ) ); - traceTIMER_EXPIRED( pxTimer ); /* Execute its callback, then send a command to restart the timer if it is an auto-reload timer. It cannot be restarted here as the lists have not yet been switched. */ - pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); + pxTimer->pxCallbackFunction( ( xTimerHandle ) pxTimer ); - if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 ) + if( pxTimer->uxAutoReload == ( unsigned portBASE_TYPE ) pdTRUE ) { /* Calculate the reload value, and if the reload value results in the timer going into the same timer list then it has already expired @@ -896,15 +628,11 @@ BaseType_t xResult; } else { - xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY ); + xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xNextExpireTime, NULL, tmrNO_DELAY ); configASSERT( xResult ); ( void ) xResult; } } - else - { - mtCOVERAGE_TEST_MARKER(); - } } pxTemp = pxCurrentTimerList; @@ -926,173 +654,40 @@ static void prvCheckForValidListAndQueue( void ) vListInitialise( &xActiveTimerList2 ); pxCurrentTimerList = &xActiveTimerList1; pxOverflowTimerList = &xActiveTimerList2; - - #if( configSUPPORT_STATIC_ALLOCATION == 1 ) - { - /* The timer queue is allocated statically in case - configSUPPORT_DYNAMIC_ALLOCATION is 0. */ - static StaticQueue_t xStaticTimerQueue; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */ - static uint8_t ucStaticTimerQueueStorage[ ( size_t ) configTIMER_QUEUE_LENGTH * sizeof( DaemonTaskMessage_t ) ]; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */ - - xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue ); - } - #else - { - xTimerQueue = xQueueCreate( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, sizeof( DaemonTaskMessage_t ) ); - } - #endif - - #if ( configQUEUE_REGISTRY_SIZE > 0 ) - { - if( xTimerQueue != NULL ) - { - vQueueAddToRegistry( xTimerQueue, "TmrQ" ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* configQUEUE_REGISTRY_SIZE */ - } - else - { - mtCOVERAGE_TEST_MARKER(); + xTimerQueue = xQueueCreate( ( unsigned portBASE_TYPE ) configTIMER_QUEUE_LENGTH, sizeof( xTIMER_MESSAGE ) ); } } taskEXIT_CRITICAL(); } /*-----------------------------------------------------------*/ -BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) +portBASE_TYPE xTimerIsTimerActive( xTimerHandle xTimer ) { -BaseType_t xReturn; -Timer_t *pxTimer = xTimer; - - configASSERT( xTimer ); +portBASE_TYPE xTimerIsInActiveList; +xTIMER *pxTimer = ( xTIMER * ) xTimer; /* Is the timer in the list of active timers? */ taskENTER_CRITICAL(); { - if( ( pxTimer->ucStatus & tmrSTATUS_IS_ACTIVE ) == 0 ) - { - xReturn = pdFALSE; - } - else - { - xReturn = pdTRUE; - } + /* Checking to see if it is in the NULL list in effect checks to see if + it is referenced from either the current or the overflow timer lists in + one go, but the logic has to be reversed, hence the '!'. */ + xTimerIsInActiveList = !( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) ); } taskEXIT_CRITICAL(); - return xReturn; -} /*lint !e818 Can't be pointer to const due to the typedef. */ -/*-----------------------------------------------------------*/ - -void *pvTimerGetTimerID( const TimerHandle_t xTimer ) -{ -Timer_t * const pxTimer = xTimer; -void *pvReturn; - - configASSERT( xTimer ); - - taskENTER_CRITICAL(); - { - pvReturn = pxTimer->pvTimerID; - } - taskEXIT_CRITICAL(); - - return pvReturn; + return xTimerIsInActiveList; } /*-----------------------------------------------------------*/ -void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) +void *pvTimerGetTimerID( xTimerHandle xTimer ) { -Timer_t * const pxTimer = xTimer; +xTIMER *pxTimer = ( xTIMER * ) xTimer; - configASSERT( xTimer ); - - taskENTER_CRITICAL(); - { - pxTimer->pvTimerID = pvNewID; - } - taskEXIT_CRITICAL(); + return pxTimer->pvTimerID; } /*-----------------------------------------------------------*/ -#if( INCLUDE_xTimerPendFunctionCall == 1 ) - - BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ) - { - DaemonTaskMessage_t xMessage; - BaseType_t xReturn; - - /* Complete the message with the function parameters and post it to the - daemon task. */ - xMessage.xMessageID = tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR; - xMessage.u.xCallbackParameters.pxCallbackFunction = xFunctionToPend; - xMessage.u.xCallbackParameters.pvParameter1 = pvParameter1; - xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2; - - xReturn = xQueueSendFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken ); - - tracePEND_FUNC_CALL_FROM_ISR( xFunctionToPend, pvParameter1, ulParameter2, xReturn ); - - return xReturn; - } - -#endif /* INCLUDE_xTimerPendFunctionCall */ -/*-----------------------------------------------------------*/ - -#if( INCLUDE_xTimerPendFunctionCall == 1 ) - - BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) - { - DaemonTaskMessage_t xMessage; - BaseType_t xReturn; - - /* This function can only be called after a timer has been created or - after the scheduler has been started because, until then, the timer - queue does not exist. */ - configASSERT( xTimerQueue ); - - /* Complete the message with the function parameters and post it to the - daemon task. */ - xMessage.xMessageID = tmrCOMMAND_EXECUTE_CALLBACK; - xMessage.u.xCallbackParameters.pxCallbackFunction = xFunctionToPend; - xMessage.u.xCallbackParameters.pvParameter1 = pvParameter1; - xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2; - - xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait ); - - tracePEND_FUNC_CALL( xFunctionToPend, pvParameter1, ulParameter2, xReturn ); - - return xReturn; - } - -#endif /* INCLUDE_xTimerPendFunctionCall */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - UBaseType_t uxTimerGetTimerNumber( TimerHandle_t xTimer ) - { - return ( ( Timer_t * ) xTimer )->uxTimerNumber; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - -#if ( configUSE_TRACE_FACILITY == 1 ) - - void vTimerSetTimerNumber( TimerHandle_t xTimer, UBaseType_t uxTimerNumber ) - { - ( ( Timer_t * ) xTimer )->uxTimerNumber = uxTimerNumber; - } - -#endif /* configUSE_TRACE_FACILITY */ -/*-----------------------------------------------------------*/ - /* This entire source file will be skipped if the application is not configured to include software timer functionality. If you want to include software timer functionality then ensure configUSE_TIMERS is set to 1 in FreeRTOSConfig.h. */ diff --git a/FreeRTOS/readme.txt b/FreeRTOS/readme.txt new file mode 100644 index 0000000..7fa63a7 --- /dev/null +++ b/FreeRTOS/readme.txt @@ -0,0 +1,21 @@ +Directories: + ++ The FreeRTOS/Source directory contains the FreeRTOS source code, and contains + its own readme file. + ++ The FreeRTOS/Demo directory contains a demo application for every official +FreeRTOS port, and contains its own readme file. + ++ See http://www.freertos.org/a00017.html for full details of the directory + structure and information on locating the files you require. + +The easiest way to use FreeRTOS is to start with one of the pre-configured demo +application projects (found in the FreeRTOS/Demo directory). That way you will +have the correct FreeRTOS source files included, and the correct include paths +configured. Once a demo application is building and executing you can remove +the demo application file, and start to add in your own application source +files. + +See also - +http://www.freertos.org/FreeRTOS-quick-start-guide.html +http://www.freertos.org/FAQHelp.html diff --git a/README.md b/README.md index f6bb40a..50edf61 100644 --- a/README.md +++ b/README.md @@ -33,13 +33,15 @@ git clone --recursive https://github.com/Superhouse/esp-open-rtos.git cd esp-open-rtos ``` -* To build any examples that use WiFi, create `include/private_ssid_config.h` defining the two macro defines: +* To build any examples that use WiFi, edit `include/ssid_config.h` and change the two macro defines: ```c #define WIFI_SSID "mywifissid" #define WIFI_PASS "my secret password" ``` +Remove the `#warning` line and follow the git ignore instructions written in the header file to keep your credentials from being pushed to Github. + * Build an example project (found in the 'examples' directory) and flash it to a serial port: ``` @@ -77,9 +79,9 @@ Current status is alpha quality, actively developed. AP STATION mode (ie wifi cl ## Open Source Components -* [FreeRTOS](http://www.freertos.org/) V10.2.0 -* [lwIP](http://lwip.wikia.com/wiki/LwIP_Wiki) v2.0.3, with [some modifications](https://github.com/ourairquality/lwip/). -* [newlib](https://github.com/ourairquality/newlib) v3.0.0, with patches for xtensa support and locking stubs for thread-safe operation on FreeRTOS. +* [FreeRTOS](http://www.freertos.org/) V7.5.2 +* [lwIP](http://lwip.wikia.com/wiki/LwIP_Wiki) v1.4.1, modified via the [esp-lwip project](https://github.com/kadamski/esp-lwip) by @kadamski. +* [newlib](https://github.com/projectgus/newlib-xtensa) v2.2.0, with patches for xtensa support and locking stubs for thread-safe operation on FreeRTOS. For details of how third party libraries are integrated, [see the wiki page](https://github.com/SuperHouse/esp-open-rtos/wiki/Third-Party-Libraries). @@ -100,7 +102,7 @@ Some binary libraries appear to contain unattributed open source code: * BSD license (as described in LICENSE) applies to original source files, [lwIP](http://lwip.wikia.com/wiki/LwIP_Wiki). lwIP is Copyright (C) Swedish Institute of Computer Science. -* FreeRTOS (since v10) is provided under the MIT license. License details in files under FreeRTOS dir. FreeRTOS is Copyright (C) Amazon. +* FreeRTOS is provided under the GPL with the FreeRTOS linking exception, allowing non-GPL firmwares to be produced using FreeRTOS as the RTOS core. License details in files under FreeRTOS dir. FreeRTOS is Copyright (C) Real Time Engineers Ltd. * Source & binary components from the [Espressif IOT RTOS SDK](https://github.com/espressif/esp_iot_rtos_sdk) were released under the MIT license. Source code components are relicensed here under the BSD license. The original parts are Copyright (C) Espressif Systems. diff --git a/bootloader/c_types.h b/bootloader/c_types.h deleted file mode 100644 index 9989e1d..0000000 --- a/bootloader/c_types.h +++ /dev/null @@ -1,10 +0,0 @@ -/* rboot type definitions */ - - -typedef int int32; -typedef unsigned short uint16; -typedef unsigned int uint32; -typedef unsigned char uint8; - -#define TRUE 1 -#define FALSE 0 diff --git a/bootloader/rboot b/bootloader/rboot index 3b067a8..30afbaa 160000 --- a/bootloader/rboot +++ b/bootloader/rboot @@ -1 +1 @@ -Subproject commit 3b067a8686a07474c5f722953d3b2f0e71db681f +Subproject commit 30afbaa777e00abf9d7d469fb3345f118c4975c1 diff --git a/common.mk b/common.mk index 82a6cc1..172fbe2 100644 --- a/common.mk +++ b/common.mk @@ -68,7 +68,7 @@ Q := @ vecho := @echo endif -.PHONY: all clean flash erase_flash test size rebuild +.PHONY: all clean flash erase_flash all: $(PROGRAM_OUT) $(FW_FILE_1) $(FW_FILE_2) $(FW_FILE) @@ -89,9 +89,8 @@ all: $(PROGRAM_OUT) $(FW_FILE_1) $(FW_FILE_2) $(FW_FILE) # $(1)_INC_DIR = List of include directories specific for the component # # -# Each call appends to COMPONENT_ARS or WHOLE_ARCHIVES which are lists of archive files for compiled components +# Each call appends to COMPONENT_ARS which is a list of archive files for compiled components COMPONENT_ARS = -WHOLE_ARCHIVES = define component_compile_rules $(1)_DEFAULT_ROOT := $(dir $(lastword $(MAKEFILE_LIST))) $(1)_ROOT ?= $$($(1)_DEFAULT_ROOT) @@ -135,51 +134,18 @@ $$($(1)_OBJ_DIR)%.o: $$($(1)_REAL_ROOT)%.S $$($(1)_MAKEFILE) $(wildcard $(ROOT)* $$($(1)_CC_BASE) -c $$< -o $$@ $$($(1)_CC_BASE) -MM -MT $$@ -MF $$(@:.o=.d) $$< -$(1)_AR_IN_FILES = $$($(1)_OBJ_FILES) - -# The component is shown to depend on both obj and source files so we get -# a meaningful error message for missing explicitly named source files. -# But do not include source files into a static library because when adding this -# library with '--whole-archive' linker gives error that archive contains -# unknown objects (source files) -ifndef $(1)_WHOLE_ARCHIVE - $(1)_AR_IN_FILES += $$($(1)_SRC_FILES) -endif - -$$($(1)_AR): $$($(1)_AR_IN_FILES) +# the component is shown to depend on both obj and source files so we get a meaningful error message +# for missing explicitly named source files +$$($(1)_AR): $$($(1)_OBJ_FILES) $$($(1)_SRC_FILES) $(vecho) "AR $$@" $(Q) mkdir -p $$(dir $$@) $(Q) $(AR) cru $$@ $$^ -ifdef $(1)_WHOLE_ARCHIVE - WHOLE_ARCHIVES += $$($(1)_AR) -else - COMPONENT_ARS += $$($(1)_AR) -endif +COMPONENT_ARS += $$($(1)_AR) -include $$($(1)_OBJ_FILES:.o=.d) endef -# Remove comment lines from libgcc.remove file -$(BUILD_DIR)libgcc.remove: $(ROOT)lib/libgcc.remove | $(BUILD_DIR) - $(Q) grep -v "^#" $< | cat > $@ - -# Remove unwanted object files listed in libgcc.remove -$(BUILD_DIR)libgcc.a: $(ROOT)lib/libgcc.a $(BUILD_DIR)libgcc.remove | $(BUILD_DIR) - @echo "Removing unwanted objects from $<" - $(Q) cat $< > $@ - $(Q) $(AR) d $@ @$(word 2,$^) - -# Remove comment lines from libc.remove file -$(BUILD_DIR)libc.remove: $(ROOT)libc/libc.remove | $(BUILD_DIR) - $(Q) grep -v "^#" $< | cat > $@ - -# Remove unwanted object files listed in libgcc.remove -$(BUILD_DIR)libc.a: $(ROOT)libc/xtensa-lx106-elf/lib/libc.a $(BUILD_DIR)libc.remove | $(BUILD_DIR) - @echo "Removing unwanted objects from $<" - $(Q) cat $< > $@ - $(Q) $(AR) d $@ @$(word 2,$^) - ## Linking rules for SDK libraries ## SDK libraries are preprocessed to: # - remove object files named in .remove @@ -228,9 +194,9 @@ $(foreach component,$(COMPONENTS), \ ) # final linking step to produce .elf -$(PROGRAM_OUT): $(WHOLE_ARCHIVES) $(COMPONENT_ARS) $(BUILD_DIR)libgcc.a $(BUILD_DIR)libc.a $(SDK_PROCESSED_LIBS) $(LINKER_SCRIPTS) +$(PROGRAM_OUT): $(COMPONENT_ARS) $(SDK_PROCESSED_LIBS) $(LINKER_SCRIPTS) $(vecho) "LD $@" - $(Q) $(LD) $(LDFLAGS) -Wl,--whole-archive $(WHOLE_ARCHIVES) -Wl,--no-whole-archive -Wl,--start-group $(COMPONENT_ARS) $(BUILD_DIR)libgcc.a $(BUILD_DIR)libc.a $(LIB_ARGS) $(SDK_LIB_ARGS) -Wl,--end-group -o $@ + $(Q) $(LD) $(LDFLAGS) -Wl,--start-group $(COMPONENT_ARS) $(LIB_ARGS) $(SDK_LIB_ARGS) -Wl,--end-group -o $@ $(BUILD_DIR) $(FIRMWARE_DIR) $(BUILD_DIR)sdklib: $(Q) mkdir -p $@ @@ -243,16 +209,11 @@ $(FW_FILE): $(PROGRAM_OUT) $(FIRMWARE_DIR) $(vecho) "FW $@" $(Q) $(ESPTOOL) elf2image --version=2 $(ESPTOOL_ARGS) $< -o $(FW_FILE) -flash: all - $(if will_flash, $(call will_flash, "flash")) - $(ESPTOOL) -p $(ESPPORT) --baud $(ESPBAUD) write_flash $(ESPTOOL_ARGS) \ - $(RBOOT_ARGS) 0x2000 $(FW_FILE) $(SPIFFS_ESPTOOL_ARGS) - $(if did_flash, $(call did_flash, "flash")) +flash: $(FW_FILE) + $(ESPTOOL) -p $(ESPPORT) --baud $(ESPBAUD) write_flash $(ESPTOOL_ARGS) 0x0 $(RBOOT_BIN) 0x1000 $(RBOOT_CONF) 0x2000 $(FW_FILE) erase_flash: - $(if will_flash, $(call will_flash, "erase")) $(ESPTOOL) -p $(ESPPORT) --baud $(ESPBAUD) erase_flash - $(if did_flash, $(call did_flash, "erase")) size: $(PROGRAM_OUT) $(Q) $(CROSS)size --format=sysv $(PROGRAM_OUT) diff --git a/core/app_main.c b/core/app_main.c index f854dce..a38fb5f 100644 --- a/core/app_main.c +++ b/core/app_main.c @@ -21,18 +21,11 @@ #include "esp/spi_regs.h" #include "esp/dport_regs.h" #include "esp/wdev_regs.h" -#include "esp/wdt_regs.h" -#include "esp/rtcmem_regs.h" -#include "esp/hwrand.h" #include "os_version.h" #include "espressif/esp_common.h" #include "espressif/phy_info.h" -#include "esplibs/libmain.h" -#include "esplibs/libnet80211.h" -#include "esplibs/libphy.h" -#include "esplibs/libpp.h" -#include "sysparam.h" +#include "sdk_internal.h" /* This is not declared in any header file (but arguably should be) */ @@ -56,10 +49,10 @@ uint8_t sdk_user_init_flag; struct sdk_info_st sdk_info; // xUserTaskHandle -- .bss+0x28 -TaskHandle_t sdk_xUserTaskHandle; +xTaskHandle sdk_xUserTaskHandle; // xWatchDogTaskHandle -- .bss+0x2c -TaskHandle_t sdk_xWatchDogTaskHandle; +xTaskHandle sdk_xWatchDogTaskHandle; /* Static function prototypes */ @@ -134,10 +127,6 @@ static void IRAM default_putc(char c) { uart_putc(0, c); } -void init_newlib_locks(void); -extern uint8_t sdk_wDevCtrl[]; -void nano_malloc_insert_chunk(void *start, size_t size); - // .text+0x258 void IRAM sdk_user_start(void) { uint32_t buf32[sizeof(struct sdk_g_ic_saved_st) / 4]; @@ -150,8 +139,6 @@ void IRAM sdk_user_start(void) { uint32_t cksum_len; uint32_t cksum_value; uint32_t ic_flash_addr; - uint32_t sysparam_addr; - sysparam_status_t status; SPI(0).USER0 |= SPI_USER0_CS_SETUP; sdk_SPIRead(0, buf32, 4); @@ -174,32 +161,25 @@ void IRAM sdk_user_start(void) { } switch (buf8[3] >> 4) { case 0x0: // 4 Mbit (512 KByte) - flash_size = 524288; + flash_sectors = 128; break; case 0x1: // 2 Mbit (256 Kbyte) - flash_size = 262144; + flash_sectors = 64; break; case 0x2: // 8 Mbit (1 Mbyte) - flash_size = 1048576; + flash_sectors = 256; break; case 0x3: // 16 Mbit (2 Mbyte) - case 0x5: // 16 Mbit (2 Mbyte) - flash_size = 2097152; + flash_sectors = 512; break; case 0x4: // 32 Mbit (4 Mbyte) - case 0x6: // 32 Mbit (4 Mbyte) - flash_size = 4194304; - break; - case 0x8: // 64 Mbit (8 Mbyte) - flash_size = 8388608; - break; - case 0x9: // 128 Mbit (16 Mbyte) - flash_size = 16777216; + flash_sectors = 1024; break; default: // Invalid -- Assume 4 Mbit (512 KByte) - flash_size = 524288; + flash_sectors = 128; } - flash_sectors = flash_size / sdk_flashchip.sector_size; + //FIXME: we should probably calculate flash_sectors by starting with flash_size and dividing by sdk_flashchip.sector_size instead of vice-versa. + flash_size = flash_sectors * 4096; sdk_flashchip.chip_size = flash_size; set_spi0_divisor(flash_speed_divisor); sdk_SPIRead(flash_size - 4096, buf32, BOOT_INFO_SIZE); @@ -212,15 +192,6 @@ void IRAM sdk_user_start(void) { Cache_Read_Enable(0, 0, 1); zero_bss(); sdk_os_install_putc1(default_putc); - - /* HACK Reclaim a region of unused bss from wdev.o. This would not be - * necessary if the source code to wdev were available, and then it would - * not be a fragmented area, but the extra memory is desparately needed and - * it is in very useful dram. */ - nano_malloc_insert_chunk((void *)(sdk_wDevCtrl + 0x2190), 8000); - - init_newlib_locks(); - if (cksum_magic == 0xffffffff) { // No checksum required } else if ((cksum_magic == 0x55aa55aa) && @@ -233,35 +204,21 @@ void IRAM sdk_user_start(void) { } memcpy(&sdk_g_ic.s, buf32, sizeof(struct sdk_g_ic_saved_st)); - // By default, put the sysparam region just below the config sectors at the - // top of the flash space, and allowing one extra sector spare. - sysparam_addr = flash_size - (5 + DEFAULT_SYSPARAM_SECTORS) * sdk_flashchip.sector_size; - status = sysparam_init(sysparam_addr, flash_size); - if (status == SYSPARAM_NOTFOUND) { - status = sysparam_create_area(sysparam_addr, DEFAULT_SYSPARAM_SECTORS, false); - if (status == SYSPARAM_OK) { - status = sysparam_init(sysparam_addr, 0); - } - } - if (status != SYSPARAM_OK) { - printf("WARNING: Could not initialize sysparams (%d)!\n", status); - } - user_start_phase2(); } // .text+0x3a8 -void IRAM vApplicationStackOverflowHook(TaskHandle_t task, char *task_name) { +void IRAM vApplicationStackOverflowHook(xTaskHandle task, char *task_name) { printf("Task stack overflow (high water mark=%lu name=\"%s\")\n", uxTaskGetStackHighWaterMark(task), task_name); } // .text+0x3d8 -void __attribute__((weak)) IRAM vApplicationIdleHook(void) { +void IRAM vApplicationIdleHook(void) { printf("idle %u\n", WDEV.SYS_TIME); } // .text+0x404 -void __attribute__((weak)) IRAM vApplicationTickHook(void) { +void IRAM vApplicationTickHook(void) { printf("tick %u\n", WDEV.SYS_TIME); } @@ -276,25 +233,12 @@ static void zero_bss(void) { // .Lfunc006 -- .irom0.text+0x70 static void init_networking(sdk_phy_info_t *phy_info, uint8_t *mac_addr) { - // The call to sdk_register_chipv6_phy appears to change the bus clock, - // perhaps from 40MHz to 26MHz, at least it has such an effect on the uart - // baud rate. The caller flushes the TX fifos. if (sdk_register_chipv6_phy(phy_info)) { printf("FATAL: sdk_register_chipv6_phy failed"); abort(); } - - // The boot rom initializes uart0 for a 115200 baud rate but the bus clock - // does not appear to be as expected so the initial baud rate is actually - // 74906. On a cold boot, to keep the 74906 baud rate the uart0 divisor - // would need to changed here to 74906. On a warm boot the bus clock is - // expected to have already been set so the boot baud rate is 115200. - // Reset the rate here and settle on a 115200 baud rate. - if (sdk_rst_if.reason > 0) { - uart_set_baud(0, 115200); - uart_set_baud(1, 115200); - } - + uart_set_baud(0, 74906); + uart_set_baud(1, 74906); sdk_phy_disable_agc(); sdk_ieee80211_phy_init(sdk_g_ic.s.phy_mode); sdk_lmacInit(); @@ -331,13 +275,13 @@ static void init_g_ic(void) { if (sdk_g_ic.s._unknown310 > 4) { sdk_g_ic.s._unknown310 = 4; } - if (sdk_g_ic.s.sta_ssid.ssid_length == 0xffffffff) { - bzero(&sdk_g_ic.s.sta_ssid, sizeof(sdk_g_ic.s.sta_ssid)); - bzero(&sdk_g_ic.s.sta_password, sizeof(sdk_g_ic.s.sta_password)); + if (sdk_g_ic.s._unknown1e4._unknown1e4 == 0xffffffff) { + bzero(&sdk_g_ic.s._unknown1e4, sizeof(sdk_g_ic.s._unknown1e4)); + bzero(&sdk_g_ic.s._unknown20f, sizeof(sdk_g_ic.s._unknown20f)); } sdk_g_ic.s.wifi_led_enable = 0; - if (sdk_g_ic.s.sta_bssid_set > 1) { - sdk_g_ic.s.sta_bssid_set = 0; + if (sdk_g_ic.s._unknown281 > 1) { + sdk_g_ic.s._unknown281 = 0; } if (sdk_g_ic.s.ap_number > 5) { sdk_g_ic.s.ap_number = 1; @@ -359,16 +303,10 @@ void sdk_wdt_init(void) { sdk_pp_soft_wdt_init(); } -extern void *xPortSupervisorStackPointer; - // .irom0.text+0x474 void sdk_user_init_task(void *params) { int phy_ver, pp_ver; - /* The start up stack is not used after scheduling has started, so all of - * the top area of RAM which was stack can be used for the dynamic heap. */ - xPortSupervisorStackPointer = (void *)0x40000000; - sdk_ets_timer_init(); printf("\nESP-Open-SDK ver: %s compiled @ %s %s\n", OS_VERSION_STR, __DATE__, __TIME__); phy_ver = RTCMEM_BACKUP[RTCMEM_BACKUP_PHY_VER] >> 16; @@ -378,24 +316,18 @@ void sdk_user_init_task(void *params) { user_init(); sdk_user_init_flag = 1; sdk_wifi_mode_set(sdk_g_ic.s.wifi_mode); - if (sdk_g_ic.s.wifi_mode == STATION_MODE) { + if (sdk_g_ic.s.wifi_mode == 1) { sdk_wifi_station_start(); - LOCK_TCPIP_CORE(); netif_set_default(sdk_g_ic.v.station_netif_info->netif); - UNLOCK_TCPIP_CORE(); } - if (sdk_g_ic.s.wifi_mode == SOFTAP_MODE) { + if (sdk_g_ic.s.wifi_mode == 2) { sdk_wifi_softap_start(); - LOCK_TCPIP_CORE(); netif_set_default(sdk_g_ic.v.softap_netif_info->netif); - UNLOCK_TCPIP_CORE(); } - if (sdk_g_ic.s.wifi_mode == STATIONAP_MODE) { + if (sdk_g_ic.s.wifi_mode == 3) { sdk_wifi_station_start(); sdk_wifi_softap_start(); - LOCK_TCPIP_CORE(); - netif_set_default(sdk_g_ic.v.station_netif_info->netif); - UNLOCK_TCPIP_CORE(); + netif_set_default(sdk_g_ic.v.softap_netif_info->netif); } if (sdk_wifi_station_get_auto_connect()) { sdk_wifi_station_connect(); @@ -412,8 +344,8 @@ static __attribute__((noinline)) void user_start_phase2(void) { sdk_phy_info_t phy_info, default_phy_info; sdk_system_rtc_mem_read(0, &sdk_rst_if, sizeof(sdk_rst_if)); - if (sdk_rst_if.reason > 3) { - // Bad reason. Probably garbage. + if (sdk_rst_if.version > 3) { + // Bad version number. Probably garbage. bzero(&sdk_rst_if, sizeof(sdk_rst_if)); } buf = malloc(sizeof(sdk_rst_if)); @@ -423,9 +355,9 @@ static __attribute__((noinline)) void user_start_phase2(void) { sdk_sleep_reset_analog_rtcreg_8266(); get_otp_mac_address(sdk_info.sta_mac_addr); sdk_wifi_softap_cacl_mac(sdk_info.softap_mac_addr, sdk_info.sta_mac_addr); - sdk_info.softap_ipaddr.addr = 0x0104a8c0; // 192.168.4.1 - sdk_info.softap_netmask.addr = 0x00ffffff; // 255.255.255.0 - sdk_info.softap_gw.addr = 0x0104a8c0; // 192.168.4.1 + sdk_info._unknown0 = 0x0104a8c0; + sdk_info._unknown1 = 0x00ffffff; + sdk_info._unknown2 = 0x0104a8c0; init_g_ic(); read_saved_phy_info(&phy_info); @@ -438,18 +370,14 @@ static __attribute__((noinline)) void user_start_phase2(void) { memcpy(&phy_info, &default_phy_info, sizeof(sdk_phy_info_t)); } + // Disable default buffering on stdout + setbuf(stdout, NULL); // Wait for UARTs to finish sending anything in their queues. uart_flush_txfifo(0); uart_flush_txfifo(1); init_networking(&phy_info, sdk_info.sta_mac_addr); - srand(hwrand()); /* seed libc rng */ - - // Set intial CPU clock speed to 160MHz if necessary - _Static_assert(configCPU_CLOCK_HZ == 80000000 || configCPU_CLOCK_HZ == 160000000, "FreeRTOSConfig must define initial clock speed as either 80MHz or 160MHz"); - sdk_system_update_cpu_freq(configCPU_CLOCK_HZ / 1000000); - // Call gcc constructor functions void (**ctor)(void); for ( ctor = &__init_array_start; ctor != &__init_array_end; ++ctor) { @@ -458,7 +386,7 @@ static __attribute__((noinline)) void user_start_phase2(void) { tcpip_init(NULL, NULL); sdk_wdt_init(); - xTaskCreate(sdk_user_init_task, "uiT", 1024, 0, 14, &sdk_xUserTaskHandle); + xTaskCreate(sdk_user_init_task, (signed char *)"uiT", 1024, 0, 14, &sdk_xUserTaskHandle); vTaskStartScheduler(); } diff --git a/core/cplusplus_operators.cpp b/core/cplusplus_operators.cpp index b263838..86f4477 100644 --- a/core/cplusplus_operators.cpp +++ b/core/cplusplus_operators.cpp @@ -4,22 +4,22 @@ #include #include -void * __attribute__((weak)) operator new(size_t size) +void *operator new(size_t size) { return malloc(size); } -void * __attribute__((weak)) operator new[](size_t size) +void *operator new[](size_t size) { return malloc(size); } -void __attribute__((weak)) operator delete(void * ptr) +void operator delete(void * ptr) { free(ptr); } -void __attribute__((weak)) operator delete[](void * ptr) +void operator delete[](void * ptr) { free(ptr); } diff --git a/core/debug_dumps.c b/core/debug_dumps.c index 0b18f1a..7f1a1ca 100644 --- a/core/debug_dumps.c +++ b/core/debug_dumps.c @@ -19,10 +19,8 @@ #include "xtensa_ops.h" #include "esp/rom.h" #include "esp/uart.h" -#include "esp/dport_regs.h" #include "espressif/esp_common.h" -#include "esplibs/libmain.h" -#include "user_exception.h" +#include "sdk_internal.h" /* Forward declarations */ static void IRAM fatal_handler_prelude(void); @@ -34,8 +32,6 @@ static void __attribute__((noinline)) __attribute__((noreturn)) abort_handler_in static IRAM_DATA fatal_exception_handler_fn fatal_exception_handler_inner = standard_fatal_exception_handler_inner; -static void (*user_exception_handler)(void) = NULL; - /* fatal_exception_handler called from any unhandled user exception * * (similar to a hard fault on other processor architectures) @@ -160,10 +156,6 @@ static void IRAM fatal_handler_prelude(void) { } Cache_Read_Disable(); Cache_Read_Enable(0, 0, 1); - - if (user_exception_handler != NULL) { - user_exception_handler(); - } } /* Main part of fatal exception handler, is run from flash to save @@ -237,9 +229,3 @@ static void abort_handler_inner(uint32_t *caller, uint32_t *sp) { dump_heapinfo(); post_crash_reset(); } - -void set_user_exception_handler(void (*fn)(void)) -{ - user_exception_handler = fn; -} - diff --git a/core/esp_gpio.c b/core/esp_gpio.c index 359f828..8d12be1 100644 --- a/core/esp_gpio.c +++ b/core/esp_gpio.c @@ -5,26 +5,9 @@ * BSD Licensed as described in the file LICENSE */ #include -#include void gpio_enable(const uint8_t gpio_num, const gpio_direction_t direction) { - if (gpio_num == 16) { - RTC.GPIO_CFG[3] = (RTC.GPIO_CFG[3] & 0xffffffbc) | 1; - RTC.GPIO_CONF = (RTC.GPIO_CONF & 0xfffffffe) | 0; - switch (direction) { - case GPIO_INPUT: - RTC.GPIO_ENABLE = (RTC.GPIO_OUT & 0xfffffffe); - break; - case GPIO_OUTPUT: - case GPIO_OUT_OPEN_DRAIN: - /* TODO open drain? */ - RTC.GPIO_ENABLE = (RTC.GPIO_OUT & 0xfffffffe) | 1; - break; - } - return; - } - switch (direction) { case GPIO_INPUT: GPIO.ENABLE_OUT_CLEAR = BIT(gpio_num); @@ -56,34 +39,3 @@ void gpio_set_pullup(uint8_t gpio_num, bool enabled, bool enabled_during_sleep) iomux_set_pullup_flags(gpio_to_iomux(gpio_num), flags); } -static gpio_interrupt_handler_t gpio_interrupt_handlers[16] = { 0 }; - -void __attribute__((weak)) IRAM gpio_interrupt_handler(void *arg) -{ - uint32_t status_reg = GPIO.STATUS; - GPIO.STATUS_CLEAR = status_reg; - - uint8_t gpio_idx; - while ((gpio_idx = __builtin_ffs(status_reg))) - { - gpio_idx--; - status_reg &= ~BIT(gpio_idx); - if (FIELD2VAL(GPIO_CONF_INTTYPE, GPIO.CONF[gpio_idx])) { - gpio_interrupt_handler_t handler = gpio_interrupt_handlers[gpio_idx]; - if (handler) { - handler(gpio_idx); - } - } - } -} - -void gpio_set_interrupt(const uint8_t gpio_num, const gpio_inttype_t int_type, gpio_interrupt_handler_t handler) -{ - gpio_interrupt_handlers[gpio_num] = handler; - - GPIO.CONF[gpio_num] = SET_FIELD(GPIO.CONF[gpio_num], GPIO_CONF_INTTYPE, int_type); - if (int_type != GPIO_INTTYPE_NONE) { - _xt_isr_attach(INUM_GPIO, gpio_interrupt_handler, NULL); - _xt_isr_unmask(1< #include -/* Return a random 32-bit number. - * - * This is also used as a substitute for rand() called from - * lmac.a:sdk_lmacTxFrame to avoid touching the newlib reent structures within - * the NMI and the NMI code needs to be in IRAM. - */ -uint32_t IRAM hwrand(void) +/* Return a random 32-bit number */ +uint32_t hwrand(void) { return WDEV.HWRNG; } diff --git a/core/esp_interrupts.c b/core/esp_interrupts.c index 1431499..b3aefff 100644 --- a/core/esp_interrupts.c +++ b/core/esp_interrupts.c @@ -7,19 +7,13 @@ */ #include -typedef struct _xt_isr_entry_ { - _xt_isr handler; - void *arg; -} _xt_isr_entry; - -_xt_isr_entry isr[16]; +_xt_isr isr[16]; bool esp_in_isr; -void IRAM _xt_isr_attach(uint8_t i, _xt_isr func, void *arg) +void IRAM _xt_isr_attach(uint8_t i, _xt_isr func) { - isr[i].handler = func; - isr[i].arg = arg; + isr[i] = func; } /* Generic ISR handler. @@ -31,20 +25,17 @@ uint16_t IRAM _xt_isr_handler(uint16_t intset) esp_in_isr = true; /* WDT has highest priority (occasional WDT resets otherwise) */ - if (intset & BIT(INUM_WDT)) { + if(intset & BIT(INUM_WDT)) { _xt_clear_ints(BIT(INUM_WDT)); - isr[INUM_WDT].handler(NULL); + isr[INUM_WDT](); intset -= BIT(INUM_WDT); } - while (intset) { + while(intset) { uint8_t index = __builtin_ffs(intset) - 1; uint16_t mask = BIT(index); _xt_clear_ints(mask); - _xt_isr handler = isr[index].handler; - if (handler) { - handler(isr[index].arg); - } + isr[index](); intset -= mask; } diff --git a/core/esp_spi.c b/core/esp_spi.c index 84b3cb0..c6c0546 100644 --- a/core/esp_spi.c +++ b/core/esp_spi.c @@ -23,35 +23,39 @@ #define _SPI1_SCK_GPIO 14 #define _SPI1_CS0_GPIO 15 -#define _SPI0_FUNC IOMUX_FUNC(1) -#define _SPI1_FUNC IOMUX_FUNC(2) +#define _SPI0_FUNC 1 +#define _SPI1_FUNC 2 #define _SPI_BUF_SIZE 64 -#define __min(a,b) ((a > b) ? (b):(a)) static bool _minimal_pins[2] = {false, false}; +inline static void _set_pin_function(uint8_t pin, uint32_t function) +{ + iomux_set_function(gpio_to_iomux(pin), function); +} + bool spi_init(uint8_t bus, spi_mode_t mode, uint32_t freq_divider, bool msb, spi_endianness_t endianness, bool minimal_pins) { switch (bus) { case 0: - gpio_set_iomux_function(_SPI0_MISO_GPIO, _SPI0_FUNC); - gpio_set_iomux_function(_SPI0_MOSI_GPIO, _SPI0_FUNC); - gpio_set_iomux_function(_SPI0_SCK_GPIO, _SPI0_FUNC); + _set_pin_function(_SPI0_MISO_GPIO, _SPI0_FUNC); + _set_pin_function(_SPI0_MOSI_GPIO, _SPI0_FUNC); + _set_pin_function(_SPI0_SCK_GPIO, _SPI0_FUNC); if (!minimal_pins) { - gpio_set_iomux_function(_SPI0_HD_GPIO, _SPI0_FUNC); - gpio_set_iomux_function(_SPI0_WP_GPIO, _SPI0_FUNC); - gpio_set_iomux_function(_SPI0_CS0_GPIO, _SPI0_FUNC); + _set_pin_function(_SPI0_HD_GPIO, _SPI0_FUNC); + _set_pin_function(_SPI0_WP_GPIO, _SPI0_FUNC); + _set_pin_function(_SPI0_CS0_GPIO, _SPI0_FUNC); } break; case 1: - gpio_set_iomux_function(_SPI1_MISO_GPIO, _SPI1_FUNC); - gpio_set_iomux_function(_SPI1_MOSI_GPIO, _SPI1_FUNC); - gpio_set_iomux_function(_SPI1_SCK_GPIO, _SPI1_FUNC); + _set_pin_function(_SPI1_MISO_GPIO, _SPI1_FUNC); + _set_pin_function(_SPI1_MOSI_GPIO, _SPI1_FUNC); + _set_pin_function(_SPI1_SCK_GPIO, _SPI1_FUNC); if (!minimal_pins) - gpio_set_iomux_function(_SPI1_CS0_GPIO, _SPI1_FUNC); + _set_pin_function(_SPI1_CS0_GPIO, _SPI1_FUNC); break; default: return false; @@ -159,22 +163,6 @@ inline static void _start(uint8_t bus) SPI(bus).CMD |= SPI_CMD_USR; } -inline static void _store_data(uint8_t bus, const void *data, size_t len) -{ - uint8_t words = len / 4; - uint8_t tail = len % 4; - - memcpy((void *)SPI(bus).W, data, len - tail); - - if (!tail) return; - - uint32_t last = 0; - uint8_t *offs = (uint8_t *)data + len - tail; - for (uint8_t i = 0; i < tail; i++) - last = last | (offs[i] << (i * 8)); - SPI(bus).W[words] = last; -} - inline static uint32_t _swap_bytes(uint32_t value) { return (value << 24) | ((value << 8) & 0x00ff0000) | ((value >> 8) & 0x0000ff00) | (value >> 24); @@ -190,7 +178,7 @@ static void _spi_buf_prepare(uint8_t bus, size_t len, spi_endianness_t e, spi_wo if (e == SPI_LITTLE_ENDIAN || word_size == SPI_32BIT) return; size_t count = word_size == SPI_16BIT ? (len + 1) / 2 : (len + 3) / 4; - uint32_t *data = (uint32_t *)SPI(bus).W; + uint32_t *data = (uint32_t *)&SPI(bus).W0; for (size_t i = 0; i < count; i ++) { data[i] = word_size == SPI_16BIT @@ -205,14 +193,14 @@ static void _spi_buf_transfer(uint8_t bus, const void *out_data, void *in_data, _wait(bus); size_t bytes = len * (uint8_t)word_size; _set_size(bus, bytes); - _store_data(bus, out_data, bytes); + memcpy((void *)&SPI(bus).W0, out_data, bytes); _spi_buf_prepare(bus, len, e, word_size); _start(bus); _wait(bus); if (in_data) { _spi_buf_prepare(bus, len, e, word_size); - memcpy(in_data, (void *)SPI(bus).W, bytes); + memcpy(in_data, (void *)&SPI(bus).W0, bytes); } } @@ -237,39 +225,6 @@ uint32_t spi_transfer_32(uint8_t bus, uint32_t data) return res; } -static void _rearm_extras_bit(uint8_t bus, bool arm) -{ - if (!_minimal_pins[bus]) return; - static uint8_t status[2]; - - if (arm) - { - if (status[bus] & 0x01) SPI(bus).USER0 |= (SPI_USER0_ADDR); - if (status[bus] & 0x02) SPI(bus).USER0 |= (SPI_USER0_COMMAND); - if (status[bus] & 0x04) - SPI(bus).USER0 |= (SPI_USER0_DUMMY | SPI_USER0_MISO); - status[bus] = 0; - } - else - { - if (SPI(bus).USER0 & SPI_USER0_ADDR) - { - SPI(bus).USER0 &= ~(SPI_USER0_ADDR); - status[bus] |= 0x01; - } - if (SPI(bus).USER0 & SPI_USER0_COMMAND) - { - SPI(bus).USER0 &= ~(SPI_USER0_COMMAND); - status[bus] |= 0x02; - } - if (SPI(bus).USER0 & SPI_USER0_DUMMY) - { - SPI(bus).USER0 &= ~(SPI_USER0_DUMMY | SPI_USER0_MISO); - status[bus] |= 0x04; - } - } -} - size_t spi_transfer(uint8_t bus, const void *out_data, void *in_data, size_t len, spi_word_size_t word_size) { if (!out_data || !len) return 0; @@ -283,7 +238,6 @@ size_t spi_transfer(uint8_t bus, const void *out_data, void *in_data, size_t len size_t offset = i * _SPI_BUF_SIZE; _spi_buf_transfer(bus, (const uint8_t *)out_data + offset, in_data ? (uint8_t *)in_data + offset : NULL, buf_size, e, word_size); - _rearm_extras_bit(bus, false); } uint8_t tail = len % buf_size; @@ -293,77 +247,5 @@ size_t spi_transfer(uint8_t bus, const void *out_data, void *in_data, size_t len in_data ? (uint8_t *)in_data + blocks * _SPI_BUF_SIZE : NULL, tail, e, word_size); } - if (blocks) _rearm_extras_bit(bus, true); return len; } - -static void _spi_buf_read(uint8_t bus, uint8_t b, void *in_data, - size_t len, spi_endianness_t e, spi_word_size_t word_size) -{ - _wait(bus); - size_t bytes = len * (uint8_t)word_size; - _set_size(bus, bytes); - uint32_t w = ((uint32_t)b << 24) | ((uint32_t)b << 16) | ((uint32_t)b << 8) | b; - for (uint8_t i = 0; i < _SPI_BUF_SIZE / 4; i ++) - SPI(bus).W[i] = w; - _start(bus); - _wait(bus); - _spi_buf_prepare(bus, len, e, word_size); - memcpy(in_data, (void *)SPI(bus).W, bytes); -} - -void spi_read(uint8_t bus, uint8_t out_byte, void *in_data, size_t len, spi_word_size_t word_size) -{ - spi_endianness_t e = spi_get_endianness(bus); - uint8_t buf_size = _SPI_BUF_SIZE / (uint8_t)word_size; - - size_t blocks = len / buf_size; - for (size_t i = 0; i < blocks; i++) - { - size_t offset = i * _SPI_BUF_SIZE; - _spi_buf_read(bus, out_byte, (uint8_t *)in_data + offset, buf_size, e, word_size); - _rearm_extras_bit(bus, false); - } - - uint8_t tail = len % buf_size; - if (tail) - _spi_buf_read(bus, out_byte, (uint8_t *)in_data + blocks * _SPI_BUF_SIZE, tail, e, word_size); - - if (blocks) _rearm_extras_bit(bus, true); -} - -static void _repeat_send(uint8_t bus, uint32_t *dword, int32_t *repeats, - spi_word_size_t size) -{ - uint8_t i = 0; - while (*repeats > 0) - { - uint16_t bytes_to_transfer = __min(*repeats * size, _SPI_BUF_SIZE); - _wait(bus); - if (i) _rearm_extras_bit(bus, false); - _set_size(bus, bytes_to_transfer); - for (i = 0; i < (bytes_to_transfer + 3) / 4; i++) - SPI(bus).W[i] = *dword; //need test with memcpy ! - _start(bus); - *repeats -= (bytes_to_transfer / size); - } - _wait(bus); - _rearm_extras_bit(bus, true); -} - -void spi_repeat_send_8(uint8_t bus, uint8_t data, int32_t repeats) -{ - uint32_t dword = data << 24 | data << 16 | data << 8 | data; - _repeat_send(bus, &dword, &repeats, SPI_8BIT); -} - -void spi_repeat_send_16(uint8_t bus, uint16_t data, int32_t repeats) -{ - uint32_t dword = data << 16 | data; - _repeat_send(bus, &dword, &repeats, SPI_16BIT); -} - -void spi_repeat_send_32(uint8_t bus, uint32_t data, int32_t repeats) -{ - _repeat_send(bus, &data, &repeats, SPI_32BIT); -} diff --git a/core/esp_timer.c b/core/esp_timer.c index 2110948..9282e26 100644 --- a/core/esp_timer.c +++ b/core/esp_timer.c @@ -83,11 +83,6 @@ int timer_set_frequency(const timer_frc_t frc, uint32_t freq) uint32_t counts = 0; timer_clkdiv_t div = timer_freq_to_div(freq); - if(freq == 0) //can't divide by 0 - { - return -EINVAL; - } - counts = timer_freq_to_count(frc, freq, div); if(counts == 0) { diff --git a/core/exception_vectors.S b/core/exception_vectors.S index df04ab3..000e742 100644 --- a/core/exception_vectors.S +++ b/core/exception_vectors.S @@ -45,15 +45,6 @@ LoadStoreErrorHandlerStack: .word 0 # a3 .word 0 # a4 - .balign 4 - .global debug_saved_ctx -debug_saved_ctx: - .word 0 # a0 - .word 0 # a1 - .word 0 # a2 - .word 0 # a3 - .word 0 # a4 - /***************************** Exception Vectors *****************************/ .section .vecbase.text, "x" @@ -75,7 +66,12 @@ VecBase: .org VecBase + 0x10 DebugExceptionVector: .type DebugExceptionVector, @function - j DebugExceptionHandler + + wsr a0, excsave2 + mov a2, a1 + movi a3, 0 + call0 fatal_exception_handler + rfi 2 .org VecBase + 0x20 NMIExceptionVector: @@ -366,32 +362,6 @@ LoadStoreErrorHandler: rsr a1, excsave1 rfe -/*************************** Debug exception handler *************************/ - - .section .vecbase.text, "x" - .literal_position - .balign 4 - -DebugExceptionHandler: - wsr a0, excsave2 - // Save context in case an actual debugger is running - movi a0, debug_saved_ctx - // Save a1 - a4 as we are going to use them later - s32i a1, a0, 0x04 - s32i a2, a0, 0x08 - s32i a3, a0, 0x0C - s32i a4, a0, 0x10 - // Save a0 - rsr a4, excsave2 - s32i a4, a0, 0x00 - // Default handler is fatal_exception_handler(uint32_t * sp, bool registers_saved_on_stack) - // sp - mov a2, a1 - // registers_saved_on_stack - movi a3, 0 - call0 debug_exception_handler - rfi 2 - /****************************** call_user_start ******************************/ .section .vecbase.text, "x" @@ -521,15 +491,7 @@ NMIExceptionHandler: .balign 4 UserExceptionHandler: .type UserExceptionHandler, @function - // save a0, a1 to debug_saved_ctx before stack pointer is affected - // excsave1 contains a1 - // a1 was changed earlier - movi a1, debug_saved_ctx - // store a0 - s32i a0, a1, 0x00 - xsr a0, excsave1 - // store a1 - s32i a0, a1, 0x04 + xsr a0, excsave1 # a0 now contains sp mov sp, a0 addi sp, sp, -0x50 s32i a0, sp, 0x10 diff --git a/core/include/common_macros.h b/core/include/common_macros.h index 7034787..d4afe4f 100644 --- a/core/include/common_macros.h +++ b/core/include/common_macros.h @@ -37,14 +37,6 @@ #define VAL2FIELD_M(fieldname, value) (((value) & fieldname##_M) << fieldname##_S) #define SET_FIELD_M(regbits, fieldname, value) (((regbits) & ~FIELD_MASK(fieldname)) | VAL2FIELD_M(fieldname, value)) -/* Set bits in reg with specified mask. - */ -#define SET_MASK_BITS(reg, mask) (reg) |= (mask) - -/* Clear bits in reg with specified mask - */ -#define CLEAR_MASK_BITS(reg, mask) (reg) &= ~(mask) - /* Use the IRAM macro to place functions into Instruction RAM (IRAM) instead of flash (aka irom). diff --git a/core/include/debug_dumps.h b/core/include/debug_dumps.h index 8b82b84..ab3c972 100644 --- a/core/include/debug_dumps.h +++ b/core/include/debug_dumps.h @@ -21,7 +21,5 @@ void dump_heapinfo(void); Probably not useful to be called in other contexts. */ void __attribute__((noreturn)) fatal_exception_handler(uint32_t *sp, bool registers_saved_on_stack); -void __attribute__((weak, alias("fatal_exception_handler"))) - debug_exception_handler(uint32_t *sp, bool registers_saved_on_stack); #endif diff --git a/core/include/esp/dport_regs.h b/core/include/esp/dport_regs.h index d04de2f..87efca1 100644 --- a/core/include/esp/dport_regs.h +++ b/core/include/esp/dport_regs.h @@ -90,10 +90,6 @@ _Static_assert(sizeof(struct DPORT_REGS) == 0x60, "DPORT_REGS is the wrong size" /* Details for CLOCKGATE_WATCHDOG register */ -// Set and then cleared during sdk_system_restart_in_nmi(). -// Not sure what this does. May be related to ESPSAR.UNKNOWN_48 -#define DPORT_CLOCKGATE_WATCHDOG_UNKNOWN_8 BIT(8) - /* Comment found in pvvx/mp3_decode headers: "use clockgate_watchdog(flg) { if(flg) 0x3FF00018 &= 0x77; else 0x3FF00018 |= 8; }". Not sure what this means or does. */ #define DPORT_CLOCKGATE_WATCHDOG_DISABLE BIT(3) diff --git a/core/include/esp/gpio.h b/core/include/esp/gpio.h index 85842aa..426d1ea 100644 --- a/core/include/esp/gpio.h +++ b/core/include/esp/gpio.h @@ -10,7 +10,6 @@ #define _ESP_GPIO_H #include #include "esp/gpio_regs.h" -#include "esp/rtc_regs.h" #include "esp/iomux.h" #include "esp/interrupts.h" @@ -24,7 +23,7 @@ typedef enum { GPIO_OUT_OPEN_DRAIN, /* Open drain output */ } gpio_direction_t; -/* Enable GPIO on the specified pin, and set it to input or output mode. +/* Enable GPIO on the specified pin, and set it to input or output mode */ void gpio_enable(const uint8_t gpio_num, const gpio_direction_t direction); @@ -81,9 +80,7 @@ static inline void gpio_set_output_on_sleep(const uint8_t gpio_num, bool enabled */ static inline void gpio_write(const uint8_t gpio_num, const bool set) { - if (gpio_num == 16) { - RTC.GPIO_OUT = (RTC.GPIO_OUT & 0xfffffffe) | (set ? 1 : 0); - } else if (set) + if (set) GPIO.OUT_SET = BIT(gpio_num) & GPIO_OUT_PIN_MASK; else GPIO.OUT_CLEAR = BIT(gpio_num) & GPIO_OUT_PIN_MASK; @@ -104,7 +101,7 @@ static inline void gpio_toggle(const uint8_t gpio_num) get an invalid value. Prevents one task from clobbering another task's pins, without needing to disable/enable interrupts. */ - if (GPIO.OUT & BIT(gpio_num)) + if(GPIO.OUT & BIT(gpio_num)) GPIO.OUT_CLEAR = BIT(gpio_num) & GPIO_OUT_PIN_MASK; else GPIO.OUT_SET = BIT(gpio_num) & GPIO_OUT_PIN_MASK; @@ -121,50 +118,24 @@ static inline void gpio_toggle(const uint8_t gpio_num) */ static inline bool gpio_read(const uint8_t gpio_num) { - if (gpio_num == 16) - return RTC.GPIO_IN & 1; - else - return GPIO.IN & BIT(gpio_num); + return GPIO.IN & BIT(gpio_num); } -typedef void (* gpio_interrupt_handler_t)(uint8_t gpio_num); - -/* - * You can implement GPIO interrupt handlers in either of two ways: - * - Implement handler and use it with the gpio_set_interrupt() - * - * Example: - * - * void my_intr_handler(uint8_t gpio_num) { - * // Do something when GPIO changes - * } - * ... - * gpio_set_interrupt(MY_GPIO_NUM, GPIO_INTTYPE_EDGE_ANY, my_intr_handler); - * - * OR - * - * - Implement a single function named gpio_interrupt_handler(). This - * will need to manually check GPIO.STATUS and clear any status - * bits after handling interrupts. This gives you full control, but - * you can't combine it with the first approach. - * - * Example: - * - * void IRAM gpio_interrupt_handler(void *arg) { - * // check GPIO.STATUS - * // write GPIO.STATUS_CLEAR - * // Do something when GPIO changes - * } - * ... - * gpio_set_interrupt(MY_GPIO_NUM, GPIO_INTTYPE_EDGE_ANY, NULL); - */ +extern void gpio_interrupt_handler(void); /* Set the interrupt type for a given pin * * If int_type is not GPIO_INTTYPE_NONE, the gpio_interrupt_handler will be * attached and unmasked. */ -void gpio_set_interrupt(const uint8_t gpio_num, const gpio_inttype_t int_type, gpio_interrupt_handler_t handler); +static inline void gpio_set_interrupt(const uint8_t gpio_num, const gpio_inttype_t int_type) +{ + GPIO.CONF[gpio_num] = SET_FIELD(GPIO.CONF[gpio_num], GPIO_CONF_INTTYPE, int_type); + if(int_type != GPIO_INTTYPE_NONE) { + _xt_isr_attach(INUM_GPIO, gpio_interrupt_handler); + _xt_isr_unmask(1<_FUNC_ value, see iomux_regs.h - */ -inline static void gpio_set_iomux_function(const uint8_t gpio_num, uint32_t func) -{ - uint8_t iomux_num = gpio_to_iomux(gpio_num); - uint32_t prev = IOMUX.PIN[iomux_num] & ~IOMUX_PIN_FUNC_MASK; - IOMUX.PIN[iomux_num] = func | prev; -} - #ifdef __cplusplus } #endif diff --git a/core/include/esp/gpio_regs.h b/core/include/esp/gpio_regs.h index 167a4d1..6ff1f92 100644 --- a/core/include/esp/gpio_regs.h +++ b/core/include/esp/gpio_regs.h @@ -40,22 +40,6 @@ * be reset by writing to STATUS or STATUS_CLEAR. * * (_SET/_CLEAR function similarly to OUT registers) - * - * IN: - * - * Low 16 bits represent GPIO0-15 state (see also above). - * - * High 16 bits represent "strapping pins" values captured at reset time: - * bit 31 - GPIO10 (SD_DATA3) - * bit 30 - GPIO9 (SD_DATA2) - * bit 29 - GPIO7 (SD_DATA0) - * bit 18 - GPIO15 (MTDO) - * bit 17 - GPIO0 - * bit 16 - GPIO2 - * (In other words, highest 3 and lowest 3 bits of 16-bit half-word are used). - * BootROM uses strapping pin values to determine boot mode. - * - * Source and more information: 0D-ESP8266__Pin_List*.xlsx document */ struct GPIO_REGS { @@ -70,7 +54,7 @@ struct GPIO_REGS { uint32_t volatile STATUS_SET; // 0x20 uint32_t volatile STATUS_CLEAR; // 0x24 uint32_t volatile CONF[16]; // 0x28 - 0x64 - uint32_t volatile DSM; // 0x68 + uint32_t volatile PWM; // 0x68 uint32_t volatile RTC_CALIB; // 0x6c uint32_t volatile RTC_CALIB_RESULT; // 0x70 }; @@ -117,9 +101,9 @@ _Static_assert(sizeof(struct GPIO_REGS) == 0x74, "GPIO_REGS is the wrong size"); * GPIO_CONF_OPEN_DRAIN does not appear to work on all pins. * * - * GPIO_CONF_SOURCE_DSM (boolean) - * When set, GPIO pin output will be connected to the sigma-delta - * generator (controlled by the GPIO.DSM register). When cleared, pin + * GPIO_CONF_SOURCE_PWM (boolean) + * When set, GPIO pin output will be connected to the sigma-delta PWM + * generator (controlled by the GPIO.PWM register). When cleared, pin * output will function as a normal GPIO output (controlled by the * GPIO.OUT* registers). */ @@ -130,7 +114,7 @@ _Static_assert(sizeof(struct GPIO_REGS) == 0x74, "GPIO_REGS is the wrong size"); #define GPIO_CONF_INTTYPE_M 0x00000007 #define GPIO_CONF_INTTYPE_S 7 #define GPIO_CONF_OPEN_DRAIN BIT(2) -#define GPIO_CONF_SOURCE_DSM BIT(0) +#define GPIO_CONF_SOURCE_PWM BIT(0) /* Valid values for the GPIO_CONF_INTTYPE field */ typedef enum { @@ -142,13 +126,13 @@ typedef enum { GPIO_INTTYPE_LEVEL_HIGH = 5, } gpio_inttype_t; -/* Details for DSM register */ +/* Details for PWM register */ -#define GPIO_DSM_ENABLE BIT(16) -#define GPIO_DSM_PRESCALER_M 0x000000ff -#define GPIO_DSM_PRESCALER_S 8 -#define GPIO_DSM_TARGET_M 0x000000ff -#define GPIO_DSM_TARGET_S 0 +#define GPIO_PWM_ENABLE BIT(16) +#define GPIO_PWM_PRESCALER_M 0x000000ff +#define GPIO_PWM_PRESCALER_S 8 +#define GPIO_PWM_TARGET_M 0x000000ff +#define GPIO_PWM_TARGET_S 0 /* Details for RTC_CALIB register */ diff --git a/core/include/esp/interrupts.h b/core/include/esp/interrupts.h index 5bdd833..a6e779a 100644 --- a/core/include/esp/interrupts.h +++ b/core/include/esp/interrupts.h @@ -17,10 +17,8 @@ /* Interrupt numbers for level 1 exception handler. */ typedef enum { - INUM_WDEV_FIQ = 0, INUM_SLC = 1, INUM_SPI = 2, - INUM_RTC = 3, INUM_GPIO = 4, INUM_UART = 5, INUM_TICK = 6, /* RTOS timer tick, possibly xtensa CPU CCOMPARE0(?) */ @@ -35,37 +33,19 @@ typedef enum { INUM_TIMER_FRC2 = 10, } xt_isr_num_t; -void sdk__xt_int_exit(void); -void _xt_user_exit(void); -void sdk__xt_tick_timer_init(void); -void sdk__xt_timer_int(void *); +void sdk__xt_int_exit (void); +void _xt_user_exit (void); +void sdk__xt_tick_timer_init (void); +void sdk__xt_timer_int(void); void sdk__xt_timer_int1(void); -/* The normal running level is 0. - * The system tick isr, timer frc2_isr, sv_isr etc run at level 1. - * Debug exceptions run at level 2? - * The wdev nmi runs at level 3. - */ static inline uint32_t _xt_get_intlevel(void) { uint32_t level; - __asm__ volatile("rsr %0, ps" : "=a"(level)); - return level & 0xf; + __asm__ volatile("rsr %0, intlevel" : "=a"(level)); + return level; } -/* - * There are conflicting definitions for XCHAL_EXCM_LEVEL. Newlib - * defines it to be 1 and xtensa_rtos.h defines it to be 3. Don't want - * 3 as that is for the NMI and might want to check that the OS apis - * are not entered in level 3. Setting the interrupt level to 3 does - * not disable the NMI anyway. So set the level to 2. - */ - -#ifdef XCHAL_EXCM_LEVEL -#undef XCHAL_EXCM_LEVEL -#define XCHAL_EXCM_LEVEL 2 -#endif - /* Disable interrupts and return the old ps value, to pass into _xt_restore_interrupts later. @@ -86,27 +66,25 @@ static inline void _xt_restore_interrupts(uint32_t new_ps) __asm__ volatile ("wsr %0, ps; rsync" :: "a" (new_ps)); } -static inline uint32_t _xt_isr_unmask(uint32_t unmask) +/* ESPTODO: the mask/unmask functions aren't thread safe */ + +static inline void _xt_isr_unmask(uint32_t unmask) { - uint32_t old_level = _xt_disable_interrupts(); uint32_t intenable; asm volatile ("rsr %0, intenable" : "=a" (intenable)); - asm volatile ("wsr %0, intenable;" :: "a" (intenable | unmask)); - _xt_restore_interrupts(old_level); - return intenable; + intenable |= unmask; + asm volatile ("wsr %0, intenable; esync" :: "a" (intenable)); } -static inline uint32_t _xt_isr_mask(uint32_t mask) +static inline void _xt_isr_mask (uint32_t mask) { - uint32_t old_level = _xt_disable_interrupts(); uint32_t intenable; asm volatile ("rsr %0, intenable" : "=a" (intenable)); - asm volatile ("wsr %0, intenable;" :: "a" (intenable & ~mask)); - _xt_restore_interrupts(old_level); - return intenable; + intenable &= ~mask; + asm volatile ("wsr %0, intenable; esync" :: "a" (intenable)); } -static inline uint32_t _xt_read_ints(void) +static inline uint32_t _xt_read_ints (void) { uint32_t interrupt; asm volatile ("rsr %0, interrupt" : "=a" (interrupt)); @@ -118,7 +96,9 @@ static inline void _xt_clear_ints(uint32_t mask) asm volatile ("wsr %0, intclear; esync" :: "a" (mask)); } -typedef void (* _xt_isr)(void *arg); -void _xt_isr_attach (uint8_t i, _xt_isr func, void *arg); +typedef void (* _xt_isr)(void); +/* This function is implemeneted in FreeRTOS port.c at the moment, + should be moved or converted to an inline */ +void _xt_isr_attach (uint8_t i, _xt_isr func); #endif diff --git a/core/include/esp/iomux.h b/core/include/esp/iomux.h index 26ae471..9948784 100644 --- a/core/include/esp/iomux.h +++ b/core/include/esp/iomux.h @@ -43,17 +43,10 @@ inline static esp_reg_t gpio_iomux_reg(const uint8_t gpio_number) return &(IOMUX.PIN[gpio_to_iomux(gpio_number)]); } -/** - * Set IOMUX function. - * - * @param iomux_num Index of IOMUX register. Can be converted from GPIO number - * with gpio_to_iomux. - * @param iomux_func GPIO function definition IOMUX_GPIOn_FUNC_* - */ -inline static void iomux_set_function(uint8_t iomux_num, uint32_t iomux_func) +inline static void iomux_set_function(uint8_t iomux_num, uint32_t func) { uint32_t prev = IOMUX.PIN[iomux_num] & ~IOMUX_PIN_FUNC_MASK; - IOMUX.PIN[iomux_num] = iomux_func | prev; + IOMUX.PIN[iomux_num] = IOMUX_FUNC(func) | prev; } inline static void iomux_set_direction_flags(uint8_t iomux_num, uint32_t dir_flags) @@ -82,7 +75,7 @@ inline static void iomux_set_pullup_flags(uint8_t iomux_num, uint32_t pullup_fla inline static void iomux_set_gpio_function(uint8_t gpio_number, bool output_enable) { const uint8_t iomux_num = gpio_to_iomux(gpio_number); - const uint32_t func = iomux_num > 11 ? IOMUX_FUNC(0) : IOMUX_FUNC(3); + const uint32_t func = iomux_num > 11 ? 0 : 3; iomux_set_function(iomux_num, func); iomux_set_direction_flags(iomux_num, output_enable ? IOMUX_PIN_OUTPUT_ENABLE : 0); } diff --git a/core/include/esp/iomux_regs.h b/core/include/esp/iomux_regs.h index aa2ac10..7cb2cd0 100644 --- a/core/include/esp/iomux_regs.h +++ b/core/include/esp/iomux_regs.h @@ -47,6 +47,11 @@ _Static_assert(sizeof(struct IOMUX_REGS) == 0x44, "IOMUX_REGS is the wrong size" /* WARNING: Macro evaluates argument twice */ #define IOMUX_FUNC(val) (VAL2FIELD_M(IOMUX_PIN_FUNC_LOW, val) | VAL2FIELD_M(IOMUX_PIN_FUNC_HIGH, val)) +/* WARNING: Macro evaluates argument twice */ +#define IOMUX_FUNC_VALUE(regbits) (FIELD2VAL(IOMUX_PIN_FUNC_LOW, regbits) | FIELD2VAL(IOMUX_PIN_FUNC_HIGH, regbits)) + +#define IOMUX_SET_FUNC(regbits, funcval) (((regbits) & ~IOMUX_PIN_FUNC_MASK) | (funcval)) + #define IOMUX_GPIO0 IOMUX.PIN[12] #define IOMUX_GPIO1 IOMUX.PIN[5] #define IOMUX_GPIO2 IOMUX.PIN[13] diff --git a/core/include/esp/phy_regs.h b/core/include/esp/phy_regs.h deleted file mode 100644 index f4ee2d3..0000000 --- a/core/include/esp/phy_regs.h +++ /dev/null @@ -1,74 +0,0 @@ -/* esp/phy_regs.h - * - * ESP8266 PHY register definitions - * - * Not compatible with ESP SDK register access code. - */ - -#ifndef _ESP_PHY_REGS_H -#define _ESP_PHY_REGS_H - -#include "esp/types.h" -#include "common_macros.h" - -#define PHY_BASE 0x60000500 -#define PHY (*(struct PHY_REGS *)(PHY_BASE)) - -struct PHY_REGS { - // 0x00 — 0x60 - uint32_t volatile _gap0[24]; - // TX digital predistortion control - // 0x60 - uint32_t volatile TX_DPD; - // 0x64 — 0x7c - uint32_t volatile _gap1[6]; - // IQ imbalance estimation control - // 0x7c - uint32_t volatile IQ_EST; - // Looks like RSSI, - // may be per OFDM subcarrier - // 0x80 - uint32_t volatile RX_IQ_0; - // 0x84 - uint32_t volatile RX_IQ_1; - // 0x88 - uint32_t volatile RX_IQ_2; - // 0x8c - uint32_t volatile RX_IQ_3; - // RX gain control - // 0x90 - uint32_t volatile RX_GAIN_CTL; - // Whatever pbus is, these registers controls it - // 0x94 - uint32_t volatile PBUS_CTL_0; - // 0x98 - uint32_t volatile PBUS_CTL_1; - // 0x9C - uint32_t volatile PBUS_CTL_2; - // 0xA0 - uint32_t volatile PBUS_CTL_3; - uint32_t volatile _gap2[5]; - // Looks like baseband synthesizer control regs - // 0xB8 - uint32_t volatile BB_CTL_0; - // 0xBC - uint32_t volatile BB_CTL_1; - // 0xC0 - uint32_t volatile BB_CTL_2; - // 0xC4 - uint32_t volatile BB_CTL_3; - // These registers do exist but I don't know - // what they are for. - // 0xC8 - uint32_t volatile UNK_0; - uint32_t volatile UNK_1; - uint32_t volatile UNK_2; - uint32_t volatile UNK_3; - uint32_t volatile UNK_4; -}; - -_Static_assert((uintptr_t) &PHY.TX_DPD == 0x60000560, "RF PHY TX_DPD address"); -_Static_assert((uintptr_t) &PHY.IQ_EST == 0x6000057C, "RF PHY IQ_EST address"); -_Static_assert((uintptr_t) &PHY.BB_CTL_3 == 0x600005C4, "RF PHY BB_CTL_3 address"); - -#endif /* _ESP_PHY_REGS_H */ diff --git a/core/include/esp/rom.h b/core/include/esp/rom.h index 5c41e46..c2f8759 100644 --- a/core/include/esp/rom.h +++ b/core/include/esp/rom.h @@ -5,9 +5,7 @@ */ #ifndef _ESP_ROM_H #define _ESP_ROM_H - -#include "esp/types.h" -#include "flashchip.h" +#include #ifdef __cplusplus extern "C" { @@ -23,19 +21,8 @@ void Cache_Read_Disable(void); */ void Cache_Read_Enable(uint32_t odd_even, uint32_t mb_count, uint32_t no_idea); -/* Low-level SPI flash read/write routines */ -int Enable_QMode(sdk_flashchip_t *chip); -int Disable_QMode(sdk_flashchip_t *chip); -int SPI_page_program(sdk_flashchip_t *chip, uint32_t dest_addr, uint32_t *src_addr, uint32_t size); -int SPI_read_data(sdk_flashchip_t *chip, uint32_t src_addr, uint32_t *dest_addr, uint32_t size); -int SPI_write_enable(sdk_flashchip_t *chip); -int SPI_sector_erase(sdk_flashchip_t *chip, uint32_t addr); -int SPI_read_status(sdk_flashchip_t *chip, uint32_t *status); -int SPI_write_status(sdk_flashchip_t *chip, uint32_t status); -int Wait_SPI_Idle(sdk_flashchip_t *chip); - #ifdef __cplusplus } #endif -#endif /* _ESP_ROM_H */ +#endif diff --git a/core/include/esp/rtc_regs.h b/core/include/esp/rtc_regs.h index 1798498..4acb2a3 100644 --- a/core/include/esp/rtc_regs.h +++ b/core/include/esp/rtc_regs.h @@ -31,8 +31,7 @@ struct RTC_REGS { uint32_t volatile CTRL0; // 0x00 uint32_t volatile COUNTER_ALARM; // 0x04 uint32_t volatile RESET_REASON0; // 0x08 //FIXME: need better name - uint32_t volatile _unknownc; // 0x0c - uint32_t volatile _unknown10; // 0x10 + uint32_t volatile _unknownc[2]; // 0x0c - 0x10 uint32_t volatile RESET_REASON1; // 0x14 //FIXME: need better name uint32_t volatile RESET_REASON2; // 0x18 //FIXME: need better name uint32_t volatile COUNTER; // 0x1c @@ -41,10 +40,7 @@ struct RTC_REGS { uint32_t volatile INT_ENABLE; // 0x28 uint32_t volatile _unknown2c; // 0x2c uint32_t volatile SCRATCH[4]; // 0x30 - 3c - uint32_t volatile _unknown40; // 0x40 - uint32_t volatile _unknown44; // 0x44 - uint32_t volatile _unknown48; // 0x48 - uint32_t volatile _unknown4c[7]; // 0x4c - 0x64 + uint32_t volatile _unknown40[10]; // 0x40 - 0x64 uint32_t volatile GPIO_OUT; // 0x68 uint32_t volatile _unknown6c[2]; // 0x6c - 0x70 uint32_t volatile GPIO_ENABLE; // 0x74 diff --git a/core/include/esp/sar_regs.h b/core/include/esp/sar_regs.h deleted file mode 100644 index b0266b7..0000000 --- a/core/include/esp/sar_regs.h +++ /dev/null @@ -1,39 +0,0 @@ -/* esp/sar_regs.h - * - * ESP8266 register definitions for the "sar" region (0x3FF2xxx) - * - * The 0x60000D00 register region is referred to as "sar" by some old header - * files. Apparently referenced both by ROM I2C functions as well as ADC - * config/read functions. - * - * Not compatible with ESP SDK register access code. - */ - -#ifndef _ESP_SAR_REGS_H -#define _ESP_SAR_REGS_H - -#include "esp/types.h" -#include "common_macros.h" - -#define SAR_BASE 0x60000d00 -// Unfortunately, -// esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/sysroot/usr/include/xtensa/config/specreg.h -// already has a "SAR" macro definition which would conflict with this, so -// we'll use "ESPSAR" instead.. -#define ESPSAR (*(struct SAR_REGS *)(SAR_BASE)) - -/* Note: This memory region is not currently well understood. Pretty much all - * of the definitions here are from reverse-engineering the Espressif SDK code, - * many are just educated guesses, and almost certainly some are misleading or - * wrong. If you can improve on any of this, please contribute! - */ - -struct SAR_REGS { - uint32_t volatile _unknown0[18]; // 0x00 - 0x44 - uint32_t volatile UNKNOWN_48; // 0x48 : used by sdk_system_restart_in_nmi() -} __attribute__ (( packed )); - -_Static_assert(sizeof(struct SAR_REGS) == 0x4c, "SAR_REGS is the wrong size"); - -#endif /* _ESP_SAR_REGS_H */ - diff --git a/core/include/esp/spi.h b/core/include/esp/spi.h index 8c7620d..b3bc629 100644 --- a/core/include/esp/spi.h +++ b/core/include/esp/spi.h @@ -36,15 +36,6 @@ #define SPI_FREQ_DIV_40M SPI_GET_FREQ_DIV(1, 2) ///< 40MHz #define SPI_FREQ_DIV_80M SPI_GET_FREQ_DIV(1, 1) ///< 80MHz -/* - * Possible Data Structure of SPI Transaction - * - * [COMMAND]+[ADDRESS]+[DataOUT]+[DUMMYBITS]+[DataIN] - * - * [COMMAND]+[ADDRESS]+[DUMMYBITS]+[DataOUT] - * - */ - #ifdef __cplusplus extern "C" { @@ -196,8 +187,8 @@ inline uint32_t spi_get_frequency_div(uint8_t bus) inline uint32_t spi_get_frequency_hz(uint8_t bus) { return APB_CLK_FREQ / - (FIELD2VAL(SPI_CLOCK_DIV_PRE, SPI(bus).CLOCK) + 1) / - (FIELD2VAL(SPI_CLOCK_COUNT_NUM, SPI(bus).CLOCK) + 1); + (FIELD2VAL(SPI_CLOCK_DIV_PRE, SPI(bus).CLOCK) + 1) / + (FIELD2VAL(SPI_CLOCK_COUNT_NUM, SPI(bus).CLOCK) + 1); } /** @@ -230,8 +221,8 @@ void spi_set_endianness(uint8_t bus, spi_endianness_t endianness); inline spi_endianness_t spi_get_endianness(uint8_t bus) { return SPI(bus).USER0 & (SPI_USER0_WR_BYTE_ORDER | SPI_USER0_RD_BYTE_ORDER) - ? SPI_BIG_ENDIAN - : SPI_LITTLE_ENDIAN; + ? SPI_BIG_ENDIAN + : SPI_LITTLE_ENDIAN; } /** @@ -274,158 +265,6 @@ uint32_t spi_transfer_32(uint8_t bus, uint32_t data); */ size_t spi_transfer(uint8_t bus, const void *out_data, void *in_data, size_t len, spi_word_size_t word_size); -/** - * \brief Add permanent command bits when transfert data over SPI - * Example: - * - * spi_set_command(1, 1, 0x01); // Set one command bit to 1 - * for (uint8_t i = 0; i < x; i++ ) { - * spi_transfer_8(1, 0x55); // Send 1 bit command + 8 bits data x times - * } - * spi_clear_command(1); // Clear command - * spi_transfer_8(1, 0x55); // Send 8 bits data - * - * \param bus Bus ID: 0 - system, 1 - user - * \param bits Number of bits (max: 16). - * \param data Command to send for each transfert. - */ -static inline void spi_set_command(uint8_t bus, uint8_t bits, uint16_t data) -{ - if (!bits) return; - - SPI(bus).USER0 |= SPI_USER0_COMMAND; //enable COMMAND function in SPI module - uint16_t command; - // Commands are always sent using little endian byte order - if (!spi_get_msb(bus)) { - // "data" are natively little endian, with LSB bit order - // this makes all bits of the command ready to be sent as-is - command = data; - } else { - // MSB - command = data << (16 - bits); //align command data to high bits - command = ((command >> 8) & 0xff) | ((command << 8) & 0xff00); //swap byte order - } - SPI(bus).USER2 = SET_FIELD(SPI(bus).USER2, SPI_USER2_COMMAND_BITLEN, --bits); - SPI(bus).USER2 = SET_FIELD(SPI(bus).USER2, SPI_USER2_COMMAND_VALUE, command); -} - -/** - * \brief Add permanent address bits when transfert data over SPI - * Example: - * - * spi_set_address(1,8,0x45); // Set one address byte to 0x45 - * for (uint8_t i = 0 ; i < x ; i++ ) { - * spi_transfer_16(1,0xC584); // Send 16 bits address + 16 bits data x times - * } - * spi_clear_address(1); // Clear command - * spi_transfer_16(1,0x55); // Send 16 bits data - * - * \param bus Bus ID: 0 - system, 1 - user - * \param bits Number of bits (max: 32). - * \param data Address to send for each transfert. - */ -static inline void spi_set_address(uint8_t bus, uint8_t bits, uint32_t data) -{ - if (!bits) return; - - SPI(bus).USER0 |= SPI_USER0_ADDR; //enable ADDRess function in SPI module - // addresses are always sent using big endian byte order - if (spi_get_msb(bus)) { - SPI(bus).ADDR = data << (32 - bits); //align address data to high bits - } else { - // swap bytes from native little to command's big endian order - // bits in each byte are already arranged properly for LSB - SPI(bus).ADDR = (data & 0xff) << 24 | (data & 0xff00) << 8 | ((data >> 8) & 0xff00) | ((data >> 24) & 0xff); - } - SPI(bus).USER1 = SET_FIELD(SPI(bus).USER1, SPI_USER1_ADDR_BITLEN, --bits); -} - -/** - * \brief Add permanent dummy bits when transfert data over SPI - * Example: - * - * spi_set_dummy_bits(1, 4, false); // Set 4 dummy bit before Dout - * for (uint8_t i = 0; i < x; i++ ) { - * spi_transfer_16(1, 0xC584); // Send 4 bits dummy + 16 bits Dout x times - * } - * spi_set_dummy_bits(1, 4, true); // Set 4 dummy bit between Dout and Din - * spi_transfer_8(1, 0x55); // Send 8 bits Dout + 4 bits dummy + 8 bits Din - * - * \param bus Bus ID: 0 - system, 1 - user - * \param bits Number of bits - * \param pos Position of dummy bit, between Dout and Din if true. - */ -static inline void spi_set_dummy_bits(uint8_t bus, uint8_t bits, bool pos) -{ - if (!bits) return; - if (pos) - SPI(bus).USER0 |= SPI_USER0_MISO; // Dummy bit will be between Dout and Din data if set - SPI(bus).USER0 |= SPI_USER0_DUMMY; //enable dummy bits - SPI(bus).USER1 = SET_FIELD(SPI(bus).USER1, SPI_USER1_DUMMY_CYCLELEN, --bits); -} - -/** - * \brief Clear adress Bits - * \param bus Bus ID: 0 - system, 1 - user - */ -static inline void spi_clear_address(uint8_t bus) -{ - SPI(bus).USER0 &= ~(SPI_USER0_ADDR); -} - -/** - * \brief Clear command Bits - * \param bus Bus ID: 0 - system, 1 - user - */ - -static inline void spi_clear_command(uint8_t bus) -{ - SPI(bus).USER0 &= ~(SPI_USER0_COMMAND); -} - -/** - * \brief Clear dummy Bits - * \param bus Bus ID: 0 - system, 1 - user - */ -static inline void spi_clear_dummy(uint8_t bus) -{ - SPI(bus).USER0 &= ~(SPI_USER0_DUMMY | SPI_USER0_MISO); -} - -/** - * \brief Send many 8 bits template over SPI - * \param bus Bus ID: 0 - system, 1 - user - * \param data Byte template (8 bits) - * \param repeats Copy byte number - */ -void spi_repeat_send_8(uint8_t bus, uint8_t data, int32_t repeats); - -/** - * \brief Send many 16 bits template over SPI - * \param bus Bus ID: 0 - system, 1 - user - * \param data Word template (16 bits) - * \param repeats Copy word number - */ -void spi_repeat_send_16(uint8_t bus, uint16_t data, int32_t repeats); - -/** - * \brief Send many 32 bits template over SPI - * \param bus Bus ID: 0 - system, 1 - user - * \param data Dualword template (32 bits) - * \param repeats Copy dword number - */ -void spi_repeat_send_32(uint8_t bus, uint32_t data, int32_t repeats); - -/** - * \brief Repeatedly send byte over SPI and receive data - * \param bus Bus ID: 0 - system, 1 - user - * \param out_byte Byte to send - * \param in_data Receive buffer - * \param len Buffer size in words - * \param word_size Size of the word - */ -void spi_read(uint8_t bus, uint8_t out_byte, void *in_data, size_t len, spi_word_size_t word_size); - #ifdef __cplusplus } #endif diff --git a/core/include/esp/spi_regs.h b/core/include/esp/spi_regs.h index 83b61af..37eb113 100644 --- a/core/include/esp/spi_regs.h +++ b/core/include/esp/spi_regs.h @@ -46,7 +46,22 @@ struct SPI_REGS { uint32_t volatile SLAVE1; // 0x34 uint32_t volatile SLAVE2; // 0x38 uint32_t volatile SLAVE3; // 0x3c - uint32_t volatile W[16]; // 0x40 - 0x7c + uint32_t volatile W0; // 0x40 + uint32_t volatile W1; // 0x44 + uint32_t volatile W2; // 0x48 + uint32_t volatile W3; // 0x4c + uint32_t volatile W4; // 0x50 + uint32_t volatile W5; // 0x54 + uint32_t volatile W6; // 0x58 + uint32_t volatile W7; // 0x5c + uint32_t volatile W8; // 0x60 + uint32_t volatile W9; // 0x64 + uint32_t volatile W10; // 0x68 + uint32_t volatile W11; // 0x6c + uint32_t volatile W12; // 0x70 + uint32_t volatile W13; // 0x74 + uint32_t volatile W14; // 0x78 + uint32_t volatile W15; // 0x7c uint32_t volatile _unused[28]; // 0x80 - 0xec uint32_t volatile EXT0; // 0xf0 uint32_t volatile EXT1; // 0xf4 @@ -58,19 +73,6 @@ _Static_assert(sizeof(struct SPI_REGS) == 0x100, "SPI_REGS is the wrong size"); /* Details for CMD register */ -#define SPI_CMD_READ BIT(31) -#define SPI_CMD_WRITE_ENABLE BIT(30) -#define SPI_CMD_WRITE_DISABLE BIT(29) -#define SPI_CMD_READ_ID BIT(28) -#define SPI_CMD_READ_SR BIT(27) -#define SPI_CMD_WRITE_SR BIT(26) -#define SPI_CMD_PP BIT(25) -#define SPI_CMD_SE BIT(24) -#define SPI_CMD_BE BIT(23) -#define SPI_CMD_CE BIT(22) -#define SPI_CMD_DP BIT(21) -#define SPI_CMD_RES BIT(20) -#define SPI_CMD_HPM BIT(19) #define SPI_CMD_USR BIT(18) /* Details for CTRL0 register */ diff --git a/core/include/esp/types.h b/core/include/esp/types.h index 53c4cd4..cb816da 100644 --- a/core/include/esp/types.h +++ b/core/include/esp/types.h @@ -3,7 +3,6 @@ #include #include -#include typedef volatile uint32_t *esp_reg_t; diff --git a/core/include/esp/uart.h b/core/include/esp/uart.h index 166de29..9d72dc3 100644 --- a/core/include/esp/uart.h +++ b/core/include/esp/uart.h @@ -124,50 +124,4 @@ static inline int uart_get_baud(int uart_num) return APB_CLK_FREQ / FIELD2VAL(UART_CLOCK_DIVIDER_VALUE, UART(uart_num).CLOCK_DIVIDER); } -/* Set uart stop bit count to the desired value */ -static inline void uart_set_stopbits(int uart_num, UART_StopBits stop_bits) { - UART(uart_num).CONF0 = SET_FIELD(UART(uart_num).CONF0, UART_CONF0_STOP_BITS, stop_bits); -} - -/* Returns the current stopbit count for the UART */ -static inline UART_StopBits uart_get_stopbits(int uart_num) { - return (UART_StopBits)(FIELD2VAL(UART_CONF0_STOP_BITS, UART(uart_num).CONF0)); -} - -/* Set if uart parity bit should be enabled */ -static inline void uart_set_parity_enabled(int uart_num, bool enable) { - if(enable) - UART(uart_num).CONF0 = SET_MASK_BITS(UART(uart_num).CONF0, UART_CONF0_PARITY_ENABLE); - else - UART(uart_num).CONF0 = CLEAR_MASK_BITS(UART(uart_num).CONF0, UART_CONF0_PARITY_ENABLE); -} - -/* Set uart parity bit type */ -static inline void uart_set_parity(int uart_num, UART_Parity parity) { - if(parity == UART_PARITY_EVEN) - UART(uart_num).CONF0 = CLEAR_MASK_BITS(UART(uart_num).CONF0, UART_CONF0_PARITY); - else - UART(uart_num).CONF0 = SET_MASK_BITS(UART(uart_num).CONF0, UART_CONF0_PARITY); -} - -/* Returns if parity bit is currently enabled for UART uart_num */ -static inline bool uart_get_parity_enabled(int uart_num) { - return ((UART(uart_num).CONF0 & UART_CONF0_PARITY_ENABLE) != 0); -} - -/* Returns the current parity bit type for UART uart_num (also if parity bit is not enabled) */ -static inline UART_Parity uart_get_parity(int uart_num) { - return (UART_Parity)((UART(uart_num).CONF0 & UART_CONF0_PARITY) != 0); -} - -/* Set uart data bits length to the desired value */ -static inline void uart_set_byte_length(int uart_num, UART_ByteLength byte_length) { - UART(uart_num).CONF0 = SET_FIELD(UART(uart_num).CONF0, UART_CONF0_BYTE_LEN, byte_length); -} - -/* Returns the current data bits length for the UART */ -static inline UART_ByteLength uart_get_byte_length(int uart_num) { - return (UART_ByteLength)(FIELD2VAL(UART_CONF0_BYTE_LEN, UART(uart_num).CONF0)); -} - #endif /* _ESP_UART_H */ diff --git a/core/include/esp/uart_regs.h b/core/include/esp/uart_regs.h index 66f14ae..671754d 100644 --- a/core/include/esp/uart_regs.h +++ b/core/include/esp/uart_regs.h @@ -50,25 +50,6 @@ struct UART_REGS { _Static_assert(sizeof(struct UART_REGS) == 0x80, "UART_REGS is the wrong size"); -typedef enum { - UART_STOPBITS_0 = 0b00, - UART_STOPBITS_1 = 0b01, - UART_STOPBITS_1_5 = 0b10, - UART_STOPBITS_2 = 0b11 -} UART_StopBits; - -typedef enum { - UART_PARITY_EVEN = 0b0, - UART_PARITY_ODD = 0b1 -} UART_Parity; - -typedef enum { - UART_BYTELENGTH_5 = 0b00, - UART_BYTELENGTH_6 = 0b01, - UART_BYTELENGTH_7 = 0b10, - UART_BYTELENGTH_8 = 0b11, -} UART_ByteLength; - /* Details for FIFO register */ #define UART_FIFO_DATA_M 0x000000ff @@ -172,7 +153,7 @@ typedef enum { #define UART_CONF0_BYTE_LEN_M 0x00000003 #define UART_CONF0_BYTE_LEN_S 2 #define UART_CONF0_PARITY_ENABLE BIT(1) -#define UART_CONF0_PARITY BIT(0) //where 0 means even +#define UART_CONF0_PARITY BIT(0) //FIXME: does this indicate odd or even? /* Details for CONF1 register */ diff --git a/core/include/esp/wdt_regs.h b/core/include/esp/wdt_regs.h index 6e73769..66bf1d0 100644 --- a/core/include/esp/wdt_regs.h +++ b/core/include/esp/wdt_regs.h @@ -25,9 +25,7 @@ struct WDT_REGS { uint32_t volatile CTRL; // 0x00 uint32_t volatile REG1; // 0x04 uint32_t volatile REG2; // 0x08 - // Current value, decrementing - uint32_t volatile VAL; // 0x0c - uint32_t volatile _unused[1]; // 0x10 + uint32_t volatile _unused[2]; // 0x0c - 0x10 uint32_t volatile FEED; // 0x14 }; diff --git a/core/include/flashchip.h b/core/include/flashchip.h deleted file mode 100644 index c3edbe4..0000000 --- a/core/include/flashchip.h +++ /dev/null @@ -1,41 +0,0 @@ -/* flashchip.h - * - * sdk_flashchip_t structure used by the SDK and some bootrom routines - * - * This is in a separate include file because it's referenced by several other - * headers which are otherwise independent of each other. - * - * Part of esp-open-rtos - * Copyright (C) 2015 Alex Stewart and Angus Gratton - * BSD Licensed as described in the file LICENSE - */ - -#ifndef _FLASHCHIP_H -#define _FLASHCHIP_H - -/* SDK/bootrom uses this structure internally to account for flash size. - - chip_size field is initialised during startup from the flash size - saved in the image header (on the first 8 bytes of SPI flash). - - Other field are initialised to hardcoded values by the SDK. - - ** NOTE: This structure is passed to some bootrom routines and is therefore - fixed. Be very careful if you want to change it that you do not break - things. ** - - Based on RE work by @foogod at - http://esp8266-re.foogod.com/wiki/Flashchip_%28IoT_RTOS_SDK_0.9.9%29 -*/ -typedef struct { - uint32_t device_id; - uint32_t chip_size; /* in bytes */ - uint32_t block_size; /* in bytes */ - uint32_t sector_size; /* in bytes */ - uint32_t page_size; /* in bytes */ - uint32_t status_mask; -} sdk_flashchip_t; - -extern sdk_flashchip_t sdk_flashchip; - -#endif /* _FLASHCHIP_H */ diff --git a/core/include/sdk_internal.h b/core/include/sdk_internal.h index a4e21c6..b8233fd 100644 --- a/core/include/sdk_internal.h +++ b/core/include/sdk_internal.h @@ -4,7 +4,6 @@ #include "espressif/esp_wifi.h" #include "espressif/spi_flash.h" #include "espressif/phy_info.h" -#include "etstimer.h" #include "lwip/netif.h" /////////////////////////////////////////////////////////////////////////////// @@ -14,134 +13,33 @@ // 'info' is declared in app_main.o at .bss+0x4 struct sdk_info_st { - ip4_addr_t softap_ipaddr; // 0x00 - ip4_addr_t softap_netmask; // 0x04 - ip4_addr_t softap_gw; // 0x08 - ip4_addr_t sta_ipaddr; // 0x0c - ip4_addr_t sta_netmask; // 0x10 - ip4_addr_t sta_gw; // 0x14 - uint8_t softap_mac_addr[6]; // 0x18 - uint8_t sta_mac_addr[6]; // 0x1e + uint32_t _unknown0; + uint32_t _unknown1; + uint32_t _unknown2; + uint8_t _unknown3[12]; + uint8_t softap_mac_addr[6]; + uint8_t sta_mac_addr[6]; }; +extern struct sdk_info_st sdk_info; -struct wl_channel { - uint8_t _unknown00; - uint8_t _unknown01; - uint8_t _unknown02; - uint8_t _unknown03; - uint8_t _unknown04; - uint8_t _unknown05; - uint8_t num; // eagle_auth_done +// 'rst_if' is declared in user_interface.o at .bss+0xfc + +struct sdk_rst_if_st { + uint32_t version; + uint8_t _unknown[28]; }; +extern struct sdk_rst_if_st sdk_rst_if; -struct _unknown_softap2 { - uint32_t _unknown00; - uint32_t _unknown04; - uint32_t _unknown08; - uint32_t _unknown0c; - uint32_t _unknown10[8]; // block copied from sdk_g_ic.s._unknown28c - uint32_t _unknown30; - uint32_t _unknown34; - uint32_t *_unknown38; - uint8_t *_unknown3c; // string copied from sdk_g_ic.s._unknown2ac - uint32_t _unknown40[29]; - uint32_t _unknownb4; // 300 - uint32_t _unknownb8[5]; -}; - - -struct _unknown_softap1 { - uint32_t _unknown00; - struct _unknown_softap2 *_unknown04; - uint32_t _unknown08[4]; - uint32_t *_unknown18; // result of sdk_wpa_init, dynamically allocated object. -}; - - -struct _unknown_wpa1 { - uint32_t _unknown00; // 1, 2, 3 - uint32_t _unknown04; // 2 - uint32_t _unknown08; // 10 - uint32_t _unknown0c; - uint32_t _unknown10; - uint32_t _unknown14; - uint32_t _unknown18; - uint32_t _unknown1c; - uint32_t _unknown20; // 10 - uint32_t _unknown24; - uint32_t _unknown28; - uint32_t _unknown2c; - uint32_t _unknown30; - uint32_t _unknown34; - uint32_t _unknown38; - uint32_t _unknown3c; - uint32_t _unknown40; // 2 - uint32_t _unknown44; - uint32_t _unknown48; -}; - - -struct sdk_cnx_node { - uint8_t mac_addr[6]; - uint8_t _unknown07[2]; - - uint32_t _unknown08; // eagle_auth_done - - uint32_t _unknown0c[3]; - - int8_t _unknown18; // eagle_auth_done - int8_t _unknown19; - int8_t _unknown1a; - int8_t _unknown1b; - - uint32_t _unknown1c[23]; - - struct wl_channel *channel; // 0x78 eagle_auth_done - - uint32_t _unknown7c[8]; - - uint16_t _unknown9c; // ieee80211_hostap. increases by one one each timer func called. - uint16_t _unknown9e; - - uint32_t _unknowna0[17]; - - void *_unknowne4; - - uint8_t _unknowne8; // - uint8_t _unknowne9; // ppInstallKey - int8_t _unknownea; - int8_t _unknowneb; - - uint32_t _unknownec[7]; - - uint32_t _unknown108; // hostap_handle_timer count -}; - +// 'g_ic' is declared in libnet80211/ieee80211.o at .bss+0x0 +// See also: http://esp8266-re.foogod.com/wiki/G_ic_(IoT_RTOS_SDK_0.9.9) struct sdk_g_ic_netif_info { - struct netif *netif; // 0x00 - ETSTimer timer; // 0x04 - 0x20 - uint8_t _unknown20[28]; // 0x20 - 0x3c - uint32_t _unknown3c; // 0x3c (referenced by sdk_wifi_station_disconnect) - uint8_t _unknown40[6]; // 0x40 - 0x46 - uint8_t _unknown46[2]; // 0x46 - 0x47 - uint32_t _unknown48; // 0x48 - uint8_t _unknown4c; // 0x4c - uint8_t _unknown4d[59]; // 0x4d - 0x88 - struct sdk_cnx_node *_unknown88; // 0x88 - uint32_t _unknown8c; // 0x8c - struct sdk_cnx_node *cnx_nodes[6]; // 0x90 - 0xa8 - uint8_t _unknowna8[12]; // 0xa8 - 0xb4 - struct _unknown_softap1 *_unknownb4; - uint8_t statusb8; // 0xb8 (arg of sta_status_set) - uint8_t statusb9; // 0xb9 (compared to arg of sta_status_set) - uint8_t connect_status; // 0xba (result of wifi_station_get_connect_status) - uint8_t started; // 0xbb (referenced by sdk_wifi_station_start / sdk_wifi_station_stop) + struct netif *netif; + //TODO: rest of this structure is unknown. }; - // This is the portion of g_ic which is not loaded/saved to the flash ROM, and // starts out zeroed on every boot. struct sdk_g_ic_volatile_st { @@ -167,11 +65,9 @@ struct sdk_g_ic_volatile_st { uint8_t _unknown7e; uint8_t _unknown7f; - uint32_t _unknown80; + uint8_t _unknown80[204]; - uint32_t _unknown84[50]; // wifi_softap_start, channels. - - void * volatile _unknown14c; // wifi_softap_start, current channel, arg to ieee80211_chan2ieee + void *_unknown14c; uint8_t _unknown150[20]; @@ -188,7 +84,8 @@ struct sdk_g_ic_volatile_st { void *_unknown184; struct station_info *station_info_head; struct station_info *station_info_tail; - void *_unknown190[2]; // cnx_sta_leave + uint32_t _unknown190; + uint32_t _unknown194; uint8_t _unknown198[40]; @@ -207,10 +104,9 @@ struct sdk_g_ic_volatile_st { uint8_t _unknown1d5[3]; }; - -struct sdk_g_ic_ssid_with_length { - uint32_t ssid_length; // 0x1e4 sdk_wpa_config_profile - uint8_t ssid[32]; // 0x1e8 Station ssid. Null terminated string. +struct sdk_g_ic_unk0_st { + uint32_t _unknown1e4; + uint8_t _unknown1e8[32]; }; // This is the portion of g_ic which is loaded/saved to the flash ROM, and thus @@ -223,46 +119,40 @@ struct sdk_g_ic_saved_st { uint8_t wifi_mode; uint8_t wifi_led_enable; uint8_t wifi_led_gpio; - uint8_t wifi_led_state; // 0 or 1. + uint8_t _unknown1e3; - // Current station ap config ssid and length. - struct sdk_g_ic_ssid_with_length sta_ssid; // 0x1e4 + struct sdk_g_ic_unk0_st _unknown1e4; uint8_t _unknown208; - uint8_t _unknown209; // sdk_wpa_config_profile - uint8_t _unknown20a; // sdk_wpa_config_profile + uint8_t _unknown209; + uint8_t _unknown20a; uint8_t _unknown20b; - uint8_t _unknown20c; // sdk_wpa_config_profile + uint8_t _unknown20c; uint8_t _unknown20d; uint8_t _unknown20e; - uint8_t sta_password[64]; // 0x20f Null terminated string. + uint8_t _unknown20f[64]; uint8_t _unknown24f; uint8_t _unknown250[49]; - uint8_t sta_bssid_set; // 0x281 One if bssid is used, otherwise zero. + uint8_t _unknown281; - uint8_t sta_bssid[6]; // 0x282 + uint8_t _unknown282[6]; - uint16_t _unknown288; - uint16_t _unknown28a; + uint32_t _unknown288; uint8_t _unknown28c; - uint8_t _unknown28d[21]; + uint8_t _unknown28d[31]; - uint8_t _unknown2a0; // used in dhcp_bind_check wpa_main.o - - uint8_t _unknown2a1[9]; - - char _unknown2ac[64]; // string. + uint8_t _unknown2ac[64]; uint8_t _unknonwn2ec; uint8_t _unknown2ed[32]; - uint8_t _unknown30d; // result of ieee80211_chan2ieee + uint8_t _unknown30d; uint8_t _unknown30e; uint8_t _unknown30f; - uint8_t _unknown310; // count of entries in the softap cnx_node array, less two. + uint8_t _unknown310; uint8_t _unknown311[3]; @@ -296,20 +186,7 @@ struct sdk_g_ic_st { struct sdk_g_ic_saved_st s; // 0x1d8 - 0x548 }; - - -struct esf_buf { - struct pbuf *pbuf1; // 0x00 - struct pbuf *pbuf2; // 0x04 - uint32_t *_unknown8_; // 0x08 - uint32_t *_unknownc_; // 0x0c - uint8_t *frame; // 0x10 IEEE-802.11 payload data? - uint16_t _unknown14_; // 0x14 - uint16_t length; // 0x16 - uint32_t *_unknown18_; // 0x18 - struct esf_buf *next; // 0x1c Free list. - void *extra; // 0x20 -}; +extern struct sdk_g_ic_st sdk_g_ic; /////////////////////////////////////////////////////////////////////////////// // The above structures all refer to data regions outside our control, and a @@ -320,60 +197,37 @@ struct esf_buf { /////////////////////////////////////////////////////////////////////////////// _Static_assert(sizeof(struct sdk_info_st) == 0x24, "info_st is the wrong size!"); -_Static_assert(offsetof(struct sdk_info_st, sta_mac_addr) == 0x1e, "bad struct"); - -_Static_assert(offsetof(struct wl_channel, num) == 0x06, "bad struct"); - -_Static_assert(sizeof(struct _unknown_softap2) == 0xcc, "_unknown_softap2 is the wrong size!"); -_Static_assert(offsetof(struct _unknown_softap2, _unknownb8) == 0xb8, "bad struct"); - -_Static_assert(sizeof(struct _unknown_softap1) == 0x1c, "_unknown_softap1 is the wrong size!"); -_Static_assert(offsetof(struct _unknown_softap1, _unknown18) == 0x18, "bad struct"); - -_Static_assert(sizeof(struct _unknown_wpa1) == 0x4c, "_unknown_wpa1 is the wrong size!"); -_Static_assert(offsetof(struct _unknown_wpa1, _unknown48) == 0x48, "bad struct"); - -_Static_assert(offsetof(struct sdk_cnx_node, channel) == 0x78, "bad struct"); -_Static_assert(offsetof(struct sdk_cnx_node, _unknown108) == 0x108, "bad struct"); - -_Static_assert(offsetof(struct sdk_g_ic_netif_info, started) == 0xbb, "bad struct"); - +_Static_assert(sizeof(struct sdk_rst_if_st) == 0x20, "sdk_rst_if_st is the wrong size!"); _Static_assert(sizeof(struct sdk_g_ic_volatile_st) == 0x1d8, "sdk_g_ic_volatile_st is the wrong size!"); -_Static_assert(offsetof(struct sdk_g_ic_volatile_st, _unknown1d5) == 0x1d5, "bad struct"); - _Static_assert(sizeof(struct sdk_g_ic_saved_st) == 0x370, "sdk_g_ic_saved_st is the wrong size!"); -_Static_assert(offsetof(struct sdk_g_ic_saved_st, sta_ssid) == 0x1e4 - 0x1d8, "bad struct"); -_Static_assert(offsetof(struct sdk_g_ic_saved_st, _unknown546) == 0x546 - 0x1d8, "bad struct"); - _Static_assert(sizeof(struct sdk_g_ic_st) == 0x548, "sdk_g_ic_st is the wrong size!"); -_Static_assert(sizeof(struct esf_buf) == 0x24, "struct esf_buf: wrong size"); -_Static_assert(offsetof(struct esf_buf, extra) == 0x20, "bad struct"); -_Static_assert(offsetof(struct esf_buf, length) == 0x16, "bad struct"); +/////////////////////////////////////////////////////////////////////////////// +// Function Prototypes // +/////////////////////////////////////////////////////////////////////////////// -// The SDK access some slots in lwip structures. - -// The netif->state is initialized in netif_add within lwip with a struct -// sdk_g_ic_netif_info, see sdk_wifi_station_start and sdk_wifi_softap_start. -// There is a known sdk read of the netif->state in ieee80211_output.o -// ieee80211_output_pbuf and perhaps elsewhere. The value is just passed through -// lwip and and not used by lwip so just ensure this slot is at the expected -// offset. -_Static_assert(offsetof(struct netif, state) == 4, "netif->state offset wrong!"); - -// Some sdk uses of netif->hwaddr have been converted to source code, but many -// remain, but the content of this slot should not change in future versions of -// lwip, so just ensure it is at the expected offset. Note the sdk binary -// libraries have been patched to move this offset from 41 to 42 to keep it -// 16-bit aligned to keep lwip v2 happy. -_Static_assert(offsetof(struct netif, hwaddr) == 8, "netif->hwaddr offset wrong!"); - -_Static_assert(offsetof(struct pbuf, esf_buf) == 16, "pbuf->esf_buf offset wrong!"); - - -/// Misc. - -err_t ethernetif_init(struct netif *netif); -void ethernetif_input(struct netif *netif, struct pbuf *p); +sdk_SpiFlashOpResult sdk_SPIRead(uint32_t src_addr, uint32_t *des_addr, uint32_t size); +sdk_SpiFlashOpResult sdk_SPIWrite(uint32_t des_addr, uint32_t *src_addr, uint32_t size); +void sdk_cnx_attach(struct sdk_g_ic_st *); +void sdk_ets_timer_init(void); +void sdk_ieee80211_ifattach(struct sdk_g_ic_st *, uint8_t *); +void sdk_ieee80211_phy_init(enum sdk_phy_mode); +void sdk_lmacInit(void); +void sdk_phy_disable_agc(void); +void sdk_phy_enable_agc(void); +void sdk_pm_attach(void); +void sdk_pp_attach(void); +void sdk_pp_soft_wdt_init(void); +int sdk_register_chipv6_phy(sdk_phy_info_t *); +void sdk_sleep_reset_analog_rtcreg_8266(void); +uint32_t sdk_system_get_checksum(uint8_t *, uint32_t); +void sdk_system_restart_in_nmi(void); +void sdk_wDevEnableRx(void); +void sdk_wDev_Initialize(void); +void sdk_wifi_mode_set(uint8_t); +void sdk_wifi_softap_cacl_mac(uint8_t *, uint8_t *); +void sdk_wifi_softap_set_default_ssid(void); +void sdk_wifi_softap_start(void); +void sdk_wifi_station_start(void); #endif /* _INTERNAL_SDK_STRUCTURES_H */ diff --git a/core/include/spiflash.h b/core/include/spiflash.h deleted file mode 100644 index f8397db..0000000 --- a/core/include/spiflash.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * The MIT License (MIT) - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef __SPIFLASH_H__ -#define __SPIFLASH_H__ - -#include -#include -#include "common_macros.h" - -#define SPI_FLASH_SECTOR_SIZE 4096 - -/** - * Read data from SPI flash. - * - * @param addr Address to read from. Can be not aligned. - * @param buf Buffer to read to. Doesn't have to be aligned. - * @param size Size of data to read. Buffer size must be >= than data size. - * - * @return true if success, otherwise false - */ -bool IRAM spiflash_read(uint32_t addr, uint8_t *buf, uint32_t size); - -/** - * Write data to SPI flash. - * - * @param addr Address to write to. Can be not aligned. - * @param buf Buffer of data to write to flash. Doesn't have to be aligned. - * @param size Size of data to write. Buffer size must be >= than data size. - * - * @return true if success, otherwise false - */ -bool IRAM spiflash_write(uint32_t addr, uint8_t *buf, uint32_t size); - -/** - * Erase a sector. - * - * @param addr Address of sector to erase. Must be sector aligned. - * - * @return true if success, otherwise false - */ -bool IRAM spiflash_erase_sector(uint32_t addr); - -#endif // __SPIFLASH_H__ diff --git a/core/include/stdout_redirect.h b/core/include/stdout_redirect.h deleted file mode 100644 index 29410a9..0000000 --- a/core/include/stdout_redirect.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Part of esp-open-rtos - * Copyright (C) 2016 Oto Petrik - * BSD Licensed as described in the file LICENSE - */ - -#ifndef _STDOUT_REDIRECT_H_ -#define _STDOUT_REDIRECT_H_ - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -typedef ssize_t _WriteFunction(struct _reent *r, int fd, const void *ptr, size_t len); - -/** Set implementation of write syscall for stdout. - * - * Use this function to redirect stdout for further processing (save to file, send over network). - * It may be good idea to save result of `get_write_stdout()` beforehand and call - * it at the end of the supplied function. - * - * NOTE: use NULL to reset to default implementation. - * - * @param[in] f New code to handle stdout output - * - */ -void set_write_stdout(_WriteFunction *f); - -/** Get current implementation of write syscall for stdout. - * - * Save returned value before calling `set_write_stdout`, it allows for chaining - * multiple independent handlers. - * - * @returns current stdout handler - */ -_WriteFunction *get_write_stdout(); - -#ifdef __cplusplus -} -#endif - -#endif /* _STDOUT_REDIRECT_H_ */ diff --git a/core/include/sysparam.h b/core/include/sysparam.h deleted file mode 100644 index 130bd05..0000000 --- a/core/include/sysparam.h +++ /dev/null @@ -1,467 +0,0 @@ -/* - * Part of esp-open-rtos - * Copyright (C) 2016 Alex Stewart - * BSD Licensed as described in the file LICENSE - */ - -#ifndef _SYSPARAM_H_ -#define _SYSPARAM_H_ - -#include - -#ifndef DEFAULT_SYSPARAM_SECTORS -#define DEFAULT_SYSPARAM_SECTORS 4 -#endif - -/** @file sysparam.h - * - * Read/write "system parameters" to persistent flash. - * - * System parameters are stored as key/value pairs. Keys are string values - * between 1 and 65535 characters long. Values can be any data up to 65535 - * bytes in length (but are most commonly also text strings). Up to 126 key/ - * value pairs can be stored at a time. - * - * Keys and values are stored in flash using a progressive list structure - * which allows space-efficient storage and minimizes flash erase cycles, - * improving write speed and increasing the lifespan of the flash memory. - */ - -/** Status codes returned by all sysparam functions - * - * Error codes (`SYSPARAM_ERR_*`) all have values less than zero, and can be - * returned by any function. Values greater than zero are non-error status - * codes which may be returned by some functions to indicate various results. - */ -typedef enum { - SYSPARAM_OK = 0, ///< Success - SYSPARAM_NOTFOUND = 1, ///< Entry not found matching criteria - SYSPARAM_PARSEFAILED = 2, ///< Unable to parse retrieved value - SYSPARAM_ERR_NOINIT = -1, ///< sysparam_init() must be called first - SYSPARAM_ERR_BADVALUE = -2, ///< One or more arguments were invalid - SYSPARAM_ERR_FULL = -3, ///< No space left in sysparam area (or too many keys in use) - SYSPARAM_ERR_IO = -4, ///< I/O error reading/writing flash - SYSPARAM_ERR_CORRUPT = -5, ///< Sysparam region has bad/corrupted data - SYSPARAM_ERR_NOMEM = -6, ///< Unable to allocate memory -} sysparam_status_t; - -/** Structure used by sysparam_iter_next() to keep track of its current state - * and return its results. This should be initialized by calling - * sysparam_iter_start() and cleaned up afterward by calling - * sysparam_iter_end(). - */ -typedef struct { - char *key; - uint8_t *value; - size_t key_len; - size_t value_len; - bool binary; - size_t bufsize; - struct sysparam_context *ctx; -} sysparam_iter_t; - -/** Initialize sysparam and set up the current area of flash to use. - * - * This must be called (and return successfully) before any other sysparam - * routines (except sysparam_create_area()) are called. - * - * This should normally be taken care of automatically on boot by the OS - * startup routines. It may be necessary to call it specially, however, if - * the normal initialization failed, or after calling sysparam_create_area() - * to reformat the current area. - * - * This routine will start at `base_addr` and scan all sectors up to - * `top_addr` looking for a valid sysparam area. If `top_addr` is zero (or - * equal to `base_addr`, then only the sector at `base_addr` will be checked. - * - * @param[in] base_addr The flash address to start looking for the start of - * the (already present) sysparam area - * @param[in] top_addr The flash address to stop looking for the sysparam - * area - * - * @retval ::SYSPARAM_OK Initialization successful. - * @retval ::SYSPARAM_NOTFOUND The specified address does not appear to - * contain a sysparam area. It may be - * necessary to call sysparam_create_area() to - * create one first. - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_init(uint32_t base_addr, uint32_t top_addr); - -/** Create a new sysparam area in flash at the specified address. - * - * By default, this routine will scan the specified area to make sure it - * appears to be empty (i.e. all 0xFF bytes) before setting it up as a new - * sysparam area. If there appears to be other data already present, it will - * not overwrite it. Setting `force` to `true` will cause it to clobber any - * existing data instead. - * - * @param[in] base_addr The flash address at which it should start - * (must be a multiple of the sector size) - * @param[in] num_sectors The number of flash sectors to use for the sysparam - * area. This should be an even number >= 2. Note - * that the actual amount of useable parameter space - * will be roughly half this amount. - * @param[in] force Proceed even if the space does not appear to be empty - * - * @retval ::SYSPARAM_OK Area (re)created successfully. - * @retval ::SYSPARAM_NOTFOUND `force` was not specified, and the area at - * `base_addr` appears to have other data. No - * action taken. - * @retval ::SYSPARAM_ERR_BADVALUE The `num_sectors` value was not even (or - * was zero) - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - * - * Note: This routine can create a sysparam area in another location than the - * one currently being used, but does not change which area is currently used - * (you will need to call sysparam_init() again if you want to do that). If - * you reformat the area currently being used, you will also need to call - * sysparam_init() again afterward before you will be able to continue using - * it. - */ -sysparam_status_t sysparam_create_area(uint32_t base_addr, uint16_t num_sectors, bool force); - -/** Get the start address and size of the currently active sysparam area - * - * Fills in `base_addr` and `num_sectors` with the location and size of the - * currently active sysparam area. The returned values correspond to the - * arguments passed to the sysparam_create_area() call when the area was - * originally created. - * - * @param[out] base_addr The flash address at which the sysparam area starts - * @param[out] num_sectors The number of flash sectors used by the sysparam - * area - * - * @retval ::SYSPARAM_OK Completed successfully - * @retval ::SYSPARAM_ERR_NOINIT No current sysparam area is active - */ -sysparam_status_t sysparam_get_info(uint32_t *base_addr, uint32_t *num_sectors); - -/** Compact the sysparam area. - * - * This also flattens the log. - * - * @retval ::SYSPARAM_OK Completed successfully - * @retval ::SYSPARAM_ERR_NOINIT No current sysparam area is active - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_compact(); - -/** Get the value associated with a key - * - * This is the core "get value" function. It will retrieve the value for the - * specified key in a freshly malloc()'d buffer and return it. Raw values can - * contain any data (including zero bytes), so the `actual_length` parameter - * should be used to determine the length of the data in the buffer. - * - * It is up to the caller to free() the returned buffer when done using it. - * - * Note: If the status result is anything other than ::SYSPARAM_OK, the value - * in `destptr` is not changed. This means it is possible to set a default - * value before calling this function which will be left as-is if a sysparam - * value could not be successfully read. - * - * @param[in] key Key name (zero-terminated string) - * @param[out] destptr Pointer to a location to hold the address of the - * returned data buffer - * @param[out] actual_length Pointer to a location to hold the length of the - * returned data buffer (may be NULL) - * @param[out] is_binary Pointer to a bool to hold whether the returned - * value is "binary" or not (may be NULL) - * - * @retval ::SYSPARAM_OK Value successfully retrieved. - * @retval ::SYSPARAM_NOTFOUND Key/value not found. No buffer returned. - * @retval ::SYSPARAM_ERR_NOINIT sysparam_init() must be called first - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_get_data(const char *key, uint8_t **destptr, size_t *actual_length, bool *is_binary); - -/** Get the value associated with a key (static value buffer) - * - * This performs the same function as sysparam_get_data() but without - * allocating memory for the result value. It can thus be used before the heap - * has been configured or in other cases where using the heap would be a - * problem (i.e. in an OOM handler, etc). It requires that the caller pass in - * a suitably sized buffer for the value to be read (if the supplied buffer is - * not large enough, the returned value will be truncated and the full required - * length will be returned in `actual_length`). - * - * @param[in] key Key name (zero-terminated string) - * @param[in] dest Pointer to a buffer to hold the returned value. - * @param[in] dest_size Length of the supplied buffer in bytes. - * @param[out] actual_length Pointer to a location to hold the actual length - * of the data which was associated with the key - * (may be NULL). - * @param[out] is_binary Pointer to a bool to hold whether the returned - * value is "binary" or not (may be NULL) - * - * @retval ::SYSPARAM_OK Value successfully retrieved - * @retval ::SYSPARAM_NOTFOUND Key/value not found - * @retval ::SYSPARAM_ERR_NOINIT sysparam_init() must be called first - * @retval ::SYSPARAM_ERR_NOMEM The supplied buffer is too small - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_get_data_static(const char *key, uint8_t *dest, size_t dest_size, size_t *actual_length, bool *is_binary); - -/** Get the string value associated with a key - * - * This routine can be used if you know that the value in a key will (or at - * least should) be a string. It will return a zero-terminated char buffer - * containing the value retrieved. - * - * It is up to the caller to free() the returned buffer when done using it. - * - * Note: If the status result is anything other than ::SYSPARAM_OK, the value - * in `destptr` is not changed. This means it is possible to set a default - * value before calling this function which will be left as-is if a sysparam - * value could not be successfully read. - * - * @param[in] key Key name (zero-terminated string) - * @param[out] destptr Pointer to a location to hold the address of the - * returned data buffer - * - * @retval ::SYSPARAM_OK Value successfully retrieved. - * @retval ::SYSPARAM_NOTFOUND Key/value not found. - * @retval ::SYSPARAM_PARSEFAILED The retrieved value was a binary value - * @retval ::SYSPARAM_ERR_NOINIT sysparam_init() must be called first - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_get_string(const char *key, char **destptr); - -/** Get the int32_t value associated with a key - * - * This routine can be used if you know that the value in a key will (or at - * least should) be an int32_t value. This is done without allocating any - * memory. - * - * Note: If the status result is anything other than ::SYSPARAM_OK, the value - * in `result` is not changed. This means it is possible to set a default - * value before calling this function which will be left as-is if a sysparam - * value could not be successfully read. - * - * @param[in] key Key name (zero-terminated string) - * @param[out] result Pointer to a location to hold returned integer value - * - * @retval ::SYSPARAM_OK Value successfully retrieved. - * @retval ::SYSPARAM_NOTFOUND Key/value not found. - * @retval ::SYSPARAM_PARSEFAILED The retrieved value could not be parsed as - * an integer. - * @retval ::SYSPARAM_ERR_NOINIT sysparam_init() must be called first - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_get_int32(const char *key, int32_t *result); - -/** Get the int8_t value associated with a key - * - * This routine can be used if you know that the value in a key will (or at - * least should) be a uint8_t binary value. This is done without allocating any - * memory. - * - * Note: If the status result is anything other than ::SYSPARAM_OK, the value - * in `result` is not changed. This means it is possible to set a default - * value before calling this function which will be left as-is if a sysparam - * value could not be successfully read. - * - * @param[in] key Key name (zero-terminated string) - * @param[out] result Pointer to a location to hold returned boolean value - * - * @retval ::SYSPARAM_OK Value successfully retrieved. - * @retval ::SYSPARAM_NOTFOUND Key/value not found. - * @retval ::SYSPARAM_PARSEFAILED The retrieved value could not be parsed as a - * boolean setting. - * @retval ::SYSPARAM_ERR_NOINIT sysparam_init() must be called first - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_get_int8(const char *key, int8_t *result); - -/** Get the boolean value associated with a key - * - * This routine can be used if you know that the value in a key will (or at - * least should) be a boolean setting. It will read the specified value as a - * text string and attempt to parse it as a boolean value. - * - * It will recognize the following (case-insensitive) strings: - * * True: "yes", "y", "true", "t", "1" - * * False: "no", "n", "false", "f", "0" - * - * Note: If the status result is anything other than ::SYSPARAM_OK, the value - * in `result` is not changed. This means it is possible to set a default - * value before calling this function which will be left as-is if a sysparam - * value could not be successfully read. - * - * @param[in] key Key name (zero-terminated string) - * @param[out] result Pointer to a location to hold returned boolean value - * - * @retval ::SYSPARAM_OK Value successfully retrieved. - * @retval ::SYSPARAM_NOTFOUND Key/value not found. - * @retval ::SYSPARAM_PARSEFAILED The retrieved value could not be parsed as a - * boolean setting. - * @retval ::SYSPARAM_ERR_NOINIT sysparam_init() must be called first - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_get_bool(const char *key, bool *result); - -/** Set the value associated with a key - * - * The supplied value can be any data, up to 255 bytes in length. If `value` - * is NULL or `value_len` is 0, this is treated as a request to delete any - * current entry matching `key`. This is done without allocating any memory. - * - * If `binary` is true, the data will be considered binary (unprintable) data, - * and this will be annotated in the saved entry. This does not affect the - * saving or loading process in any way, but may be used by some applications - * to (for example) print binary data differently than text entries when - * printing parameter values. - * - * @param[in] key Key name (zero-terminated string) - * @param[in] value Pointer to a buffer containing the value data - * @param[in] value_len Length of the data in the buffer - * @param[in] binary Whether the data should be considered "binary" - * (unprintable) data - * - * @retval ::SYSPARAM_OK Value successfully set. - * @retval ::SYSPARAM_ERR_NOINIT sysparam_init() must be called first - * @retval ::SYSPARAM_ERR_BADVALUE Either an empty key was provided or - * value_len is too large - * @retval ::SYSPARAM_ERR_FULL No space left in sysparam area - * (or too many keys in use) - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_set_data(const char *key, const uint8_t *value, size_t value_len, bool binary); - -/** Set a key's value from a string - * - * Performs the same function as sysparam_set_data(), but accepts a - * zero-terminated string value instead. - * - * @param[in] key Key name (zero-terminated string) - * @param[in] value Value to set (zero-terminated string) - * - * @retval ::SYSPARAM_OK Value successfully set. - * @retval ::SYSPARAM_ERR_BADVALUE Either an empty key was provided or the - * length of `value` is too large - * @retval ::SYSPARAM_ERR_FULL No space left in sysparam area - * (or too many keys in use) - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_set_string(const char *key, const char *value); - -/** Set a key's value as a number - * - * Write an int32_t binary value to the specified key. This does the inverse of - * the sysparam_get_int32() function. This is done without allocating any - * memory. - * - * @param[in] key Key name (zero-terminated string) - * @param[in] value Value to set - * - * @retval ::SYSPARAM_OK Value successfully set. - * @retval ::SYSPARAM_ERR_BADVALUE An empty key was provided. - * @retval ::SYSPARAM_ERR_FULL No space left in sysparam area - * (or too many keys in use) - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_set_int32(const char *key, int32_t value); - -/** Set a key's value as a number - * - * Write an int8_t binary value to the specified key. This does the inverse of - * the sysparam_get_int8() function. This is done without allocating any - * memory. - * - * @param[in] key Key name (zero-terminated string) - * @param[in] value Value to set - * - * @retval ::SYSPARAM_OK Value successfully set. - * @retval ::SYSPARAM_ERR_BADVALUE An empty key was provided. - * @retval ::SYSPARAM_ERR_FULL No space left in sysparam area - * (or too many keys in use) - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_set_int8(const char *key, int8_t value); - -/** Set a key's value as a boolean (yes/no) string - * - * Converts a bool value to a corresponding text string and writes it to the - * specified key. This does the inverse of the sysparam_get_bool() - * function. - * - * @param[in] key Key name (zero-terminated string) - * @param[in] value Value to set - * - * @retval ::SYSPARAM_OK Value successfully set. - * @retval ::SYSPARAM_ERR_BADVALUE An empty key was provided. - * @retval ::SYSPARAM_ERR_FULL No space left in sysparam area - * (or too many keys in use) - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_set_bool(const char *key, bool value); - -/** Begin iterating through all key/value pairs - * - * This function initializes a sysparam_iter_t structure to prepare it for - * iterating through the list of key/value pairs using sysparam_iter_next(). - * This does not fetch any items (the first successive call to - * sysparam_iter_next() will return the first key/value in the list). - * - * NOTE: When done, you must call sysparam_iter_end() to free the resources - * associated with `iter`, or you will leak memory. - * - * @param[in] iter A pointer to a sysparam_iter_t structure to initialize - * - * @retval ::SYSPARAM_OK Initialization successful - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - */ -sysparam_status_t sysparam_iter_start(sysparam_iter_t *iter); - -/** Fetch the next key/value pair - * - * This will retrieve the next key and value from the sysparam area, placing - * them in `iter->key`, and `iter->value` (and updating `iter->key_len` and - * `iter->value_len`). - * - * NOTE: `iter->key` and `iter->value` are static buffers local to the `iter` - * structure, and will be overwritten with the next call to - * sysparam_iter_next() using the same `iter`. They should *not* be free()d - * after use. - * - * @param[in] iter The iterator structure to update - * - * @retval ::SYSPARAM_OK Next key/value retrieved - * @retval ::SYSPARAM_ERR_NOMEM Unable to allocate memory - * @retval ::SYSPARAM_ERR_CORRUPT Sysparam region has bad/corrupted data - * @retval ::SYSPARAM_ERR_IO I/O error reading/writing flash - */ -sysparam_status_t sysparam_iter_next(sysparam_iter_t *iter); - -/** Finish iterating through keys/values - * - * Cleans up and releases resources allocated by sysparam_iter_start() / - * sysparam_iter_next(). - */ -void sysparam_iter_end(sysparam_iter_t *iter); - -#endif /* _SYSPARAM_H_ */ diff --git a/core/include/user_exception.h b/core/include/user_exception.h deleted file mode 100644 index abb027a..0000000 --- a/core/include/user_exception.h +++ /dev/null @@ -1,9 +0,0 @@ -/* Allows the user to set their own exception handler. */ - -#ifndef _USER_EXCEPTION_H -#define _USER_EXCEPTION_H - -void set_user_exception_handler(void (*fn)(void)); - -#endif - diff --git a/core/include/xtensa_ops.h b/core/include/xtensa_ops.h index 6951869..52eba2a 100644 --- a/core/include/xtensa_ops.h +++ b/core/include/xtensa_ops.h @@ -11,6 +11,9 @@ #ifndef _XTENSA_OPS_H #define _XTENSA_OPS_H +// GCC macros for reading, writing, and exchanging Xtensa processor special +// registers: + /* Read stack pointer to variable. * * Note that the compiler will push a stack frame (minimum 16 bytes) @@ -25,18 +28,8 @@ */ #define RETADDR(var) asm volatile ("mov %0, a0" : "=r" (var)) -// GCC macros for reading, writing, and exchanging Xtensa processor special -// registers: - #define RSR(var, reg) asm volatile ("rsr %0, " #reg : "=r" (var)); #define WSR(var, reg) asm volatile ("wsr %0, " #reg : : "r" (var)); #define XSR(var, reg) asm volatile ("xsr %0, " #reg : "+r" (var)); -// GCC macros for performing associated "*sync" opcodes - -#define ISYNC() asm volatile ( "isync" ) -#define RSYNC() asm volatile ( "rsync" ) -#define ESYNC() asm volatile ( "esync" ) -#define DSYNC() asm volatile ( "dsync" ) - #endif /* _XTENSA_OPS_H */ diff --git a/core/newlib_syscalls.c b/core/newlib_syscalls.c index 50d0d30..023872c 100644 --- a/core/newlib_syscalls.c +++ b/core/newlib_syscalls.c @@ -12,31 +12,10 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include - -/* - * The file descriptor index space is allocated in blocks. The first block of 3 - * is for newlib I/O the stdin stdout and stderr. The next block of - * MEMP_NUM_NETCONN is allocated for lwip sockets, and the remainer to file - * system descriptors. The newlib default FD_SETSIZE is 64. - */ -#if LWIP_SOCKET_OFFSET < 3 -#error Expecting a LWIP_SOCKET_OFFSET >= 3, to allow room for the standard I/O descriptors. -#endif -#define FILE_DESCRIPTOR_OFFSET (LWIP_SOCKET_OFFSET + MEMP_NUM_NETCONN) -#if FILE_DESCRIPTOR_OFFSET > FD_SETSIZE -#error Too many lwip sockets for the FD_SETSIZE. -#endif extern void *xPortSupervisorStackPointer; -IRAM void *_sbrk_r (struct _reent *r, ptrdiff_t incr) +IRAM caddr_t _sbrk_r (struct _reent *r, int incr) { extern char _heap_start; /* linker script defined */ static char * heap_end; @@ -61,145 +40,49 @@ IRAM void *_sbrk_r (struct _reent *r, ptrdiff_t incr) return (caddr_t) prev_heap_end; } - -/* Insert a disjoint region into the nano malloc pool. Create a malloc chunk, - * filling the size as newlib nano malloc expects, and then free it. */ -void nano_malloc_insert_chunk(void *start, size_t size) { - *(uint32_t *)start = size; - free(start + sizeof(size_t)); -} - /* syscall implementation for stdio write to UART */ -__attribute__((weak)) ssize_t _write_stdout_r(struct _reent *r, int fd, const void *ptr, size_t len ) +long _write_r(struct _reent *r, int fd, const char *ptr, int len ) { + if(fd != r->_stdout->_file) { + r->_errno = EBADF; + return -1; + } for(int i = 0; i < len; i++) { /* Auto convert CR to CRLF, ignore other LFs (compatible with Espressif SDK behaviour) */ - if(((char *)ptr)[i] == '\r') + if(ptr[i] == '\r') continue; - if(((char *)ptr)[i] == '\n') + if(ptr[i] == '\n') uart_putc(0, '\r'); - uart_putc(0, ((char *)ptr)[i]); + uart_putc(0, ptr[i]); } return len; } -static _WriteFunction *current_stdout_write_r = &_write_stdout_r; - -void set_write_stdout(_WriteFunction *f) -{ - if (f != NULL) { - current_stdout_write_r = f; - } else { - current_stdout_write_r = &_write_stdout_r; - } -} - -_WriteFunction *get_write_stdout() -{ - return current_stdout_write_r; -} - -/* default implementation, replace in a filesystem */ -__attribute__((weak)) ssize_t _write_filesystem_r(struct _reent *r, int fd, const void *ptr, size_t len) -{ - r->_errno = EBADF; - return -1; -} - -__attribute__((weak)) ssize_t _write_r(struct _reent *r, int fd, const void *ptr, size_t len) -{ - if (fd >= FILE_DESCRIPTOR_OFFSET) { - return _write_filesystem_r(r, fd, ptr, len); - } - if (fd >= LWIP_SOCKET_OFFSET) { - return lwip_write(fd, ptr, len); - } - if (fd == r->_stdout->_file) { - return current_stdout_write_r(r, fd, ptr, len); - } - r->_errno = EBADF; - return -1; -} - /* syscall implementation for stdio read from UART */ -__attribute__((weak)) ssize_t _read_stdin_r(struct _reent *r, int fd, void *ptr, size_t len) +__attribute__((weak)) long _read_r( struct _reent *r, int fd, char *ptr, int len ) { int ch, i; + + if(fd != r->_stdin->_file) { + r->_errno = EBADF; + return -1; + } uart_rxfifo_wait(0, 1); for(i = 0; i < len; i++) { ch = uart_getc_nowait(0); if (ch < 0) break; - ((char *)ptr)[i] = ch; + ptr[i] = ch; } return i; } -/* default implementation, replace in a filesystem */ -__attribute__((weak)) ssize_t _read_filesystem_r( struct _reent *r, int fd, void *ptr, size_t len ) -{ - r->_errno = EBADF; - return -1; -} - -__attribute__((weak)) ssize_t _read_r( struct _reent *r, int fd, void *ptr, size_t len ) -{ - if (fd >= FILE_DESCRIPTOR_OFFSET) { - return _read_filesystem_r(r, fd, ptr, len); - } - if (fd >= LWIP_SOCKET_OFFSET) { - return lwip_read(fd, ptr, len); - } - if (fd == r->_stdin->_file) { - return _read_stdin_r(r, fd, ptr, len); - } - r->_errno = EBADF; - return -1; -} - -/* default implementation, replace in a filesystem */ -__attribute__((weak)) int _close_filesystem_r(struct _reent *r, int fd) -{ - r->_errno = EBADF; - return -1; -} - -__attribute__((weak)) int _close_r(struct _reent *r, int fd) -{ - if (fd >= FILE_DESCRIPTOR_OFFSET) { - return _close_filesystem_r(r, fd); - } - if (fd >= LWIP_SOCKET_OFFSET) { - return lwip_close(fd); - } - r->_errno = EBADF; - return -1; -} - /* Stub syscall implementations follow, to allow compiling newlib functions that pull these in via various codepaths */ -__attribute__((weak, alias("syscall_returns_enosys"))) -int _open_r(struct _reent *r, const char *pathname, int flags, int mode); - -__attribute__((weak, alias("syscall_returns_enosys"))) -int _unlink_r(struct _reent *r, const char *path); - -__attribute__((weak, alias("syscall_returns_enosys"))) -int _fstat_r(struct _reent *r, int fd, struct stat *buf); - -__attribute__((weak, alias("syscall_returns_enosys"))) -int _stat_r(struct _reent *r, const char *pathname, struct stat *buf); - -__attribute__((weak, alias("syscall_returns_enosys"))) -off_t _lseek_r(struct _reent *r, int fd, off_t offset, int whence); - -__attribute__((weak, alias("_gettimeofday_r"))) -int _gettimeofday_r (struct _reent *ptr, struct timeval *ptimeval, void *ptimezone) { - ptimeval->tv_sec = 0; - ptimeval->tv_usec = 0; - errno = ENOSYS; - return -1; -} +__attribute__((alias("syscall_returns_enosys"))) int _open_r(struct _reent *r, const char *pathname, int flags, int mode); +__attribute__((alias("syscall_returns_enosys"))) int _fstat_r(struct _reent *r, int fd, void *buf); +__attribute__((alias("syscall_returns_enosys"))) int _close_r(struct _reent *r, int fd); +__attribute__((alias("syscall_returns_enosys"))) off_t _lseek_r(struct _reent *r, int fd, off_t offset, int whence); /* Generic stub for any newlib syscall that fails with errno ENOSYS ("Function not implemented") and a return value equivalent to @@ -209,125 +92,3 @@ static int syscall_returns_enosys(struct _reent *r) r->_errno=ENOSYS; return -1; } - -int getentropy(void *ptr, size_t n) -{ - hwrand_fill(ptr, n); - return 0; -} - -void _arc4random_getentropy_fail(void) -{ -} - -void _exit(int status) -{ - while(1); -} - -/* - * Newlib lock implementation. Some newlib locks are statically allocated, but - * can not be statically initialized so are set to NULL and initialized at - * startup. The malloc lock is used before it can be initialized so there are - * runtime checks on the functions that use it early. - */ -static int locks_initialized = 0; - -extern _lock_t __arc4random_mutex; -extern _lock_t __at_quick_exit_mutex; -//extern _lock_t __dd_hash_mutex; -extern _lock_t __tz_mutex; - -extern _lock_t __atexit_recursive_mutex; -extern _lock_t __env_recursive_mutex; -extern _lock_t __malloc_recursive_mutex; -extern _lock_t __sfp_recursive_mutex; -extern _lock_t __sinit_recursive_mutex; - -void init_newlib_locks() -{ -#if 0 - /* Used a separate mutex for each lock. - * Each mutex uses about 96 bytes which adds up. */ - _lock_init(&__arc4random_mutex); - _lock_init(&__at_quick_exit_mutex); - //_lock_init(&__dd_hash_mutex); - _lock_init(&__tz_mutex); - - _lock_init_recursive(&__atexit_recursive_mutex); - _lock_init_recursive(&__env_recursive_mutex); - _lock_init_recursive(&__malloc_recursive_mutex); - _lock_init_recursive(&__sfp_recursive_mutex); - _lock_init_recursive(&__sinit_recursive_mutex); -#else - /* Reuse one mutex and one recursive mutex for this set, reducing memory - * usage. Newlib will still allocate other locks dynamically and some of - * those need to be separate such as the file lock where a thread might - * block with them held. */ - _lock_init(&__arc4random_mutex); - __at_quick_exit_mutex = __arc4random_mutex; - //__dd_hash_mutex = __arc4random_mutex; - __tz_mutex = __arc4random_mutex; - - _lock_init_recursive(&__atexit_recursive_mutex); - __env_recursive_mutex = __atexit_recursive_mutex; - __malloc_recursive_mutex = __atexit_recursive_mutex; - __sfp_recursive_mutex = __atexit_recursive_mutex; - __sinit_recursive_mutex = __atexit_recursive_mutex; -#endif - - locks_initialized = 1; -} - -void _lock_init(_lock_t *lock) { - *lock = (_lock_t)xSemaphoreCreateMutex(); -} - -void _lock_init_recursive(_lock_t *lock) { - *lock = (_lock_t)xSemaphoreCreateRecursiveMutex(); -} - -void _lock_close(_lock_t *lock) { - vSemaphoreDelete((QueueHandle_t)*lock); - *lock = 0; -} - -void _lock_close_recursive(_lock_t *lock) { - vSemaphoreDelete((QueueHandle_t)*lock); - *lock = 0; -} - -void _lock_acquire(_lock_t *lock) { - xSemaphoreTake((QueueHandle_t)*lock, portMAX_DELAY); -} - -void _lock_acquire_recursive(_lock_t *lock) { - if (locks_initialized) { - if (sdk_NMIIrqIsOn) { - uart_putc(0, ':'); - return; - } - xSemaphoreTakeRecursive((QueueHandle_t)*lock, portMAX_DELAY); - } -} - -int _lock_try_acquire(_lock_t *lock) { - return xSemaphoreTake((QueueHandle_t)*lock, 0); -} - -int _lock_try_acquire_recursive(_lock_t *lock) { - return xSemaphoreTakeRecursive((QueueHandle_t)*lock, 0); -} - -void _lock_release(_lock_t *lock) { - xSemaphoreGive((QueueHandle_t)*lock); -} - -void _lock_release_recursive(_lock_t *lock) { - if (locks_initialized) { - if (sdk_NMIIrqIsOn) { - return; - } - xSemaphoreGiveRecursive((QueueHandle_t)*lock); - } -} diff --git a/core/spiflash.c b/core/spiflash.c deleted file mode 100644 index 764db11..0000000 --- a/core/spiflash.c +++ /dev/null @@ -1,259 +0,0 @@ -/** - * The MIT License (MIT) - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include "include/spiflash.h" - -#include "include/flashchip.h" -#include "include/esp/rom.h" -#include "include/esp/spi_regs.h" - -#include -#include - -/** - * Note about Wait_SPI_Idle. - * - * Each write/erase flash operation sets BUSY bit in flash status register. - * If attempt to access flash while BUSY bit is set operation will fail. - * Function Wait_SPI_Idle loops until this bit is not cleared. - * - * The approach in the following code is that each write function that is - * accessible from the outside should leave flash in Idle state. - * The read operations doesn't set BUSY bit in a flash. So they do not wait. - * They relay that previous operation is completely finished. - * - * This approach is different from ESP8266 bootrom where Wait_SPI_Idle is - * called where it needed and not. - */ - -#define SPI_WRITE_MAX_SIZE 64 - -// 64 bytes read causes hang -// http://bbs.espressif.com/viewtopic.php?f=6&t=2439 -#define SPI_READ_MAX_SIZE 60 - - -/** - * Low level SPI flash write. Write block of data up to 64 bytes. - */ -static inline void IRAM spi_write_data(sdk_flashchip_t *chip, uint32_t addr, - uint8_t *buf, uint32_t size) -{ - uint32_t words = size >> 2; - if (size & 0b11) { - words++; - } - - Wait_SPI_Idle(chip); // wait for previous write to finish - - SPI(0).ADDR = (addr & 0x00FFFFFF) | (size << 24); - - memcpy((void*)SPI(0).W, buf, words<<2); - - __asm__ volatile("memw"); - - SPI_write_enable(chip); - - SPI(0).CMD = SPI_CMD_PP; - while (SPI(0).CMD) {} -} - -/** - * Write a page of flash. Data block should not cross page boundary. - */ -static bool IRAM spi_write_page(sdk_flashchip_t *flashchip, uint32_t dest_addr, - uint8_t *buf, uint32_t size) -{ - // check if block to write doesn't cross page boundary - if (flashchip->page_size < size + (dest_addr % flashchip->page_size)) { - return false; - } - - if (size < 1) { - return true; - } - - while (size >= SPI_WRITE_MAX_SIZE) { - spi_write_data(flashchip, dest_addr, buf, SPI_WRITE_MAX_SIZE); - - size -= SPI_WRITE_MAX_SIZE; - dest_addr += SPI_WRITE_MAX_SIZE; - buf += SPI_WRITE_MAX_SIZE; - - if (size < 1) { - return true; - } - } - - spi_write_data(flashchip, dest_addr, buf, size); - - return true; -} - -/** - * Split block of data into pages and write pages. - */ -static bool IRAM spi_write(uint32_t addr, uint8_t *dst, uint32_t size) -{ - if (sdk_flashchip.chip_size < (addr + size)) { - return false; - } - - uint32_t write_bytes_to_page = sdk_flashchip.page_size - - (addr % sdk_flashchip.page_size); // TODO: place for optimization - - if (size < write_bytes_to_page) { - if (!spi_write_page(&sdk_flashchip, addr, dst, size)) { - return false; - } - } else { - if (!spi_write_page(&sdk_flashchip, addr, dst, write_bytes_to_page)) { - return false; - } - - uint32_t offset = write_bytes_to_page; - uint32_t pages_to_write = (size - offset) / sdk_flashchip.page_size; - for (uint32_t i = 0; i < pages_to_write; i++) { - if (!spi_write_page(&sdk_flashchip, addr + offset, - dst + offset, sdk_flashchip.page_size)) { - return false; - } - offset += sdk_flashchip.page_size; - } - - if (!spi_write_page(&sdk_flashchip, addr + offset, - dst + offset, size - offset)) { - return false; - } - } - - return true; -} - -bool IRAM spiflash_write(uint32_t addr, uint8_t *buf, uint32_t size) -{ - bool result = false; - - if (buf) { - vPortEnterCritical(); - Cache_Read_Disable(); - - result = spi_write(addr, buf, size); - - // make sure all write operations is finished before exiting - Wait_SPI_Idle(&sdk_flashchip); - - Cache_Read_Enable(0, 0, 1); - vPortExitCritical(); - } - - return result; -} - -/** - * Read SPI flash up to 64 bytes. - */ -static inline void IRAM read_block(sdk_flashchip_t *chip, uint32_t addr, - uint8_t *buf, uint32_t size) -{ - SPI(0).ADDR = (addr & 0x00FFFFFF) | (size << 24); - SPI(0).CMD = SPI_CMD_READ; - - while (SPI(0).CMD) {}; - - __asm__ volatile("memw"); - - memcpy(buf, (const void*)SPI(0).W, size); -} - -/** - * Read SPI flash data. Data region doesn't need to be page aligned. - */ -static inline bool IRAM read_data(sdk_flashchip_t *flashchip, uint32_t addr, - uint8_t *dst, uint32_t size) -{ - if (size < 1) { - return true; - } - - if ((addr + size) > flashchip->chip_size) { - return false; - } - - while (size >= SPI_READ_MAX_SIZE) { - read_block(flashchip, addr, dst, SPI_READ_MAX_SIZE); - dst += SPI_READ_MAX_SIZE; - size -= SPI_READ_MAX_SIZE; - addr += SPI_READ_MAX_SIZE; - } - - if (size > 0) { - read_block(flashchip, addr, dst, size); - } - - return true; -} - -bool IRAM spiflash_read(uint32_t dest_addr, uint8_t *buf, uint32_t size) -{ - bool result = false; - - if (buf) { - vPortEnterCritical(); - Cache_Read_Disable(); - - result = read_data(&sdk_flashchip, dest_addr, buf, size); - - Cache_Read_Enable(0, 0, 1); - vPortExitCritical(); - } - - return result; -} - -bool IRAM spiflash_erase_sector(uint32_t addr) -{ - if ((addr + sdk_flashchip.sector_size) > sdk_flashchip.chip_size) { - return false; - } - - if (addr & 0xFFF) { - return false; - } - - vPortEnterCritical(); - Cache_Read_Disable(); - - SPI_write_enable(&sdk_flashchip); - - SPI(0).ADDR = addr & 0x00FFFFFF; - SPI(0).CMD = SPI_CMD_SE; - while (SPI(0).CMD) {}; - - Wait_SPI_Idle(&sdk_flashchip); - - Cache_Read_Enable(0, 0, 1); - vPortExitCritical(); - - return true; -} diff --git a/core/sysparam.c b/core/sysparam.c deleted file mode 100644 index f54ec31..0000000 --- a/core/sysparam.c +++ /dev/null @@ -1,1105 +0,0 @@ -/* - * Part of esp-open-rtos - * Copyright (C) 2016 Alex Stewart - * BSD Licensed as described in the file LICENSE - */ - -#include -#include -#include -#include -#include "spiflash.h" -#include "flashchip.h" -#include -#include "FreeRTOS.h" -#include "semphr.h" - -/* The "magic" value that indicates the start of a sysparam region in flash. - */ -#define SYSPARAM_MAGIC 0x70524f45 // "EORp" in little-endian - -/* The size of the initial buffer created by sysparam_iter_start, etc, to hold - * returned key-value pairs. Setting this too small may result in a lot of - * unnecessary reallocs. Setting it too large will waste memory when iterating - * through entries. - */ -#define DEFAULT_ITER_BUF_SIZE 64 - -/* The size of the buffer (in words) used by `sysparam_create_area` when - * scanning a potential area to make sure it's currently empty. Note that this - * space is taken from the stack, so it should not be too large. - */ -#define SCAN_BUFFER_SIZE 8 // words - -/* The size in words of the buffer used for reading keys when searching for a - * match, for reading payloads to check if the value has changed, and reading - * back from the flash to verify writes. Will work well if big enough for - * commonly used keys, and must be at least one word. Stack allocated so not too - * large! - */ -#define BOUNCE_BUFFER_WORDS 3 -#define BOUNCE_BUFFER_SIZE (BOUNCE_BUFFER_WORDS * sizeof(uint32_t)) - -/* Size of region/entry headers. These should not normally need tweaking (and - * will probably require some code changes if they are tweaked). - */ -#define REGION_HEADER_SIZE 8 // NOTE: Must be multiple of 4 -#define ENTRY_HEADER_SIZE 4 // NOTE: Must be multiple of 4 - -/* These are limited by the format to 0xffff, but could be set lower if desired - */ -#define MAX_KEY_LEN 0xffff -#define MAX_VALUE_LEN 0xffff - -/* Maximum value that can be used for a key_id. This is limited by the format - * to 0xffe (0xfff indicates end/unwritten space) - */ -#define MAX_KEY_ID 0x0ffe - -#define REGION_FLAG_SECOND 0x8000 // First (0) or second (1) region -#define REGION_FLAG_ACTIVE 0x4000 // Stale (0) or active (1) region -#define REGION_MASK_SIZE 0x0fff // Region size in sectors - -#define ENTRY_FLAG_ALIVE 0x8000 // Deleted (0) or active (1) -#define ENTRY_FLAG_INVALID 0x4000 // Valid (0) or invalid (1) entry -#define ENTRY_FLAG_VALUE 0x2000 // Key (0) or value (1) -#define ENTRY_FLAG_BINARY 0x1000 // Text (0) or binary (1) data - -#define ENTRY_MASK_ID 0xfff - -#define ENTRY_ID_END 0xfff -#define ENTRY_ID_ANY 0x1000 - -#ifndef SYSPARAM_DEBUG -#define SYSPARAM_DEBUG 0 -#endif - -/******************************* Useful Macros *******************************/ - -#define ROUND_TO_WORD_BOUNDARY(x) (((x) + 3) & 0xfffffffc) -#define ENTRY_SIZE(payload_len) (ENTRY_HEADER_SIZE + payload_len) - -#define max(x, y) ((x) > (y) ? (x) : (y)) -#define min(x, y) ((x) < (y) ? (x) : (y)) - -#define debug(level, format, ...) if (SYSPARAM_DEBUG >= (level)) { printf("%s" format "\n", "sysparam: ", ## __VA_ARGS__); } - -#define CHECK_FLASH_OP(x) do { bool __x = (x); if (!(__x)) { \ - debug(1, "FLASH ERR: %d", __x); return SYSPARAM_ERR_IO; \ - } } while (0); - -/********************* Internal datatypes and structures *********************/ - -struct region_header { - uint32_t magic; - uint16_t flags_size; - uint16_t reserved; -} __attribute__ ((packed)); - -struct entry_header { - uint16_t idflags; - uint16_t len; -} __attribute__ ((packed)); - -struct sysparam_context { - uint32_t addr; - struct entry_header entry; - int unused_keys; - size_t compactable; - uint16_t max_key_id; -}; - -/*************************** Global variables/data ***************************/ - -static struct { - uint32_t cur_base; - uint32_t alt_base; - uint32_t end_addr; - size_t region_size; - bool force_compact; - SemaphoreHandle_t sem; -} _sysparam_info; - -/***************************** Internal routines *****************************/ - -static sysparam_status_t _write_and_verify(uint32_t addr, const void *data, size_t data_size) { - uint8_t bounce[BOUNCE_BUFFER_SIZE]; - - for (int i = 0; i < data_size; i += BOUNCE_BUFFER_SIZE) { - size_t count = min(data_size - i, BOUNCE_BUFFER_SIZE); - memcpy(bounce, data + i, count); - CHECK_FLASH_OP(spiflash_write(addr + i, bounce, count)); - CHECK_FLASH_OP(spiflash_read(addr + i, bounce, count)); - if (memcmp(data + i, bounce, count) != 0) { - debug(1, "Flash write (@ 0x%08x) verify failed!", addr); - return SYSPARAM_ERR_IO; - } - } - return SYSPARAM_OK; -} - -/** Erase the sectors of a region */ -static sysparam_status_t _format_region(uint32_t addr, uint16_t num_sectors) { - int i; - - for (i = 0; i < num_sectors; i++) { - CHECK_FLASH_OP(spiflash_erase_sector(addr + (i * SPI_FLASH_SECTOR_SIZE))); - } - return SYSPARAM_OK; -} - -/** Write the magic data at the beginning of a region */ -static inline sysparam_status_t _write_region_header(uint32_t addr, uint32_t other, bool active) { - struct region_header header; - sysparam_status_t status; - int16_t num_sectors; - - header.magic = SYSPARAM_MAGIC; - if (addr < other) { - num_sectors = (other - addr) / sdk_flashchip.sector_size; - header.flags_size = num_sectors & REGION_MASK_SIZE; - } else { - num_sectors = (addr - other) / sdk_flashchip.sector_size; - header.flags_size = num_sectors & REGION_MASK_SIZE; - header.flags_size |= REGION_FLAG_SECOND; - } - if (active) { - header.flags_size |= REGION_FLAG_ACTIVE; - } - header.reserved = 0; - - debug(3, "write region header (0x%04x) @ 0x%08x", header.flags_size, addr); - status = _write_and_verify(addr, &header, REGION_HEADER_SIZE); - if (status != SYSPARAM_OK) { - // Uh oh.. Something failed, so we don't know whether what we wrote is - // actually in the flash or not. Try to zero it out to be sure and - // return an error. - debug(3, "zero region header @ 0x%08x", addr); - memset(&header, 0, REGION_HEADER_SIZE); - _write_and_verify(addr, &header, REGION_HEADER_SIZE); - return SYSPARAM_ERR_IO; - } - return SYSPARAM_OK; -} - -/** Initialize a context structure at the beginning of the active region */ -static void _init_context(struct sysparam_context *ctx) { - memset(ctx, 0, sizeof(*ctx)); - ctx->addr = _sysparam_info.cur_base; -} - -/** Initialize a context structure at the end of the active region */ -static sysparam_status_t init_write_context(struct sysparam_context *ctx) { - memset(ctx, 0, sizeof(*ctx)); - ctx->addr = _sysparam_info.end_addr; - debug(3, "read entry header @ 0x%08x", ctx->addr); - CHECK_FLASH_OP(spiflash_read(ctx->addr, (void*) &ctx->entry, ENTRY_HEADER_SIZE)); - return SYSPARAM_OK; -} - -/** Search through the region for an entry matching the specified id - * - * @param match_id The id to match, or 0 to match any key, or 0xfff to scan - * to the end. - */ -static sysparam_status_t _find_entry(struct sysparam_context *ctx, uint16_t match_id, bool find_value) { - uint16_t id; - - while (true) { - if (ctx->addr == _sysparam_info.cur_base) { - ctx->addr += REGION_HEADER_SIZE; - } else { - uint32_t next_addr = ctx->addr + ENTRY_SIZE(ctx->entry.len); - if (next_addr > _sysparam_info.cur_base + _sysparam_info.region_size) { - // This entry has an obviously impossible length, so we need to - // stop reading here. - // We can report this as the end of the valid entries, but then - // any future writes (to the end) will write over - // previously-written data and result in garbage. The best - // workaround is to make sure that the next write operation - // will always start with a compaction, which will leave off - // the invalid data at the end and fix the issue going forward. - debug(1, "Encountered entry with invalid length (0x%04x) @ 0x%08x (region end is 0x%08x). Truncating entries.", - ctx->entry.len, - ctx->addr, _sysparam_info.end_addr); - - _sysparam_info.force_compact = true; - break; - } - ctx->addr = next_addr; - if (ctx->addr == _sysparam_info.cur_base + _sysparam_info.region_size) { - // This is the last entry in the available space, but it - // exactly fits. Stop reading here. - break; - } - } - - debug(3, "read entry header @ 0x%08x", ctx->addr); - CHECK_FLASH_OP(spiflash_read(ctx->addr, (void*) &ctx->entry, ENTRY_HEADER_SIZE)); - debug(3, " idflags = 0x%04x", ctx->entry.idflags); - if (ctx->entry.idflags == 0xffff) { - // 0xffff is never a valid id field, so this means we've hit the - // end and are looking at unwritten flash space from here on. - break; - } - - id = ctx->entry.idflags & ENTRY_MASK_ID; - if ((ctx->entry.idflags & (ENTRY_FLAG_ALIVE | ENTRY_FLAG_INVALID)) == ENTRY_FLAG_ALIVE) { - debug(3, " entry is alive and valid"); - if (!(ctx->entry.idflags & ENTRY_FLAG_VALUE)) { - debug(3, " entry is a key"); - ctx->max_key_id = id; - ctx->unused_keys++; - if (!find_value) { - if ((id == match_id) || (match_id == ENTRY_ID_ANY)) { - return SYSPARAM_OK; - } - } - } else { - debug(3, " entry is a value"); - ctx->unused_keys--; - if (find_value) { - if ((id == match_id) || (match_id == ENTRY_ID_ANY)) { - return SYSPARAM_OK; - } - } - } - debug(3, " (not a match)"); - } else { - debug(3, " entry is deleted or invalid"); - ctx->compactable += ENTRY_SIZE(ctx->entry.len); - } - } - if (match_id == ENTRY_ID_END) { - return SYSPARAM_OK; - } - ctx->entry.len = 0; - ctx->entry.idflags = 0; - return SYSPARAM_NOTFOUND; -} - -/** Read the payload from the current entry pointed to by `ctx` */ - -static inline sysparam_status_t _read_payload(struct sysparam_context *ctx, uint8_t *buffer, size_t buffer_size) { - uint32_t addr = ctx->addr + ENTRY_HEADER_SIZE; - size_t size = min(buffer_size, ctx->entry.len); - debug(3, "read payload (%d) @ 0x%08x", size, addr); - - CHECK_FLASH_OP(spiflash_read(addr, buffer, buffer_size)); - - return SYSPARAM_OK; -} - -static inline sysparam_status_t _compare_payload(struct sysparam_context *ctx, uint8_t *value, size_t size) { - debug(3, "compare payload (%d) @ 0x%08x", size, ctx->addr); - if (ctx->entry.len != size) return SYSPARAM_NOTFOUND; - uint32_t bounce[BOUNCE_BUFFER_WORDS]; - uint32_t addr = ctx->addr + ENTRY_HEADER_SIZE; - int i; - for (i = 0; i < size; i += BOUNCE_BUFFER_SIZE) { - int len = min(size - i, BOUNCE_BUFFER_SIZE); - CHECK_FLASH_OP(spiflash_read(addr + i, (void*)bounce, len)); - if (memcmp(value + i, bounce, len)) { - // Mismatch. - return SYSPARAM_NOTFOUND; - } - } - return SYSPARAM_OK; -} - -/** Find the entry corresponding to the specified key name */ -static sysparam_status_t _find_key(struct sysparam_context *ctx, const char *key, uint16_t key_len) { - sysparam_status_t status; - - debug(3, "find key len %d: %s", key_len, key ? key : "(null)"); - while (true) { - // Find the next key entry - status = _find_entry(ctx, ENTRY_ID_ANY, false); - if (status != SYSPARAM_OK) return status; - debug(3, "found a key entry @ 0x%08x", ctx->addr); - if (!key) { - // We're looking for the next (any) key, so we're done. - break; - } - if (ctx->entry.len == key_len) { - status = _compare_payload(ctx, (uint8_t *)key, key_len); - if (status == SYSPARAM_OK) { - // We have a match - break; - } - if (status != SYSPARAM_NOTFOUND) return status; - debug(3, "entry payload does not match"); - } else { - debug(3, "key length (%d) does not match (%d)", ctx->entry.len, key_len); - } - } - debug(3, "key match @ 0x%08x (idflags = 0x%04x)", ctx->addr, ctx->entry.idflags); - - return SYSPARAM_OK; -} - -/** Find the value entry matching the id field from a particular key */ -static inline sysparam_status_t _find_value(struct sysparam_context *ctx, uint16_t id_field) { - debug(3, "find value: 0x%04x", id_field); - return _find_entry(ctx, id_field & ENTRY_MASK_ID, true); -} - -/** Write an entry at the specified address */ -static inline sysparam_status_t _write_entry(uint32_t addr, uint16_t id, const uint8_t *payload, uint16_t len) { - struct entry_header entry; - sysparam_status_t status; - - debug(2, "Writing entry 0x%02x @ 0x%08x", id, addr); - entry.idflags = id | ENTRY_FLAG_ALIVE | ENTRY_FLAG_INVALID; - entry.len = len; - debug(3, "write initial entry header @ 0x%08x", addr); - status = _write_and_verify(addr, &entry, ENTRY_HEADER_SIZE); - if (status == SYSPARAM_ERR_IO) { - // Uh-oh.. Either the flash call failed in some way or we didn't get - // back what we wrote. This could be a problem because depending on - // how it went wrong it could screw up all reads/writes from this point - // forward. Try to salvage the on-flash structure by overwriting the - // failed header with all zeros, which (if successful) will be - // interpreted on later reads as a deleted empty-payload entry (and it - // will just skip to the next spot). - memset(&entry, 0, ENTRY_HEADER_SIZE); - debug(3, "zeroing entry header @ 0x%08x", addr); - status = _write_and_verify(addr, &entry, ENTRY_HEADER_SIZE); - if (status != SYSPARAM_OK) return status; - - // Make sure future writes skip past this zeroed bit - if (_sysparam_info.end_addr == addr) { - _sysparam_info.end_addr += ENTRY_HEADER_SIZE; - } - // We could just skip to the next space and try again, but - // unfortunately now we can't be sure there's enough space remaining to - // fit the entry, so we just have to fail this operation. Hopefully, - // at least, future requests will still succeed, though. - status = SYSPARAM_ERR_IO; - } - if (status != SYSPARAM_OK) return status; - - // If we've gotten this far, we've committed to writing the full entry. - if (_sysparam_info.end_addr == addr) { - _sysparam_info.end_addr += ENTRY_SIZE(len); - } - debug(3, "write payload (%d) @ 0x%08x", len, addr + ENTRY_HEADER_SIZE); - status = _write_and_verify(addr + ENTRY_HEADER_SIZE, payload, len); - if (status != SYSPARAM_OK) return status; - - debug(3, "set entry valid @ 0x%08x", addr); - entry.idflags &= ~ENTRY_FLAG_INVALID; - status = _write_and_verify(addr, &entry, ENTRY_HEADER_SIZE); - - return status; -} - -/** Mark an entry as "deleted" so it won't be considered in future reads */ -static inline sysparam_status_t _delete_entry(uint32_t addr) { - struct entry_header entry; - - debug(2, "Deleting entry @ 0x%08x", addr); - debug(3, "read entry header @ 0x%08x", addr); - CHECK_FLASH_OP(spiflash_read(addr, (uint8_t*) &entry, ENTRY_HEADER_SIZE)); - // Set the ID to zero to mark it as "deleted" - entry.idflags &= ~ENTRY_FLAG_ALIVE; - debug(3, "write entry header @ 0x%08x", addr); - return _write_and_verify(addr, &entry, ENTRY_HEADER_SIZE); -} - -/** Compact the current region, removing all deleted/unused entries, and write - * the result to the alternate region, then make the new alternate region the - * active one. - * - * @param key_id A pointer to the "current" key ID, or NULL if none. - * - * NOTE: The value corresponding to the passed key ID will not be written to - * the output (because it is assumed it will be overwritten as the next step - * in `sysparam_set_data` anyway). When compacting, this routine will - * automatically update *key_id to contain the ID of this key in the new - * compacted result as well. - */ -static sysparam_status_t _compact_params(struct sysparam_context *ctx, int *key_id) { - uint32_t new_base = _sysparam_info.alt_base; - sysparam_status_t status; - uint32_t addr = new_base + REGION_HEADER_SIZE; - uint16_t current_key_id = 0; - sysparam_iter_t iter; - uint16_t binary_flag; - uint16_t num_sectors = _sysparam_info.region_size / sdk_flashchip.sector_size; - - debug(1, "compacting region (current size %d, expect to recover %d%s bytes)...", - _sysparam_info.end_addr - _sysparam_info.cur_base, - ctx ? ctx->compactable : 0, - (ctx && ctx->unused_keys > 0) ? "+ (unused keys present)" : ""); - - status = _format_region(new_base, num_sectors); - if (status < 0) return status; - status = sysparam_iter_start(&iter); - if (status < 0) return status; - - while (true) { - status = sysparam_iter_next(&iter); - if (status != SYSPARAM_OK) break; - - current_key_id++; - - // Write the key to the new region - debug(2, "writing %d key @ 0x%08x", current_key_id, addr); - status = _write_entry(addr, current_key_id, (uint8_t *)iter.key, iter.key_len); - if (status < 0) break; - addr += ENTRY_SIZE(iter.key_len); - - if (key_id && (iter.ctx->entry.idflags & ENTRY_MASK_ID) == *key_id) { - // Update key_id to have the correct id for the compacted result - *key_id = current_key_id; - // Don't copy the old value, since we'll just be deleting it - // and writing a new one as soon as we return. - continue; - } - - // Copy the value to the new region - debug(2, "writing %d value @ 0x%08x", current_key_id, addr); - binary_flag = iter.binary ? ENTRY_FLAG_BINARY : 0; - status = _write_entry(addr, current_key_id | ENTRY_FLAG_VALUE | binary_flag, iter.value, iter.value_len); - if (status < 0) break; - addr += ENTRY_SIZE(iter.value_len); - } - sysparam_iter_end(&iter); - - // If we broke out with an error, return the error instead of continuing. - if (status < 0) { - debug(1, "error encountered during compacting (%d)", status); - return status; - } - - // Switch to officially using the new region. - status = _write_region_header(new_base, _sysparam_info.cur_base, true); - if (status < 0) return status; - status = _write_region_header(_sysparam_info.cur_base, new_base, false); - if (status < 0) return status; - - _sysparam_info.alt_base = _sysparam_info.cur_base; - _sysparam_info.cur_base = new_base; - _sysparam_info.end_addr = addr; - _sysparam_info.force_compact = false; - - if (ctx) { - // Fix up ctx so it doesn't point to invalid stuff - memset(ctx, 0, sizeof(*ctx)); - ctx->addr = addr; - ctx->max_key_id = current_key_id; - } - - debug(1, "done compacting (current size %d)", _sysparam_info.end_addr - _sysparam_info.cur_base); - - return SYSPARAM_OK; -} - -/***************************** Public Functions ******************************/ - -sysparam_status_t sysparam_init(uint32_t base_addr, uint32_t top_addr) { - sysparam_status_t status; - uint32_t addr0, addr1; - struct region_header header0, header1; - struct sysparam_context ctx; - uint16_t num_sectors; - - _sysparam_info.sem = xSemaphoreCreateMutex(); - - // Make sure we're starting at the beginning of the sector - base_addr -= (base_addr % sdk_flashchip.sector_size); - - if (!top_addr || top_addr == base_addr) { - // Only scan the specified sector, nowhere else. - top_addr = base_addr + sdk_flashchip.sector_size; - } - for (addr0 = base_addr; addr0 < top_addr; addr0 += sdk_flashchip.sector_size) { - CHECK_FLASH_OP(spiflash_read(addr0, (void*) &header0, REGION_HEADER_SIZE)); - if (header0.magic == SYSPARAM_MAGIC) { - // Found a starting point... - break; - } - } - if (addr0 >= top_addr) { - return SYSPARAM_NOTFOUND; - } - - // We've found a valid header at addr0. Now find the other half of the sysparam area. - num_sectors = header0.flags_size & REGION_MASK_SIZE; - - if (header0.flags_size & REGION_FLAG_SECOND) { - addr1 = addr0 - num_sectors * sdk_flashchip.sector_size; - } else { - addr1 = addr0 + num_sectors * sdk_flashchip.sector_size; - } - CHECK_FLASH_OP(spiflash_read(addr1, (uint8_t*) &header1, REGION_HEADER_SIZE)); - - if (header1.magic == SYSPARAM_MAGIC) { - // Yay! Found the other one. Sanity-check it.. - if ((header0.flags_size & REGION_FLAG_SECOND) == (header1.flags_size & REGION_FLAG_SECOND)) { - // Hmm.. they both say they're the same region. That can't be right... - debug(1, "Found region headers @ 0x%08x and 0x%08x, but both claim to be the same region.", addr0, addr1); - return SYSPARAM_ERR_CORRUPT; - } - } else { - // Didn't find a valid header at the alternate location (which probably means something clobbered it or something went wrong at a critical point when rewriting it. Is the one we did find the active or stale one? - if (header0.flags_size & REGION_FLAG_ACTIVE) { - // Found the active one. We can work with this. Try to recreate the missing stale region... - debug(2, "Found active region header @ 0x%08x but no stale region @ 0x%08x. Trying to recreate stale region.", addr0, addr1); - status = _format_region(addr1, num_sectors); - if (status != SYSPARAM_OK) return status; - status = _write_region_header(addr1, addr0, false); - if (status != SYSPARAM_OK) return status; - } else { - // Found the stale one. We have no idea how old it is, so we shouldn't use it without some sort of confirmation/recovery. We'll have to bail for now. - debug(1, "Found stale-region header @ 0x%08x, but no active region.", addr0); - return SYSPARAM_ERR_CORRUPT; - } - } - // At this point we have confirmed valid regions at addr0 and addr1. - - _sysparam_info.region_size = num_sectors * sdk_flashchip.sector_size; - if (header0.flags_size & REGION_FLAG_ACTIVE) { - _sysparam_info.cur_base = addr0; - _sysparam_info.alt_base = addr1; - debug(3, "Active region @ 0x%08x (0x%04x). Stale region @ 0x%08x (0x%04x).", addr0, header0.flags_size, addr1, header1.flags_size); - - } else { - _sysparam_info.cur_base = addr1; - _sysparam_info.alt_base = addr0; - debug(3, "Active region @ 0x%08x (0x%04x). Stale region @ 0x%08x (0x%04x).", addr1, header1.flags_size, addr0, header0.flags_size); - } - - // Find the actual end - _sysparam_info.end_addr = _sysparam_info.cur_base + _sysparam_info.region_size; - _sysparam_info.force_compact = false; - _init_context(&ctx); - status = _find_entry(&ctx, ENTRY_ID_END, false); - if (status < 0) { - _sysparam_info.cur_base = 0; - _sysparam_info.alt_base = 0; - _sysparam_info.end_addr = 0; - return status; - } - if (status == SYSPARAM_OK) { - _sysparam_info.end_addr = ctx.addr; - } - - return SYSPARAM_OK; -} - -sysparam_status_t sysparam_create_area(uint32_t base_addr, uint16_t num_sectors, bool force) { - size_t region_size; - sysparam_status_t status; - uint32_t buffer[SCAN_BUFFER_SIZE]; - uint32_t addr; - int i; - - // Convert "number of sectors for area" into "number of sectors per region" - if (num_sectors < 1 || (num_sectors & 1)) { - return SYSPARAM_ERR_BADVALUE; - } - num_sectors >>= 1; - region_size = num_sectors * sdk_flashchip.sector_size; - - if (!force) { - // First, scan through the area and make sure it's actually empty and - // we're not going to be clobbering something else important. - for (addr = base_addr; addr < base_addr + region_size * 2; addr += SCAN_BUFFER_SIZE * sizeof(uint32_t)) { - debug(3, "read %d words @ 0x%08x", SCAN_BUFFER_SIZE, addr); - CHECK_FLASH_OP(spiflash_read(addr, (uint8_t*)buffer, SCAN_BUFFER_SIZE * sizeof(uint32_t))); - for (i = 0; i < SCAN_BUFFER_SIZE; i++) { - if (buffer[i] != 0xffffffff) { - // Uh oh, not empty. - return SYSPARAM_NOTFOUND; - } - } - } - } - - if (_sysparam_info.cur_base == base_addr || _sysparam_info.alt_base == base_addr) { - // We're reformating the same region we're already using. - // De-initialize everything to force the caller to do a clean - // `sysparam_init()` afterwards. - memset(&_sysparam_info, 0, sizeof(_sysparam_info)); - } - status = _format_region(base_addr, num_sectors); - if (status < 0) return status; - status = _format_region(base_addr + region_size, num_sectors); - if (status < 0) return status; - status = _write_region_header(base_addr, base_addr + region_size, true); - if (status < 0) return status; - status = _write_region_header(base_addr + region_size, base_addr, false); - if (status < 0) return status; - - return SYSPARAM_OK; -} - -sysparam_status_t sysparam_get_info(uint32_t *base_addr, uint32_t *num_sectors) { - if (!_sysparam_info.cur_base) return SYSPARAM_ERR_NOINIT; - - *base_addr = min(_sysparam_info.cur_base, _sysparam_info.alt_base); - *num_sectors = (_sysparam_info.region_size / sdk_flashchip.sector_size) * 2; - return SYSPARAM_OK; -} - -sysparam_status_t sysparam_compact() { - xSemaphoreTake(_sysparam_info.sem, portMAX_DELAY); - sysparam_status_t status; - - if (_sysparam_info.cur_base) { - status = _compact_params(NULL, NULL); - } else { - status = SYSPARAM_ERR_NOINIT; - } - - xSemaphoreGive(_sysparam_info.sem); - return status; -} - -sysparam_status_t sysparam_get_data(const char *key, uint8_t **destptr, size_t *actual_length, bool *is_binary) { - struct sysparam_context ctx; - sysparam_status_t status; - size_t key_len = strlen(key); - uint8_t *buffer; - - xSemaphoreTake(_sysparam_info.sem, portMAX_DELAY); - - if (actual_length) *actual_length = 0; - - if (!_sysparam_info.cur_base) { - status = SYSPARAM_ERR_NOINIT; - goto done; - } - - _init_context(&ctx); - status = _find_key(&ctx, key, key_len); - if (status != SYSPARAM_OK) goto done; - - // Find the associated value - status = _find_value(&ctx, ctx.entry.idflags); - if (status != SYSPARAM_OK) goto done; - - buffer = malloc(ctx.entry.len + 1); - if (!buffer) { - status = SYSPARAM_ERR_NOMEM; - goto done; - } - - status = _read_payload(&ctx, buffer, ctx.entry.len); - if (status != SYSPARAM_OK) { - free(buffer); - goto done; - } - - // Zero-terminate the result, just in case (doesn't hurt anything for - // non-string data, and can avoid nasty mistakes if the caller wants to - // interpret the result as a string). - buffer[ctx.entry.len] = 0; - - *destptr = buffer; - if (actual_length) *actual_length = ctx.entry.len; - if (is_binary) *is_binary = (bool)(ctx.entry.idflags & ENTRY_FLAG_BINARY); - status = SYSPARAM_OK; - - done: - xSemaphoreGive(_sysparam_info.sem); - return status; -} - -sysparam_status_t sysparam_get_data_static(const char *key, uint8_t *dest, size_t dest_size, size_t *actual_length, bool *is_binary) { - struct sysparam_context ctx; - sysparam_status_t status = SYSPARAM_OK; - size_t key_len = strlen(key); - - xSemaphoreTake(_sysparam_info.sem, portMAX_DELAY); - - if (actual_length) *actual_length = 0; - - if (!_sysparam_info.cur_base) { - status = SYSPARAM_ERR_NOINIT; - goto done; - } - - _init_context(&ctx); - status = _find_key(&ctx, key, key_len); - if (status != SYSPARAM_OK) goto done; - status = _find_value(&ctx, ctx.entry.idflags); - if (status != SYSPARAM_OK) goto done; - status = _read_payload(&ctx, dest, dest_size); - if (status != SYSPARAM_OK) goto done; - - if (actual_length) *actual_length = ctx.entry.len; - if (is_binary) *is_binary = (bool)(ctx.entry.idflags & ENTRY_FLAG_BINARY); - - done: - xSemaphoreGive(_sysparam_info.sem); - return status; -} - -sysparam_status_t sysparam_get_string(const char *key, char **destptr) { - bool is_binary; - sysparam_status_t status; - uint8_t *buf; - - status = sysparam_get_data(key, &buf, NULL, &is_binary); - if (status != SYSPARAM_OK) return status; - if (is_binary) { - // Value was saved as binary data, which means we shouldn't try to - // interpret it as a string. - free(buf); - return SYSPARAM_PARSEFAILED; - } - // `sysparam_get_data` will zero-terminate the result as a matter of course, - // so no need to do that here. - *destptr = (char *)buf; - return SYSPARAM_OK; -} - -sysparam_status_t sysparam_get_int32(const char *key, int32_t *result) { - int32_t value; - size_t actual_length; - bool is_binary; - sysparam_status_t status; - - status = sysparam_get_data_static(key, (uint8_t *)&value, sizeof(int32_t), - &actual_length, &is_binary); - if (status != SYSPARAM_OK) return status; - if (!is_binary || actual_length != sizeof(int32_t)) - return SYSPARAM_PARSEFAILED; - *result = value; - return status; -} - -sysparam_status_t sysparam_get_int8(const char *key, int8_t *result) { - int8_t value; - size_t actual_length; - bool is_binary; - sysparam_status_t status; - - status = sysparam_get_data_static(key, (uint8_t *)&value, sizeof(int8_t), - &actual_length, &is_binary); - if (status != SYSPARAM_OK) return status; - if (!is_binary || actual_length != sizeof(int8_t)) - return SYSPARAM_PARSEFAILED; - *result = value; - return status; -} - -sysparam_status_t sysparam_get_bool(const char *key, bool *result) { - const size_t buf_size = 8; - char buf[buf_size + 1]; // extra byte for zero termination - size_t data_len = 0; - bool binary = false; - sysparam_status_t status; - - status = sysparam_get_data_static(key, (uint8_t*)buf, - buf_size, &data_len, &binary); - - if (status != SYSPARAM_OK) return status; - do { - if (binary) { - if (data_len == 1) { // int8 value - uint8_t value; - memcpy(&value, buf, sizeof(value)); - *result = value ? true : false; - } else if (data_len == 4) { // int32 value - uint32_t value; - memcpy(&value, buf, sizeof(value)); - *result = value ? true : false; - } else { - status = SYSPARAM_PARSEFAILED; - } - break; - } - buf[data_len] = 0; - - if (!strcasecmp(buf, "y") || - !strcasecmp(buf, "yes") || - !strcasecmp(buf, "t") || - !strcasecmp(buf, "true") || - !strcmp(buf, "1")) { - *result = true; - break; - } - if (!strcasecmp(buf, "n") || - !strcasecmp(buf, "no") || - !strcasecmp(buf, "f") || - !strcasecmp(buf, "false") || - !strcmp(buf, "0")) { - *result = false; - break; - } - status = SYSPARAM_PARSEFAILED; - } while (0); - - return status; -} - -sysparam_status_t sysparam_set_data(const char *key, const uint8_t *value, size_t value_len, bool is_binary) { - struct sysparam_context ctx; - struct sysparam_context write_ctx; - sysparam_status_t status = SYSPARAM_OK; - uint16_t key_len = strlen(key); - size_t free_space; - size_t needed_space; - int key_id = -1; - uint32_t old_value_addr = 0; - uint16_t binary_flag; - - if (!key_len) return SYSPARAM_ERR_BADVALUE; - if (key_len > MAX_KEY_LEN) return SYSPARAM_ERR_BADVALUE; - if (value_len > MAX_VALUE_LEN) return SYSPARAM_ERR_BADVALUE; - - if (!value) value_len = 0; - - debug(1, "updating value for '%s' (%d bytes)", key, value_len); - - xSemaphoreTake(_sysparam_info.sem, portMAX_DELAY); - - if (!_sysparam_info.cur_base) { - status = SYSPARAM_ERR_NOINIT; - goto done; - } - - do { - _init_context(&ctx); - status = _find_key(&ctx, key, key_len); - if (status == SYSPARAM_OK) { - // Key already exists, see if there's a current value. - key_id = ctx.entry.idflags & ENTRY_MASK_ID; - status = _find_value(&ctx, key_id); - if (status == SYSPARAM_OK) { - old_value_addr = ctx.addr; - } - } - if (status < 0) break; - - binary_flag = is_binary ? ENTRY_FLAG_BINARY : 0; - - if (value_len) { - if (old_value_addr) { - if ((ctx.entry.idflags & ENTRY_FLAG_BINARY) == binary_flag && - ctx.entry.len == value_len) { - // Are we trying to write the same value that's already there? - status = _compare_payload(&ctx, (uint8_t *)value, value_len); - if (status == SYSPARAM_OK) { - // Yup, it's a match! No need to do anything further, - // just leave the current value as-is. - status = SYSPARAM_OK; - break; - } - if (status != SYSPARAM_NOTFOUND) goto done; - } - - // Since we will be deleting the old value (if any) make sure - // that the compactable count includes the space taken up by - // that entry too (even though it's not actually deleted yet) - ctx.compactable += ENTRY_SIZE(ctx.entry.len); - } - - // Append new value to the end, but first make sure we have enough - // space. - free_space = _sysparam_info.cur_base + _sysparam_info.region_size - _sysparam_info.end_addr; - needed_space = ENTRY_SIZE(value_len); - if (key_id < 0) { - // We did not find a previous key entry matching this key. We - // will need to add a key entry as well. - key_len = strlen(key); - needed_space += ENTRY_SIZE(key_len); - } - if (needed_space > free_space) { - // Can we compact things? - // First, scan all remaining entries up to the end so we can - // get a reasonably accurate "compactable" reading. - _find_entry(&ctx, ENTRY_ID_END, false); - if (needed_space <= free_space + ctx.compactable) { - // We should be able to get enough space by compacting. - status = _compact_params(&ctx, &key_id); - if (status < 0) break; - old_value_addr = 0; - } else if (ctx.unused_keys > 0) { - // Compacting will gain more space than expected, because - // there are some keys that can be omitted too, but we - // don't know exactly how much that will gain, so all we - // can do is give it a try and see if it gives us enough. - status = _compact_params(&ctx, &key_id); - if (status < 0) break; - old_value_addr = 0; - } - free_space = _sysparam_info.cur_base + _sysparam_info.region_size - _sysparam_info.end_addr; - } - if (needed_space > free_space) { - // Nothing we can do here.. We're full. - // (at least full enough that compacting won't help us store - // this value) - debug(1, "region full (need %d of %d remaining)", needed_space, free_space); - status = SYSPARAM_ERR_FULL; - break; - } - - if (key_id < 0) { - // We need to write a key entry for a new key. - // If we didn't find the key, then we already know _find_entry - // has gone through the entire contents, and thus - // ctx.max_key_id has the largest key_id found in the whole - // region. - if (ctx.max_key_id >= MAX_KEY_ID) { - if (ctx.unused_keys > 0) { - status = _compact_params(&ctx, &key_id); - if (status < 0) break; - old_value_addr = 0; - } else { - debug(1, "out of ids!"); - status = SYSPARAM_ERR_FULL; - break; - } - } - } - - if (_sysparam_info.force_compact) { - // We didn't need to compact above, but due to previously - // detected inconsistencies, we should compact anyway before - // writing anything new, so do that. - status = _compact_params(&ctx, &key_id); - if (status < 0) break; - } - - init_write_context(&write_ctx); - - if (key_id < 0) { - // Write a new key entry - key_id = ctx.max_key_id + 1; - status = _write_entry(write_ctx.addr, key_id, (uint8_t *)key, key_len); - if (status < 0) break; - write_ctx.addr += ENTRY_SIZE(key_len); - } - - // Write new value - status = _write_entry(write_ctx.addr, key_id | ENTRY_FLAG_VALUE | binary_flag, value, value_len); - if (status < 0) break; - write_ctx.addr += ENTRY_SIZE(value_len); - _sysparam_info.end_addr = write_ctx.addr; - } - - // Delete old value (if present) by clearing its "alive" flag - if (old_value_addr) { - status = _delete_entry(old_value_addr); - if (status < 0) break; - } - - debug(1, "New addr is 0x%08x (%d bytes remaining)", _sysparam_info.end_addr, _sysparam_info.cur_base + _sysparam_info.region_size - _sysparam_info.end_addr); - } while (false); - - done: - xSemaphoreGive(_sysparam_info.sem); - - return status; -} - -sysparam_status_t sysparam_set_string(const char *key, const char *value) { - return sysparam_set_data(key, (const uint8_t *)value, strlen(value), false); -} - -sysparam_status_t sysparam_set_int32(const char *key, int32_t value) { - return sysparam_set_data(key, (const uint8_t *)&value, sizeof(value), true); -} - -sysparam_status_t sysparam_set_int8(const char *key, int8_t value) { - return sysparam_set_data(key, (const uint8_t *)&value, sizeof(value), true); -} - -sysparam_status_t sysparam_set_bool(const char *key, bool value) { - uint8_t buf[4] = {0xff, 0xff, 0xff, 0xff}; - bool old_value; - - // Don't write anything if the current setting already evaluates to the - // same thing. - if (sysparam_get_bool(key, &old_value) == SYSPARAM_OK) { - if (old_value == value) return SYSPARAM_OK; - } - - buf[0] = value ? 'y' : 'n'; - return sysparam_set_data(key, buf, 1, false); -} - -sysparam_status_t sysparam_iter_start(sysparam_iter_t *iter) { - if (!_sysparam_info.cur_base) return SYSPARAM_ERR_NOINIT; - - iter->bufsize = DEFAULT_ITER_BUF_SIZE; - iter->key = malloc(iter->bufsize); - if (!iter->key) { - iter->bufsize = 0; - return SYSPARAM_ERR_NOMEM; - } - iter->key_len = 0; - iter->value_len = 0; - iter->ctx = malloc(sizeof(struct sysparam_context)); - if (!iter->ctx) { - free(iter->key); - iter->bufsize = 0; - return SYSPARAM_ERR_NOMEM; - } - _init_context(iter->ctx); - - return SYSPARAM_OK; -} - -sysparam_status_t sysparam_iter_next(sysparam_iter_t *iter) { - sysparam_status_t status; - size_t required_len; - struct sysparam_context *ctx = iter->ctx; - struct sysparam_context value_ctx; - size_t key_space; - char *newbuf; - - while (true) { - status = _find_key(ctx, NULL, 0); - if (status != SYSPARAM_OK) return status; - memcpy(&value_ctx, ctx, sizeof(value_ctx)); - - status = _find_value(&value_ctx, ctx->entry.idflags); - if (status < 0) return status; - if (status == SYSPARAM_NOTFOUND) continue; - - key_space = ctx->entry.len + 1; - required_len = key_space + value_ctx.entry.len + 1; - if (required_len > iter->bufsize) { - newbuf = realloc(iter->key, required_len); - if (!newbuf) { - return SYSPARAM_ERR_NOMEM; - } - iter->key = newbuf; - iter->bufsize = required_len; - } - - status = _read_payload(ctx, (uint8_t *)iter->key, iter->bufsize); - if (status < 0) return status; - // Null-terminate the key - iter->key[ctx->entry.len] = 0; - iter->key_len = ctx->entry.len; - - iter->value = (uint8_t *)(iter->key + key_space); - status = _read_payload(&value_ctx, iter->value, iter->bufsize - key_space); - if (status < 0) return status; - // Null-terminate the value (just in case) - iter->value[value_ctx.entry.len] = 0; - iter->value_len = value_ctx.entry.len; - if (value_ctx.entry.idflags & ENTRY_FLAG_BINARY) { - iter->binary = true; - debug(2, "iter_next: (0x%08x) '%s' = (0x%08x) (%d)", ctx->addr, iter->key, value_ctx.addr, iter->value_len); - } else { - iter->binary = false; - debug(2, "iter_next: (0x%08x) '%s' = (0x%08x) '%s' (%d)", ctx->addr, iter->key, value_ctx.addr, iter->value, iter->value_len); - } - - return SYSPARAM_OK; - } -} - -void sysparam_iter_end(sysparam_iter_t *iter) { - if (iter->key) free(iter->key); - if (iter->ctx) free(iter->ctx); -} - diff --git a/examples/Makefile b/examples/Makefile index f19c189..2f816e5 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -2,7 +2,6 @@ EXAMPLES = $(shell find $(dir $(lastword $(MAKEFILE_LIST))) -mindepth 2 -name Ma # Generate some dummy .dummybuild/.dummyrebuild target files EXAMPLES_BUILD = $(patsubst %,%.dummybuild,$(EXAMPLES)) EXAMPLES_REBUILD = $(patsubst %,%.dummyrebuild,$(EXAMPLES)) -EXAMPLES_CLEAN = $(patsubst %,%.dummyclean,$(EXAMPLES)) warning: @echo "******************************************************" @@ -22,17 +21,12 @@ build-examples: $(EXAMPLES_BUILD) rebuild-examples: $(EXAMPLES_REBUILD) -clean-examples: $(EXAMPLES_CLEAN) - %.dummybuild: $(MAKE) -C $(dir $@) %.dummyrebuild: $(MAKE) -C $(dir $@) rebuild -%.dummyclean: - $(MAKE) -C $(dir $@) clean - -.PHONY: warning rebuild-examples build-examples clean-examples +.PHONY: warning rebuild-examples build-examples .NOTPARALLEL: .ONESHELL: diff --git a/examples/access_point/access_point.c b/examples/access_point/access_point.c index 20e9d88..5a41156 100644 --- a/examples/access_point/access_point.c +++ b/examples/access_point/access_point.c @@ -1,11 +1,11 @@ -/** - * Very basic example showing usage of access point mode and the DHCP server. - * The ESP in the example runs a telnet server on 172.16.0.1 (port 23) that - * outputs some status information if you connect to it, then closes - * the connection. - * - * This example code is in the public domain. - */ +/* Very basic example showing usage of access point mode and the DHCP server. + + The ESP in the example runs a telnet server on 172.16.0.1 (port 23) that + outputs some status information if you connect to it, then closes + the connection. + + This example code is in the public domain. +*/ #include #include @@ -36,55 +36,62 @@ void user_init(void) IP4_ADDR(&ap_ip.netmask, 255, 255, 0, 0); sdk_wifi_set_ip_info(1, &ap_ip); - struct sdk_softap_config ap_config = { .ssid = AP_SSID, .ssid_hidden = 0, .channel = 3, .ssid_len = strlen(AP_SSID), .authmode = - AUTH_WPA_WPA2_PSK, .password = AP_PSK, .max_connection = 3, .beacon_interval = 100, }; + struct sdk_softap_config ap_config = { + .ssid = AP_SSID, + .ssid_hidden = 0, + .channel = 3, + .ssid_len = strlen(AP_SSID), + .authmode = AUTH_WPA_WPA2_PSK, + .password = AP_PSK, + .max_connection = 3, + .beacon_interval = 100, + }; sdk_wifi_softap_set_config(&ap_config); - xTaskCreate(telnetTask, "telnetTask", 512, NULL, 2, NULL); -} - -/* Telnet task listens on port 23, returns some status information and then closes - the connection if you connect to it. - */ -static void telnetTask(void *pvParameters) -{ ip_addr_t first_client_ip; IP4_ADDR(&first_client_ip, 172, 16, 0, 2); dhcpserver_start(&first_client_ip, 4); - struct netconn *nc = netconn_new(NETCONN_TCP); - if (!nc) - { - printf("Status monitor: Failed to allocate socket.\r\n"); - return; - } - netconn_bind(nc, IP_ANY_TYPE, TELNET_PORT); - netconn_listen(nc); - - while (1) - { - struct netconn *client = NULL; - err_t err = netconn_accept(nc, &client); - - if (err != ERR_OK) - { - if (client) - netconn_delete(client); - continue; - } - - ip_addr_t client_addr; - uint16_t port_ignore; - netconn_peer(client, &client_addr, &port_ignore); - - char buf[80]; - snprintf(buf, sizeof(buf), "Uptime %d seconds\r\n", xTaskGetTickCount() * portTICK_PERIOD_MS / 1000); - netconn_write(client, buf, strlen(buf), NETCONN_COPY); - snprintf(buf, sizeof(buf), "Free heap %d bytes\r\n", (int) xPortGetFreeHeapSize()); - netconn_write(client, buf, strlen(buf), NETCONN_COPY); - char abuf[40]; - snprintf(buf, sizeof(buf), "Your address is %s\r\n\r\n", ipaddr_ntoa_r(&client_addr, abuf, sizeof(abuf))); - netconn_write(client, buf, strlen(buf), NETCONN_COPY); - netconn_delete(client); - } + xTaskCreate(telnetTask, (signed char *)"telnetTask", 512, NULL, 2, NULL); +} + +/* Telnet task listens on port 23, returns some status information and then closes + the connection if you connect to it. +*/ +static void telnetTask(void *pvParameters) +{ + struct netconn *nc = netconn_new (NETCONN_TCP); + if(!nc) { + printf("Status monitor: Failed to allocate socket.\r\n"); + return; + } + netconn_bind(nc, IP_ADDR_ANY, TELNET_PORT); + netconn_listen(nc); + + while(1) { + struct netconn *client = NULL; + err_t err = netconn_accept(nc, &client); + + if ( err != ERR_OK ) { + if(client) + netconn_delete(client); + continue; + } + + ip_addr_t client_addr; + uint16_t port_ignore; + netconn_peer(client, &client_addr, &port_ignore); + + char buf[80]; + snprintf(buf, sizeof(buf), "Uptime %d seconds\r\n", + xTaskGetTickCount()*portTICK_RATE_MS/1000); + netconn_write(client, buf, strlen(buf), NETCONN_COPY); + snprintf(buf, sizeof(buf), "Free heap %d bytes\r\n", (int)xPortGetFreeHeapSize()); + netconn_write(client, buf, strlen(buf), NETCONN_COPY); + snprintf(buf, sizeof(buf), "Your address is %d.%d.%d.%d\r\n\r\n", + ip4_addr1(&client_addr), ip4_addr2(&client_addr), + ip4_addr3(&client_addr), ip4_addr4(&client_addr)); + netconn_write(client, buf, strlen(buf), NETCONN_COPY); + netconn_delete(client); + } } diff --git a/examples/ad770x/Makefile b/examples/ad770x/Makefile deleted file mode 100644 index f102848..0000000 --- a/examples/ad770x/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = ad770x -EXTRA_COMPONENTS = extras/ad770x -#ESPBAUD = 460800 -include ../../common.mk diff --git a/examples/ad770x/main.c b/examples/ad770x/main.c deleted file mode 100644 index 2a021cc..0000000 --- a/examples/ad770x/main.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Example of using AD7705/AD7706 driver - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include -#include - -#define CS_PIN 2 -#define AIN_CHANNEL 0 // AIN1+,AIN1- for AD7705 - -static const ad770x_params_t dev = { - .cs_pin = CS_PIN, - .master_clock = AD770X_MCLK_4_9152MHz, // 4.9152 MHz - .bipolar = false, // Unipolar mode - .gain = AD770X_GAIN_1, // No gain - .update_rate = AD770X_RATE_50 // 50 Hz output update rate -}; - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - while (ad770x_init(&dev, AIN_CHANNEL) != 0) - { - printf("Cannot initialize AD7705\n"); - vTaskDelay(500 / portTICK_PERIOD_MS); - } - - while (true) - { - // wait for data - while (!ad770x_data_ready(&dev, AIN_CHANNEL)) {} - - // Read result - uint16_t raw = ad770x_raw_adc_value(&dev, AIN_CHANNEL); - - printf("Raw ADC value: %d\n", raw); - - vTaskDelay(500 / portTICK_PERIOD_MS); - } -} diff --git a/examples/ads1115_test/Makefile b/examples/ads1115_test/Makefile deleted file mode 100644 index 924bf11..0000000 --- a/examples/ads1115_test/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = ads1115_test -EXTRA_COMPONENTS = extras/i2c extras/ads111x -#ESPBAUD = 460800 -include ../../common.mk diff --git a/examples/ads1115_test/main.c b/examples/ads1115_test/main.c deleted file mode 100644 index 5c0c4db..0000000 --- a/examples/ads1115_test/main.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Example of using DS1302 RTC driver - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * Pavel Merzlyakov - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include -#include -#include - -// Connect ADDR pin to GND -#define ADDR ADS111X_ADDR_GND - -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 - -// +-4.096V -#define GAIN ADS111X_GAIN_4V096 - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - i2c_dev_t dev = { - .addr = ADDR, - .bus = I2C_BUS, - }; - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - - ads111x_set_mode(&dev, ADS111X_MODE_CONTUNOUS); - ads111x_set_data_rate(&dev, ADS111X_DATA_RATE_32); - - ads111x_set_input_mux(&dev, ADS111X_MUX_0_GND); - ads111x_set_gain(&dev, GAIN); - - float gain_val = ads111x_gain_values[GAIN]; - - while (true) - { - // wait for conversion end - while (ads111x_busy(&dev)) {} - - // Read result - int16_t raw = ads111x_get_value(&dev); - - float voltage = gain_val / ADS111X_MAX_VALUE * raw; - - printf("Raw ADC value: %d, voltage: %.04f volts\n", raw, voltage); - - vTaskDelay(500 / portTICK_PERIOD_MS); - } -} diff --git a/examples/aws_iot/Makefile b/examples/aws_iot/Makefile deleted file mode 100644 index 677148a..0000000 --- a/examples/aws_iot/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=aws_iot -EXTRA_COMPONENTS = extras/paho_mqtt_c extras/mbedtls -include ../../common.mk diff --git a/examples/aws_iot/README.md b/examples/aws_iot/README.md deleted file mode 100644 index daebef0..0000000 --- a/examples/aws_iot/README.md +++ /dev/null @@ -1,60 +0,0 @@ -Please follow the steps below to build and run the example on your ESP8266. - -1. Modify client_config.c to provide your own account-specific AWS IoT - endpoint, ECC-based client certificate, and private key. - - Your endpoint is in the form of ```.iot..amazonaws.com```. - It can be retrieved using the following command: - - ```sh - $ aws iot describe-endpoint - ``` - - Your ECC-based certificate and private key can be generated by using - the following commands: - - ```sh - $ openssl ecparam -out ecckey.key -name prime256v1 -genkey - $ openssl req -new -sha256 -key ecckey.key -nodes -out eccCsr.csr - $ aws iot create-certificate-from-csr --certificate-signing-request file://eccCsr.csr --certificate-pem-outfile eccCert.crt --set-as-active - ``` - - To convert the certificate or key file into C string, you could try - the following example: - - ```sh - $ cat ecckey.key | sed -e 's/^/"/g' | sed -e 's/$/\\r\\n"/g' - ``` - - *Note, more information about using ECC-based certificate with AWS IoT - can be found in the following blog* - - https://aws.amazon.com/blogs/iot/elliptic-curve-cryptography-and-forward-secrecy-support-in-aws-iot-3/ - -2. Create and attach AWS IoT access policy to the certificate - - ```sh - $ aws iot create-policy --policy-name test-thing-policy --policy-document '{ "Version": "2012-10-17", "Statement": [{"Action": ["iot:*"], "Resource": ["*"], "Effect": "Allow" }] }' - $ aws iot attach-principal-policy --policy-name test-thing-policy --principal "arn:aws:iot:eu-west-1:892804553548:cert/2d9c2da32a95b5e95a277c3b8f7af40869727f5259dc2e907fc8aba916c857e" - ``` - - *Note, the 'principal' argument is the certificate ARN generated from the - pervious command 'aws iot create-certificate-from-csr'.* - -3. Modify include/ssid_config.h with your Wifi access Id and credential. - -4. Build and flash the example firmware to the device using the command - below: - - ```sh - $ make flash -C examples/aws_iot ESPPORT=/dev/ttyUSB0 - ``` - - *Note, it assumes your ESP8266 is connected through USB and exposed under - your Linux host as /dev/ttyUSB0.* - -5. Once the ESP8266 is connected to AWS IoT, you can use the MQTT client - on the AWS IoT console to receive the messages published by the ESP8266 - to topic 'esp8266/status'. You could also publish 'on' or 'off' message - to topic 'esp8266/control' to toggle the GPIO/LED (GPIO2 is used by the - example). diff --git a/examples/aws_iot/aws_iot.c b/examples/aws_iot/aws_iot.c deleted file mode 100644 index 08ce9f4..0000000 --- a/examples/aws_iot/aws_iot.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Derived from examples/mqtt_client/mqtt_client.c - added TLS1.2 support and some minor modifications. - */ -#include "espressif/esp_common.h" -#include "esp/uart.h" - -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include - -// this must be ahead of any mbedtls header files so the local mbedtls/config.h can be properly referenced -#include "ssl_connection.h" - -#define MQTT_PUB_TOPIC "esp8266/status" -#define MQTT_SUB_TOPIC "esp8266/control" -#define GPIO_LED 2 -#define MQTT_PORT 8883 - -/* certs, key, and endpoint */ -extern char *ca_cert, *client_endpoint, *client_cert, *client_key; - -static int wifi_alive = 0; -static int ssl_reset; -static SSLConnection *ssl_conn; -static QueueHandle_t publish_queue; - -static void beat_task(void *pvParameters) { - char msg[16]; - int count = 0; - - while (1) { - if (!wifi_alive) { - vTaskDelay(1000 / portTICK_PERIOD_MS); - continue; - } - - printf("Schedule to publish\r\n"); - - snprintf(msg, sizeof(msg), "%d", count); - if (xQueueSend(publish_queue, (void *) msg, 0) == pdFALSE) { - printf("Publish queue overflow\r\n"); - } - - vTaskDelay(10000 / portTICK_PERIOD_MS); - } -} - -static void topic_received(mqtt_message_data_t *md) { - mqtt_message_t *message = md->message; - int i; - - printf("Received: "); - for (i = 0; i < md->topic->lenstring.len; ++i) - printf("%c", md->topic->lenstring.data[i]); - - printf(" = "); - for (i = 0; i < (int) message->payloadlen; ++i) - printf("%c", ((char *) (message->payload))[i]); - printf("\r\n"); - - if (!strncmp(message->payload, "on", 2)) { - printf("Turning on LED\r\n"); - gpio_write(GPIO_LED, 0); - } else if (!strncmp(message->payload, "off", 3)) { - printf("Turning off LED\r\n"); - gpio_write(GPIO_LED, 1); - } -} - -static const char *get_my_id(void) { - // Use MAC address for Station as unique ID - static char my_id[13]; - static bool my_id_done = false; - int8_t i; - uint8_t x; - if (my_id_done) - return my_id; - if (!sdk_wifi_get_macaddr(STATION_IF, (uint8_t *) my_id)) - return NULL; - for (i = 5; i >= 0; --i) { - x = my_id[i] & 0x0F; - if (x > 9) - x += 7; - my_id[i * 2 + 1] = x + '0'; - x = my_id[i] >> 4; - if (x > 9) - x += 7; - my_id[i * 2] = x + '0'; - } - my_id[12] = '\0'; - my_id_done = true; - return my_id; -} - -static int mqtt_ssl_read(mqtt_network_t * n, unsigned char* buffer, int len, - int timeout_ms) { - int r = ssl_read(ssl_conn, buffer, len, timeout_ms); - if (r <= 0 - && (r != MBEDTLS_ERR_SSL_WANT_READ - && r != MBEDTLS_ERR_SSL_WANT_WRITE - && r != MBEDTLS_ERR_SSL_TIMEOUT)) { - printf("%s: TLS read error (%d), resetting\n\r", __func__, r); - ssl_reset = 1; - }; - return r; -} - -static int mqtt_ssl_write(mqtt_network_t* n, unsigned char* buffer, int len, - int timeout_ms) { - int r = ssl_write(ssl_conn, buffer, len, timeout_ms); - if (r <= 0 - && (r != MBEDTLS_ERR_SSL_WANT_READ - && r != MBEDTLS_ERR_SSL_WANT_WRITE)) { - printf("%s: TLS write error (%d), resetting\n\r", __func__, r); - ssl_reset = 1; - } - return r; -} - -static void mqtt_task(void *pvParameters) { - int ret = 0; - struct mqtt_network network; - mqtt_client_t client = mqtt_client_default; - char mqtt_client_id[20]; - uint8_t mqtt_buf[100]; - uint8_t mqtt_readbuf[100]; - mqtt_packet_connect_data_t data = mqtt_packet_connect_data_initializer; - - memset(mqtt_client_id, 0, sizeof(mqtt_client_id)); - strcpy(mqtt_client_id, "ESP-"); - strcat(mqtt_client_id, get_my_id()); - - ssl_conn = (SSLConnection *) malloc(sizeof(SSLConnection)); - while (1) { - if (!wifi_alive) { - vTaskDelay(1000 / portTICK_PERIOD_MS); - continue; - } - - printf("%s: started\n\r", __func__); - ssl_reset = 0; - ssl_init(ssl_conn); - ssl_conn->ca_cert_str = ca_cert; - ssl_conn->client_cert_str = client_cert; - ssl_conn->client_key_str = client_key; - - mqtt_network_new(&network); - network.mqttread = mqtt_ssl_read; - network.mqttwrite = mqtt_ssl_write; - - printf("%s: connecting to MQTT server %s ... ", __func__, - client_endpoint); - ret = ssl_connect(ssl_conn, client_endpoint, MQTT_PORT); - - if (ret) { - printf("error: %d\n\r", ret); - ssl_destroy(ssl_conn); - continue; - } - printf("done\n\r"); - mqtt_client_new(&client, &network, 5000, mqtt_buf, 100, mqtt_readbuf, - 100); - - data.willFlag = 0; - data.MQTTVersion = 4; - data.cleansession = 1; - data.clientID.cstring = mqtt_client_id; - data.username.cstring = NULL; - data.password.cstring = NULL; - data.keepAliveInterval = 1000; - printf("Send MQTT connect ... "); - ret = mqtt_connect(&client, &data); - if (ret) { - printf("error: %d\n\r", ret); - ssl_destroy(ssl_conn); - continue; - } - printf("done\r\n"); - mqtt_subscribe(&client, MQTT_SUB_TOPIC, MQTT_QOS1, topic_received); - xQueueReset(publish_queue); - - while (wifi_alive && !ssl_reset) { - char msg[64]; - while (xQueueReceive(publish_queue, (void *) msg, 0) == pdTRUE) { - TickType_t task_tick = xTaskGetTickCount(); - uint32_t free_heap = xPortGetFreeHeapSize(); - uint32_t free_stack = uxTaskGetStackHighWaterMark(NULL); - snprintf(msg, sizeof(msg), "%u: free heap %u, free stack %u", - task_tick, free_heap, free_stack * 4); - printf("Publishing: %s\r\n", msg); - - mqtt_message_t message; - message.payload = msg; - message.payloadlen = strlen(msg); - message.dup = 0; - message.qos = MQTT_QOS1; - message.retained = 0; - ret = mqtt_publish(&client, MQTT_PUB_TOPIC, &message); - if (ret != MQTT_SUCCESS) { - printf("error while publishing message: %d\n", ret); - break; - } - } - - ret = mqtt_yield(&client, 1000); - if (ret == MQTT_DISCONNECTED) - break; - } - printf("Connection dropped, request restart\n\r"); - ssl_destroy(ssl_conn); - } -} - -static void wifi_task(void *pvParameters) { - uint8_t status = 0; - uint8_t retries = 30; - struct sdk_station_config config = { .ssid = WIFI_SSID, .password = - WIFI_PASS, }; - - printf("%s: Connecting to WiFi\n\r", __func__); - sdk_wifi_set_opmode (STATION_MODE); - sdk_wifi_station_set_config(&config); - - while (1) { - wifi_alive = 0; - - while ((status != STATION_GOT_IP) && (retries)) { - status = sdk_wifi_station_get_connect_status(); - printf("%s: status = %d\n\r", __func__, status); - if (status == STATION_WRONG_PASSWORD) { - printf("WiFi: wrong password\n\r"); - break; - } else if (status == STATION_NO_AP_FOUND) { - printf("WiFi: AP not found\n\r"); - break; - } else if (status == STATION_CONNECT_FAIL) { - printf("WiFi: connection failed\r\n"); - break; - } - vTaskDelay(1000 / portTICK_PERIOD_MS); - --retries; - } - - while ((status = sdk_wifi_station_get_connect_status()) - == STATION_GOT_IP) { - if (wifi_alive == 0) { - printf("WiFi: Connected\n\r"); - wifi_alive = 1; - } - vTaskDelay(500 / portTICK_PERIOD_MS); - } - - wifi_alive = 0; - printf("WiFi: disconnected\n\r"); - vTaskDelay(1000 / portTICK_PERIOD_MS); - } -} - -void user_init(void) { - uart_set_baud(0, 115200); - printf("SDK version: %s, free heap %u\n", sdk_system_get_sdk_version(), - xPortGetFreeHeapSize()); - - gpio_enable(GPIO_LED, GPIO_OUTPUT); - gpio_write(GPIO_LED, 1); - - publish_queue = xQueueCreate(3, 16); - xTaskCreate(&wifi_task, "wifi_task", 256, NULL, 2, NULL); - xTaskCreate(&beat_task, "beat_task", 256, NULL, 2, NULL); - xTaskCreate(&mqtt_task, "mqtt_task", 2048, NULL, 2, NULL); -} diff --git a/examples/aws_iot/ca_cert.c b/examples/aws_iot/ca_cert.c deleted file mode 100644 index b2db9fb..0000000 --- a/examples/aws_iot/ca_cert.c +++ /dev/null @@ -1,29 +0,0 @@ -// trusted root CA certificate - https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -const char *ca_cert = "-----BEGIN CERTIFICATE-----\r\n" - "MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB\r\n" - "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\r\n" - "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\r\n" - "U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\r\n" - "ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\r\n" - "aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL\r\n" - "MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\r\n" - "ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln\r\n" - "biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp\r\n" - "U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y\r\n" - "aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1\r\n" - "nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex\r\n" - "t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz\r\n" - "SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG\r\n" - "BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+\r\n" - "rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/\r\n" - "NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E\r\n" - "BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH\r\n" - "BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy\r\n" - "aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv\r\n" - "MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE\r\n" - "p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y\r\n" - "5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK\r\n" - "WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ\r\n" - "4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N\r\n" - "hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq\r\n" - "-----END CERTIFICATE-----\r\n"; diff --git a/examples/aws_iot/client_config.c b/examples/aws_iot/client_config.c deleted file mode 100644 index 8b587c2..0000000 --- a/examples/aws_iot/client_config.c +++ /dev/null @@ -1,17 +0,0 @@ -// AWS IoT client endpoint -const char *client_endpoint = ".iot..amazonaws.com"; - -// AWS IoT device certificate (ECC) -const char *client_cert = -"-----BEGIN CERTIFICATE-----\r\n" -"------------------ -------------------\r\n" -"-----END CERTIFICATE-----\r\n"; - -// AWS IoT device private key (ECC) -const char *client_key = -"-----BEGIN EC PARAMETERS-----\r\n" -"BggqhkjOPQMBBw==\r\n" -"-----END EC PARAMETERS-----\r\n" -"-----BEGIN EC PRIVATE KEY-----\r\n" -"------------------ -------------------\r\n" -"-----END EC PRIVATE KEY-----\r\n"; diff --git a/examples/aws_iot/mbedtls/config.h b/examples/aws_iot/mbedtls/config.h deleted file mode 100644 index f3b4411..0000000 --- a/examples/aws_iot/mbedtls/config.h +++ /dev/null @@ -1,119 +0,0 @@ -/** - * \file config.h - * - * \brief Configuration options (set of defines) - * - * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * 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 is part of mbed TLS (https://tls.mbed.org) - */ - -/* - * This set of compile-time options may be used to enable - * or disable features selectively, and reduce the global - * memory footprint. - */ -#ifndef MBEDTLS_CONFIG_H -#define MBEDTLS_CONFIG_H - -/* System support */ -#define MBEDTLS_HAVE_ASM -#define MBEDTLS_DEPRECATED_WARNING -#define MBEDTLS_ENTROPY_HARDWARE_ALT -#define MBEDTLS_NO_PLATFORM_ENTROPY - -/* mbed TLS feature support */ -#define MBEDTLS_ECP_DP_SECP256R1_ENABLED -#define MBEDTLS_ECP_DP_SECP384R1_ENABLED -#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED -#define MBEDTLS_SSL_PROTO_TLS1_2 - -/* Debug support (optional) */ -// #define MBEDTLS_ERROR_C -// #define MBEDTLS_DEBUG_C - -/* mbed TLS modules */ -#define MBEDTLS_AES_C -#define MBEDTLS_ASN1_PARSE_C -#define MBEDTLS_ASN1_WRITE_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_CIPHER_C -#define MBEDTLS_CTR_DRBG_C -#define MBEDTLS_ECDH_C -#define MBEDTLS_ECDSA_C -#define MBEDTLS_ECP_C -#define MBEDTLS_ENTROPY_C -#define MBEDTLS_GCM_C -#define MBEDTLS_MD_C -#define MBEDTLS_NET_C -#define MBEDTLS_OID_C -#define MBEDTLS_PK_C -#define MBEDTLS_PK_PARSE_C -#define MBEDTLS_SHA256_C -#define MBEDTLS_SHA512_C -#define MBEDTLS_SSL_CLI_C -#define MBEDTLS_SSL_SRV_C -#define MBEDTLS_SSL_TLS_C -#define MBEDTLS_X509_CRT_PARSE_C -#define MBEDTLS_X509_USE_C - -/* For verify RSA based root CA certificate (optional if root CA cert is signed using ECC) */ -#define MBEDTLS_RSA_C -#define MBEDTLS_SHA1_C -#define MBEDTLS_PKCS1_V15 -#define MBEDTLS_PKCS1_V21 - -/* For test certificates */ -#define MBEDTLS_BASE64_C -#define MBEDTLS_CERTS_C -#define MBEDTLS_PEM_PARSE_C - -/* Save RAM at the expense of ROM */ -#define MBEDTLS_AES_ROM_TABLES - -/* Save RAM by adjusting to our exact needs */ -#define MBEDTLS_ECP_MAX_BITS 384 -#define MBEDTLS_MPI_MAX_SIZE 256 // 2048 bits - -/* Save RAM at the expense of speed, see ecp.h */ -#define MBEDTLS_ECP_WINDOW_SIZE 2 -#define MBEDTLS_ECP_FIXED_POINT_OPTIM 0 - -/* Significant speed benefit at the expense of some ROM */ -#define MBEDTLS_ECP_NIST_OPTIM - -/* - * You should adjust this to the exact number of sources you're using: default - * is the "mbedtls_platform_entropy_poll" source, but you may want to add other ones. - * Minimum is 2 for the entropy test suite. - */ -#define MBEDTLS_ENTROPY_MAX_SOURCES 2 - -/* Save ROM and a few bytes of RAM by specifying our own ciphersuite list */ -#define MBEDTLS_SSL_CIPHERSUITES \ - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - -/* - * Save RAM at the expense of interoperability: do this only if you control - * both ends of the connection! (See coments in "mbedtls/ssl.h".) - * The minimum size here depends on the certificate chain used as well as the - * typical size of records. - */ -#define MBEDTLS_SSL_MAX_CONTENT_LEN 4096 - -#include "mbedtls/check_config.h" - -#endif /* MBEDTLS_CONFIG_H */ diff --git a/examples/aws_iot/ssl_connection.c b/examples/aws_iot/ssl_connection.c deleted file mode 100644 index 24dafb0..0000000 --- a/examples/aws_iot/ssl_connection.c +++ /dev/null @@ -1,170 +0,0 @@ -#include -#include -#include -#include -#include -#include - -// this must be ahead of any mbedtls header files so the local mbedtls/config.h can be properly referenced -#include "ssl_connection.h" - -#define SSL_READ_TIMEOUT_MS 2000 - -const char *pers = "esp-tls"; - -static int handle_error(int err) { - -#ifdef MBEDTLS_ERROR_C - char error_buf[100]; - - mbedtls_strerror(err, error_buf, 100); - printf("%s\n", error_buf); -#endif - printf("Error: %d\n", err); - return err; -} - -#ifdef MBEDTLS_DEBUG_C -static void my_debug(void *ctx, int level, const char *file, int line, - const char *str) { - ((void) level); - fprintf((FILE *) ctx, "%s:%04d: %s", file, line, str); - fflush((FILE *) ctx); -} -#endif - -void ssl_init(SSLConnection* conn) { - /* - * Initialize the RNG and the session data - */ - mbedtls_net_init(&conn->net_ctx); - mbedtls_ssl_init(&conn->ssl_ctx); - mbedtls_ssl_config_init(&conn->ssl_conf); - - mbedtls_x509_crt_init(&conn->ca_cert); - mbedtls_x509_crt_init(&conn->client_cert); - mbedtls_pk_init(&conn->client_key); - - mbedtls_ctr_drbg_init(&conn->drbg_ctx); - mbedtls_entropy_init(&conn->entropy_ctx); - -} - -int ssl_connect(SSLConnection* conn, const char* host, int port) { - int ret; - char buffer[8]; - - ret = mbedtls_ctr_drbg_seed(&conn->drbg_ctx, mbedtls_entropy_func, - &conn->entropy_ctx, (const unsigned char *) pers, strlen(pers)); - if (ret < 0) { - return -1; - } - - ret = mbedtls_x509_crt_parse(&conn->ca_cert, - (const unsigned char *) conn->ca_cert_str, - strlen(conn->ca_cert_str) + 1); - if (ret < 0) { - return handle_error(ret); - } - - ret = mbedtls_x509_crt_parse(&conn->client_cert, - (const unsigned char *) conn->client_cert_str, - strlen(conn->client_cert_str) + 1); - if (ret < 0) { - return handle_error(ret); - } - - ret = mbedtls_pk_parse_key(&conn->client_key, - (const unsigned char *) conn->client_key_str, - strlen(conn->client_key_str) + 1, NULL, 0); - if (ret != 0) { - return handle_error(ret); - } - - snprintf(buffer, sizeof(buffer), "%d", port); - ret = mbedtls_net_connect(&conn->net_ctx, host, buffer, - MBEDTLS_NET_PROTO_TCP); - if (ret != 0) { - return handle_error(ret); - } - - ret = mbedtls_ssl_config_defaults(&conn->ssl_conf, MBEDTLS_SSL_IS_CLIENT, - MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT); - if (ret != 0) { - return handle_error(ret); - } - -#ifdef MBEDTLS_DEBUG_C - mbedtls_ssl_conf_dbg(&conn->ssl_conf, my_debug, stdout); - mbedtls_debug_set_threshold(5); -#endif - - mbedtls_ssl_conf_authmode(&conn->ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED); - mbedtls_ssl_conf_rng(&conn->ssl_conf, mbedtls_ctr_drbg_random, - &conn->drbg_ctx); - mbedtls_ssl_conf_read_timeout(&conn->ssl_conf, SSL_READ_TIMEOUT_MS); - mbedtls_ssl_conf_ca_chain(&conn->ssl_conf, &conn->ca_cert, NULL); - - ret = mbedtls_ssl_conf_own_cert(&conn->ssl_conf, &conn->client_cert, - &conn->client_key); - if (ret != 0) { - return handle_error(ret); - } - - ret = mbedtls_ssl_setup(&conn->ssl_ctx, &conn->ssl_conf); - if (ret != 0) { - return handle_error(ret); - } - - ret = mbedtls_ssl_set_hostname(&conn->ssl_ctx, host); - if (ret != 0) { - return handle_error(ret); - } - - mbedtls_ssl_set_bio(&conn->ssl_ctx, &conn->net_ctx, mbedtls_net_send, NULL, - mbedtls_net_recv_timeout); - - while ((ret = mbedtls_ssl_handshake(&conn->ssl_ctx)) != 0) { - if (ret != MBEDTLS_ERR_SSL_WANT_READ - && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { - if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { - return handle_error(ret); - } - } - handle_error(ret); - - vTaskDelay(5000 / portTICK_PERIOD_MS); - } - - mbedtls_ssl_get_record_expansion(&conn->ssl_ctx); - ret = mbedtls_ssl_get_verify_result(&conn->ssl_ctx); - if (ret != 0) { - return handle_error(ret); - } - - return ret; -} - -int ssl_destroy(SSLConnection* conn) { - mbedtls_net_free(&conn->net_ctx); - mbedtls_ssl_free(&conn->ssl_ctx); - mbedtls_ssl_config_free(&conn->ssl_conf); - mbedtls_ctr_drbg_free(&conn->drbg_ctx); - mbedtls_entropy_free(&conn->entropy_ctx); - mbedtls_x509_crt_free(&conn->ca_cert); - mbedtls_x509_crt_free(&conn->client_cert); - mbedtls_pk_free(&conn->client_key); - - return 0; -} - -int ssl_read(SSLConnection* n, unsigned char* buffer, int len, int timeout_ms) { - // NB: timeout_ms is ignored, so blocking read will timeout after SSL_READ_TIMEOUT_MS - return mbedtls_ssl_read(&n->ssl_ctx, buffer, len); -} - -int ssl_write(SSLConnection* n, unsigned char* buffer, int len, - int timeout_ms) { - // NB: timeout_ms is ignored, so write is always block write - return mbedtls_ssl_write(&n->ssl_ctx, buffer, len); -} diff --git a/examples/aws_iot/ssl_connection.h b/examples/aws_iot/ssl_connection.h deleted file mode 100644 index 5113701..0000000 --- a/examples/aws_iot/ssl_connection.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef _SSL_CONNECTION_H_ -#define _SSL_CONNECTION_H_ - -// this must be ahead of any mbedtls header files so the local mbedtls/config.h can be properly referenced -#include "mbedtls/config.h" - -#include "mbedtls/net_sockets.h" -#include "mbedtls/debug.h" -#include "mbedtls/ssl.h" -#include "mbedtls/entropy.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/error.h" -#include "mbedtls/certs.h" - -typedef struct SSLConnection { - mbedtls_net_context net_ctx; - mbedtls_ssl_context ssl_ctx; - mbedtls_ssl_config ssl_conf; - - mbedtls_ctr_drbg_context drbg_ctx; - mbedtls_entropy_context entropy_ctx; - - mbedtls_x509_crt ca_cert; - mbedtls_x509_crt client_cert; - mbedtls_pk_context client_key; - - char *ca_cert_str; - char *client_cert_str; - char *client_key_str; -} SSLConnection; - -extern void ssl_init(SSLConnection* n); -extern int ssl_connect(SSLConnection* n, const char* host, int port); -extern int ssl_destroy(SSLConnection* n); -extern int ssl_read(SSLConnection* n, unsigned char* buffer, int len, - int timeout_ms); -extern int ssl_write(SSLConnection* n, unsigned char* buffer, int len, - int timeout_ms); - -#endif /* _SSL_CONNECTION_H_ */ diff --git a/examples/bh1750/Makefile b/examples/bh1750/Makefile deleted file mode 100644 index 5abb97a..0000000 --- a/examples/bh1750/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=bh1750_example -EXTRA_COMPONENTS = extras/i2c extras/bh1750 -include ../../common.mk diff --git a/examples/bh1750/bh1750_example.c b/examples/bh1750/bh1750_example.c deleted file mode 100644 index b75115c..0000000 --- a/examples/bh1750/bh1750_example.c +++ /dev/null @@ -1,44 +0,0 @@ -#include - -#include "espressif/esp_common.h" -#include "esp/uart.h" - -#include "FreeRTOS.h" -#include "task.h" - -#include "i2c/i2c.h" -#include "bh1750/bh1750.h" - -#define SCL_PIN 5 -#define SDA_PIN 4 -#define I2C_BUS 0 - -static void measure(void *pvParameters) -{ - i2c_dev_t dev = { - .addr = BH1750_ADDR_LO, - .bus = I2C_BUS, - }; - bh1750_configure(&dev, BH1750_CONTINUOUS_MODE | BH1750_HIGH_RES_MODE); - - while (1) { - while(1) { - vTaskDelay(200 / portTICK_PERIOD_MS); - printf("Lux: %d\n", bh1750_read(&dev)); - } - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - - // Just some information - printf("\n"); - printf("SDK version : %s\n", sdk_system_get_sdk_version()); - printf("GIT version : %s\n", GITSHORTREV); - - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - - xTaskCreate(measure, "measure_task", 256, NULL, 2, NULL); -} diff --git a/examples/blink/Makefile b/examples/blink/Makefile index 4eeb17e..ceda2a3 100644 --- a/examples/blink/Makefile +++ b/examples/blink/Makefile @@ -1,2 +1,6 @@ PROGRAM=blink + +EXTRA_COMPONENTS = extras/mbedtls + include ../../common.mk + diff --git a/examples/blink/blink.c b/examples/blink/blink.c index 9de0f20..99a9c42 100644 --- a/examples/blink/blink.c +++ b/examples/blink/blink.c @@ -2,13 +2,16 @@ * * This sample code is in the public domain. */ -#include #include "espressif/esp_common.h" #include "esp/uart.h" #include "FreeRTOS.h" #include "task.h" #include "esp8266.h" +#include "mbedtls/aes.h" +#include "xtensa_ops.h" +#include + const int gpio = 2; /* This task uses the high level GPIO API (esp_gpio.h) to blink an LED. @@ -19,9 +22,9 @@ void blinkenTask(void *pvParameters) gpio_enable(gpio, GPIO_OUTPUT); while(1) { gpio_write(gpio, 1); - vTaskDelay(1000 / portTICK_PERIOD_MS); + vTaskDelay(1000 / portTICK_RATE_MS); gpio_write(gpio, 0); - vTaskDelay(1000 / portTICK_PERIOD_MS); + vTaskDelay(1000 / portTICK_RATE_MS); } } @@ -45,15 +48,41 @@ void blinkenRegisterTask(void *pvParameters) IOMUX_GPIO2 = IOMUX_GPIO2_FUNC_GPIO | IOMUX_PIN_OUTPUT_ENABLE; /* change this line if you change 'gpio' */ while(1) { GPIO.OUT_SET = BIT(gpio); - vTaskDelay(1000 / portTICK_PERIOD_MS); + vTaskDelay(1000 / portTICK_RATE_MS); GPIO.OUT_CLEAR = BIT(gpio); - vTaskDelay(1000 / portTICK_PERIOD_MS); + vTaskDelay(1000 / portTICK_RATE_MS); } } void user_init(void) { uart_set_baud(0, 115200); - xTaskCreate(blinkenTask, "blinkenTask", 256, NULL, 2, NULL); - //xTaskCreate(blinkenRegisterTask, "blinkenRegisterTask", 256, NULL, 2, NULL); + static uint8_t data[1024]; + static uint8_t output[1024]; + static uint8_t iv[16]; + + static uint8_t key[256 / 8]; + + memset(data, 0, sizeof(data)); + memset(iv, 0, sizeof(iv)); + + mbedtls_aes_context ctx; + uint32_t before, after; + RSR(before, CCOUNT) + mbedtls_aes_init(&ctx); + mbedtls_aes_setkey_enc(&ctx, key, 256); + + for(int r = 0; r < 10; r++) { + mbedtls_aes_crypt_cbc(&ctx, + MBEDTLS_AES_ENCRYPT, + sizeof(data), + iv, + data, + output); + memcpy(data, output, 1024); + } + RSR(after, CCOUNT); + printf("cycle count %d\n", after - before); + vPortExitCritical(); + while(1) {} } diff --git a/examples/blink_timers/blink_timers.c b/examples/blink_timers/blink_timers.c index bef887d..177cff3 100644 --- a/examples/blink_timers/blink_timers.c +++ b/examples/blink_timers/blink_timers.c @@ -17,13 +17,13 @@ const int freq_frc2 = 10; static volatile uint32_t frc1_count; static volatile uint32_t frc2_count; -void frc1_interrupt_handler(void *arg) +void frc1_interrupt_handler(void) { frc1_count++; gpio_toggle(gpio_frc1); } -void frc2_interrupt_handler(void *arg) +void frc2_interrupt_handler(void) { /* FRC2 needs the match register updated on each timer interrupt */ timer_set_frequency(FRC2, freq_frc2); @@ -47,8 +47,8 @@ void user_init(void) timer_set_run(FRC2, false); /* set up ISRs */ - _xt_isr_attach(INUM_TIMER_FRC1, frc1_interrupt_handler, NULL); - _xt_isr_attach(INUM_TIMER_FRC2, frc2_interrupt_handler, NULL); + _xt_isr_attach(INUM_TIMER_FRC1, frc1_interrupt_handler); + _xt_isr_attach(INUM_TIMER_FRC2, frc2_interrupt_handler); /* configure timer frequencies */ timer_set_frequency(FRC1, freq_frc1); diff --git a/examples/bme680/README.md b/examples/bme680/README.md deleted file mode 100644 index 520a0a9..0000000 --- a/examples/bme680/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# BME680 Driver Examples - -These examples demonstrate the usage of the BME680 driver with only one and multiple BME680 sensors. - -## Hardware setup - -There are examples that are using either I2C or SPI with one or two sensors. - -For examples using BME680 sensor as I2C slave, just use GPIO5 (SCL) and GPIO4 (SDA) to connect to the BME680 sensor's I2C interface. - -``` - +-------------------------+ +--------+ - | ESP8266 Bus 0 | | BME680 | - | GPIO 14 (SCL) ------> SCL | - | GPIO 13 (SDA) <-----> SDA | - | | +--------+ - +-------------------------+ -``` - -For examples that are using SPI, BME680 sensor has to be connected to SPI bus 1. Since GPIO15 used as default CS signal of SPI bus 1 does not work correctly together with BME680, you have to connect CS to another GPIO pin, e.g., GPIO2. - -``` - +-------------------------+ +----------+ - | ESP8266 Bus 1 | | BME680 | - | GPIO 14 (SCK) ------> SCK | - | GPIO 13 (MOSI) ------> SDI | - | GPIO 12 (MISO) <------ SDO | - | GPIO 2 (CS) ------> CS | - +-------------------------+ +----------+ -``` - -The example with two sensors use the combination of I2C and SPI. - -## Example description - -__*bme680_one_sensor*__ - -This simple example uses only **one sensor** connected either to **I2C** or to **SPI**. Which of these interfaces is used is defined by constant **SPI_USED**. The user task triggers a measurement every second and uses function ```vTaskDelay``` to wait for the measurement results. - -__*bme680_two_sensors*__ - -This example uses **two sensors**. One sensor is connected to **I2C** bus 0 and one sensor is connected to **SPI**. It defines two different user tasks, one for each sensor. It demonstrate the possible approaches to wait for measurement results, active busy waiting using ```bme680_is_measuring``` and passive waiting using *vTaskDelay*. - -__*bme680_heating_profiles*__ - -This simple example uses one **only sensor** connected to **I2C** bus 0 and a sequence of heating profiles. The heating profile is changed with each cycle. diff --git a/examples/bme680/bme680_heating_profiles/Makefile b/examples/bme680/bme680_heating_profiles/Makefile deleted file mode 100644 index c3158ba..0000000 --- a/examples/bme680/bme680_heating_profiles/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=BME680_heating_profiles -EXTRA_COMPONENTS = extras/i2c extras/bme680 -include ../../../common.mk diff --git a/examples/bme680/bme680_heating_profiles/bme680_heating_profiles.c b/examples/bme680/bme680_heating_profiles/bme680_heating_profiles.c deleted file mode 100644 index 97105bd..0000000 --- a/examples/bme680/bme680_heating_profiles/bme680_heating_profiles.c +++ /dev/null @@ -1,132 +0,0 @@ -/** - * Simple example with one sensor connected to I2C bus 0 and a sequence of - * heating profiles. The heating profile is changed with each cycle. - * - * Harware configuration: - * - * I2C +-------------------------+ +----------+ - * | ESP8266 Bus 0 | | BME680 | - * | GPIO 14 (SCL) ------> SCL | - * | GPIO 13 (SDA) ------- SDA | - * +-------------------------+ +----------+ - */ - -#include "espressif/esp_common.h" -#include "esp/uart.h" - -#include "FreeRTOS.h" -#include "task.h" - -// include communication interface driver -#include "i2c/i2c.h" - -// include BME680 driver -#include "bme680/bme680.h" - -// define I2C interface for BME680 sensors -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 - -static bme680_sensor_t* sensor; - -/* - * User task that triggers measurements of sensor every seconds. It uses - * function *vTaskDelay* to wait for measurement results and changes the - * heating profile in each cycle. - */ -void user_task(void *pvParameters) -{ - bme680_values_float_t values; - - TickType_t last_wakeup = xTaskGetTickCount(); - - uint32_t count = 0; - - while (1) - { - if (count++ < 60) - // disable gas measurement for cycle counter < 60 - bme680_use_heater_profile (sensor, BME680_HEATER_NOT_USED); - else - // change heating profile in each cycle - switch (count % 5) - { - case 0: bme680_use_heater_profile (sensor, 0); break; - case 1: bme680_use_heater_profile (sensor, 1); break; - case 2: bme680_use_heater_profile (sensor, 2); break; - case 3: bme680_use_heater_profile (sensor, 3); break; - case 4: bme680_use_heater_profile (sensor, 4); break; - } - - // measurement duration changes in each cycle - uint32_t duration = bme680_get_measurement_duration(sensor); - - // trigger the sensor to start one TPHG measurement cycle - if (bme680_force_measurement (sensor)) - { - // passive waiting until measurement results are available - vTaskDelay (duration); - - // get the results and do something with them - if (bme680_get_results_float (sensor, &values)) - printf("%.3f BME680 Sensor: %.2f °C, %.2f %%, %.2f hPa, %.2f Ohm\n", - (double)sdk_system_get_time()*1e-3, - values.temperature, values.humidity, - values.pressure, values.gas_resistance); - } - // passive waiting until 1 second is over - vTaskDelayUntil(&last_wakeup, 1000 / portTICK_PERIOD_MS); - } -} - - -void user_init(void) -{ - // Set UART Parameter - uart_set_baud(0, 115200); - // Give the UART some time to settle - sdk_os_delay_us(500); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - // Init the sensor connected to SPI. - sensor = bme680_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - #else - // Init all I2C bus interfaces at which BME680 sensors are connected - i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K); - - // Init the sensor connected to I2C. - sensor = bme680_init_sensor (I2C_BUS, BME680_I2C_ADDRESS_2, 0); - #endif - - if (sensor) - { - /** -- SENSOR CONFIGURATION PART (optional) --- */ - - // Changes the oversampling rates to 4x oversampling for temperature - // and 2x oversampling for humidity. Pressure measurement is skipped. - bme680_set_oversampling_rates(sensor, osr_4x, osr_none, osr_2x); - - // Change the IIR filter size for temperature and pressure to 7. - bme680_set_filter_size(sensor, iir_size_7); - - // Define a number of different heating profiles - bme680_set_heater_profile (sensor, 0, 200, 100); - bme680_set_heater_profile (sensor, 1, 250, 120); - bme680_set_heater_profile (sensor, 2, 300, 140); - bme680_set_heater_profile (sensor, 3, 350, 160); - bme680_set_heater_profile (sensor, 4, 400, 180); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - // Create a task that uses the sensor - xTaskCreate(user_task, "user_task", 256, NULL, 2, NULL); - } - else - printf("Could not initialize BME680 sensor\n"); -} diff --git a/examples/bme680/bme680_one_sensor/Makefile b/examples/bme680/bme680_one_sensor/Makefile deleted file mode 100644 index dba740d..0000000 --- a/examples/bme680/bme680_one_sensor/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=BME680_One_Sensor -EXTRA_COMPONENTS = extras/i2c extras/bme680 -include ../../../common.mk diff --git a/examples/bme680/bme680_one_sensor/bme680_one_sensor.c b/examples/bme680/bme680_one_sensor/bme680_one_sensor.c deleted file mode 100644 index 2ead95d..0000000 --- a/examples/bme680/bme680_one_sensor/bme680_one_sensor.c +++ /dev/null @@ -1,167 +0,0 @@ -/** - * Simple example with one sensor connected either to I2C bus 0 or - * SPI bus 1. - * - * Harware configuration: - * - * I2C - * - * +-----------------+ +----------+ - * | ESP8266 / ESP32 | | BME680 | - * | | | | - * | GPIO 14 (SCL) ----> SCL | - * | GPIO 13 (SDA) <---> SDA | - * +-----------------+ +----------+ - * - * SPI - * - * +-----------------+ +----------+ +-----------------+ +----------+ - * | ESP8266 | | BME680 | | ESP32 | | BME680 | - * | | | | | | | | - * | GPIO 14 (SCK) ----> SCK | | GPIO 16 (SCK) ----> SCK | - * | GPIO 13 (MOSI)----> SDI | | GPIO 17 (MOSI)----> SDI | - * | GPIO 12 (MISO)<---- SDO | | GPIO 18 (MISO)<---- SDO | - * | GPIO 2 (CS) ----> CS | | GPIO 19 (CS) ----> CS | - * +-----------------+ +---------+ +-----------------+ +----------+ - */ - -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED - -/* -- includes ----------------------------------------------------- */ - -#include "bme680.h" - -/* -- platform dependent definitions ------------------------------- */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -/* -- user tasks --------------------------------------------------- */ - -static bme680_sensor_t* sensor = 0; - -/* - * User task that triggers measurements of sensor every seconds. It uses - * function *vTaskDelay* to wait for measurement results. Busy wating - * alternative is shown in comments - */ -void user_task(void *pvParameters) -{ - bme680_values_float_t values; - - TickType_t last_wakeup = xTaskGetTickCount(); - - // as long as sensor configuration isn't changed, duration is constant - uint32_t duration = bme680_get_measurement_duration(sensor); - - while (1) - { - // trigger the sensor to start one TPHG measurement cycle - if (bme680_force_measurement (sensor)) - { - // passive waiting until measurement results are available - vTaskDelay (duration); - - // alternatively: busy waiting until measurement results are available - // while (bme680_is_measuring (sensor)) ; - - // get the results and do something with them - if (bme680_get_results_float (sensor, &values)) - printf("%.3f BME680 Sensor: %.2f °C, %.2f %%, %.2f hPa, %.2f Ohm\n", - (double)sdk_system_get_time()*1e-3, - values.temperature, values.humidity, - values.pressure, values.gas_resistance); - } - // passive waiting until 1 second is over - vTaskDelayUntil(&last_wakeup, 1000 / portTICK_PERIOD_MS); - } -} - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = bme680_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else // I2C - - // Init all I2C bus interfaces at which BME680 sensors are connected - i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address BME680_I2C_ADDRESS_2 connected to I2C_BUS. - sensor = bme680_init_sensor (I2C_BUS, BME680_I2C_ADDRESS_2, 0); - - #endif // SPI_USED - - if (sensor) - { - /** -- SENSOR CONFIGURATION PART (optional) --- */ - - // Changes the oversampling rates to 4x oversampling for temperature - // and 2x oversampling for humidity. Pressure measurement is skipped. - bme680_set_oversampling_rates(sensor, osr_4x, osr_none, osr_2x); - - // Change the IIR filter size for temperature and pressure to 7. - bme680_set_filter_size(sensor, iir_size_7); - - // Change the heater profile 0 to 200 degree Celcius for 100 ms. - bme680_set_heater_profile (sensor, 0, 200, 100); - bme680_use_heater_profile (sensor, 0); - - // Set ambient temperature to 10 degree Celsius - bme680_set_ambient_temperature (sensor, 10); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - // Create a task that uses the sensor - xTaskCreate(user_task, "user_task", TASK_STACK_DEPTH, NULL, 2, NULL); - } - else - printf("Could not initialize BME680 sensor\n"); -} diff --git a/examples/bme680/bme680_two_sensors/Makefile b/examples/bme680/bme680_two_sensors/Makefile deleted file mode 100644 index e17e876..0000000 --- a/examples/bme680/bme680_two_sensors/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=BME680_Tow_Sensors -EXTRA_COMPONENTS = extras/i2c extras/bme680 -include ../../../common.mk diff --git a/examples/bme680/bme680_two_sensors/bme680_two_sensors.c b/examples/bme680/bme680_two_sensors/bme680_two_sensors.c deleted file mode 100644 index 6960dcd..0000000 --- a/examples/bme680/bme680_two_sensors/bme680_two_sensors.c +++ /dev/null @@ -1,158 +0,0 @@ -/** - * Simple example with two sensors, one sensor connected to I2C bus 0 and - * one sensor connected to SPI. It defines two different user tasks, one for - * each sensor. It demonstrates the possible approaches to wait for measurement - * results, active busy waiting using ```bme680_is_measuring``` and passive - * waiting using *vTaskDelay*. - * - * Harware configuration: - * - * +-------------------------+ +----------+ - * | ESP8266 I2C Bus 1 | | BME680_1 | - * | GPIO 5 (SCL) ------> SCL | - * | GPIO 4 (SDA) <-----> SDA | - * | | +----------+ - * | SPI Bus 1 | | BME680_2 | - * | GPIO 14 (SCK) >-----> SCK | - * | GPIO 13 (MOSI) >-----> SDI | - * | GPIO 12 (MISO) <------ SDO | - * | GPIO 2 (CS) >-----> CS | - * +-------------------------+ +----------+ - */ - -#include "espressif/esp_common.h" -#include "esp/uart.h" - -#include "FreeRTOS.h" -#include "task.h" - -// include communication interface driver -#include "esp/spi.h" -#include "i2c/i2c.h" - -// include BME680 driver -#include "bme680/bme680.h" - -// define I2C interface for BME680 sensor 1 -#define SPI_BUS 1 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used -// define SPI interface for BME680 sensor 2 -#define I2C_BUS 1 -#define I2C_SCL_PIN 5 -#define I2C_SDA_PIN 4 - -static bme680_sensor_t* sensor1; -static bme680_sensor_t* sensor2; - -/* - * User task that triggers measurements of sensor1 every 5 seconds and - * uses *vTaskDelay* to wait for measurement results. - */ -void user_task_sensor1(void *pvParameters) -{ - bme680_values_float_t values; - - TickType_t last_wakeup = xTaskGetTickCount(); - - uint32_t duration = bme680_get_measurement_duration (sensor1); - - while (1) - { - // trigger the sensor to start one TPHG measurement cycle - if (bme680_force_measurement (sensor1)) - { - - // passive waiting until measurement results are available - vTaskDelay (duration); - - // get the results and so something with them - if (bme680_get_results_float (sensor1, &values)) - printf("%.3f BME680 Sensor1: %.2f °C, %.2f %%, %.2f hPa, %.2f Ohm\n", - (double)sdk_system_get_time()*1e-3, - values.temperature, values.humidity, - values.pressure, values.gas_resistance); - } - - // passive waiting until 5 seconds are over - vTaskDelayUntil(&last_wakeup, 5000 / portTICK_PERIOD_MS); - } -} - -/* - * User task that triggers measurements of sensor1 every 2 seconds and - * uses *bme680_is_measuring* to wait for measurement results. - */ -void user_task_sensor2(void *pvParameters) -{ - bme680_values_float_t values; - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // trigger the sensor to start one TPHG measurement cycle - if (bme680_force_measurement (sensor2)) - { - // busy waiting until measurement results are available - while (bme680_is_measuring (sensor2)) ; - - // get the results and so something with them - if (bme680_get_results_float (sensor2, &values)) - printf("%.3f BME680 Sensor2: %.2f °C, %.2f %%, %.2f hPa, %.2f Ohm\n", - (double)sdk_system_get_time()*1e-3, - values.temperature, values.humidity, - values.pressure, values.gas_resistance); - } - - // passive waiting until 2 seconds are over - vTaskDelayUntil(&last_wakeup, 2000 / portTICK_PERIOD_MS); - } -} - - -void user_init(void) -{ - // Set UART Parameter - uart_set_baud(0, 115200); - // Give the UART some time to settle - sdk_os_delay_us(500); - - /** -- MANDATORY PART -- */ - - // Init all I2C bus interfaces at which BME680 sensors are connected - i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K); - - // Init the sensors - sensor1 = bme680_init_sensor (I2C_BUS, BME680_I2C_ADDRESS_2, 0); - sensor2 = bme680_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - if (sensor1 && sensor2) - { - /** -- SENSOR CONFIGURATION PART (optional) --- */ - - // Changes the oversampling rates for both sensor to different values - bme680_set_oversampling_rates(sensor1, osr_4x, osr_2x, osr_1x); - bme680_set_oversampling_rates(sensor2, osr_8x, osr_8x, osr_8x); - - // Change the IIR filter size for temperature and and pressure to 7. - bme680_set_filter_size(sensor1, iir_size_7); - bme680_set_filter_size(sensor2, iir_size_7); - - // Change the heater profile 0 to 200 degree Celcius for 150 ms. - bme680_set_heater_profile (sensor1, 0, 200, 150); - bme680_set_heater_profile (sensor2, 0, 200, 150); - - // Activate the heater profile 0 - bme680_use_heater_profile (sensor1, 0); - bme680_use_heater_profile (sensor2, 0); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - // Create the tasks that use the sensors - xTaskCreate(user_task_sensor1, "user_task_sensor1", 256, NULL, 2, 0); - xTaskCreate(user_task_sensor2, "user_task_sensor2", 256, NULL, 2, 0); - } -} diff --git a/examples/bmp180_i2c/bmp180_i2c.c b/examples/bmp180_i2c/bmp180_i2c.c index 7153c64..64ee961 100644 --- a/examples/bmp180_i2c/bmp180_i2c.c +++ b/examples/bmp180_i2c/bmp180_i2c.c @@ -13,31 +13,24 @@ // BMP180 driver #include "bmp180/bmp180.h" -#define I2C_BUS 0 -#define SCL_PIN GPIO_ID_PIN((0)) -#define SDA_PIN GPIO_ID_PIN((2)) - #define MY_EVT_TIMER 0x01 #define MY_EVT_BMP180 0x02 +#define SCL_PIN GPIO_ID_PIN((0)) +#define SDA_PIN GPIO_ID_PIN((2)) + typedef struct { uint8_t event_type; bmp180_result_t bmp180_data; } my_event_t; -//device descriptor -i2c_dev_t dev = { - .addr = BMP180_DEVICE_ADDRESS, - .bus = I2C_BUS, -}; - // Communication Queue -static QueueHandle_t mainqueue; -static TimerHandle_t timerHandle; +static xQueueHandle mainqueue; +static xTimerHandle timerHandle; // Own BMP180 User Inform Implementation -bool bmp180_i2c_informUser(const QueueHandle_t* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) +bool bmp180_i2c_informUser(const xQueueHandle* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) { my_event_t ev; @@ -50,7 +43,7 @@ bool bmp180_i2c_informUser(const QueueHandle_t* resultQueue, uint8_t cmd, bmp180 } // Timer call back -static void bmp180_i2c_timer_cb(TimerHandle_t xTimer) +static void bmp180_i2c_timer_cb(xTimerHandle xTimer) { my_event_t ev; ev.event_type = MY_EVT_TIMER; @@ -62,7 +55,7 @@ static void bmp180_i2c_timer_cb(TimerHandle_t xTimer) void bmp180_task(void *pvParameters) { // Received pvParameters is communication queue - QueueHandle_t *com_queue = (QueueHandle_t *)pvParameters; + xQueueHandle *com_queue = (xQueueHandle *)pvParameters; printf("%s: Started user interface task\n", __FUNCTION__); @@ -77,10 +70,10 @@ void bmp180_task(void *pvParameters) case MY_EVT_TIMER: printf("%s: Received Timer Event\n", __FUNCTION__); - bmp180_trigger_measurement(&dev, com_queue); + bmp180_trigger_measurement(com_queue); break; case MY_EVT_BMP180: - printf("%s: Received BMP180 Event temp:=%d.%dC press=%d.%02dhPa\n", __FUNCTION__, \ + printf("%s: Received BMP180 Event temp:=%d.%d°C press=%d.%02dhPa\n", __FUNCTION__, \ (int32_t)ev.bmp180_data.temperature, abs((int32_t)(ev.bmp180_data.temperature*10)%10), \ ev.bmp180_data.pressure/100, ev.bmp180_data.pressure%100 ); break; @@ -98,9 +91,6 @@ void user_setup(void) // Give the UART some time to settle sdk_os_delay_us(500); - - // Init I2C bus Interface - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); } void user_init(void) @@ -117,16 +107,16 @@ void user_init(void) bmp180_informUser = bmp180_i2c_informUser; // Init BMP180 Interface - bmp180_init(&dev); + bmp180_init(SCL_PIN, SDA_PIN); // Create Main Communication Queue mainqueue = xQueueCreate(10, sizeof(my_event_t)); // Create user interface task - xTaskCreate(bmp180_task, "bmp180_task", 256, &mainqueue, 2, NULL); + xTaskCreate(bmp180_task, (signed char *)"bmp180_task", 256, &mainqueue, 2, NULL); // Create Timer (Trigger a measurement every second) - timerHandle = xTimerCreate("BMP180 Trigger", 1000/portTICK_PERIOD_MS, pdTRUE, NULL, bmp180_i2c_timer_cb); + timerHandle = xTimerCreate((signed char *)"BMP180 Trigger", 1000/portTICK_RATE_MS, pdTRUE, NULL, bmp180_i2c_timer_cb); if (timerHandle != NULL) { diff --git a/examples/bmp280/Makefile b/examples/bmp280/Makefile deleted file mode 100644 index 8340fcc..0000000 --- a/examples/bmp280/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=BMP280_example -EXTRA_COMPONENTS = extras/i2c extras/bmp280 -include ../../common.mk diff --git a/examples/bmp280/bmp280_example.c b/examples/bmp280/bmp280_example.c deleted file mode 100644 index 4ef7ec2..0000000 --- a/examples/bmp280/bmp280_example.c +++ /dev/null @@ -1,115 +0,0 @@ -#include - -#include "espressif/esp_common.h" -#include "esp/uart.h" - -#include "FreeRTOS.h" -#include "task.h" - -#include "i2c/i2c.h" -#include "bmp280/bmp280.h" - -// In forced mode user initiate measurement each time. -// In normal mode measurement is done continuously with specified standby time. -// #define MODE_FORCED -const uint8_t i2c_bus = 0; -const uint8_t scl_pin = 0; -const uint8_t sda_pin = 2; - -#ifdef MODE_FORCED -static void bmp280_task_forced(void *pvParameters) -{ - bmp280_params_t params; - float pressure, temperature, humidity; - - bmp280_init_default_params(¶ms); - params.mode = BMP280_MODE_FORCED; - - bmp280_t bmp280_dev; - bmp280_dev.i2c_dev.bus = i2c_bus; - bmp280_dev.i2c_dev.addr = BMP280_I2C_ADDRESS_0; - - while (1) { - while (!bmp280_init(&bmp280_dev, ¶ms)) { - printf("BMP280 initialization failed\n"); - vTaskDelay(1000 / portTICK_PERIOD_MS); - } - - bool bme280p = bmp280_dev.id == BME280_CHIP_ID; - printf("BMP280: found %s\n", bme280p ? "BME280" : "BMP280"); - - while(1) { - vTaskDelay(1000 / portTICK_PERIOD_MS); - if (!bmp280_force_measurement(&bmp280_dev)) { - printf("Failed initiating measurement\n"); - break; - } - // wait for measurement to complete - while (bmp280_is_measuring(&bmp280_dev)) {}; - - if (!bmp280_read_float(&bmp280_dev, &temperature, &pressure, &humidity)) { - printf("Temperature/pressure reading failed\n"); - break; - } - printf("Pressure: %.2f Pa, Temperature: %.2f C", pressure, temperature); - if (bme280p) - printf(", Humidity: %.2f\n", humidity); - else - printf("\n"); - } - } -} -#else -static void bmp280_task_normal(void *pvParameters) -{ - bmp280_params_t params; - float pressure, temperature, humidity; - - bmp280_init_default_params(¶ms); - - bmp280_t bmp280_dev; - bmp280_dev.i2c_dev.bus = i2c_bus; - bmp280_dev.i2c_dev.addr = BMP280_I2C_ADDRESS_0; - - while (1) { - while (!bmp280_init(&bmp280_dev, ¶ms)) { - printf("BMP280 initialization failed\n"); - vTaskDelay(1000 / portTICK_PERIOD_MS); - } - - bool bme280p = bmp280_dev.id == BME280_CHIP_ID; - printf("BMP280: found %s\n", bme280p ? "BME280" : "BMP280"); - - while(1) { - vTaskDelay(1000 / portTICK_PERIOD_MS); - if (!bmp280_read_float(&bmp280_dev, &temperature, &pressure, &humidity)) { - printf("Temperature/pressure reading failed\n"); - break; - } - printf("Pressure: %.2f Pa, Temperature: %.2f C", pressure, temperature); - if (bme280p) - printf(", Humidity: %.2f\n", humidity); - else - printf("\n"); - } - } -} -#endif - -void user_init(void) -{ - uart_set_baud(0, 115200); - - // Just some information - printf("\n"); - printf("SDK version : %s\n", sdk_system_get_sdk_version()); - printf("GIT version : %s\n", GITSHORTREV); - - i2c_init(i2c_bus, scl_pin, sda_pin, I2C_FREQ_400K); - -#ifdef MODE_FORCED - xTaskCreate(bmp280_task_forced, "bmp280_task", 256, NULL, 2, NULL); -#else - xTaskCreate(bmp280_task_normal, "bmp280_task", 256, NULL, 2, NULL); -#endif -} diff --git a/examples/button/button.c b/examples/button/button.c index c12d78b..0b0784d 100644 --- a/examples/button/button.c +++ b/examples/button/button.c @@ -16,6 +16,7 @@ const int gpio = 0; /* gpio 0 usually has "PROGRAM" button attached */ const int active = 0; /* active == 0 for active low */ const gpio_inttype_t int_type = GPIO_INTTYPE_EDGE_NEG; +#define GPIO_HANDLER gpio00_interrupt_handler /* This task polls for the button and prints the tick @@ -33,13 +34,11 @@ void buttonPollTask(void *pvParameters) { taskYIELD(); } - printf("Polled for button press at %dms\r\n", xTaskGetTickCount()*portTICK_PERIOD_MS); - vTaskDelay(200 / portTICK_PERIOD_MS); + printf("Polled for button press at %dms\r\n", xTaskGetTickCount()*portTICK_RATE_MS); + vTaskDelay(200 / portTICK_RATE_MS); } } -void gpio_intr_handler(uint8_t gpio_num); - /* This task configures the GPIO interrupt and uses it to tell when the button is pressed. @@ -51,14 +50,14 @@ void gpio_intr_handler(uint8_t gpio_num); void buttonIntTask(void *pvParameters) { printf("Waiting for button press interrupt on gpio %d...\r\n", gpio); - QueueHandle_t *tsqueue = (QueueHandle_t *)pvParameters; - gpio_set_interrupt(gpio, int_type, gpio_intr_handler); + xQueueHandle *tsqueue = (xQueueHandle *)pvParameters; + gpio_set_interrupt(gpio, int_type); uint32_t last = 0; while(1) { uint32_t button_ts; xQueueReceive(*tsqueue, &button_ts, portMAX_DELAY); - button_ts *= portTICK_PERIOD_MS; + button_ts *= portTICK_RATE_MS; if(last < button_ts-200) { printf("Button interrupt fired at %dms\r\n", button_ts); last = button_ts; @@ -66,9 +65,9 @@ void buttonIntTask(void *pvParameters) } } -static QueueHandle_t tsqueue; +static xQueueHandle tsqueue; -void gpio_intr_handler(uint8_t gpio_num) +void GPIO_HANDLER(void) { uint32_t now = xTaskGetTickCountFromISR(); xQueueSendToBackFromISR(tsqueue, &now, NULL); @@ -80,6 +79,6 @@ void user_init(void) gpio_enable(gpio, GPIO_INPUT); tsqueue = xQueueCreate(2, sizeof(uint32_t)); - xTaskCreate(buttonIntTask, "buttonIntTask", 256, &tsqueue, 2, NULL); - xTaskCreate(buttonPollTask, "buttonPollTask", 256, NULL, 1, NULL); + xTaskCreate(buttonIntTask, (signed char *)"buttonIntTask", 256, &tsqueue, 2, NULL); + xTaskCreate(buttonPollTask, (signed char*)"buttonPollTask", 256, NULL, 1, NULL); } diff --git a/examples/ccs811/README.md b/examples/ccs811/README.md deleted file mode 100644 index 5ff5b5d..0000000 --- a/examples/ccs811/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# CCS811 Driver Examples - -These examples demonstrate the usage of the CCS811 driver with only one sensors. - -## Hardware setup - -Most examples use only one CCS811 sensor. Following figure shows the hardware configuration if no interrupt is used. - -``` - +------------------------+ +--------+ - | ESP8266 Bus 0 | | CCS811 | - | GPIO 5 (SCL) -----> SCL | - | GPIO 4 (SDA) <----> SDA | - | GND -----> /WAKE | - +------------------------+ +--------+ -``` - -If *nINT* interrupt is used to fetch new data, additionally the interrupt pin has to be connected to a GPIO pin. - -``` - +------------------------+ +--------+ - | ESP8266 Bus 0 | | CCS811 | - | GPIO 5 (SCL) -----> SCL | - | GPIO 4 (SDA) <----> SDA | - | GPIO 2 <----- /nINT | - | GND -----> /WAKE | - +------------------------+ +--------+ -``` - -In examples where CCS811 sensor is used in conjunction with a SHT3x sensor, the hardware configuration looks like following: - -``` - +------------------------+ +--------+ - | ESP8266 Bus 0 | | CCS811 | - | GPIO 5 (SCL) ---+----> SCL | - | GPIO 4 (SDA) <--|-+--> SDA | - | GND ---|-|--> /WAKE | - | | | | +--------+ - | | | | | SHT3x | - | | +----> SCL | - | | +--> SDA | - +------------------------+ +--------+ -``` - -## Example description - -__*ccs811_one_sensor*__ - -Simple example with one CCS811 sensor connected to I2C bus 0. It demonstrates the different approaches to fetch the data. Either the interrupt *nINT* is used when new data are available or exceed defined thresholds or the new data are fetched periodically. Which approach is used is defined by the constants ```INT_DATA_RDY_USED``` and ```INT_THRESHOLD_USED```. - -__*ccs811_plus_sht3x*__ - -Simple example with one CCS811 sensor connected to I2C bus 0 and one SHT3x sensor to determine ambient temperature. New data are fetched peridically every 2 seconds. - -__*ccs811_temperature*__ - -Simple example with one CCS811 sensor connected to I2C bus 0. It demonstrates how to use CCS811 with an external NTC resistor to determine ambient temperature. diff --git a/examples/ccs811/ccs811_one_sensor/Makefile b/examples/ccs811/ccs811_one_sensor/Makefile deleted file mode 100644 index 4383f5c..0000000 --- a/examples/ccs811/ccs811_one_sensor/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM=CCS811_One_Sensor -EXTRA_COMPONENTS = extras/i2c extras/ccs811 -include ../../../common.mk - diff --git a/examples/ccs811/ccs811_one_sensor/ccs811_one_sensor.c b/examples/ccs811/ccs811_one_sensor/ccs811_one_sensor.c deleted file mode 100644 index df71104..0000000 --- a/examples/ccs811/ccs811_one_sensor/ccs811_one_sensor.c +++ /dev/null @@ -1,180 +0,0 @@ -/** - * Simple example with one sensor connected to I2C bus 0. It demonstrates the - * different approaches to fetch the data. Either the interrupt *nINT* is used - * whenever new data are available or exceed defined thresholds or the new - * data are fetched periodically. - * - * Harware configuration: - * - * +-----------------+ +----------+ - * | ESP8266 / ESP32 | | CCS811 | - * | | | | - * | GPIO 14 (SCL) ----> SCL | - * | GPIO 13 (SDA) <---> SDA | - * | GPIO 5 <---- INT1 | - * | GND ----> /WAKE | - * +-----------------+ +----------+ - */ - -/* -- use following constants to define the example mode ----------- */ - -// #define INT_DATA_RDY_USED -// #define INT_THRESHOLD_USED - -#if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED) -#define INT_USED -#endif - -/* -- includes ----------------------------------------------------- */ - -#include "ccs811.h" - -/* -- platform dependent definitions ------------------------------- */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define nINT_PIN 13 - -/* -- user tasks --------------------------------------------------- */ - -static ccs811_sensor_t* sensor; - -#ifdef INT_USED -/** - * In this example, the interrupt *nINT* is used. It is triggered every time - * new data are available (INT_DATA_RDY_USED) or exceed defined thresholds - * (INT_THRESHOLD_USED). In this case, the user has to define an interrupt - * handler that fetches the data directly or triggers a task, that is waiting - * to fetch the data. In this example, a task is defined which suspends itself - * in each cycle to wait for fetching the data. The task is resumed by the - * the interrupt handler. - */ - -TaskHandle_t nINT_task; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint16_t tvoc; - uint16_t eco2; - - while (1) - { - // task suspends itself and waits to be resumed by interrupt handler - vTaskSuspend (NULL); - - // after resume get the results and do something with them - if (ccs811_get_results (sensor, &tvoc, &eco2, 0, 0)) - printf("%.3f CCS811 Sensor interrupt: TVOC %d ppb, eCO2 %d ppm\n", - (double)sdk_system_get_time()*1e-3, tvoc, eco2); - } -} - -// Interrupt handler which resumes user_task_interrupt on interrupt - -static void IRAM nINT_handler(uint8_t gpio) -{ - xTaskResumeFromISR (nINT_task); -} - -#else // !INT_USED - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - uint16_t tvoc; - uint16_t eco2; - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // get environmental data from another sensor and set them - // ccs811_set_environmental_data (sensor, 25.3, 47.8); - - // get the results and do something with them - if (ccs811_get_results (sensor, &tvoc, &eco2, 0, 0)) - printf("%.3f CCS811 Sensor periodic: TVOC %d ppb, eCO2 %d ppm\n", - (double)sdk_system_get_time()*1e-3, tvoc, eco2); - - // passive waiting until 1 second is over - vTaskDelayUntil(&last_wakeup, 1000 / portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - // init all I2C bus interfaces at which CCS811 sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // longer clock stretching is required for CCS811 - i2c_set_clock_stretch (I2C_BUS, CCS811_I2C_CLOCK_STRETCH); - - // init the sensor with slave address CCS811_I2C_ADDRESS_1 connected I2C_BUS. - sensor = ccs811_init_sensor (I2C_BUS, CCS811_I2C_ADDRESS_1); - - if (sensor) - { - #if !defined (INT_USED) - - // create a periodic task that uses the sensor - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a task that is resumed by interrupt handler to use the sensor - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, &nINT_task); - - // activate the interrupt for nINT_PIN and set the interrupt handler - gpio_enable(nINT_PIN, GPIO_INPUT); - gpio_set_interrupt(nINT_PIN, GPIO_INTTYPE_EDGE_NEG, nINT_handler); - - #ifdef INT_DATA_RDY_USED - // enable the data ready interrupt - ccs811_enable_interrupt (sensor, true); - #else // INT_THRESHOLD_USED - // set threshold parameters and enable threshold interrupt mode - ccs811_set_eco2_thresholds (sensor, 600, 1100, 40); - #endif - - #endif // !defined(INT_USED) - - // start periodic measurement with one measurement per second - ccs811_set_mode (sensor, ccs811_mode_1s); - } - else - printf("Could not initialize the CCS811 sensor\n"); -} - diff --git a/examples/ccs811/ccs811_plus_sht3x/Makefile b/examples/ccs811/ccs811_plus_sht3x/Makefile deleted file mode 100644 index a2f2425..0000000 --- a/examples/ccs811/ccs811_plus_sht3x/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=CCS811_Plus_SHT3x -EXTRA_COMPONENTS = extras/i2c extras/ccs811 extras/sht3x -include ../../../common.mk diff --git a/examples/ccs811/ccs811_plus_sht3x/ccs811_plus_sht3x.c b/examples/ccs811/ccs811_plus_sht3x/ccs811_plus_sht3x.c deleted file mode 100644 index 5e32f38..0000000 --- a/examples/ccs811/ccs811_plus_sht3x/ccs811_plus_sht3x.c +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Simple example with one CCS811 sensor connected to I2C bus 0 and one SHT3x - * sensor to determine ambient temperature. New data are fetched peridically. - * - * Harware configuration: - * - * +------------------------+ +--------+ - * | ESP8266 Bus 0 | | CCS811 | - * | GPIO 14 (SCL) ---+----> SCL | - * | GPIO 13 (SDA) <--|-+--> SDA | - * | GND ---|-|--> /WAKE | - * | | | | +--------+ - * | | | | | SHT3x | - * | | +----> SCL | - * | | +--> SDA | - * +------------------------+ +--------+ - */ - -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "i2c/i2c.h" - -#include "FreeRTOS.h" -#include - -// include CCS811 driver -#include "ccs811/ccs811.h" - -// include SHT3x driver -#include "sht3x/sht3x.h" - -// define I2C interfaces at which CCS811 and SHT3x sensors are connected -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 - -static ccs811_sensor_t* ccs811; // CCS811 device data structure -static sht3x_sensor_t* sht3x; // SHT3x device data structure - -/* - * User task that fetches the sensor values every 2 seconds. - */ -void user_task(void *pvParameters) -{ - uint16_t tvoc; - uint16_t eco2; - - float temperature; - float humidity; - - // start periodic measurement with 1 measurement per second - ccs811_set_mode (ccs811, ccs811_mode_1s); - - // start periodic measurements with 1 measurement per second - sht3x_start_measurement (sht3x, sht3x_periodic_1mps, sht3x_high); - - // passive waiting until measurement results are available - vTaskDelay (sht3x_get_measurement_duration (sht3x_high)); - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // get the results from CCS811 and do something with them - if (ccs811_get_results (ccs811, &tvoc, &eco2, 0, 0)) - printf("%.3f CCS811 Sensor periodic: TVOC %d ppb, eCO2 %d ppm\n", - (double)sdk_system_get_time()*1e-3, tvoc, eco2); - - // get the values from SHT3x and do something with them - if (sht3x_get_results (sht3x, &temperature, &humidity)) - { - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // set CCS811 environmental data with values fetched from SHT3x - ccs811_set_environmental_data (ccs811, temperature, humidity); - } - // passive waiting until 2 seconds is over - vTaskDelayUntil(&last_wakeup, 2000 / portTICK_PERIOD_MS); - } -} - - -void user_init(void) -{ - // set UART Parameter - uart_set_baud(0, 115200); - // give the UART some time to settle - sdk_os_delay_us(500); - - /** -- MANDATORY PART -- */ - - // init all I2C bus interfaces at which CCS811 sensors are connected - i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K); - - // longer clock stretching is required for CCS811 - i2c_set_clock_stretch (I2C_BUS, CCS811_I2C_CLOCK_STRETCH); - - // init the sensors - ccs811 = ccs811_init_sensor (I2C_BUS, CCS811_I2C_ADDRESS_1); - sht3x = sht3x_init_sensor (I2C_BUS, SHT3x_ADDR_2); - - if (ccs811 && sht3x) - // create a task that uses the sensor - xTaskCreate(user_task, "user_task", 256, NULL, 2, NULL); -} diff --git a/examples/ccs811/ccs811_temperature/Makefile b/examples/ccs811/ccs811_temperature/Makefile deleted file mode 100644 index 46edcfb..0000000 --- a/examples/ccs811/ccs811_temperature/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM=CCS811_Temperature -EXTRA_COMPONENTS = extras/i2c extras/ccs811 -LIBS ?= gcc hal m -include ../../../common.mk diff --git a/examples/ccs811/ccs811_temperature/ccs811_temperature.c b/examples/ccs811/ccs811_temperature/ccs811_temperature.c deleted file mode 100644 index 6a81c7f..0000000 --- a/examples/ccs811/ccs811_temperature/ccs811_temperature.c +++ /dev/null @@ -1,131 +0,0 @@ -/** - * Simple example with one sensor connected to I2C bus 0. It demonstrates - * how to use CCS811 with an external NTC thermistor to determine ambient - * temperature. - * - * Harware configuration: - * - * +------------------------+ +--------+ - * | ESP8266 Bus 0 | | CCS811 | - * | GPIO 14 (SCL) >----> SCL | - * | GPIO 13 (SDA) <----> SDA | - * | GND -----> /WAKE | - * +------------------------+ +--------+ - */ - -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "i2c/i2c.h" - -#include "FreeRTOS.h" -#include - -#include - -// include CCS811 driver -#include "ccs811/ccs811.h" - -// define I2C interfaces at which CCS811 sensors can be connected -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 - - -static ccs811_sensor_t* sensor; - - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -// parameters of the Adafruit CCS811 Air Quality Sensor Breakout -#define CCS811_R_REF 100000 -#define CCS811_R_NTC 10000 -#define CCS811_R_NTC_TEMP 25 -#define CCS811_BCONSTANT 3380 - -void user_task_periodic(void *pvParameters) -{ - uint16_t tvoc; - uint16_t eco2; - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // get environmental data from another sensor and set them - // ccs811_set_environmental_data (sensor, 25.3, 47.8); - - // get the results and do something with them - if (ccs811_get_results (sensor, &tvoc, &eco2, 0, 0)) - printf("%.3f CCS811 Sensor periodic: TVOC %d ppb, eCO2 %d ppm\n", - (double)sdk_system_get_time()*1e-3, tvoc, eco2); - - // get NTC resistance - uint32_t r_ntc = ccs811_get_ntc_resistance (sensor, CCS811_R_REF); - - // calculation of temperature from application note ams AN000372 - double ntc_temp; - ntc_temp = log((double)r_ntc / CCS811_R_NTC); // 1 - ntc_temp /= CCS811_BCONSTANT; // 2 - ntc_temp += 1.0 / (CCS811_R_NTC_TEMP + 273.15); // 3 - ntc_temp = 1.0 / ntc_temp; // 4 - ntc_temp -= 273.15; // 5 - - printf("%.3f CCS811 Sensor temperature: R_NTC %u Ohm, T %f °C\n", - (double)sdk_system_get_time()*1e-3, r_ntc, ntc_temp); - - // passive waiting until 1 second is over - vTaskDelayUntil(&last_wakeup, 1100 / portTICK_PERIOD_MS); - } -} - - -void user_init(void) -{ - // set UART Parameter - uart_set_baud(0, 115200); - // give the UART some time to settle - sdk_os_delay_us(500); - - /** -- MANDATORY PART -- */ - - // init all I2C bus interfaces at which CCS811 sensors are connected - i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K); - - // longer clock stretching is required for CCS811 - i2c_set_clock_stretch (I2C_BUS, CCS811_I2C_CLOCK_STRETCH); - - // init the sensor with slave address CCS811_I2C_ADDRESS_1 connected I2C_BUS. - sensor = ccs811_init_sensor (I2C_BUS, CCS811_I2C_ADDRESS_1); - - if (sensor) - { - #if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED) - - // create a task that is resumed by interrupt handler to use the sensor - xTaskCreate(user_task_interrupt, "user_task_interrupt", 256, NULL, 2, &nINT_task); - - // set the GPIO and interrupt handler for *nINT* interrupt - gpio_set_interrupt(INT_GPIO, GPIO_INTTYPE_EDGE_NEG, nINT_handler); - - #ifdef INT_DATA_RDY_USED - // enable the data ready interrupt - ccs811_enable_interrupt (sensor, true); - #else - // set threshold parameters and enable threshold interrupt mode - ccs811_set_eco2_thresholds (sensor, 600, 1100, 40); - #endif - - #else - - // create a periodic task that uses the sensor - xTaskCreate(user_task_periodic, "user_task_periodic", 256, NULL, 2, NULL); - - #endif - - // start periodic measurement with one measurement per second - ccs811_set_mode (sensor, ccs811_mode_1s); - } -} - diff --git a/examples/crc_example/Makefile b/examples/crc_example/Makefile deleted file mode 100644 index 4df8190..0000000 --- a/examples/crc_example/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=crc_example -EXTRA_COMPONENTS = extras/crc_generic -include ../../common.mk diff --git a/examples/crc_example/crc_config_perso.h b/examples/crc_example/crc_config_perso.h deleted file mode 100644 index 4f4b97d..0000000 --- a/examples/crc_example/crc_config_perso.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * perso_config.h - * - * Created on: 11 févr. 2017 - * Author: lilian - */ - -#include "espressif/esp_common.h" -#include "FreeRTOS.h" - -#define CRC_DEBUG 0 -#define CRC_4BYTE_SUPPORT 0 -/* Use the defaults for everything else */ -#include_next "crc_config.h" - diff --git a/examples/crc_example/crc_config_user.h b/examples/crc_example/crc_config_user.h deleted file mode 100644 index 3198013..0000000 --- a/examples/crc_example/crc_config_user.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * perso_config.h - * - * Created on: 11 févr. 2017 - * Author: lilian - */ - -#ifndef CRC_CONFIG_USER_H_ -#define CRC_CONFIG_USER_H_ - -#include "espressif/esp_common.h" -#include "FreeRTOS.h" - -#define CRC_DEBUG 0 -#define CRC_1BYTE_SUPPORT 1 -#define CRC_4BYTE_SUPPORT 0 -#define CRC_8BYTE_SUPPORT 0 - -typedef uint8_t crc_8; -typedef uint16_t crc_16; -typedef uint32_t crc_32; -typedef uint64_t crc_64; - -#endif /* CRC_CONFIG_USER_H_ */ - diff --git a/examples/crc_example/crc_main.c b/examples/crc_example/crc_main.c deleted file mode 100644 index 85f4434..0000000 --- a/examples/crc_example/crc_main.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Example code to test crc and speed - */ -/////////////////////////////////Lib -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "task.h" -#include "esp8266.h" -#include - -//crc lib -#include "crc_generic.h" - -#define NUMBER_COMPUTE_TEST 1000 - -unsigned char check_data[] = { "123456789" }; -uint8_t tab_data[512]; - -void crc_8bit(void *pvParameters) { - - config_crc_8 customcrc ; // my crc object - crc_8 tabsrc[256]; // my crc look-up table - - //init crc parameters (MAXIM parameters) - crc_8_generic_init(&customcrc,0x31, 8, 0x00, 0x00, 1, 1, 1); - - //generate table - crc_8_generate_table(&customcrc, tabsrc, sizeof(tabsrc)); - - //show setting of crc - printf("\nCRC library v1.0 written on 11/02/2017 by Zaltora\n"); - printf("-------------------------------------------------\n"); - printf("\n"); - printf("Parameters:\n"); - printf("\n"); - printf(" polynom : 0x%02X\n", customcrc.polynom); - printf(" order : %d\n", customcrc.order); - printf(" crcinit : 0x%02X direct, 0x%x nondirect\n", customcrc.private.crcinit_direct, customcrc.private.crcinit_nondirect); - printf(" crcxor : 0x%02X\n", customcrc.crcxor); - printf(" refin : %d\n", customcrc.refin); - printf(" refout : %d\n", customcrc.refout); - printf("\n"); - printf("check_data : '%s' (%d bytes)\n", check_data, sizeof(check_data)); - printf("\n"); - - //show table - printf("Lookup table generated:\n"); - printf("\n"); - printf("tabsrc[256] = {"); - for (uint16_t i = 0 ; i < 256 ; i++) - { - if(!(i%8)) printf("\n"); - printf("0x%02X, ",tabsrc[i]); - } - printf("\n};\n\n"); - - printf("Check value results with all algorithms:\n"); - printf("\n"); - - //try different crc algorithm - crc_8_generic_select_algo(&customcrc, tabsrc, sizeof(tabsrc), CRC_TABLE); - printf("CRC_TABLE\t\t: 0x%02X\n", crc_8_generic_compute(&customcrc, check_data, sizeof(check_data))); - crc_8_generic_select_algo(&customcrc, tabsrc, sizeof(tabsrc), CRC_TABLE_FAST); - printf("CRC_TABLE_FAST\t\t: 0x%02X\n", crc_8_generic_compute(&customcrc, check_data, sizeof(check_data))); - crc_8_generic_select_algo(&customcrc, NULL, 0, CRC_BIT_TO_BIT); - printf("CRC_BIT_TO_BIT\t\t: 0x%02X\n", crc_8_generic_compute(&customcrc, check_data, sizeof(check_data))); - crc_8_generic_select_algo(&customcrc, NULL, 0, CRC_BIT_TO_BIT_FAST); - printf("CRC_BIT_TO_BIT_FAST\t: 0x%02X\n", crc_8_generic_compute(&customcrc, check_data, sizeof(check_data))); - crc_8_generic_select_algo(&customcrc, crc_8_tab_MAXIM, sizeof(crc_8_tab_MAXIM), CRC_TABLE_FAST); - printf("CRC_TABLE_BUILTIN\t: 0x%02X\n\n", crc_8_generic_compute(&customcrc, check_data, sizeof(check_data))); - - printf("Test speed algorithms with random data:\n"); - printf("\n"); - - //data to process - printf("%u bytes of DATA:",sizeof(tab_data)); - for (uint16_t i = 0 ; i < sizeof(tab_data) ; i++) - { - tab_data[i] = (uint8_t)hwrand(); - if(!(i%32)) printf("\n"); - printf("%02X",tab_data[i]); - } - printf("\n\n"); - - const uint32_t cst = NUMBER_COMPUTE_TEST ; - char algo_txt[30] ; - uint32_t time = 0; - uint8_t select = 0; - uint8_t result = 0; - for(select = 0; select < 5 ; select++) - { - switch(select){ - case 0: - crc_8_generic_select_algo(&customcrc, NULL, 0, CRC_BIT_TO_BIT); - sprintf(algo_txt,"CRC_BIT_TO_BIT"); - break; - case 1: - crc_8_generic_select_algo(&customcrc, NULL, 0, CRC_BIT_TO_BIT_FAST); - sprintf(algo_txt,"CRC_BIT_TO_BIT_FAST"); - break; - case 2: - crc_8_generic_select_algo(&customcrc, tabsrc, sizeof(tabsrc), CRC_TABLE); - sprintf(algo_txt,"CRC_TABLE"); - break; - case 3: - crc_8_generic_select_algo(&customcrc, tabsrc, sizeof(tabsrc), CRC_TABLE_FAST); - sprintf(algo_txt,"CRC_TABLE_FAST"); - break; - case 4: - crc_8_generic_select_algo(&customcrc, crc_8_tab_MAXIM, sizeof(crc_8_tab_MAXIM), CRC_TABLE_FAST); - sprintf(algo_txt,"CRC_TABLE_FAST_BUILTIN"); - break; - } - printf("test speed algorithm %s \n",algo_txt); - time = sdk_system_get_time(); - for (uint32_t i = 0 ; i < cst ; i++) - { - result = crc_8_generic_compute(&customcrc, tab_data, sizeof(tab_data)); - } - time = sdk_system_get_time()-time ; - printf("Speed algorithm: %.3f us\n",(float)time/(float)cst); - printf("Result algorithm: %02X\n\n",result); - } - while (1) - { - vTaskDelay(10000 / portTICK_PERIOD_MS) ; - } -} - -void user_init(void) -{ - sdk_system_update_cpu_freq(160); - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - printf("Start\n\n"); - vTaskDelay(2000 / portTICK_PERIOD_MS) ; - xTaskCreate(crc_8bit, "crc_8bit", 512, NULL, 2, NULL); -} diff --git a/examples/dht_sensor/Makefile b/examples/dht_sensor/Makefile index 79b8d3a..cfdde69 100644 --- a/examples/dht_sensor/Makefile +++ b/examples/dht_sensor/Makefile @@ -1,4 +1,4 @@ -PROGRAM = dht_sensor +PROGRAM=dht_sensor EXTRA_COMPONENTS = extras/dht include ../../common.mk diff --git a/examples/dht_sensor/dht_sensor.c b/examples/dht_sensor/dht_sensor.c index 22f110e..11f2c43 100644 --- a/examples/dht_sensor/dht_sensor.c +++ b/examples/dht_sensor/dht_sensor.c @@ -2,49 +2,45 @@ * * This sample code is in the public domain. */ -#include -#include #include "espressif/esp_common.h" #include "esp/uart.h" #include "FreeRTOS.h" #include "task.h" -#include +#include "dht.h" #include "esp8266.h" /* An example using the ubiquitous DHT** humidity sensors * to read and print a new temperature and humidity measurement * from a sensor attached to GPIO pin 4. */ -uint8_t const dht_gpio = 4; -const dht_sensor_type_t sensor_type = DHT_TYPE_DHT22; +int const dht_gpio = 4; void dhtMeasurementTask(void *pvParameters) { - int16_t temperature = 0; - int16_t humidity = 0; + int8_t temperature = 0; + int8_t humidity = 0; - // DHT sensors that come mounted on a PCB generally have - // pull-up resistors on the data pin. It is recommended - // to provide an external pull-up resistor otherwise... - gpio_set_pullup(dht_gpio, false, false); + // DHT sensors that come mounted on a PCB generally have + // pull-up resistors on the data pin. It is recommended + // to provide an external pull-up resistor otherwise... + gpio_set_pullup(dht_gpio, false, false); - while(1) { - if (dht_read_data(sensor_type, dht_gpio, &humidity, &temperature)) { - printf("Humidity: %d%% Temp: %dC\n", - humidity / 10, - temperature / 10); - } else { - printf("Could not read data from sensor\n"); - } + while(1) { - // Three second delay... - vTaskDelay(3000 / portTICK_PERIOD_MS); + if (dht_fetch_data(dht_gpio, &humidity, &temperature)) { + printf("Humidity: %i%% Temp: %iC\n", humidity, temperature); + } else { + printf("Could not read data from sensor..."); } + + // Three second delay... + vTaskDelay(3000 / portTICK_RATE_MS); + } } void user_init(void) { uart_set_baud(0, 115200); - xTaskCreate(dhtMeasurementTask, "dhtMeasurementTask", 256, NULL, 2, NULL); + xTaskCreate(dhtMeasurementTask, (signed char *)"dhtMeasurementTask", 256, NULL, 2, NULL); } diff --git a/examples/ds1302_test/Makefile b/examples/ds1302_test/Makefile deleted file mode 100644 index 2ba09a7..0000000 --- a/examples/ds1302_test/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = ds1302_test -EXTRA_COMPONENTS = extras/ds1302 -#ESPBAUD = 460800 -include ../../common.mk diff --git a/examples/ds1302_test/main.c b/examples/ds1302_test/main.c deleted file mode 100644 index 57bb848..0000000 --- a/examples/ds1302_test/main.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Example of using DS1302 RTC driver - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * Pavel Merzlyakov - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include - -#define CE_PIN 5 -#define IO_PIN 4 -#define SCLK_PIN 0 - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - struct tm time = { - .tm_year = 2016, - .tm_mon = 9, - .tm_mday = 31, - .tm_hour = 21, - .tm_min = 54, - .tm_sec = 10 - }; - - ds1302_init(CE_PIN, IO_PIN, SCLK_PIN); - ds1302_set_write_protect(false); - - ds1302_set_time(&time); - ds1302_start(true); - - while (true) - { - ds1302_get_time(&time); - - printf("%04d-%02d-%02d %02d:%02d:%02d\n", time.tm_year, time.tm_mon + 1, - time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec); - - for (uint32_t i = 0; i < 1000; i++) - sdk_os_delay_us(500); - } -} diff --git a/examples/ds1307/Makefile b/examples/ds1307/Makefile deleted file mode 100644 index 319d007..0000000 --- a/examples/ds1307/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM = ds1307 -EXTRA_COMPONENTS = extras/i2c extras/ds1307 -include ../../common.mk diff --git a/examples/ds1307/main.c b/examples/ds1307/main.c deleted file mode 100644 index a276f0b..0000000 --- a/examples/ds1307/main.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Example of using DS1307 RTC driver - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include - -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K); - i2c_dev_t dev = { - .addr = DS1307_ADDR, - .bus = I2C_BUS, - }; - ds1307_start(&dev, true); - - // setup datetime: 2016-10-09 13:50:10 - struct tm time = { - .tm_year = 2016, - .tm_mon = 9, // 0-based - .tm_mday = 9, - .tm_hour = 13, - .tm_min = 50, - .tm_sec = 10 - }; - ds1307_set_time(&dev, &time); - - while (true) - { - ds1307_get_time(&dev, &time); - - printf("%04d-%02d-%02d %02d:%02d:%02d\n", time.tm_year, time.tm_mon + 1, - time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec); - - for (uint32_t i = 0; i < 1000; i++) - sdk_os_delay_us(500); - } -} diff --git a/examples/ds18b20_broadcaster/ds18b20_broadcaster.c b/examples/ds18b20_broadcaster/ds18b20_broadcaster.c index 5b7f1dc..def94fd 100644 --- a/examples/ds18b20_broadcaster/ds18b20_broadcaster.c +++ b/examples/ds18b20_broadcaster/ds18b20_broadcaster.c @@ -88,7 +88,7 @@ void broadcast_temperature(void *pvParameters) } netbuf_delete(buf); // De-allocate packet buffer } - vTaskDelay(1000/portTICK_PERIOD_MS); + vTaskDelay(1000/portTICK_RATE_MS); } err = netconn_disconnect(conn); @@ -97,7 +97,7 @@ void broadcast_temperature(void *pvParameters) err = netconn_delete(conn); printf("%s : Deleted connection (%s)\n", __FUNCTION__, lwip_strerr(err)); - vTaskDelay(1000/portTICK_PERIOD_MS); + vTaskDelay(1000/portTICK_RATE_MS); } } @@ -119,6 +119,6 @@ void user_init(void) sdk_wifi_set_opmode(STATION_MODE); sdk_wifi_station_set_config(&config); - xTaskCreate(&broadcast_temperature, "broadcast_temperature", 256, NULL, 2, NULL); + xTaskCreate(&broadcast_temperature, (signed char *)"broadcast_temperature", 256, NULL, 2, NULL); } diff --git a/examples/ds18b20_onewire/ds18b20_onewire.c b/examples/ds18b20_onewire/ds18b20_onewire.c index 73ff0b7..b9b7655 100644 --- a/examples/ds18b20_onewire/ds18b20_onewire.c +++ b/examples/ds18b20_onewire/ds18b20_onewire.c @@ -64,7 +64,7 @@ void print_temperature(void *pvParameters) { // Wait for a little bit between each sample (note that the // ds18b20_measure_and_read_multi operation already takes at // least 750ms to run, so this is on top of that delay). - vTaskDelay(LOOP_DELAY_MS / portTICK_PERIOD_MS); + vTaskDelay(LOOP_DELAY_MS / portTICK_RATE_MS); } } } @@ -73,6 +73,6 @@ void print_temperature(void *pvParameters) { void user_init(void) { uart_set_baud(0, 115200); - xTaskCreate(&print_temperature, "print_temperature", 256, NULL, 2, NULL); + xTaskCreate(&print_temperature, (signed char *)"print_temperature", 256, NULL, 2, NULL); } diff --git a/examples/ds3231_test/Makefile b/examples/ds3231_test/Makefile deleted file mode 100644 index 3df6d8d..0000000 --- a/examples/ds3231_test/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=ds3231_test -EXTRA_COMPONENTS = extras/ds3231 extras/i2c -include ../../common.mk diff --git a/examples/ds3231_test/ds3231_test.c b/examples/ds3231_test/ds3231_test.c deleted file mode 100644 index aeef939..0000000 --- a/examples/ds3231_test/ds3231_test.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Test code for DS3231 high precision RTC module - * - * Part of esp-open-rtos - * Copyright (C) 2016 Bhuvanchandra DV - * MIT Licensed as described in the file LICENSE - */ -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "task.h" -#include "i2c/i2c.h" - -#include "ds3231/ds3231.h" - -#define ADDR DS3231_ADDR -#define I2C_BUS 0 - -void task1(void *pvParameters) -{ - struct tm time; - float tempFloat; - i2c_dev_t dev = { - .addr = ADDR, - .bus = I2C_BUS, - }; - while(1) { - vTaskDelay(100); - ds3231_getTime(&dev, &time); - ds3231_getTempFloat(&dev, &tempFloat); - printf("TIME:%d:%d:%d, TEMPERATURE:%.2f DegC\r\n", time.tm_hour, time.tm_min, time.tm_sec, tempFloat); - } -} - -void user_init(void) -{ - const int scl = 5, sda = 4; - - uart_set_baud(0, 115200); - - printf("\n"); - printf("SDK version : %s\n", sdk_system_get_sdk_version()); - printf("GIT version : %s\n", GITSHORTREV); - - i2c_init(0, scl, sda, I2C_FREQ_400K); - - xTaskCreate(task1, "tsk1", 256, NULL, 2, NULL); -} diff --git a/examples/dsm_test/Makefile b/examples/dsm_test/Makefile deleted file mode 100644 index 8438f41..0000000 --- a/examples/dsm_test/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -# Simple makefile for simple example -PROGRAM=dsm_test -EXTRA_COMPONENTS = extras/dsm -include ../../common.mk diff --git a/examples/dsm_test/dsm_test.c b/examples/dsm_test/dsm_test.c deleted file mode 100644 index 234a66b..0000000 --- a/examples/dsm_test/dsm_test.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Very basic example to test the dsm library - * Led intensity from module will change over time. - * - * Part of esp-open-rtos - * Copyright (C) 2018 zaltora (https://github.com/Zaltora) - * BSD Licensed as described in the file LICENSE - */ -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "task.h" -#include "dsm.h" - -#define TEST_WITH_160MHZ (0) -#define DSM_PIN (2) - -void task1(void *pvParameters) -{ - uint32_t const init_count = 0; - uint32_t count = init_count; - while(1) - { - vTaskDelay(100/portTICK_PERIOD_MS); - printf("Target set to %3u, ", count); - //Freq = (80,000,000/prescale) * (target / 256) HZ (0 < target < 128) - //Freq = (80,000,000/prescale) * ((256 - target) / 256) HZ (128 < target < 256) - if (count < 128) - { - printf("Freqency: %.1f Hz\r\n", (80000000.0/255.0 * (count/ 256.0))); - } - else - { - printf("Freqency: %.1f Hz\r\n", 80000000.0/255.0 * ((256.0-count)/ 256.0)); - } - dsm_set_target(count); - count++; - if (count > UINT8_MAX) - count = init_count; - } -} - -void user_init(void) -{ - uint8_t pins[1]; - uart_set_baud(0, 115200); - -#if (TEST_WITH_160MHZ) - sdk_system_update_cpu_freq(160); -#endif - - printf("SDK version:%s\r\n", sdk_system_get_sdk_version()); - - pins[0] = DSM_PIN; - - /* register pin to use with DSM */ - dsm_init(1, pins); - /* Set prescale to FF to get a proper signal */ - dsm_set_prescale(0xFF); - /* Target initial */ - dsm_set_target(0); - /* start dsm to pin */ - dsm_start(); - - printf("dsm start\r\n"); - - xTaskCreate(task1, "tsk1", 256, NULL, 2, NULL); -} diff --git a/examples/esphttpd/FreeRTOSConfig.h b/examples/esphttpd/FreeRTOSConfig.h deleted file mode 100644 index d6d9c5e..0000000 --- a/examples/esphttpd/FreeRTOSConfig.h +++ /dev/null @@ -1,11 +0,0 @@ -/* FreeRTOSConfig overrides. - - This is intended as an example of overriding some of the default FreeRTOSConfig settings, - which are otherwise found in FreeRTOS/Source/include/FreeRTOSConfig.h -*/ - -#define configUSE_RECURSIVE_MUTEXES 1 - -/* Use the defaults for everything else */ -#include_next - diff --git a/examples/esphttpd/Makefile b/examples/esphttpd/Makefile deleted file mode 100644 index 2362443..0000000 --- a/examples/esphttpd/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -PROGRAM = esphttpd -EXTRA_COMPONENTS = extras/dhcpserver extras/rboot-ota extras/libesphttpd - -ESP_IP ?= 192.168.4.1 - -#Tag for OTA images. 0-27 characters. Change to eg your projects title. -LIBESPHTTPD_OTA_TAGNAME ?= generic - -LIBESPHTTPD_MAX_CONNECTIONS ?= 8 -LIBESPHTTPD_STACKSIZE ?= 2048 - -PROGRAM_CFLAGS += -DFREERTOS -DLIBESPHTTPD_OTA_TAGNAME="\"$(LIBESPHTTPD_OTA_TAGNAME)\"" -DFLASH_SIZE=$(FLASH_SIZE) -EXTRA_CFLAGS += -DMEMP_NUM_NETCONN=$(LIBESPHTTPD_MAX_CONNECTIONS) - -include ../../common.mk - diff --git a/examples/esphttpd/cgi-test.c b/examples/esphttpd/cgi-test.c deleted file mode 100644 index 7a16aed..0000000 --- a/examples/esphttpd/cgi-test.c +++ /dev/null @@ -1,90 +0,0 @@ -/* -Cgi routines as used by the tests in the html/test subdirectory. -*/ - -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * Jeroen Domburg wrote this file. As long as you retain - * this notice you can do whatever you want with this stuff. If we meet some day, - * and you think this stuff is worth it, you can buy me a beer in return. - * ---------------------------------------------------------------------------- - */ - - -#include -#include -#include - -#include - -#include "cgi-test.h" - -typedef struct { - int len; - int sendPos; -} TestbedState; - - -int ICACHE_FLASH_ATTR cgiTestbed(HttpdConnData *connData) { - char buff[1024]; - int first=0; - int l, x; - TestbedState *state=(TestbedState*)connData->cgiData; - - if (connData->conn==NULL) { - //Connection aborted. Clean up. - if (state) free(state); - return HTTPD_CGI_DONE; - } - - if (state==NULL) { - //First call - state=malloc(sizeof(TestbedState)); - memset(state, 0, sizeof(state)); - connData->cgiData=state; - first=1; - } - - if (connData->requestType==HTTPD_METHOD_GET) { - if (first) { - httpdStartResponse(connData, 200); - httpdHeader(connData, "content-type", "application/data"); - httpdEndHeaders(connData); - l=httpdFindArg(connData->getArgs, "len", buff, sizeof(buff)); - state->len=1024; - if (l!=-1) state->len=atoi(buff); - state->sendPos=0; - return HTTPD_CGI_MORE; - } else { - l=sizeof(buff); - if (l>(state->len-state->sendPos)) l=(state->len-state->sendPos); - //Fill with semi-random data - for (x=0; xsendPos>>10))&0x1F)+'0'; - httpdSend(connData, buff, l); - state->sendPos+=l; - printf("Test: Uploaded %d/%d bytes\n", state->sendPos, state->len); - if (state->len<=state->sendPos) { - if (state) free(state); - return HTTPD_CGI_DONE; - } else { - return HTTPD_CGI_MORE; - } - } - } - if (connData->requestType==HTTPD_METHOD_POST) { - if (connData->post->len!=connData->post->received) { - //Still receiving data. Ignore this. - printf("Test: got %d/%d bytes\n", connData->post->received, connData->post->len); - return HTTPD_CGI_MORE; - } else { - httpdStartResponse(connData, 200); - httpdHeader(connData, "content-type", "text/plain"); - httpdEndHeaders(connData); - l=sprintf(buff, "%d", connData->post->received); - httpdSend(connData, buff, l); - return HTTPD_CGI_DONE; - } - } - return HTTPD_CGI_DONE; -} diff --git a/examples/esphttpd/cgi-test.h b/examples/esphttpd/cgi-test.h deleted file mode 100644 index a2c752e..0000000 --- a/examples/esphttpd/cgi-test.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CGI_TEST_H -#define CGI_TEST_H - -#include - -int cgiTestbed(HttpdConnData *connData); - -#endif diff --git a/examples/esphttpd/cgi.c b/examples/esphttpd/cgi.c deleted file mode 100644 index 5b83ca2..0000000 --- a/examples/esphttpd/cgi.c +++ /dev/null @@ -1,81 +0,0 @@ -/* -Some random cgi routines. Used in the LED example and the page that returns the entire -flash as a binary. Also handles the hit counter on the main page. -*/ - -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * Jeroen Domburg wrote this file. As long as you retain - * this notice you can do whatever you want with this stuff. If we meet some day, - * and you think this stuff is worth it, you can buy me a beer in return. - * ---------------------------------------------------------------------------- - */ - - -#include -#include -#include - -#include - -#include "cgi.h" -#include "io.h" - - -//cause I can't be bothered to write an ioGetLed() -static char currLedState=0; - -//Cgi that turns the LED on or off according to the 'led' param in the POST data -int ICACHE_FLASH_ATTR cgiLed(HttpdConnData *connData) { - int len; - char buff[1024]; - - if (connData->conn==NULL) { - //Connection aborted. Clean up. - return HTTPD_CGI_DONE; - } - - len=httpdFindArg(connData->post->buff, "led", buff, sizeof(buff)); - if (len!=0) { - currLedState=atoi(buff); - ioLed(currLedState); - } - - httpdRedirect(connData, "led.tpl"); - return HTTPD_CGI_DONE; -} - - - -//Template code for the led page. -int ICACHE_FLASH_ATTR tplLed(HttpdConnData *connData, char *token, void **arg) { - char buff[128]; - if (token==NULL) return HTTPD_CGI_DONE; - - strcpy(buff, "Unknown"); - if (strcmp(token, "ledstate")==0) { - if (currLedState) { - strcpy(buff, "on"); - } else { - strcpy(buff, "off"); - } - } - httpdSend(connData, buff, -1); - return HTTPD_CGI_DONE; -} - -static int hitCounter=0; - -//Template code for the counter on the index page. -int ICACHE_FLASH_ATTR tplCounter(HttpdConnData *connData, char *token, void **arg) { - char buff[128]; - if (token==NULL) return HTTPD_CGI_DONE; - - if (strcmp(token, "counter")==0) { - hitCounter++; - sprintf(buff, "%d", hitCounter); - } - httpdSend(connData, buff, -1); - return HTTPD_CGI_DONE; -} diff --git a/examples/esphttpd/cgi.h b/examples/esphttpd/cgi.h deleted file mode 100644 index 5cb7296..0000000 --- a/examples/esphttpd/cgi.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef CGI_H -#define CGI_H - -#include - -int cgiLed(HttpdConnData *connData); -int tplLed(HttpdConnData *connData, char *token, void **arg); -int tplCounter(HttpdConnData *connData, char *token, void **arg); - -#endif diff --git a/examples/esphttpd/html/cats/cross-eyed-cat.jpg b/examples/esphttpd/html/cats/cross-eyed-cat.jpg deleted file mode 100644 index e166e87..0000000 Binary files a/examples/esphttpd/html/cats/cross-eyed-cat.jpg and /dev/null differ diff --git a/examples/esphttpd/html/cats/junge-katze-iv.jpg b/examples/esphttpd/html/cats/junge-katze-iv.jpg deleted file mode 100644 index c3cf70b..0000000 Binary files a/examples/esphttpd/html/cats/junge-katze-iv.jpg and /dev/null differ diff --git a/examples/esphttpd/html/cats/kitten-loves-toy.jpg b/examples/esphttpd/html/cats/kitten-loves-toy.jpg deleted file mode 100644 index 569ff56..0000000 Binary files a/examples/esphttpd/html/cats/kitten-loves-toy.jpg and /dev/null differ diff --git a/examples/esphttpd/html/flash/140medley.min.js b/examples/esphttpd/html/flash/140medley.min.js deleted file mode 100644 index d1495d1..0000000 --- a/examples/esphttpd/html/flash/140medley.min.js +++ /dev/null @@ -1,2 +0,0 @@ -var t=function(a,b){return function(c,d){return a.replace(/#{([^}]*)}/g,function(a,f){return Function("x","with(x)return "+f).call(c,d||b||{})})}},s=function(a,b){return b?{get:function(c){return a[c]&&b.parse(a[c])},set:function(c,d){a[c]=b.stringify(d)}}:{}}(this.localStorage||{},JSON),p=function(a,b,c,d){c=c||document;d=c[b="on"+b];a=c[b]=function(e){d=d&&d(e=e||c.event);return(a=a&&b(e))?b:d};c=this},m=function(a,b,c){b=document;c=b.createElement("p");c.innerHTML=a;for(a=b.createDocumentFragment();b= -c.firstChild;)a.appendChild(b);return a},$=function(a,b){a=a.match(/^(\W)?(.*)/);return(b||document)["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2])},j=function(a){for(a=0;a<4;a++)try{return a?new ActiveXObject([,"Msxml2","Msxml3","Microsoft"][a]+".XMLHTTP"):new XMLHttpRequest}catch(b){}}; diff --git a/examples/esphttpd/html/flash/index.html b/examples/esphttpd/html/flash/index.html deleted file mode 100644 index d336a6c..0000000 --- a/examples/esphttpd/html/flash/index.html +++ /dev/null @@ -1,75 +0,0 @@ - -Upgrade firmware - - - - - -
-

Update firmware

-
Loading...
- - -
- \ No newline at end of file diff --git a/examples/esphttpd/html/flash/style.css b/examples/esphttpd/html/flash/style.css deleted file mode 100644 index 7678ec8..0000000 --- a/examples/esphttpd/html/flash/style.css +++ /dev/null @@ -1,34 +0,0 @@ - -body { - background-color: #404040; - font-family: sans-serif; -} - -#main { - background-color: #d0d0FF; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; - border: 2px solid #000000; - width: 800px; - margin: 0 auto; - padding: 20px -} - -#progressbar { - margin: 10px; - padding: 0; - border: 1px solid #000000; - height: 20px; - width: 200px; - background-color: #808080; -} - -#progressbarinner { - width: 10px; - height: 20px; - border: none; - background-color: #00ff00; -} - - diff --git a/examples/esphttpd/html/index.tpl b/examples/esphttpd/html/index.tpl deleted file mode 100644 index 737f301..0000000 --- a/examples/esphttpd/html/index.tpl +++ /dev/null @@ -1,26 +0,0 @@ - -Esp8266 web server - - - -
-

It Works

-

-If you see this, it means the tiny li'l website in your ESP8266 does actually work. Fyi, this page has -been loaded %counter% times. -

    -
  • If you haven't connected this device to your WLAN network now, you can do so.
  • -
  • You can also control the LED.
  • -
  • Esphttpd now also supports websockets.
  • -
  • Test esphttpd using the built-in test suite
  • -
  • And because I can, here's a link to my website
- -

- -

And because we're on the Internets now, here are the required pictures of cats:
-
-
-
-

-
- diff --git a/examples/esphttpd/html/led.tpl b/examples/esphttpd/html/led.tpl deleted file mode 100644 index 7a9cf89..0000000 --- a/examples/esphttpd/html/led.tpl +++ /dev/null @@ -1,15 +0,0 @@ -Test - - - -
-

The LED

-

-If there's a LED connected to GPIO2, it's now %ledstate%. You can change that using the buttons below. -

-
- - -
-
- diff --git a/examples/esphttpd/html/style.css b/examples/esphttpd/html/style.css deleted file mode 100644 index 2a2f758..0000000 --- a/examples/esphttpd/html/style.css +++ /dev/null @@ -1,17 +0,0 @@ - -body { - background-color: #404040; - font-family: sans-serif; -} - -#main { - background-color: #d0d0FF; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; - border: 2px solid #000000; - width: 800px; - margin: 0 auto; - padding: 20px -} - diff --git a/examples/esphttpd/html/test/index.html b/examples/esphttpd/html/test/index.html deleted file mode 100644 index 01f4121..0000000 --- a/examples/esphttpd/html/test/index.html +++ /dev/null @@ -1,9 +0,0 @@ -Webserver test - - - - -
-
Initializing test...
-
- \ No newline at end of file diff --git a/examples/esphttpd/html/test/test.js b/examples/esphttpd/html/test/test.js deleted file mode 100644 index 03c0cd4..0000000 --- a/examples/esphttpd/html/test/test.js +++ /dev/null @@ -1,205 +0,0 @@ - -/* -Code to test the webserver. This depends on: -- The cat images being available, for concurrent espfs testing -- the test.cgi script available, for generic data mangling tests - - -This test does a max of 4 requests in parallel. The nonos SDK supports a max of -5 connections; the default libesphttpd setting is 4 sockets at a time. Unfortunately, -the nonos sdk just closes all sockets opened after the available sockets are opened, -instead of queueing them until a socket frees up. -*/ - - -function log(line) { - $("#log").insertAdjacentHTML('beforeend', line+'
'); -} - - -//Load an image multiple times in parallel -function testParLdImg(url, ct, doneFn) { - var im=[]; - var state={"loaded":0, "count":ct, "doneFn": doneFn, "error":false}; - for (var x=0; xthis.ts+2000) { - log("..."+Math.floor(e.loaded*100/this.len).toString()+"%"); - this.ts=Date.now(); - } - }.bind(state); - } - xhr.send(); -} - - -function testUploadCgi(len, doneFn) { - var xhr=j(); - var state={"len":len, "doneFn":doneFn, "ts": Date.now()}; - var data=""; - for (var x=0; x=200 && xhr.status<300) { - var ulen=parseInt(xhr.responseText); - if (ulen==this.len) { - log("Uploaded "+this.len+" bytes successfully."); - this.doneFn(true); - } else { - log("Webserver received "+ulen+" bytes successfully, but sent "+this.len+"!"); - this.doneFn(false); - } - } else if (xhr.readyState==4) { - log("Failed! Error "+xhr.status); - this.doneFn(false); - } - }.bind(state); - //If the webbrowser enables it, show progress. - if (typeof xhr.upload.onprogress != 'undefined') { - xhr.upload.onprogress=function(e) { - if (Date.now()>this.ts+2000) { - log("..."+Math.floor(e.loaded*100/e.total).toString()+"%"); - this.ts=Date.now(); - } - }.bind(state); - } - //Upload the file - xhr.send(data); -} - -function hammerNext(state, xhr) { - if (state.done==state.count) { - state.doneFn(!state.error); - } - if (state.started==state.count) return; - xhr.open("GET", "test.cgi?len="+state.len+"&nocache="+Math.floor(Math.random()*100000).toString()); - xhr.onreadystatechange=function(xhr) { - if (xhr.readyState==4 && xhr.status>=200 && xhr.status<300) { - if (xhr.response.length==this.len) { - state.done++; - hammerNext(this, xhr); - } else { - log("Downloaded "+xhr.response.length+" bytes successfully, but needed "+this.len+"!"); - state.done++; - hammerNext(this, xhr); - } - } else if (xhr.readyState==4) { - log("Failed! Error "+xhr.status); - state.done++; - hammerNext(this, xhr); - } - }.bind(state, xhr); - //If the webbrowser enables it, show progress. - if (typeof xhr.onprogress != 'undefined') { - xhr.onprogress=function(e) { - if (Date.now()>this.ts+2000) { - log("..."+state.done+"/"+state.count); - this.ts=Date.now(); - } - }.bind(state); - } - state.started++; - xhr.send(); -} - -function testHammer(count, par, len, doneFn) { - var state={"count":count, "started":0, "done":0, "par":par, "len":len, "doneFn":doneFn, "ts": Date.now(), "error":false}; - var xhr=[]; - for (var i=0; iSuccess!"); - successCnt++; - } else { - log("Test failed!"); - } - } - tstState++; - if (tstState==1) { - log("Testing parallel load of espfs files..."); - testParLdImg("../cats/kitten-loves-toy.jpg", 3, nextTest); - } else if (tstState==2) { - log("Testing GET request of 32K..."); - testDownloadCgi(32*1024, nextTest); - } else if (tstState==3) { - log("Testing GET request of 128K..."); - testDownloadCgi(128*1024, nextTest); - } else if (tstState==4) { - log("Testing GET request of 512K..."); - testDownloadCgi(512*1024, nextTest); - } else if (tstState==5) { - log("Testing POST request of 512 bytes..."); - testUploadCgi(512, nextTest); - } else if (tstState==6) { - log("Testing POST request of 16K bytes..."); - testUploadCgi(16*1024, nextTest); - } else if (tstState==7) { - log("Testing POST request of 512K bytes..."); - testUploadCgi(512*1024, nextTest); - } else if (tstState==8) { - log("Hammering webserver with 500 requests of size 512..."); - testHammer(500, 3, 512, nextTest); - } else if (tstState==9) { - log("Hammering webserver with 500 requests of size 2048..."); - testHammer(500, 3, 2048, nextTest); - } else { - log("Tests done! "+successCnt+" out of "+(tstState-1)+" tests were successful."); - } -} - - - -window.onload=function(e) { - log("Starting tests."); - nextTest(false); -} - - - diff --git a/examples/esphttpd/html/websocket/index.html b/examples/esphttpd/html/websocket/index.html deleted file mode 100644 index d7423ec..0000000 --- a/examples/esphttpd/html/websocket/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - -WebSocket Test - - - -

WebSocket Test

- -
diff --git a/examples/esphttpd/html/wifi/140medley.min.js b/examples/esphttpd/html/wifi/140medley.min.js deleted file mode 100644 index d1495d1..0000000 --- a/examples/esphttpd/html/wifi/140medley.min.js +++ /dev/null @@ -1,2 +0,0 @@ -var t=function(a,b){return function(c,d){return a.replace(/#{([^}]*)}/g,function(a,f){return Function("x","with(x)return "+f).call(c,d||b||{})})}},s=function(a,b){return b?{get:function(c){return a[c]&&b.parse(a[c])},set:function(c,d){a[c]=b.stringify(d)}}:{}}(this.localStorage||{},JSON),p=function(a,b,c,d){c=c||document;d=c[b="on"+b];a=c[b]=function(e){d=d&&d(e=e||c.event);return(a=a&&b(e))?b:d};c=this},m=function(a,b,c){b=document;c=b.createElement("p");c.innerHTML=a;for(a=b.createDocumentFragment();b= -c.firstChild;)a.appendChild(b);return a},$=function(a,b){a=a.match(/^(\W)?(.*)/);return(b||document)["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2])},j=function(a){for(a=0;a<4;a++)try{return a?new ActiveXObject([,"Msxml2","Msxml3","Microsoft"][a]+".XMLHTTP"):new XMLHttpRequest}catch(b){}}; diff --git a/examples/esphttpd/html/wifi/connecting.html b/examples/esphttpd/html/wifi/connecting.html deleted file mode 100644 index 12e3a83..0000000 --- a/examples/esphttpd/html/wifi/connecting.html +++ /dev/null @@ -1,43 +0,0 @@ -Connecting... - - - - - -
-

Connecting to AP...

-

Status:
-

...
-

-
- - diff --git a/examples/esphttpd/html/wifi/icons.png b/examples/esphttpd/html/wifi/icons.png deleted file mode 100644 index 03109e1..0000000 Binary files a/examples/esphttpd/html/wifi/icons.png and /dev/null differ diff --git a/examples/esphttpd/html/wifi/style.css b/examples/esphttpd/html/wifi/style.css deleted file mode 100644 index abcfb10..0000000 --- a/examples/esphttpd/html/wifi/style.css +++ /dev/null @@ -1,24 +0,0 @@ - -body { - background-color: #404040; - font-family: sans-serif; -} - -#main { - background-color: #d0d0FF; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; - border: 2px solid #000000; - width: 800px; - margin: 0 auto; - padding: 20px -} - -.icon { - background-image: url("icons.png"); - background-color: transparent; - width: 32px; - height: 32px; - display: inline-block; -} \ No newline at end of file diff --git a/examples/esphttpd/html/wifi/wifi.tpl b/examples/esphttpd/html/wifi/wifi.tpl deleted file mode 100644 index e513025..0000000 --- a/examples/esphttpd/html/wifi/wifi.tpl +++ /dev/null @@ -1,94 +0,0 @@ -WiFi connection - - - - - -
-

-Current WiFi mode: %WiFiMode% -

-

-Note: %WiFiapwarn% -

-
-

-To connect to a WiFi network, please select one of the detected networks...
-

Scanning...
-
-WiFi password, if applicable:
-
- -

-
- - diff --git a/examples/esphttpd/io.c b/examples/esphttpd/io.c deleted file mode 100644 index c104b9c..0000000 --- a/examples/esphttpd/io.c +++ /dev/null @@ -1,72 +0,0 @@ - -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * Jeroen Domburg wrote this file. As long as you retain - * this notice you can do whatever you want with this stuff. If we meet some day, - * and you think this stuff is worth it, you can buy me a beer in return. - * ---------------------------------------------------------------------------- - */ - - -#include -//#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define LEDGPIO 2 -#define BTNGPIO 0 - -#ifndef ESP32 -static ETSTimer resetBtntimer; -#endif - -void ioLed(int ena) { -#ifndef ESP32 - //gpio_output_set is overkill. ToDo: use better mactos - if (ena) { - sdk_gpio_output_set((1<=6) { //3 sec pressed - sdk_wifi_station_disconnect(); - sdk_wifi_set_opmode(STATIONAP_MODE); //reset to AP+STA mode - printf("Reset to AP mode. Restarting system...\n"); - sdk_system_restart(); - } - resetCnt=0; - } -} -#endif - - -void ioInit() { -#ifndef ESP32 - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); - sdk_gpio_output_set(0, 0, (1< wrote this file. As long as you retain - * this notice you can do whatever you want with this stuff. If we meet some day, - * and you think this stuff is worth it, you can buy me a beer in return. - * ---------------------------------------------------------------------------- - */ - -/* -This is example code for the esphttpd library. It's a small-ish demo showing off -the server, including WiFi connection management capabilities, some IO and -some pictures of cats. -*/ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "io.h" -#include "cgi.h" -#include "cgi-test.h" - -#define AP_SSID "esp-open-rtos AP" -#define AP_PSK "esp-open-rtos" - -//Function that tells the authentication system what users/passwords live on the system. -//This is disabled in the default build; if you want to try it, enable the authBasic line in -//the builtInUrls below. -int myPassFn(HttpdConnData *connData, int no, char *user, int userLen, char *pass, int passLen) { - if (no==0) { - strcpy(user, "admin"); - strcpy(pass, "s3cr3t"); - return 1; -//Add more users this way. Check against incrementing no for each user added. -// } else if (no==1) { -// strcpy(user, "user1"); -// strcpy(pass, "something"); -// return 1; - } - return 0; -} - - -static ETSTimer websockTimer; - -//Broadcast the uptime in seconds every second over connected websockets -static void websocketBcast(void *arg) { - static int ctr=0; - char buff[128]; - while(1) { - ctr++; - sprintf(buff, "Up for %d minutes %d seconds!\n", ctr/60, ctr%60); - cgiWebsockBroadcast("/websocket/ws.cgi", buff, strlen(buff), WEBSOCK_FLAG_NONE); - vTaskDelay(1000/portTICK_PERIOD_MS); - } -} - -//On reception of a message, send "You sent: " plus whatever the other side sent -static void myWebsocketRecv(Websock *ws, char *data, int len, int flags) { - int i; - char buff[128]; - sprintf(buff, "You sent: "); - for (i=0; irecvCb=myWebsocketRecv; - cgiWebsocketSend(ws, "Hi, Websocket!", 14, WEBSOCK_FLAG_NONE); -} - -//On reception of a message, echo it back verbatim -void myEchoWebsocketRecv(Websock *ws, char *data, int len, int flags) { - printf("EchoWs: echo, len=%d\n", len); - cgiWebsocketSend(ws, data, len, flags); -} - -//Echo websocket connected. Install reception handler. -void myEchoWebsocketConnect(Websock *ws) { - printf("EchoWs: connect\n"); - ws->recvCb=myEchoWebsocketRecv; -} - -CgiUploadFlashDef uploadParams={ - .type=CGIFLASH_TYPE_FW, - .fw1Pos=0x2000, - .fw2Pos=((FLASH_SIZE*1024*1024)/2)+0x2000, - .fwSize=((FLASH_SIZE*1024*1024)/2)-0x2000, - .tagName=LIBESPHTTPD_OTA_TAGNAME -}; - - -/* -This is the main url->function dispatching data struct. -In short, it's a struct with various URLs plus their handlers. The handlers can -be 'standard' CGI functions you wrote, or 'special' CGIs requiring an argument. -They can also be auth-functions. An asterisk will match any url starting with -everything before the asterisks; "*" matches everything. The list will be -handled top-down, so make sure to put more specific rules above the more -general ones. Authorization things (like authBasic) act as a 'barrier' and -should be placed above the URLs they protect. -*/ -HttpdBuiltInUrl builtInUrls[]={ - {"*", cgiRedirectApClientToHostname, "esp8266.nonet"}, - {"/", cgiRedirect, "/index.tpl"}, - {"/led.tpl", cgiEspFsTemplate, tplLed}, - {"/index.tpl", cgiEspFsTemplate, tplCounter}, - {"/led.cgi", cgiLed, NULL}, -#ifndef ESP32 - {"/flash/", cgiRedirect, "/flash/index.html"}, - {"/flash/next", cgiGetFirmwareNext, &uploadParams}, - {"/flash/upload", cgiUploadFirmware, &uploadParams}, - {"/flash/reboot", cgiRebootFirmware, NULL}, -#endif - //Routines to make the /wifi URL and everything beneath it work. - -//Enable the line below to protect the WiFi configuration with an username/password combo. -// {"/wifi/*", authBasic, myPassFn}, - - {"/wifi", cgiRedirect, "/wifi/wifi.tpl"}, - {"/wifi/", cgiRedirect, "/wifi/wifi.tpl"}, - {"/wifi/wifiscan.cgi", cgiWiFiScan, NULL}, - {"/wifi/wifi.tpl", cgiEspFsTemplate, tplWlan}, - {"/wifi/connect.cgi", cgiWiFiConnect, NULL}, - {"/wifi/connstatus.cgi", cgiWiFiConnStatus, NULL}, - {"/wifi/setmode.cgi", cgiWiFiSetMode, NULL}, - - {"/websocket/ws.cgi", cgiWebsocket, myWebsocketConnect}, - {"/websocket/echo.cgi", cgiWebsocket, myEchoWebsocketConnect}, - - {"/test", cgiRedirect, "/test/index.html"}, - {"/test/", cgiRedirect, "/test/index.html"}, - {"/test/test.cgi", cgiTestbed, NULL}, - - {"*", cgiEspFsHook, NULL}, //Catch-all cgi function for the filesystem - {NULL, NULL, NULL} -}; - -void wifiInit() { - struct ip_info ap_ip; - uint8_t sdk_wifi_get_opmode(); - switch(sdk_wifi_get_opmode()) { - case STATIONAP_MODE: - case SOFTAP_MODE: - IP4_ADDR(&ap_ip.ip, 172, 16, 0, 1); - IP4_ADDR(&ap_ip.gw, 0, 0, 0, 0); - IP4_ADDR(&ap_ip.netmask, 255, 255, 0, 0); - sdk_wifi_set_ip_info(1, &ap_ip); - - struct sdk_softap_config ap_config = { - .ssid = AP_SSID, - .ssid_hidden = 0, - .channel = 3, - .ssid_len = strlen(AP_SSID), - .authmode = AUTH_WPA_WPA2_PSK, - .password = AP_PSK, - .max_connection = 3, - .beacon_interval = 100, - }; - sdk_wifi_softap_set_config(&ap_config); - - ip_addr_t first_client_ip; - IP4_ADDR(&first_client_ip, 172, 16, 0, 2); - dhcpserver_start(&first_client_ip, 4); - dhcpserver_set_dns(&ap_ip.ip); - dhcpserver_set_router(&ap_ip.ip); - break; - case STATION_MODE: - break; - default: - break; - } -} - -//Main routine. Initialize stdout, the I/O, filesystem and the webserver and we're done. -void user_init(void) { - uart_set_baud(0, 115200); - - wifiInit(); - ioInit(); - captdnsInit(); - - espFsInit((void*)(_binary_build_web_espfs_bin_start)); - httpdInit(builtInUrls, 80); - - xTaskCreate(websocketBcast, "wsbcast", 384, NULL, 3, NULL); - - printf("\nReady\n"); -} diff --git a/examples/experiments/timers/timers.c b/examples/experiments/timers/timers.c index c889643..d5a2f50 100644 --- a/examples/experiments/timers/timers.c +++ b/examples/experiments/timers/timers.c @@ -93,11 +93,11 @@ void timerRegTask(void *pvParameters) printf("frc2 handler called %d times, last value 0x%08x\r\n", frc2_handler_call_count, frc2_last_count_val); - vTaskDelay(500 / portTICK_PERIOD_MS); + vTaskDelay(500 / portTICK_RATE_MS); } } -IRAM void frc1_handler(void *arg) +IRAM void frc1_handler(void) { frc1_handler_call_count++; frc1_last_count_val = TIMER(0).COUNT; @@ -106,7 +106,7 @@ IRAM void frc1_handler(void *arg) //TIMER_FRC1_MATCH_REG = frc1_last_count_val + 0x100000; } -void frc2_handler(void *arg) +void frc2_handler(void) { frc2_handler_call_count++; frc2_last_count_val = TIMER(1).COUNT; @@ -119,7 +119,7 @@ void frc2_handler(void *arg) void user_init(void) { uart_set_baud(0, 115200); - xTaskCreate(timerRegTask, "timerRegTask", 1024, NULL, 2, NULL); + xTaskCreate(timerRegTask, (signed char *)"timerRegTask", 1024, NULL, 2, NULL); TIMER(0).CTRL = VAL2FIELD(TIMER_CTRL_CLKDIV, TIMER_CLKDIV_256) | TIMER_CTRL_RELOAD; TIMER(0).LOAD = 0x200000; @@ -127,9 +127,9 @@ void user_init(void) TIMER(1).LOAD = VAL2FIELD(TIMER_CTRL_CLKDIV, TIMER_CLKDIV_256); DPORT.INT_ENABLE |= DPORT_INT_ENABLE_TIMER0 | DPORT_INT_ENABLE_TIMER1; - _xt_isr_attach(INUM_TIMER_FRC1, frc1_handler, NULL); + _xt_isr_attach(INUM_TIMER_FRC1, frc1_handler); _xt_isr_unmask(1< - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include - -#define CS_GPIO_PIN 2 -#define TEST_FILENAME "/test_loooong_filename.txt" -#define TEST_DIRECTORYNAME "my_directory" -#define TEST_CONTENTS "Hello! It's FatFs on esp8266 with ESP Open RTOS!" -#define READBUF_SIZE 256 -#define DELAY_MS 3000 - -static const char contents[] = TEST_CONTENTS; - -static const char *results[] = { - [FR_OK] = "Succeeded", - [FR_DISK_ERR] = "A hard error occurred in the low level disk I/O layer", - [FR_INT_ERR] = "Assertion failed", - [FR_NOT_READY] = "The physical drive cannot work", - [FR_NO_FILE] = "Could not find the file", - [FR_NO_PATH] = "Could not find the path", - [FR_INVALID_NAME] = "The path name format is invalid", - [FR_DENIED] = "Access denied due to prohibited access or directory full", - [FR_EXIST] = "Access denied due to prohibited access", - [FR_INVALID_OBJECT] = "The file/directory object is invalid", - [FR_WRITE_PROTECTED] = "The physical drive is write protected", - [FR_INVALID_DRIVE] = "The logical drive number is invalid", - [FR_NOT_ENABLED] = "The volume has no work area", - [FR_NO_FILESYSTEM] = "There is no valid FAT volume", - [FR_MKFS_ABORTED] = "The f_mkfs() aborted due to any problem", - [FR_TIMEOUT] = "Could not get a grant to access the volume within defined period", - [FR_LOCKED] = "The operation is rejected according to the file sharing policy", - [FR_NOT_ENOUGH_CORE] = "LFN working buffer could not be allocated", - [FR_TOO_MANY_OPEN_FILES] = "Number of open files > _FS_LOCK", - [FR_INVALID_PARAMETER] = "Given parameter is invalid" -}; - -static char readbuf[READBUF_SIZE]; - -static bool failed(FRESULT res) -{ - bool fail = res != FR_OK; - if (fail) - printf("\n Error: "); - printf("\n %s\n", results[res]); - return fail; -} - -void check_fatfs() -{ - const char *vol = f_gpio_to_volume(CS_GPIO_PIN); - - printf("\nCreating test file\n----------------------------\n"); - - FATFS fs; - // Mount filesystem - printf("f_mount(&fs, \"%s\")", vol); - if (failed(f_mount(&fs, vol, 1))) - return; - - // Set default drive - printf("f_chdrive(\"%s\")", vol); - if (failed(f_chdrive(vol))) - return; - - // Create a directory if it not exists - FILINFO info; - if (failed(f_stat(TEST_DIRECTORYNAME, &info)) && info.fattrib & AM_DIR) - { - printf("f_mkdir (\"%s\")\n", TEST_DIRECTORYNAME); - if (failed(f_mkdir(TEST_DIRECTORYNAME))) - return; - } - else - { - printf("\"%s\" directory already exists\n", TEST_DIRECTORYNAME); - } - - FIL f; - // Create test file - printf("f_open(&f, \"%s\", FA_WRITE | FA_CREATE_ALWAYS)", TEST_FILENAME); - if (failed(f_open(&f, TEST_FILENAME, FA_WRITE | FA_CREATE_ALWAYS))) - return; - - size_t written; - // Write test string - printf("f_write(&f, \"%s\")", contents); - if (failed(f_write(&f, contents, sizeof(contents) - 1, &written))) - return; - printf(" Bytes written: %d\n", written); - - // Close file - printf("f_close(&f)"); - if (failed(f_close(&f))) - return; - - printf("\nReading test file\n----------------------------\n"); - - // Open test file - printf("f_open(&f, \"%s\", FA_READ)", TEST_FILENAME); - if (failed(f_open(&f, TEST_FILENAME, FA_READ))) - return; - - printf(" File size: %u\n", (uint32_t)f_size(&f)); - - size_t readed; - // Read file - printf("f_read(&f, ...)"); - if (failed(f_read(&f, readbuf, sizeof(readbuf) - 1, &readed))) - return; - readbuf[readed] = 0; - - printf(" Readed %u bytes, test file contents: %s\n", readed, readbuf); - - // Close file - printf("f_close(&f)"); - if (failed(f_close(&f))) - return; - - // Unmount - printf("f_mount(NULL, \"%s\")", vol); - if (failed(f_mount(NULL, vol, 0))) - return; -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n\n", sdk_system_get_sdk_version()); - - while (true) - { - printf("***********************************\nTesting FAT filesystem\n***********************************\n"); - check_fatfs(); - printf("\n\n"); - for (size_t i = 0; i < DELAY_MS; i ++) - sdk_os_delay_us(1000); - } -} diff --git a/examples/fatfs_rtc/Makefile b/examples/fatfs_rtc/Makefile deleted file mode 100644 index 8dcac51..0000000 --- a/examples/fatfs_rtc/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -PROGRAM = fatfs -EXTRA_COMPONENTS = extras/sdio extras/fatfs extras/i2c extras/ds1307 -ESPBAUD = 460800 - -# We provide uint32_t get_fattime() based on the RTC -FATFS_FS_NORTC = 0 - -include ../../common.mk diff --git a/examples/fatfs_rtc/README.md b/examples/fatfs_rtc/README.md deleted file mode 100644 index c73f144..0000000 --- a/examples/fatfs_rtc/README.md +++ /dev/null @@ -1,15 +0,0 @@ -This example shows how to use real-time clock (e.g. ds1307) -with FatFs for real timestamps on the filesystem objects. - -1. Set `FATFS_FS_NORTC` to 0 (it's 1 by default) in application makefile. -2. Define function `uint32_t get_fattime()` which will return current time in -timestamp format: - - Bits | Date part - -------|---------- - 0..4 | Second / 2 (0..29) - 5..10 | Minute (0..59) - 11..15 | Hour (0..23) - 16..20 | Day (1..31) - 21..24 | Month (1..12) - 25..31 | Year origin from 1980 (0..127) diff --git a/examples/fatfs_rtc/main.c b/examples/fatfs_rtc/main.c deleted file mode 100644 index 4a9ec76..0000000 --- a/examples/fatfs_rtc/main.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Example of using FatFs with RTC clock - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include -#include -#include -#include - -// SD card -#define CS_GPIO_PIN 2 - -// ds1307 -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 - -#define TEST_FILENAME "/test_rtc_file.txt" -#define TEST_CONTENTS "Hello! It's a test file and it can be deleted!" -#define DELAY_MS 3000 - -// This function called by FatFs -uint32_t get_fattime() -{ - struct tm time; - i2c_dev_t dev = { - .addr = DS1307_ADDR, - .bus = I2C_BUS, - }; - ds1307_get_time(&dev, &time); - - return ((uint32_t)(time.tm_year - 1980) << 25) - | ((uint32_t)time.tm_mon << 21) - | ((uint32_t)time.tm_mday << 16) - | ((uint32_t)time.tm_hour << 11) - | ((uint32_t)time.tm_min << 5) - | ((uint32_t)time.tm_sec >> 1); -} - -static const char contents[] = TEST_CONTENTS; -static FATFS fs; - -static void dump_fileinfo() -{ - FILINFO info; - printf("File: %s\n", TEST_FILENAME); - if (f_stat(TEST_FILENAME, &info) != FR_OK) - { - printf("Cannot get file status\n"); - return; - } - printf("File size: %u bytes\n", (uint32_t)info.fsize); - printf( - "Modified: %04d-%02d-%02d %02d:%02d:%02d\n", - (info.fdate >> 9) + 1980, // year - (info.fdate >> 5) & 0x0f, // month - info.fdate & 0x1f, // day - info.ftime >> 11, // hours - (info.ftime >> 5) & 0x3F, // minutes - (info.ftime & 0x1f) << 1 // seconds - ); - -} - -void rewrite_file_task(void *p) -{ - const char *volume = f_gpio_to_volume(CS_GPIO_PIN); - - while (true) - { - do - { - if (f_mount(&fs, volume, 1) != FR_OK) - { - printf("Cannot mount volume %s\n", volume); - break; - } - - if (f_chdrive(volume) != FR_OK) - { - printf("Cannot set default drive %s\n", volume); - break; - } - - printf("\nTest file\n----------------------------\n"); - - dump_fileinfo(); - - printf("\nRe-creating test file\n----------------------------\n"); - - FIL f; //< It's big and it's on the stack! We need larger stack size - - if (f_open(&f, TEST_FILENAME, FA_WRITE | FA_CREATE_ALWAYS) != FR_OK) - { - printf("Cannot create file %s\n", TEST_FILENAME); - break; - } - - size_t bw; - if (f_write(&f, contents, sizeof(contents) - 1, &bw)) - { - printf("Cannot write to file\n"); - break; - } - printf("Bytes written: %d\n", bw); - - if (f_close(&f) != FR_OK) - { - printf("Cannot close file\n"); - break; - } - - dump_fileinfo(); - - f_mount(NULL, volume, 0); - } - while (false); - - vTaskDelay(DELAY_MS / portTICK_PERIOD_MS); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n\n", sdk_system_get_sdk_version()); - - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K); - - xTaskCreate(rewrite_file_task, "task1", 512, NULL, 2, NULL); -} diff --git a/examples/hd44780_lcd/Makefile b/examples/hd44780_lcd/Makefile deleted file mode 100644 index 02a868d..0000000 --- a/examples/hd44780_lcd/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -PROGRAM = hd44780_lcd -EXTRA_COMPONENTS = extras/hd44780 - -HD44780_I2C = 0 - -include ../../common.mk diff --git a/examples/hd44780_lcd/main.c b/examples/hd44780_lcd/main.c deleted file mode 100644 index 00ea8ad..0000000 --- a/examples/hd44780_lcd/main.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Example of using HD44780 driver with LCD - * connected directly to GPIO pins - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include - -#include - -static const uint8_t char_data[] = { - 0x04, 0x0e, 0x0e, 0x0e, 0x1f, 0x00, 0x04, 0x00, - 0x1f, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x1f, 0x00 -}; - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - hd44780_t lcd = { - .font = HD44780_FONT_5X8, - .lines = 2, - .pins = { - .rs = 5, - .e = 4, - .d4 = 0, - .d5 = 2, - .d6 = 14, - .d7 = 12, - .bl = HD44780_NOT_USED - } - }; - - hd44780_init(&lcd); - hd44780_upload_character(&lcd, 0, char_data); - hd44780_upload_character(&lcd, 1, char_data + 8); - - hd44780_gotoxy(&lcd, 0, 0); - hd44780_puts(&lcd, "\x08 Hello world!"); - hd44780_gotoxy(&lcd, 0, 1); - hd44780_puts(&lcd, "\x09 "); - - char time[16]; - - while (true) - { - hd44780_gotoxy(&lcd, 2, 1); - - snprintf(time, 7, "%u ", sdk_system_get_time() / 1000000); - time[sizeof(time) - 1] = 0; - - hd44780_puts(&lcd, time); - - for (uint32_t i = 0; i < 1000; i++) - sdk_os_delay_us(1000); - } -} diff --git a/examples/hd44780_lcd/schematics.png b/examples/hd44780_lcd/schematics.png deleted file mode 100644 index d3145cd..0000000 Binary files a/examples/hd44780_lcd/schematics.png and /dev/null differ diff --git a/examples/hmc5883l/Makefile b/examples/hmc5883l/Makefile deleted file mode 100644 index c98c6c9..0000000 --- a/examples/hmc5883l/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = hmc5883l -EXTRA_COMPONENTS = extras/i2c extras/hmc5883l -#ESPBAUD = 460800 -include ../../common.mk diff --git a/examples/hmc5883l/main.c b/examples/hmc5883l/main.c deleted file mode 100644 index 866ed25..0000000 --- a/examples/hmc5883l/main.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Example of using HMC5883L driver - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include - -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n\n", sdk_system_get_sdk_version()); - - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - i2c_dev_t dev = { - .addr = HMC5883L_ADDR, - .bus = I2C_BUS, - }; - - while (!hmc5883l_init(&dev)) - printf("Device not found\n"); - - hmc5883l_set_operating_mode(&dev, HMC5883L_MODE_CONTINUOUS); - hmc5883l_set_samples_averaged(&dev, HMC5883L_SAMPLES_8); - hmc5883l_set_data_rate(&dev, HMC5883L_DATA_RATE_07_50); - hmc5883l_set_gain(&dev, HMC5883L_GAIN_1090); - - while (true) - { - hmc5883l_data_t data; - hmc5883l_get_data(&dev, &data); - printf("Magnetic data: X:%.2f mG, Y:%.2f mG, Z:%.2f mG\n", data.x, data.y, data.z); - - for (uint32_t i = 0; i < 1000; i++) - sdk_os_delay_us(250); - } -} diff --git a/examples/http_client_ota/Makefile b/examples/http_client_ota/Makefile deleted file mode 100644 index 8cbd731..0000000 --- a/examples/http_client_ota/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM=http_ota -EXTRA_COMPONENTS=extras/rboot-ota extras/mbedtls extras/http_client_ota - -include ../../common.mk \ No newline at end of file diff --git a/examples/http_client_ota/http_get.c b/examples/http_client_ota/http_get.c deleted file mode 100644 index 6b1798a..0000000 --- a/examples/http_client_ota/http_get.c +++ /dev/null @@ -1,134 +0,0 @@ -#include "espressif/esp_common.h" -#include "esp/uart.h" - -#include - -#include "FreeRTOS.h" -#include "task.h" - -#include "http_client_ota.h" -#include "ssid_config.h" - -#define vTaskDelayMs(ms) vTaskDelay((ms) / portTICK_PERIOD_MS) - -/* - * How to test - * cd test_file - * python -m SimpleHTTPServer 8080 - * fill missing define SERVER and PORT, in your private_ssid_config.h - * Ready for test. - */ - - -#define BINARY_PATH "/blink.bin" -#define SHA256_PATH "/blink.sha256" - -// Default -#define SERVER "192.168.1.30" -#define PORT "8080" - -#ifndef SERVER - #error "Server address is not defined define it:`192.168.X.X`" -#endif - -#ifndef PORT - #error "Port is not defined example:`8080`" -#endif - -static inline void ota_error_handling(OTA_err err) { - printf("Error:"); - - switch(err) { - case OTA_DNS_LOOKUP_FALLIED: - printf("DNS lookup has fallied\n"); - break; - case OTA_SOCKET_ALLOCATION_FALLIED: - printf("Impossible allocate required socket\n"); - break; - case OTA_SOCKET_CONNECTION_FALLIED: - printf("Server unreachable, impossible connect\n"); - break; - case OTA_SHA_DONT_MATCH: - printf("Sha256 sum does not fit downloaded sha256\n"); - break; - case OTA_REQUEST_SEND_FALLIED: - printf("Impossible send HTTP request\n"); - break; - case OTA_DOWLOAD_SIZE_NOT_MATCH: - printf("Dowload size don't match with server declared size\n"); - break; - case OTA_ONE_SLOT_ONLY: - printf("rboot has only one slot configured, impossible switch it\n"); - break; - case OTA_FAIL_SET_NEW_SLOT: - printf("rboot cannot switch between rom\n"); - break; - case OTA_IMAGE_VERIFY_FALLIED: - printf("Dowloaded image binary checsum is fallied\n"); - break; - case OTA_UPDATE_DONE: - printf("Ota has completed upgrade process, all ready for system software reset\n"); - break; - case OTA_HTTP_OK: - printf("HTTP server has response 200, Ok\n"); - break; - case OTA_HTTP_NOTFOUND: - printf("HTTP server has response 404, file not found\n"); - break; - } -} - -static void ota_task(void *PvParameter) -{ - // Wait until we have joined AP and are assigned an IP * - while (sdk_wifi_station_get_connect_status() != STATION_GOT_IP) - vTaskDelayMs(100); - - while (1) { - OTA_err err; - // Remake this task until ota work - err = ota_update((ota_info *) PvParameter); - - ota_error_handling(err); - - if(err != OTA_UPDATE_DONE) { - vTaskDelayMs(1000); - printf("\n\n\n"); - continue; - } - - vTaskDelayMs(1000); - printf("Delay 1\n"); - vTaskDelayMs(1000); - printf("Delay 2\n"); - vTaskDelayMs(1000); - printf("Delay 3\n"); - - printf("Reset\n"); - sdk_system_restart(); - } -} - -static ota_info info = { - .server = SERVER, - .port = PORT, - .binary_path = BINARY_PATH, - .sha256_path = SHA256_PATH, -}; - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - struct sdk_station_config config = { - .ssid = WIFI_SSID, - .password = WIFI_PASS, - }; - - /* required to call wifi_set_opmode before station_set_config */ - sdk_wifi_set_opmode(STATION_MODE); - sdk_wifi_station_set_config(&config); - - xTaskCreate(ota_task, "get_task", 4096, &info, 2, NULL); -} diff --git a/examples/http_client_ota/test_file/blink.bin b/examples/http_client_ota/test_file/blink.bin deleted file mode 100644 index cb12f1e..0000000 Binary files a/examples/http_client_ota/test_file/blink.bin and /dev/null differ diff --git a/examples/http_client_ota/test_file/blink.sha256 b/examples/http_client_ota/test_file/blink.sha256 deleted file mode 100644 index 5c05557..0000000 --- a/examples/http_client_ota/test_file/blink.sha256 +++ /dev/null @@ -1 +0,0 @@ -57dda900027355de85f0de9e6c966e3c4c16741d8eed134d209c0fb6304cf852 diff --git a/examples/http_get/http_get.c b/examples/http_get/http_get.c index 8e38412..b90abdf 100644 --- a/examples/http_get/http_get.c +++ b/examples/http_get/http_get.c @@ -7,7 +7,6 @@ #include "espressif/esp_common.h" #include "esp/uart.h" -#include #include #include "FreeRTOS.h" @@ -21,9 +20,9 @@ #include "ssid_config.h" -#define WEB_SERVER "httpbin.org" -#define WEB_PORT "80" -#define WEB_PATH "/get" +#define WEB_SERVER "chainxor.org" +#define WEB_PORT 80 +#define WEB_URL "http://chainxor.org/" void http_get_task(void *pvParameters) { @@ -32,50 +31,31 @@ void http_get_task(void *pvParameters) while(1) { const struct addrinfo hints = { - .ai_family = AF_UNSPEC, + .ai_family = AF_INET, .ai_socktype = SOCK_STREAM, }; struct addrinfo *res; printf("Running DNS lookup for %s...\r\n", WEB_SERVER); - int err = getaddrinfo(WEB_SERVER, WEB_PORT, &hints, &res); + int err = getaddrinfo(WEB_SERVER, "80", &hints, &res); - if (err != 0 || res == NULL) { + if(err != 0 || res == NULL) { printf("DNS lookup failed err=%d res=%p\r\n", err, res); if(res) freeaddrinfo(res); - vTaskDelay(1000 / portTICK_PERIOD_MS); + vTaskDelay(1000 / portTICK_RATE_MS); failures++; continue; } - -#if LWIP_IPV6 - { - struct netif *netif = sdk_system_get_netif(0); - int i; - for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { - printf(" ip6 %d state %x\n", i, netif_ip6_addr_state(netif, i)); - if (!ip6_addr_isinvalid(netif_ip6_addr_state(netif, i))) - printf(" ip6 addr %d = %s\n", i, ip6addr_ntoa(netif_ip6_addr(netif, i))); - } - } -#endif - - struct sockaddr *sa = res->ai_addr; - if (sa->sa_family == AF_INET) { - printf("DNS lookup succeeded. IP=%s\r\n", inet_ntoa(((struct sockaddr_in *)sa)->sin_addr)); - } -#if LWIP_IPV6 - if (sa->sa_family == AF_INET6) { - printf("DNS lookup succeeded. IP=%s\r\n", inet6_ntoa(((struct sockaddr_in6 *)sa)->sin6_addr)); - } -#endif + /* Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code */ + struct in_addr *addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr; + printf("DNS lookup succeeded. IP=%s\r\n", inet_ntoa(*addr)); int s = socket(res->ai_family, res->ai_socktype, 0); if(s < 0) { printf("... Failed to allocate socket.\r\n"); freeaddrinfo(res); - vTaskDelay(1000 / portTICK_PERIOD_MS); + vTaskDelay(1000 / portTICK_RATE_MS); failures++; continue; } @@ -86,7 +66,7 @@ void http_get_task(void *pvParameters) close(s); freeaddrinfo(res); printf("... socket connect failed.\r\n"); - vTaskDelay(4000 / portTICK_PERIOD_MS); + vTaskDelay(4000 / portTICK_RATE_MS); failures++; continue; } @@ -95,15 +75,13 @@ void http_get_task(void *pvParameters) freeaddrinfo(res); const char *req = - "GET "WEB_PATH" HTTP/1.1\r\n" - "Host: "WEB_SERVER"\r\n" + "GET "WEB_URL"\r\n" "User-Agent: esp-open-rtos/0.1 esp8266\r\n" - "Connection: close\r\n" "\r\n"; if (write(s, req, strlen(req)) < 0) { printf("... socket send failed\r\n"); close(s); - vTaskDelay(4000 / portTICK_PERIOD_MS); + vTaskDelay(4000 / portTICK_RATE_MS); failures++; continue; } @@ -128,7 +106,7 @@ void http_get_task(void *pvParameters) printf("successes = %d failures = %d\r\n", successes, failures); for(int countdown = 10; countdown >= 0; countdown--) { printf("%d... ", countdown); - vTaskDelay(1000 / portTICK_PERIOD_MS); + vTaskDelay(1000 / portTICK_RATE_MS); } printf("\r\nStarting again!\r\n"); } @@ -148,6 +126,6 @@ void user_init(void) sdk_wifi_set_opmode(STATION_MODE); sdk_wifi_station_set_config(&config); - xTaskCreate(&http_get_task, "get_task", 384, NULL, 2, NULL); + xTaskCreate(&http_get_task, (signed char *)"get_task", 256, NULL, 2, NULL); } diff --git a/examples/http_get_bearssl/Makefile b/examples/http_get_bearssl/Makefile deleted file mode 100644 index 5f0b736..0000000 --- a/examples/http_get_bearssl/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -PROGRAM=http_get_bearssl -EXTRA_COMPONENTS = extras/bearssl - -EXTRA_CFLAGS +=-DCONFIG_EPOCH_TIME=$(shell date --utc '+%s') - -include ../../common.mk diff --git a/examples/http_get_bearssl/http_get_bearssl.c b/examples/http_get_bearssl/http_get_bearssl.c deleted file mode 100644 index 92451ea..0000000 --- a/examples/http_get_bearssl/http_get_bearssl.c +++ /dev/null @@ -1,356 +0,0 @@ -/* http_get_bearssl - HTTPS version of the http_get example, using BearSSL. - * - * Retrieves a JSON response from the howsmyssl.com API via HTTPS over TLS v1.2. - * - * Validates the server's certificate using a hardcoded public key. - * - * Adapted from the client_basic sample in BearSSL. - * - * Original Copyright (c) 2016 Thomas Pornin , MIT License. - * Additions Copyright (C) 2016 Stefan Schake, MIT License. - */ -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "esp/hwrand.h" - -#include -#include - -#include "FreeRTOS.h" -#include "task.h" - -#include "lwip/err.h" -#include "lwip/sockets.h" -#include "lwip/sys.h" -#include "lwip/netdb.h" -#include "lwip/dns.h" -#include "lwip/api.h" - -#include "ssid_config.h" - -#include "bearssl.h" - -#define CLOCK_SECONDS_PER_MINUTE (60UL) -#define CLOCK_MINUTES_PER_HOUR (60UL) -#define CLOCK_HOURS_PER_DAY (24UL) -#define CLOCK_SECONDS_PER_HOUR (CLOCK_MINUTES_PER_HOUR*CLOCK_SECONDS_PER_MINUTE) -#define CLOCK_SECONDS_PER_DAY (CLOCK_HOURS_PER_DAY*CLOCK_SECONDS_PER_HOUR) - -#define WEB_SERVER "www.howsmyssl.com" -#define WEB_PORT "443" -#define WEB_URL "https://www.howsmyssl.com/a/check" - -#define GET_REQUEST "GET "WEB_URL" HTTP/1.1\nHost: "WEB_SERVER"\n\n" - -/* - * Low-level data read callback for the simplified SSL I/O API. - */ -static int -sock_read(void *ctx, unsigned char *buf, size_t len) -{ - for (;;) { - ssize_t rlen; - - rlen = read(*(int *)ctx, buf, len); - if (rlen <= 0) { - if (rlen < 0 && errno == EINTR) { - continue; - } - return -1; - } - return (int)rlen; - } -} - -/* - * Low-level data write callback for the simplified SSL I/O API. - */ -static int -sock_write(void *ctx, const unsigned char *buf, size_t len) -{ - for (;;) { - ssize_t wlen; - - wlen = write(*(int *)ctx, buf, len); - if (wlen <= 0) { - if (wlen < 0 && errno == EINTR) { - continue; - } - return -1; - } - return (int)wlen; - } -} - -/* - * The hardcoded trust anchors. These are the two DN + public key that - * correspond to the self-signed certificates cert-root-rsa.pem and - * cert-root-ec.pem. - * - * C code for hardcoded trust anchors can be generated with the "brssl" - * command-line tool (with the "ta" command). To build that tool run: - * - * $ cd /path/to/esp-open-rtos/extras/bearssl/BearSSL - * $ make build/brssl - * - * Below is the imported "Let's Encrypt" root certificate, as howsmyssl - * is depending on it: - * - * https://letsencrypt.org/certs/letsencryptauthorityx3.pem - * - * The generate the trust anchor code below, run: - * - * $ /path/to/esp-open-rtos/extras/bearssl/BearSSL/build/brssl \ - * ta letsencryptauthorityx3.pem - * - * To get the server certificate for a given https host: - * - * $ openssl s_client -showcerts -servername www.howsmyssl.com \ - * -connect www.howsmyssl.com:443 < /dev/null | \ - * openssl x509 -outform pem > server.pem - */ - -static const unsigned char TA0_DN[] = { - 0x30, 0x4A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, - 0x02, 0x55, 0x53, 0x31, 0x16, 0x30, 0x14, 0x06, 0x03, 0x55, 0x04, 0x0A, - 0x13, 0x0D, 0x4C, 0x65, 0x74, 0x27, 0x73, 0x20, 0x45, 0x6E, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x03, - 0x13, 0x1A, 0x4C, 0x65, 0x74, 0x27, 0x73, 0x20, 0x45, 0x6E, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, - 0x79, 0x20, 0x58, 0x33 -}; - -static const unsigned char TA0_RSA_N[] = { - 0x9C, 0xD3, 0x0C, 0xF0, 0x5A, 0xE5, 0x2E, 0x47, 0xB7, 0x72, 0x5D, 0x37, - 0x83, 0xB3, 0x68, 0x63, 0x30, 0xEA, 0xD7, 0x35, 0x26, 0x19, 0x25, 0xE1, - 0xBD, 0xBE, 0x35, 0xF1, 0x70, 0x92, 0x2F, 0xB7, 0xB8, 0x4B, 0x41, 0x05, - 0xAB, 0xA9, 0x9E, 0x35, 0x08, 0x58, 0xEC, 0xB1, 0x2A, 0xC4, 0x68, 0x87, - 0x0B, 0xA3, 0xE3, 0x75, 0xE4, 0xE6, 0xF3, 0xA7, 0x62, 0x71, 0xBA, 0x79, - 0x81, 0x60, 0x1F, 0xD7, 0x91, 0x9A, 0x9F, 0xF3, 0xD0, 0x78, 0x67, 0x71, - 0xC8, 0x69, 0x0E, 0x95, 0x91, 0xCF, 0xFE, 0xE6, 0x99, 0xE9, 0x60, 0x3C, - 0x48, 0xCC, 0x7E, 0xCA, 0x4D, 0x77, 0x12, 0x24, 0x9D, 0x47, 0x1B, 0x5A, - 0xEB, 0xB9, 0xEC, 0x1E, 0x37, 0x00, 0x1C, 0x9C, 0xAC, 0x7B, 0xA7, 0x05, - 0xEA, 0xCE, 0x4A, 0xEB, 0xBD, 0x41, 0xE5, 0x36, 0x98, 0xB9, 0xCB, 0xFD, - 0x6D, 0x3C, 0x96, 0x68, 0xDF, 0x23, 0x2A, 0x42, 0x90, 0x0C, 0x86, 0x74, - 0x67, 0xC8, 0x7F, 0xA5, 0x9A, 0xB8, 0x52, 0x61, 0x14, 0x13, 0x3F, 0x65, - 0xE9, 0x82, 0x87, 0xCB, 0xDB, 0xFA, 0x0E, 0x56, 0xF6, 0x86, 0x89, 0xF3, - 0x85, 0x3F, 0x97, 0x86, 0xAF, 0xB0, 0xDC, 0x1A, 0xEF, 0x6B, 0x0D, 0x95, - 0x16, 0x7D, 0xC4, 0x2B, 0xA0, 0x65, 0xB2, 0x99, 0x04, 0x36, 0x75, 0x80, - 0x6B, 0xAC, 0x4A, 0xF3, 0x1B, 0x90, 0x49, 0x78, 0x2F, 0xA2, 0x96, 0x4F, - 0x2A, 0x20, 0x25, 0x29, 0x04, 0xC6, 0x74, 0xC0, 0xD0, 0x31, 0xCD, 0x8F, - 0x31, 0x38, 0x95, 0x16, 0xBA, 0xA8, 0x33, 0xB8, 0x43, 0xF1, 0xB1, 0x1F, - 0xC3, 0x30, 0x7F, 0xA2, 0x79, 0x31, 0x13, 0x3D, 0x2D, 0x36, 0xF8, 0xE3, - 0xFC, 0xF2, 0x33, 0x6A, 0xB9, 0x39, 0x31, 0xC5, 0xAF, 0xC4, 0x8D, 0x0D, - 0x1D, 0x64, 0x16, 0x33, 0xAA, 0xFA, 0x84, 0x29, 0xB6, 0xD4, 0x0B, 0xC0, - 0xD8, 0x7D, 0xC3, 0x93 -}; - -static const unsigned char TA0_RSA_E[] = { - 0x01, 0x00, 0x01 -}; - -static const br_x509_trust_anchor TAs[1] = { - { - { (unsigned char *)TA0_DN, sizeof TA0_DN }, - BR_X509_TA_CA, - { - BR_KEYTYPE_RSA, - { .rsa = { - (unsigned char *)TA0_RSA_N, sizeof TA0_RSA_N, - (unsigned char *)TA0_RSA_E, sizeof TA0_RSA_E, - } } - } - } -}; - -#define TAs_NUM 1 - -/* - * Buffer to store a record + BearSSL state - * We use MONO mode to save 16k of RAM. - * This could be even smaller by using max_fragment_len, but - * the howsmyssl.com server doesn't seem to support it. - */ -static unsigned char bearssl_buffer[BR_SSL_BUFSIZE_MONO]; - -static br_ssl_client_context sc; -static br_x509_minimal_context xc; -static br_sslio_context ioc; - -void http_get_task(void *pvParameters) -{ - int successes = 0, failures = 0; - int provisional_time = 0; - - while (1) { - /* - * Wait until we can resolve the DNS for the server, as an indication - * our network is probably working... - */ - const struct addrinfo hints = { - .ai_family = AF_INET, - .ai_socktype = SOCK_STREAM, - }; - struct addrinfo *res = NULL; - int dns_err = 0; - do { - if (res) - freeaddrinfo(res); - vTaskDelay(1000 / portTICK_PERIOD_MS); - dns_err = getaddrinfo(WEB_SERVER, WEB_PORT, &hints, &res); - } while(dns_err != 0 || res == NULL); - - int fd = socket(res->ai_family, res->ai_socktype, 0); - if (fd < 0) { - freeaddrinfo(res); - printf("socket failed\n"); - failures++; - continue; - } - - printf("Initializing BearSSL... "); - br_ssl_client_init_full(&sc, &xc, TAs, TAs_NUM); - - /* - * Set the I/O buffer to the provided array. We allocated a - * buffer large enough for full-duplex behaviour with all - * allowed sizes of SSL records, hence we set the last argument - * to 1 (which means "split the buffer into separate input and - * output areas"). - */ - br_ssl_engine_set_buffer(&sc.eng, bearssl_buffer, sizeof bearssl_buffer, 0); - - /* - * Inject some entropy from the ESP hardware RNG - * This is necessary because we don't support any of the BearSSL methods - */ - for (int i = 0; i < 10; i++) { - int rand = hwrand(); - br_ssl_engine_inject_entropy(&sc.eng, &rand, 4); - } - - /* - * Reset the client context, for a new handshake. We provide the - * target host name: it will be used for the SNI extension. The - * last parameter is 0: we are not trying to resume a session. - */ - br_ssl_client_reset(&sc, WEB_SERVER, 0); - - /* - * Initialise the simplified I/O wrapper context, to use our - * SSL client context, and the two callbacks for socket I/O. - */ - br_sslio_init(&ioc, &sc.eng, sock_read, &fd, sock_write, &fd); - printf("done.\r\n"); - - /* FIXME: set date & time using epoch time precompiler flag for now */ - provisional_time = CONFIG_EPOCH_TIME + (xTaskGetTickCount()/configTICK_RATE_HZ); - xc.days = (provisional_time / CLOCK_SECONDS_PER_DAY) + 719528; - xc.seconds = provisional_time % CLOCK_SECONDS_PER_DAY; - printf("Time: %02i:%02i\r\n", - (int)(xc.seconds / CLOCK_SECONDS_PER_HOUR), - (int)((xc.seconds % CLOCK_SECONDS_PER_HOUR)/CLOCK_SECONDS_PER_MINUTE) - ); - - if (connect(fd, res->ai_addr, res->ai_addrlen) != 0) - { - close(fd); - freeaddrinfo(res); - printf("connect failed\n"); - failures++; - continue; - } - printf("Connected\r\n"); - - /* - * Note that while the context has, at that point, already - * assembled the ClientHello to send, nothing happened on the - * network yet. Real I/O will occur only with the next call. - * - * We write our simple HTTP request. We test the call - * for an error (-1), but this is not strictly necessary, since - * the error state "sticks": if the context fails for any reason - * (e.g. bad server certificate), then it will remain in failed - * state and all subsequent calls will return -1 as well. - */ - if (br_sslio_write_all(&ioc, GET_REQUEST, strlen(GET_REQUEST)) != BR_ERR_OK) { - close(fd); - freeaddrinfo(res); - printf("br_sslio_write_all failed: %d\r\n", br_ssl_engine_last_error(&sc.eng)); - failures++; - continue; - } - - /* - * SSL is a buffered protocol: we make sure that all our request - * bytes are sent onto the wire. - */ - br_sslio_flush(&ioc); - - /* - * Read and print the server response - */ - for (;;) - { - int rlen; - unsigned char buf[128]; - - bzero(buf, 128); - // Leave the final byte for zero termination - rlen = br_sslio_read(&ioc, buf, sizeof(buf) - 1); - - if (rlen < 0) { - break; - } - if (rlen > 0) { - printf("%s", buf); - } - } - - /* - * If reading the response failed for any reason, we detect it here - */ - if (br_ssl_engine_last_error(&sc.eng) != BR_ERR_OK) { - close(fd); - freeaddrinfo(res); - printf("failure, error = %d\r\n", br_ssl_engine_last_error(&sc.eng)); - failures++; - continue; - } - - printf("\r\n\r\nfree heap pre = %u\r\n", xPortGetFreeHeapSize()); - - /* - * Close the connection and start over after a delay - */ - close(fd); - freeaddrinfo(res); - - printf("free heap post = %u\r\n", xPortGetFreeHeapSize()); - - successes++; - printf("successes = %d failures = %d\r\n", successes, failures); - for(int countdown = 10; countdown >= 0; countdown--) { - printf("%d...\n", countdown); - vTaskDelay(1000 / portTICK_PERIOD_MS); - } - printf("Starting again!\r\n\r\n"); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - struct sdk_station_config config = { - .ssid = WIFI_SSID, - .password = WIFI_PASS, - }; - - /* required to call wifi_set_opmode before station_set_config */ - sdk_wifi_set_opmode(STATION_MODE); - sdk_wifi_station_set_config(&config); - - xTaskCreate(&http_get_task, "get_task", 2048, NULL, 2, NULL); -} diff --git a/examples/http_get_mbedtls/Makefile b/examples/http_get_mbedtls/Makefile index 7e7a432..fc9a4fa 100644 --- a/examples/http_get_mbedtls/Makefile +++ b/examples/http_get_mbedtls/Makefile @@ -1,4 +1,4 @@ PROGRAM=http_get_mbedtls -EXTRA_COMPONENTS = extras/mbedtls +COMPONENTS = FreeRTOS lwip core extras/mbedtls include ../../common.mk diff --git a/examples/http_get_mbedtls/http_get_mbedtls.c b/examples/http_get_mbedtls/http_get_mbedtls.c index 0200a66..2cc5c6f 100644 --- a/examples/http_get_mbedtls/http_get_mbedtls.c +++ b/examples/http_get_mbedtls/http_get_mbedtls.c @@ -14,6 +14,8 @@ #include +#include + #include "FreeRTOS.h" #include "task.h" @@ -33,7 +35,7 @@ errors at link time if functions don't exist.) */ #include "mbedtls/config.h" -#include "mbedtls/net_sockets.h" +#include "mbedtls/net.h" #include "mbedtls/debug.h" #include "mbedtls/ssl.h" #include "mbedtls/entropy.h" @@ -92,6 +94,10 @@ void http_get_task(void *pvParameters) unsigned char buf[1024]; const char *pers = "ssl_client1"; + uint64_t total_delta = 0; + uint32_t delta_count = 0; + uint32_t min_delta = UINT32_MAX; + mbedtls_entropy_context entropy; mbedtls_ctr_drbg_context ctr_drbg; mbedtls_ssl_context ssl; @@ -181,7 +187,7 @@ void http_get_task(void *pvParameters) err_t dns_err; ip_addr_t host_ip; do { - vTaskDelay(500 / portTICK_PERIOD_MS); + vTaskDelay(500 / portTICK_RATE_MS); dns_err = netconn_gethostbyname(WEB_SERVER, &host_ip); } while(dns_err != ERR_OK); printf("done.\n"); @@ -210,6 +216,9 @@ void http_get_task(void *pvParameters) */ printf(" . Performing the SSL/TLS handshake..."); + uint32_t before, after; + before = xTaskGetTickCount(); + while((ret = mbedtls_ssl_handshake(&ssl)) != 0) { if(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) @@ -219,6 +228,15 @@ void http_get_task(void *pvParameters) } } + after = xTaskGetTickCount(); + uint32_t delta = after - before; + total_delta += delta; + delta_count += 1; + if(delta < min_delta) { + min_delta = delta; + } + printf("\n\n**** %d tick handshake - average %d min %d ***\n\n", delta, (uint32_t)(total_delta/delta_count), min_delta); + printf(" ok\n"); /* @@ -313,7 +331,7 @@ void http_get_task(void *pvParameters) printf("\n\nsuccesses = %d failures = %d\n", successes, failures); for(int countdown = successes ? 10 : 5; countdown >= 0; countdown--) { printf("%d... ", countdown); - vTaskDelay(1000 / portTICK_PERIOD_MS); + vTaskDelay(1000 / portTICK_RATE_MS); } printf("\nStarting again!\n"); } @@ -333,5 +351,5 @@ void user_init(void) sdk_wifi_set_opmode(STATION_MODE); sdk_wifi_station_set_config(&config); - xTaskCreate(&http_get_task, "get_task", 2048, NULL, 2, NULL); + xTaskCreate(&http_get_task, (signed char *)"get_task", 2048, NULL, 2, NULL); } diff --git a/examples/http_server/Makefile b/examples/http_server/Makefile deleted file mode 100644 index 713083a..0000000 --- a/examples/http_server/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -PROGRAM=http_server - -EXTRA_CFLAGS=-DLWIP_HTTPD_CGI=1 -DLWIP_HTTPD_SSI=1 -I./fsdata - -#Enable debugging -#EXTRA_CFLAGS+=-DLWIP_DEBUG=1 -DHTTPD_DEBUG=LWIP_DBG_ON - -EXTRA_COMPONENTS=extras/mbedtls extras/httpd - -include ../../common.mk - -html: - @echo "Generating fsdata.." - cd fsdata && ./makefsdata diff --git a/examples/http_server/fsdata/fs/404.html b/examples/http_server/fsdata/fs/404.html deleted file mode 100644 index 0a03490..0000000 --- a/examples/http_server/fsdata/fs/404.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - HTTP Server - - - - -
-

404 - Page not found

-
Sorry, the page you are requesting was not found on this server.
-
- - - diff --git a/examples/http_server/fsdata/fs/about.html b/examples/http_server/fsdata/fs/about.html deleted file mode 100644 index 18aad61..0000000 --- a/examples/http_server/fsdata/fs/about.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - HTTP Server - - - - -
-

About

-

This server is based on httpd from LwIP.

-

To enable debugging compile with flags -DLWIP_DEBUG=1 -DHTTPD_DEBUG=LWIP_DBG_ON.

-

For more info see HTTP Server documentation.

-
- - diff --git a/examples/http_server/fsdata/fs/css/siimple.min.css b/examples/http_server/fsdata/fs/css/siimple.min.css deleted file mode 100644 index a52f026..0000000 --- a/examples/http_server/fsdata/fs/css/siimple.min.css +++ /dev/null @@ -1,8 +0,0 @@ -/** - * siimple - Minimal CSS framework for flat and clean designs. - * @version v1.3.7 - * @link https://siimple.juanes.xyz/ - * @license MIT - */ - -@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,300);ol,ol li,p,ul,ul li{line-height:28px}.alert,pre{width:calc(100% - 30px)}.alert,.btn{border-radius:5px}.heart:after{content:"\2764";color:#f45660}body,h1,h2,h3,h4,h5,h6{color:#526475}body{margin:0;padding:0;font-family:'Open Sans';font-size:16px;font-weight:300;background-color:#fff}.alert a,a{text-decoration:none;font-weight:400}blockquote{border-left:4px solid #6a7e95;padding:5px 5px 5px 20px}a{color:#09a0f6;transition:all .3s}a:hover{text-decoration:underline;cursor:pointer}p{margin-bottom:20px;margin-top:0;display:block}ol,ul{margin-bottom:16px;margin-top:0}.alert,h1,h2,h3,h4,h5,h6{font-weight:300;margin-top:0;margin-bottom:20px;display:block}small{color:#6a7e95;font-size:14px}h1{font-size:36px;line-height:50px}h2{font-size:32px;line-height:46px}h3{font-size:28px;line-height:42px}h4{font-size:24px;line-height:38px}h5{font-size:20px;line-height:34px}.alert,.btn,h6{font-size:16px}h6{line-height:30px}.alert{text-align:left;border-width:1px;border-style:solid;background-color:#E1F5FE;color:#03A9F4;border-color:#03A9F4;padding:16px 14px;padding:16px 14px;padding:16px 14px}.btn,.btn-outline{font-family:'Open Sans';font-weight:300;display:inline-block;transition:all .3s;-webkit-touch-callout:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;text-align:center;cursor:pointer;margin:5px 5px 20px}.alert-error{color:#D32F2F;background-color:#FFEBEE;border-color:#F44336}.alert-warning{background-color:#FFF8E1;color:#FF8F00;border-color:#FFC107}.alert-done{background-color:#E8F5E9;color:#388E3C;border-color:#4CAF50}.btn{text-decoration:none!important;line-height:28px;color:#fff;background-color:#09a0f6;border:0;padding:5px 25px}.btn:hover{text-decoration:none;opacity:.8}.btn-small{font-size:14px!important;line-height:20px!important;padding:4px 15px!important}.btn-big{font-size:22px!important;line-height:34px!important;padding:8px 30px!important}.btn-outline,pre{line-height:28px}.btn-outline{font-size:16px;text-decoration:none!important;border-radius:5px;color:#09a0f6;background-color:transparent;border:1px solid #09a0f6;padding:5px 25px}.btn-outline:hover{text-decoration:none;color:#fff;background-color:#09a0f6}code,pre{font-family:'Open Sans';font-size:16px;font-weight:300;border-radius:5px;background-color:#f1f5fa}code{color:#09a0f6;padding-left:6px;padding-right:6px}pre{display:block;padding:14px;margin-bottom:20px;color:#526475;overflow-x:auto}.form-input[disabled],.form-input[type=text],.form-input[type=password],.form-input[type=number],.form-input[type=email],.form-input[type=date]{color:#526475;padding:10px;outline:0;box-sizing:border-box;margin:0 5px 20px;font-family:'Open Sans';font-size:16px;font-weight:300;display:inline-block;transition:all .3s;height:40px}.form-input[type=text],.form-input[type=password],.form-input[type=number],.form-input[type=email]{width:100%;border:1px solid #d1e1e8;border-radius:5px;line-height:40px}.form-input[type=text]:focus,.form-input[type=password]:focus,.form-input[type=number]:focus,.form-input[type=email]:focus{border:1px solid #09a0f6}.form-input[type=date]{border:1px solid #d1e1e8;border-radius:5px;width:auto!important}.form-input[type=date]:focus{border:1px solid #09a0f6}.form-input[disabled]{width:100%;border:1px solid #d1e1e8;border-radius:5px;cursor:not-allowed;background-color:#d1e1e8}.form-input[disabled]:focus{border:1px solid #09a0f6}.form-input[type=submit],.form-input[type=button]{font-family:'Open Sans';font-size:16px;font-weight:300;-webkit-touch-callout:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;text-align:center;text-decoration:none!important;line-height:28px;display:inline-block;cursor:pointer;border-radius:5px;transition:all .3s;color:#fff;background-color:#09a0f6;border:0;margin:5px 5px 20px;padding:5px 25px}.form-select,.form-textarea{font-family:'Open Sans';font-size:16px;display:inline-block;width:100%;transition:all .3s;outline:0;box-sizing:border-box;margin:0 5px 20px;font-weight:300;color:#526475}.form-input[type=submit]:hover,.form-input[type=button]:hover{text-decoration:none;opacity:.8}.form-select{padding:6px 10px 10px;border:1px solid #d1e1e8;border-radius:5px;height:40px;background-color:#fff}.form-select:focus{border:1px solid #09a0f6}.form-textarea{padding:10px;border:1px solid #d1e1e8;border-radius:5px;resize:vertical}.form-textarea:focus{border:1px solid #09a0f6}.form-auto{width:auto!important}.grid{display:block;width:960px;margin-left:auto;margin-right:auto;min-height:40px}@media (max-width:960px){.grid{width:94%}}.grid-fluid,.row{width:100%}.row{display:inline-block;margin-left:0;margin-right:0}.row:after{content:" ";clear:both;display:table;line-height:0}.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-7,.col-8,.col-9{display:inline-block;vertical-align:top;float:left;padding:1%}.col-1{width:6.33%}.col-2{width:14.66%}.col-3{width:22.99%}.col-4{width:31.33%}.col-5{width:39.66%}.col-6{width:47.99%;display:inline-block;vertical-align:top;float:left;padding:1%}.col-7{width:56.33%}.col-8{width:64.66%}.col-9{width:72.99%}.col-10{width:81.33%}.col-11{width:89.66%}.col-12{width:97.99%}@media (max-width:400px){.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9{width:98%}}.table{display:table;width:100%;border-width:0;border-collapse:collapse;font-weight:300;color:#526475;margin-top:0;margin-bottom:20px}.table thead tr td{font-weight:400;border-bottom:2px solid #d1e1e8;background-color:#f6f8fa}.table tr td{border-bottom:1px solid #d1e1e8;padding-top:10px;padding-bottom:10px;padding-left:10px} \ No newline at end of file diff --git a/examples/http_server/fsdata/fs/css/style.css b/examples/http_server/fsdata/fs/css/style.css deleted file mode 100644 index b5b27d6..0000000 --- a/examples/http_server/fsdata/fs/css/style.css +++ /dev/null @@ -1,73 +0,0 @@ -ul.navbar { - list-style-type: none; - margin-bottom: 32px; - padding: 0; - overflow: hidden; - background-color: #333; -} -ul.navbar li { - float: left; -} -ul.navbar li a { - display: block; - color: white; - text-align: center; - padding: 14px 16px; - text-decoration: none; -} -ul.navbar li a:hover:not(.active) { - background-color: #111; -} -ul.navbar li a.active { - background-color: #09a0f6; -} -@media screen and (max-width: 600px){ - ul.navbar li.right, - ul.navbar li {float: none;} -} -.onoffswitch { - position: relative; width: 90px; - -webkit-user-select:none; -moz-user-select:none; -ms-user-select: none; -} -.onoffswitch-checkbox { - display: none; -} -.onoffswitch-label { - display: block; overflow: hidden; cursor: pointer; - border: 2px solid #03A9F4; border-radius: 20px; -} -.onoffswitch-inner { - display: block; width: 200%; margin-left: -100%; - transition: margin 0.3s ease-in 0s; -} -.onoffswitch-inner:before, .onoffswitch-inner:after { - display: block; float: left; width: 50%; height: 30px; padding: 0; line-height: 30px; - font-size: 14px; color: white; font-family: Trebuchet, Arial, sans-serif; font-weight: bold; - box-sizing: border-box; -} -.onoffswitch-inner:before { - content: "ON"; - text-align: left; - padding-left: 14px; - background-color: #E1F5FE; color: #03A9F4; -} -.onoffswitch-inner:after { - content: "OFF"; - padding-right: 14px; - background-color: #FFFFFF; color: #999999; - text-align: right; -} -.onoffswitch-switch { - display: block; width: 18px; margin: 6px; - background: #FFFFFF; - position: absolute; top: 0; bottom: 0; - right: 56px; - border: 2px solid #03A9F4; border-radius: 20px; - transition: all 0.3s ease-in 0s; -} -.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { - margin-left: 0; -} -.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { - right: 0px; -} \ No newline at end of file diff --git a/examples/http_server/fsdata/fs/img/favicon.png b/examples/http_server/fsdata/fs/img/favicon.png deleted file mode 100644 index 126f24b..0000000 Binary files a/examples/http_server/fsdata/fs/img/favicon.png and /dev/null differ diff --git a/examples/http_server/fsdata/fs/index.ssi b/examples/http_server/fsdata/fs/index.ssi deleted file mode 100644 index 3a21206..0000000 --- a/examples/http_server/fsdata/fs/index.ssi +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - HTTP Server - - - - -
-

ESP8266 HTTP Server

- -
HTTP Server is up and running.
- -

This is an example HTTP server with CGI and SSI support. The switch below will allow you to test CGI handler and turn - the blue LED on or off.

- -
-
- - -
-
- -

Server Status

- - - - - - - - - - - - - -
Uptime: seconds
Free heap: bytes
LED state:
- -

How it works

-

Each time the server detects a tag of the form <!--#name--> in a .shtml, .ssi or .shtm file - where name appears as one of the tags supplied to http_set_ssi_handler in the pcConfigSSITags array, - an insert string is appended after the tag string in file and sent back to the client.

-

A CGI handler function is called each time the server is asked for a file - whose name was previously registered as a CGI function using a call to http_set_cgi_handler. - This function allows you to access the parameters provided along with the URI.

-
- - - - diff --git a/examples/http_server/fsdata/fs/js/smoothie_min.js b/examples/http_server/fsdata/fs/js/smoothie_min.js deleted file mode 100644 index 87ce47d..0000000 --- a/examples/http_server/fsdata/fs/js/smoothie_min.js +++ /dev/null @@ -1,15 +0,0 @@ -// MIT License: -// -// Copyright (c) 2010-2013, Joe Walnes -// 2013-2014, Drew Noakes -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -;(function(exports){var Util={extend:function(){arguments[0]=arguments[0]||{};for(var i=1;ithis.maxValue){this.maxValue=value}if(value=0&&this.data[i][0]>timestamp){i-=1}if(i===-1){this.data.splice(0,0,[timestamp,value])}else if(this.data.length>0&&this.data[i][0]===timestamp){if(sumRepeatedTimeStampValues){this.data[i][1]+=value;value=this.data[i][1]}else{this.data[i][1]=value}}else if(i=maxDataSetLength&&this.data[removeCount+1][0]0){timeSeries.resetBoundsTimerId=setInterval(function(){timeSeries.resetBounds()},timeSeries.options.resetBoundsInterval)}};SmoothieChart.prototype.removeTimeSeries=function(timeSeries){var numSeries=this.seriesSet.length;for(var i=0;i0.1||Math.abs(minValueDiff)>0.1;this.currentValueRange+=chartOptions.scaleSmoothing*valueRangeDiff;this.currentVisMinValue+=chartOptions.scaleSmoothing*minValueDiff}this.valueRange={min:chartMinValue,max:chartMaxValue}};SmoothieChart.prototype.render=function(canvas,time){var nowMillis=new Date().getTime();if(!this.isAnimatingScale){var maxIdleMillis=Math.min(1000/6,this.options.millisPerPixel);if(nowMillis-this.lastRenderTimeMillis0){context.beginPath();for(var t=time-(time%chartOptions.grid.millisPerLine);t>=oldestValidTime;t-=chartOptions.grid.millisPerLine){var gx=timeToXPixel(t);if(chartOptions.grid.sharpLines){gx-=0.5}context.moveTo(gx,0);context.lineTo(gx,dimensions.height)}context.stroke();context.closePath()}for(var v=1;v1){if(seriesOptions.fillStyle){context.lineTo(dimensions.width+seriesOptions.lineWidth+1,lastY);context.lineTo(dimensions.width+seriesOptions.lineWidth+1,dimensions.height+seriesOptions.lineWidth+1);context.lineTo(firstX,dimensions.height+seriesOptions.lineWidth);context.fillStyle=seriesOptions.fillStyle;context.fill()}if(seriesOptions.strokeStyle&&seriesOptions.strokeStyle!=='none'){context.stroke()}context.closePath()}context.restore()}if(!chartOptions.labels.disabled&&!isNaN(this.valueRange.min)&&!isNaN(this.valueRange.max)){var maxValueString=chartOptions.yMaxFormatter(this.valueRange.max,chartOptions.labels.precision),minValueString=chartOptions.yMinFormatter(this.valueRange.min,chartOptions.labels.precision),maxLabelPos=chartOptions.scrollBackwards?0:dimensions.width-context.measureText(maxValueString).width-2,minLabelPos=chartOptions.scrollBackwards?0:dimensions.width-context.measureText(minValueString).width-2;context.fillStyle=chartOptions.labels.fillStyle;context.fillText(maxValueString,maxLabelPos,chartOptions.labels.fontSize);context.fillText(minValueString,minLabelPos,dimensions.height-2)}if(chartOptions.timestampFormatter&&chartOptions.grid.millisPerLine>0){var textUntilX=chartOptions.scrollBackwards?context.measureText(minValueString).width:dimensions.width-context.measureText(minValueString).width+4;for(var t=time-(time%chartOptions.grid.millisPerLine);t>=oldestValidTime;t-=chartOptions.grid.millisPerLine){var gx=timeToXPixel(t);if((!chartOptions.scrollBackwards&&gxtextUntilX)){var tx=new Date(t),ts=chartOptions.timestampFormatter(tx),tsWidth=context.measureText(ts).width;textUntilX=chartOptions.scrollBackwards?gx+tsWidth+2:gx-tsWidth-2;context.fillStyle=chartOptions.labels.fillStyle;if(chartOptions.scrollBackwards){context.fillText(ts,gx,dimensions.height-2)}else{context.fillText(ts,gx-tsWidth,dimensions.height-2)}}}}context.restore();};SmoothieChart.timeFormatter=function(date){function pad2(number){return(number<10?'0':'')+number}return pad2(date.getHours())+':'+pad2(date.getMinutes())+':'+pad2(date.getSeconds())};exports.TimeSeries=TimeSeries;exports.SmoothieChart=SmoothieChart})(typeof exports==='undefined'?this:exports); \ No newline at end of file diff --git a/examples/http_server/fsdata/fs/websockets.html b/examples/http_server/fsdata/fs/websockets.html deleted file mode 100644 index 25b02c0..0000000 --- a/examples/http_server/fsdata/fs/websockets.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - HTTP Server - - - - -
-

WebSockets Demo

-
Loading..
-

This page is similar to the home page but uses WebSockets for real-time updates.

-
- -

-

LED Control

-
- - -
-
- -

Server Status

- - - - - - - - - - - - - -
Uptime:
Free heap:
LED state:
- -

How it works

-

This demo uses 2 WebScokets. Status parameters are streamed by the server in JSON format every 2 seconds. - A websocket_task is created each time a specific URI is requested.

-

ADC values are being continuously polled by the client (i.e. your browser). - Each time a WebSocket frame is received on the server side, websocket_cb function is being called.

-
- - - - - diff --git a/examples/http_server/fsdata/fsdata.c b/examples/http_server/fsdata/fsdata.c deleted file mode 100644 index ac0b569..0000000 --- a/examples/http_server/fsdata/fsdata.c +++ /dev/null @@ -1,3240 +0,0 @@ -#include "httpd/fsdata.h" - -static const unsigned char data_index_ssi[] = { - /* /index.ssi */ - 0x2F, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x2E, 0x73, 0x73, 0x69, 0, - 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x32, - 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0D, 0x0A, 0x6C, 0x77, 0x49, - 0x50, 0x2F, 0x31, 0x2E, 0x34, 0x2E, 0x31, 0x20, 0x28, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x61, 0x76, 0x61, - 0x6E, 0x6E, 0x61, 0x68, 0x2E, 0x6E, 0x6F, 0x6E, 0x67, 0x6E, - 0x75, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x70, 0x72, 0x6F, 0x6A, - 0x65, 0x63, 0x74, 0x73, 0x2F, 0x6C, 0x77, 0x69, 0x70, 0x29, - 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, - 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x2F, 0x68, 0x74, 0x6D, 0x6C, 0x0D, 0x0A, 0x0D, 0x0A, 0x3C, - 0x21, 0x44, 0x4F, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, - 0x74, 0x6D, 0x6C, 0x3E, 0x0A, 0x3C, 0x68, 0x74, 0x6D, 0x6C, - 0x3E, 0x0A, 0x09, 0x3C, 0x68, 0x65, 0x61, 0x64, 0x3E, 0x0A, - 0x09, 0x09, 0x3C, 0x6D, 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x3D, 0x22, 0x75, 0x74, 0x66, - 0x2D, 0x38, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x6D, 0x65, - 0x74, 0x61, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x76, - 0x69, 0x65, 0x77, 0x70, 0x6F, 0x72, 0x74, 0x22, 0x20, 0x63, - 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x3D, 0x22, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3D, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x2D, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x2D, 0x73, 0x63, 0x61, 0x6C, 0x61, 0x62, 0x6C, - 0x65, 0x3D, 0x6E, 0x6F, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, - 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, 0x3D, 0x22, - 0x73, 0x74, 0x79, 0x6C, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, - 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, - 0x78, 0x74, 0x2F, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3D, 0x22, 0x63, 0x73, 0x73, 0x2F, 0x73, 0x69, - 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x6D, 0x69, 0x6E, 0x2E, - 0x63, 0x73, 0x73, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x6C, - 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, 0x3D, 0x22, 0x73, - 0x74, 0x79, 0x6C, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x2F, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3D, 0x22, 0x63, 0x73, 0x73, 0x2F, 0x73, 0x74, 0x79, - 0x6C, 0x65, 0x2E, 0x63, 0x73, 0x73, 0x22, 0x3E, 0x0A, 0x09, - 0x09, 0x3C, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, - 0x3D, 0x22, 0x73, 0x68, 0x6F, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3D, 0x22, 0x69, 0x6D, 0x67, 0x2F, 0x66, 0x61, 0x76, - 0x69, 0x63, 0x6F, 0x6E, 0x2E, 0x70, 0x6E, 0x67, 0x22, 0x3E, - 0x0A, 0x09, 0x09, 0x3C, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x3E, - 0x48, 0x54, 0x54, 0x50, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x3C, 0x2F, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x3E, 0x0A, - 0x09, 0x3C, 0x2F, 0x68, 0x65, 0x61, 0x64, 0x3E, 0x0A, 0x09, - 0x3C, 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0A, 0x09, 0x09, 0x3C, - 0x75, 0x6C, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, - 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, 0x22, 0x3E, 0x0A, 0x09, - 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x3E, 0x3C, 0x61, 0x20, 0x63, - 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, 0x22, - 0x2F, 0x22, 0x3E, 0x48, 0x6F, 0x6D, 0x65, 0x3C, 0x2F, 0x61, - 0x3E, 0x3C, 0x2F, 0x6C, 0x69, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x3C, 0x6C, 0x69, 0x3E, 0x3C, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3D, 0x22, 0x77, 0x65, 0x62, 0x73, 0x6F, 0x63, 0x6B, - 0x65, 0x74, 0x73, 0x22, 0x3E, 0x57, 0x65, 0x62, 0x53, 0x6F, - 0x63, 0x6B, 0x65, 0x74, 0x73, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, - 0x2F, 0x6C, 0x69, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x6C, - 0x69, 0x3E, 0x3C, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, - 0x22, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x22, 0x3E, 0x41, 0x62, - 0x6F, 0x75, 0x74, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, 0x6C, - 0x69, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x2F, 0x75, 0x6C, 0x3E, - 0x0A, 0x0A, 0x09, 0x09, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x67, 0x72, 0x69, 0x64, - 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x22, 0x3E, 0x0A, 0x09, 0x09, - 0x09, 0x3C, 0x68, 0x31, 0x3E, 0x45, 0x53, 0x50, 0x38, 0x32, - 0x36, 0x36, 0x20, 0x48, 0x54, 0x54, 0x50, 0x20, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x3C, 0x2F, 0x68, 0x31, 0x3E, 0x0A, - 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x61, 0x6C, 0x65, 0x72, - 0x74, 0x20, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x2D, 0x64, 0x6F, - 0x6E, 0x65, 0x22, 0x3E, 0x48, 0x54, 0x54, 0x50, 0x20, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x75, - 0x70, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x72, 0x75, 0x6E, 0x6E, - 0x69, 0x6E, 0x67, 0x2E, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, - 0x0A, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x70, 0x3E, 0x54, 0x68, - 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6E, 0x20, 0x65, - 0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x48, 0x54, 0x54, - 0x50, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x43, 0x47, 0x49, 0x20, 0x61, 0x6E, - 0x64, 0x20, 0x53, 0x53, 0x49, 0x20, 0x73, 0x75, 0x70, 0x70, - 0x6F, 0x72, 0x74, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x62, 0x65, 0x6C, 0x6F, - 0x77, 0x20, 0x77, 0x69, 0x6C, 0x6C, 0x20, 0x61, 0x6C, 0x6C, - 0x6F, 0x77, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x74, 0x6F, 0x20, - 0x74, 0x65, 0x73, 0x74, 0x20, 0x43, 0x47, 0x49, 0x20, 0x68, - 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x72, 0x20, 0x61, 0x6E, 0x64, - 0x20, 0x74, 0x75, 0x72, 0x6E, 0x0A, 0x09, 0x09, 0x09, 0x74, - 0x68, 0x65, 0x20, 0x62, 0x6C, 0x75, 0x65, 0x20, 0x4C, 0x45, - 0x44, 0x20, 0x6F, 0x6E, 0x20, 0x6F, 0x72, 0x20, 0x6F, 0x66, - 0x66, 0x2E, 0x3C, 0x2F, 0x70, 0x3E, 0x0A, 0x0A, 0x09, 0x09, - 0x09, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, - 0x73, 0x3D, 0x22, 0x63, 0x6F, 0x76, 0x65, 0x72, 0x22, 0x20, - 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3D, 0x22, 0x63, 0x65, 0x6E, - 0x74, 0x65, 0x72, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, - 0x3D, 0x22, 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3D, 0x22, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x62, - 0x6F, 0x78, 0x22, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, - 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x22, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, - 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x2D, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x62, 0x6F, 0x78, - 0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x6C, 0x65, 0x64, 0x2D, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x20, 0x6F, 0x6E, - 0x63, 0x6C, 0x69, 0x63, 0x6B, 0x3D, 0x22, 0x67, 0x70, 0x69, - 0x6F, 0x28, 0x29, 0x3B, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x63, - 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x6E, 0x6F, 0x66, - 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x6C, 0x61, - 0x62, 0x65, 0x6C, 0x22, 0x20, 0x66, 0x6F, 0x72, 0x3D, 0x22, - 0x6C, 0x65, 0x64, 0x2D, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, - 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x3C, - 0x73, 0x70, 0x61, 0x6E, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, - 0x3D, 0x22, 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x2D, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x22, - 0x3E, 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 0x0A, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x73, 0x70, 0x61, 0x6E, - 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x6E, - 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x3E, 0x3C, 0x2F, - 0x73, 0x70, 0x61, 0x6E, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0A, - 0x09, 0x09, 0x09, 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, - 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, - 0x0A, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x68, 0x31, 0x3E, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x3C, 0x2F, 0x68, 0x31, 0x3E, 0x0A, 0x09, 0x09, - 0x09, 0x3C, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x63, 0x6C, - 0x61, 0x73, 0x73, 0x3D, 0x22, 0x74, 0x61, 0x62, 0x6C, 0x65, - 0x20, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x2D, 0x73, 0x74, 0x72, - 0x69, 0x70, 0x65, 0x64, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x74, 0x72, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x74, 0x64, 0x3E, 0x3C, 0x62, 0x3E, 0x55, 0x70, - 0x74, 0x69, 0x6D, 0x65, 0x3A, 0x3C, 0x2F, 0x62, 0x3E, 0x3C, - 0x2F, 0x74, 0x64, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x74, 0x64, 0x3E, 0x3C, 0x21, 0x2D, 0x2D, 0x23, 0x75, - 0x70, 0x74, 0x69, 0x6D, 0x65, 0x2D, 0x2D, 0x3E, 0x20, 0x73, - 0x65, 0x63, 0x6F, 0x6E, 0x64, 0x73, 0x3C, 0x2F, 0x74, 0x64, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x2F, 0x74, 0x72, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x74, 0x72, 0x3E, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x74, 0x64, 0x3E, - 0x3C, 0x62, 0x3E, 0x46, 0x72, 0x65, 0x65, 0x20, 0x68, 0x65, - 0x61, 0x70, 0x3A, 0x3C, 0x2F, 0x62, 0x3E, 0x3C, 0x2F, 0x74, - 0x64, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x74, - 0x64, 0x3E, 0x3C, 0x21, 0x2D, 0x2D, 0x23, 0x68, 0x65, 0x61, - 0x70, 0x2D, 0x2D, 0x3E, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x3C, 0x2F, 0x74, 0x64, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x2F, 0x74, 0x72, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x74, 0x72, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x74, 0x64, 0x3E, 0x3C, 0x62, 0x3E, 0x4C, 0x45, 0x44, - 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3A, 0x3C, 0x2F, 0x62, - 0x3E, 0x3C, 0x2F, 0x74, 0x64, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x3C, 0x74, 0x64, 0x20, 0x69, 0x64, 0x3D, 0x22, - 0x6C, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x3E, - 0x3C, 0x21, 0x2D, 0x2D, 0x23, 0x6C, 0x65, 0x64, 0x2D, 0x2D, - 0x3E, 0x3C, 0x2F, 0x74, 0x64, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x2F, 0x74, 0x72, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x3C, 0x2F, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x3E, 0x0A, 0x0A, - 0x09, 0x09, 0x09, 0x3C, 0x68, 0x31, 0x3E, 0x48, 0x6F, 0x77, - 0x20, 0x69, 0x74, 0x20, 0x77, 0x6F, 0x72, 0x6B, 0x73, 0x3C, - 0x2F, 0x68, 0x31, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x70, - 0x3E, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x74, 0x69, 0x6D, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x73, - 0x20, 0x61, 0x20, 0x74, 0x61, 0x67, 0x20, 0x6F, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x3C, - 0x63, 0x6F, 0x64, 0x65, 0x3E, 0x26, 0x6C, 0x74, 0x3B, 0x21, - 0x2D, 0x2D, 0x23, 0x6E, 0x61, 0x6D, 0x65, 0x2D, 0x2D, 0x26, - 0x67, 0x74, 0x3B, 0x3C, 0x2F, 0x63, 0x6F, 0x64, 0x65, 0x3E, - 0x20, 0x69, 0x6E, 0x20, 0x61, 0x20, 0x2E, 0x73, 0x68, 0x74, - 0x6D, 0x6C, 0x2C, 0x20, 0x2E, 0x73, 0x73, 0x69, 0x20, 0x6F, - 0x72, 0x20, 0x2E, 0x73, 0x68, 0x74, 0x6D, 0x20, 0x66, 0x69, - 0x6C, 0x65, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x77, 0x68, 0x65, - 0x72, 0x65, 0x20, 0x3C, 0x63, 0x6F, 0x64, 0x65, 0x3E, 0x6E, - 0x61, 0x6D, 0x65, 0x3C, 0x2F, 0x63, 0x6F, 0x64, 0x65, 0x3E, - 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, - 0x73, 0x20, 0x6F, 0x6E, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x73, 0x75, - 0x70, 0x70, 0x6C, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, - 0x3C, 0x63, 0x6F, 0x64, 0x65, 0x3E, 0x68, 0x74, 0x74, 0x70, - 0x5F, 0x73, 0x65, 0x74, 0x5F, 0x73, 0x73, 0x69, 0x5F, 0x68, - 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x72, 0x3C, 0x2F, 0x63, 0x6F, - 0x64, 0x65, 0x3E, 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x3C, 0x63, 0x6F, 0x64, 0x65, 0x3E, 0x70, 0x63, 0x43, - 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x53, 0x53, 0x49, 0x54, 0x61, - 0x67, 0x73, 0x3C, 0x2F, 0x63, 0x6F, 0x64, 0x65, 0x3E, 0x20, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x2C, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x61, 0x6E, 0x20, 0x69, 0x6E, 0x73, 0x65, 0x72, 0x74, - 0x20, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x69, 0x73, - 0x20, 0x61, 0x70, 0x70, 0x65, 0x6E, 0x64, 0x65, 0x64, 0x20, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x74, 0x61, 0x67, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, - 0x20, 0x69, 0x6E, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x61, - 0x6E, 0x64, 0x20, 0x73, 0x65, 0x6E, 0x74, 0x20, 0x62, 0x61, - 0x63, 0x6B, 0x20, 0x74, 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x63, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x2E, 0x3C, 0x2F, 0x70, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x70, 0x3E, 0x41, 0x20, - 0x43, 0x47, 0x49, 0x20, 0x68, 0x61, 0x6E, 0x64, 0x6C, 0x65, - 0x72, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x20, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6C, 0x6C, 0x65, 0x64, - 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x74, 0x69, 0x6D, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x20, 0x69, 0x73, 0x20, 0x61, 0x73, 0x6B, 0x65, 0x64, - 0x20, 0x66, 0x6F, 0x72, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6C, - 0x65, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x77, 0x68, 0x6F, 0x73, - 0x65, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x20, 0x77, 0x61, 0x73, - 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x6C, - 0x79, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x43, 0x47, - 0x49, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x20, 0x75, 0x73, 0x69, 0x6E, 0x67, 0x20, 0x61, 0x20, 0x63, - 0x61, 0x6C, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x3C, 0x63, 0x6F, - 0x64, 0x65, 0x3E, 0x68, 0x74, 0x74, 0x70, 0x5F, 0x73, 0x65, - 0x74, 0x5F, 0x63, 0x67, 0x69, 0x5F, 0x68, 0x61, 0x6E, 0x64, - 0x6C, 0x65, 0x72, 0x3C, 0x2F, 0x63, 0x6F, 0x64, 0x65, 0x3E, - 0x2E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, - 0x61, 0x6C, 0x6C, 0x6F, 0x77, 0x73, 0x20, 0x79, 0x6F, 0x75, - 0x20, 0x74, 0x6F, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6D, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x70, 0x72, 0x6F, 0x76, - 0x69, 0x64, 0x65, 0x64, 0x20, 0x61, 0x6C, 0x6F, 0x6E, 0x67, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x55, 0x52, 0x49, 0x2E, 0x3C, 0x2F, 0x70, 0x3E, 0x0A, 0x09, - 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0A, 0x0A, 0x09, - 0x09, 0x3C, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3E, 0x0A, - 0x09, 0x09, 0x09, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x2E, - 0x6F, 0x6E, 0x6C, 0x6F, 0x61, 0x64, 0x20, 0x3D, 0x20, 0x66, - 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x28, 0x29, - 0x20, 0x7B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, - 0x20, 0x6C, 0x73, 0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, - 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x27, 0x6C, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x27, - 0x29, 0x2E, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x48, 0x54, 0x4D, - 0x4C, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x6C, 0x73, 0x20, - 0x3D, 0x20, 0x6C, 0x73, 0x2E, 0x73, 0x70, 0x6C, 0x69, 0x74, - 0x28, 0x2F, 0x2D, 0x2D, 0x3E, 0x2F, 0x29, 0x2E, 0x70, 0x6F, - 0x70, 0x28, 0x29, 0x2E, 0x74, 0x72, 0x69, 0x6D, 0x28, 0x29, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x64, 0x6F, 0x63, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, - 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x27, 0x6C, 0x65, 0x64, 0x2D, 0x73, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x27, 0x29, 0x2E, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x65, - 0x64, 0x20, 0x3D, 0x20, 0x28, 0x6C, 0x73, 0x20, 0x3D, 0x3D, - 0x20, 0x27, 0x4F, 0x6E, 0x27, 0x29, 0x3B, 0x0A, 0x09, 0x09, - 0x09, 0x7D, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x66, 0x75, 0x6E, - 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x67, 0x70, 0x69, 0x6F, - 0x28, 0x29, 0x20, 0x7B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x69, - 0x66, 0x20, 0x28, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, - 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x6C, 0x65, - 0x64, 0x2D, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x27, 0x29, - 0x2E, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x65, 0x64, 0x29, 0x0A, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x77, 0x69, 0x6E, 0x64, 0x6F, - 0x77, 0x2E, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x2E, 0x68, 0x72, 0x65, 0x66, 0x20, 0x3D, 0x20, 0x27, 0x67, - 0x70, 0x69, 0x6F, 0x3F, 0x6F, 0x66, 0x66, 0x3D, 0x32, 0x27, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x65, 0x6C, 0x73, 0x65, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x77, 0x69, 0x6E, 0x64, - 0x6F, 0x77, 0x2E, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x2E, 0x68, 0x72, 0x65, 0x66, 0x20, 0x3D, 0x20, 0x27, - 0x67, 0x70, 0x69, 0x6F, 0x3F, 0x6F, 0x6E, 0x3D, 0x32, 0x27, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x7D, 0x3B, 0x0A, 0x09, 0x09, - 0x3C, 0x2F, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3E, 0x0A, - 0x09, 0x3C, 0x2F, 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0A, 0x3C, - 0x2F, 0x68, 0x74, 0x6D, 0x6C, 0x3E, 0x0A, }; - -static const unsigned char data_404_html[] = { - /* /404.html */ - 0x2F, 0x34, 0x30, 0x34, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0, - 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x34, - 0x30, 0x34, 0x20, 0x46, 0x69, 0x6C, 0x65, 0x20, 0x6E, 0x6F, - 0x74, 0x20, 0x66, 0x6F, 0x75, 0x6E, 0x64, 0x0D, 0x0A, 0x6C, - 0x77, 0x49, 0x50, 0x2F, 0x31, 0x2E, 0x34, 0x2E, 0x31, 0x20, - 0x28, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x61, - 0x76, 0x61, 0x6E, 0x6E, 0x61, 0x68, 0x2E, 0x6E, 0x6F, 0x6E, - 0x67, 0x6E, 0x75, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x70, 0x72, - 0x6F, 0x6A, 0x65, 0x63, 0x74, 0x73, 0x2F, 0x6C, 0x77, 0x69, - 0x70, 0x29, 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, - 0x74, 0x2D, 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x74, 0x65, - 0x78, 0x74, 0x2F, 0x68, 0x74, 0x6D, 0x6C, 0x0D, 0x0A, 0x0D, - 0x0A, 0x3C, 0x21, 0x44, 0x4F, 0x43, 0x54, 0x59, 0x50, 0x45, - 0x20, 0x68, 0x74, 0x6D, 0x6C, 0x3E, 0x0A, 0x3C, 0x68, 0x74, - 0x6D, 0x6C, 0x3E, 0x0A, 0x09, 0x3C, 0x68, 0x65, 0x61, 0x64, - 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x6D, 0x65, 0x74, 0x61, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3D, 0x22, 0x75, - 0x74, 0x66, 0x2D, 0x38, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, - 0x6D, 0x65, 0x74, 0x61, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, - 0x22, 0x76, 0x69, 0x65, 0x77, 0x70, 0x6F, 0x72, 0x74, 0x22, - 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x3D, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3D, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x2D, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x2D, 0x73, 0x63, 0x61, 0x6C, 0x61, - 0x62, 0x6C, 0x65, 0x3D, 0x6E, 0x6F, 0x22, 0x3E, 0x0A, 0x09, - 0x09, 0x3C, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, - 0x3D, 0x22, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x73, 0x68, 0x65, - 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2F, 0x63, 0x73, 0x73, 0x22, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3D, 0x22, 0x63, 0x73, 0x73, 0x2F, - 0x73, 0x69, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x6D, 0x69, - 0x6E, 0x2E, 0x63, 0x73, 0x73, 0x22, 0x3E, 0x0A, 0x09, 0x09, - 0x3C, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, 0x3D, - 0x22, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x73, 0x68, 0x65, 0x65, - 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2F, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3D, 0x22, 0x63, 0x73, 0x73, 0x2F, 0x73, - 0x74, 0x79, 0x6C, 0x65, 0x2E, 0x63, 0x73, 0x73, 0x22, 0x3E, - 0x0A, 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, - 0x65, 0x6C, 0x3D, 0x22, 0x73, 0x68, 0x6F, 0x72, 0x74, 0x63, - 0x75, 0x74, 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x22, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3D, 0x22, 0x69, 0x6D, 0x67, 0x2F, 0x66, - 0x61, 0x76, 0x69, 0x63, 0x6F, 0x6E, 0x2E, 0x70, 0x6E, 0x67, - 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x74, 0x69, 0x74, 0x6C, - 0x65, 0x3E, 0x48, 0x54, 0x54, 0x50, 0x20, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x3C, 0x2F, 0x74, 0x69, 0x74, 0x6C, 0x65, - 0x3E, 0x0A, 0x09, 0x3C, 0x2F, 0x68, 0x65, 0x61, 0x64, 0x3E, - 0x0A, 0x09, 0x3C, 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0A, 0x09, - 0x09, 0x3C, 0x75, 0x6C, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, - 0x3D, 0x22, 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, 0x22, 0x3E, - 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x3E, 0x3C, 0x61, - 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, 0x22, 0x2F, 0x22, 0x3E, - 0x48, 0x6F, 0x6D, 0x65, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, - 0x6C, 0x69, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x6C, 0x69, - 0x3E, 0x3C, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, 0x22, - 0x77, 0x65, 0x62, 0x73, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x73, - 0x22, 0x3E, 0x57, 0x65, 0x62, 0x53, 0x6F, 0x63, 0x6B, 0x65, - 0x74, 0x73, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, 0x6C, 0x69, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x3E, 0x3C, - 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, 0x22, 0x61, 0x62, - 0x6F, 0x75, 0x74, 0x22, 0x3E, 0x41, 0x62, 0x6F, 0x75, 0x74, - 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, 0x6C, 0x69, 0x3E, 0x0A, - 0x09, 0x09, 0x3C, 0x2F, 0x75, 0x6C, 0x3E, 0x0A, 0x0A, 0x09, - 0x09, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, - 0x73, 0x3D, 0x22, 0x67, 0x72, 0x69, 0x64, 0x20, 0x6D, 0x61, - 0x69, 0x6E, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x68, - 0x31, 0x3E, 0x34, 0x30, 0x34, 0x20, 0x2D, 0x20, 0x50, 0x61, - 0x67, 0x65, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x66, 0x6F, 0x75, - 0x6E, 0x64, 0x3C, 0x2F, 0x68, 0x31, 0x3E, 0x0A, 0x09, 0x09, - 0x09, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, - 0x73, 0x3D, 0x22, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x20, 0x61, - 0x6C, 0x65, 0x72, 0x74, 0x2D, 0x65, 0x72, 0x72, 0x6F, 0x72, - 0x22, 0x3E, 0x53, 0x6F, 0x72, 0x72, 0x79, 0x2C, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x79, 0x6F, - 0x75, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x69, 0x6E, 0x67, 0x20, 0x77, 0x61, 0x73, - 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x66, 0x6F, 0x75, 0x6E, 0x64, - 0x20, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2E, 0x3C, 0x2F, 0x64, 0x69, - 0x76, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x76, - 0x3E, 0x0A, 0x09, 0x3C, 0x2F, 0x62, 0x6F, 0x64, 0x79, 0x3E, - 0x0A, 0x3C, 0x2F, 0x68, 0x74, 0x6D, 0x6C, 0x3E, 0x0A, 0x0A, -}; - -static const unsigned char data_websockets_html[] = { - /* /websockets.html */ - 0x2F, 0x77, 0x65, 0x62, 0x73, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x73, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0, - 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x32, - 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0D, 0x0A, 0x6C, 0x77, 0x49, - 0x50, 0x2F, 0x31, 0x2E, 0x34, 0x2E, 0x31, 0x20, 0x28, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x61, 0x76, 0x61, - 0x6E, 0x6E, 0x61, 0x68, 0x2E, 0x6E, 0x6F, 0x6E, 0x67, 0x6E, - 0x75, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x70, 0x72, 0x6F, 0x6A, - 0x65, 0x63, 0x74, 0x73, 0x2F, 0x6C, 0x77, 0x69, 0x70, 0x29, - 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, - 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x2F, 0x68, 0x74, 0x6D, 0x6C, 0x0D, 0x0A, 0x0D, 0x0A, 0x3C, - 0x21, 0x44, 0x4F, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, - 0x74, 0x6D, 0x6C, 0x3E, 0x0A, 0x3C, 0x68, 0x74, 0x6D, 0x6C, - 0x3E, 0x0A, 0x09, 0x3C, 0x68, 0x65, 0x61, 0x64, 0x3E, 0x0A, - 0x09, 0x09, 0x3C, 0x6D, 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x3D, 0x22, 0x75, 0x74, 0x66, - 0x2D, 0x38, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x6D, 0x65, - 0x74, 0x61, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x76, - 0x69, 0x65, 0x77, 0x70, 0x6F, 0x72, 0x74, 0x22, 0x20, 0x63, - 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x3D, 0x22, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3D, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x2D, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x2D, 0x73, 0x63, 0x61, 0x6C, 0x61, 0x62, 0x6C, - 0x65, 0x3D, 0x6E, 0x6F, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, - 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, 0x3D, 0x22, - 0x73, 0x74, 0x79, 0x6C, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, - 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, - 0x78, 0x74, 0x2F, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3D, 0x22, 0x63, 0x73, 0x73, 0x2F, 0x73, 0x69, - 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x6D, 0x69, 0x6E, 0x2E, - 0x63, 0x73, 0x73, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x6C, - 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, 0x3D, 0x22, 0x73, - 0x74, 0x79, 0x6C, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x2F, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3D, 0x22, 0x63, 0x73, 0x73, 0x2F, 0x73, 0x74, 0x79, - 0x6C, 0x65, 0x2E, 0x63, 0x73, 0x73, 0x22, 0x3E, 0x0A, 0x09, - 0x09, 0x3C, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, - 0x3D, 0x22, 0x73, 0x68, 0x6F, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3D, 0x22, 0x69, 0x6D, 0x67, 0x2F, 0x66, 0x61, 0x76, - 0x69, 0x63, 0x6F, 0x6E, 0x2E, 0x70, 0x6E, 0x67, 0x22, 0x3E, - 0x0A, 0x09, 0x09, 0x3C, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x3E, - 0x48, 0x54, 0x54, 0x50, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x3C, 0x2F, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x3E, 0x0A, - 0x09, 0x3C, 0x2F, 0x68, 0x65, 0x61, 0x64, 0x3E, 0x0A, 0x09, - 0x3C, 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0A, 0x09, 0x09, 0x3C, - 0x75, 0x6C, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, - 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, 0x22, 0x3E, 0x0A, 0x09, - 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x3E, 0x3C, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3D, 0x22, 0x2F, 0x22, 0x3E, 0x48, 0x6F, - 0x6D, 0x65, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, 0x6C, 0x69, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x3E, 0x3C, - 0x61, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3D, 0x22, 0x77, 0x65, 0x62, 0x73, 0x6F, 0x63, 0x6B, - 0x65, 0x74, 0x73, 0x22, 0x3E, 0x57, 0x65, 0x62, 0x53, 0x6F, - 0x63, 0x6B, 0x65, 0x74, 0x73, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, - 0x2F, 0x6C, 0x69, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x6C, - 0x69, 0x3E, 0x3C, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, - 0x22, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x22, 0x3E, 0x41, 0x62, - 0x6F, 0x75, 0x74, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, 0x6C, - 0x69, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x2F, 0x75, 0x6C, 0x3E, - 0x0A, 0x0A, 0x09, 0x09, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x67, 0x72, 0x69, 0x64, - 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x22, 0x3E, 0x0A, 0x09, 0x09, - 0x09, 0x3C, 0x68, 0x31, 0x3E, 0x57, 0x65, 0x62, 0x53, 0x6F, - 0x63, 0x6B, 0x65, 0x74, 0x73, 0x20, 0x44, 0x65, 0x6D, 0x6F, - 0x3C, 0x2F, 0x68, 0x31, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, - 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x5F, 0x62, 0x6F, 0x78, 0x22, 0x20, - 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x61, 0x6C, 0x65, - 0x72, 0x74, 0x20, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x2D, 0x69, - 0x6E, 0x66, 0x6F, 0x22, 0x3E, 0x4C, 0x6F, 0x61, 0x64, 0x69, - 0x6E, 0x67, 0x2E, 0x2E, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, - 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x70, 0x3E, 0x54, 0x68, 0x69, - 0x73, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x73, 0x69, 0x6D, 0x69, 0x6C, 0x61, 0x72, 0x20, 0x74, 0x6F, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6F, 0x6D, 0x65, 0x20, - 0x70, 0x61, 0x67, 0x65, 0x20, 0x62, 0x75, 0x74, 0x20, 0x75, - 0x73, 0x65, 0x73, 0x20, 0x57, 0x65, 0x62, 0x53, 0x6F, 0x63, - 0x6B, 0x65, 0x74, 0x73, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x72, - 0x65, 0x61, 0x6C, 0x2D, 0x74, 0x69, 0x6D, 0x65, 0x20, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2E, 0x3C, 0x2F, 0x70, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x64, 0x69, 0x76, 0x20, - 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x63, 0x6F, 0x76, - 0x65, 0x72, 0x22, 0x20, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3D, - 0x22, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x22, 0x3E, 0x0A, - 0x09, 0x09, 0x09, 0x09, 0x3C, 0x63, 0x61, 0x6E, 0x76, 0x61, - 0x73, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x43, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x22, 0x20, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3D, 0x22, 0x35, 0x31, 0x32, 0x22, - 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3D, 0x22, 0x31, - 0x30, 0x30, 0x22, 0x3E, 0x3C, 0x2F, 0x63, 0x61, 0x6E, 0x76, - 0x61, 0x73, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x70, - 0x2F, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x70, 0x3E, - 0x4C, 0x45, 0x44, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, - 0x6C, 0x3C, 0x2F, 0x70, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, - 0x3D, 0x22, 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3D, 0x22, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x62, - 0x6F, 0x78, 0x22, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, - 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x22, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, - 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x2D, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x62, 0x6F, 0x78, - 0x22, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x6C, 0x65, 0x64, 0x2D, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x20, 0x6F, 0x6E, - 0x63, 0x6C, 0x69, 0x63, 0x6B, 0x3D, 0x22, 0x67, 0x70, 0x69, - 0x6F, 0x28, 0x29, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x63, 0x6C, - 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x6E, 0x6F, 0x66, 0x66, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x6C, 0x61, 0x62, - 0x65, 0x6C, 0x22, 0x20, 0x66, 0x6F, 0x72, 0x3D, 0x22, 0x6C, - 0x65, 0x64, 0x2D, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x73, - 0x70, 0x61, 0x6E, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, - 0x22, 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x2D, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x22, 0x3E, - 0x3C, 0x2F, 0x73, 0x70, 0x61, 0x6E, 0x3E, 0x0A, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x3C, 0x73, 0x70, 0x61, 0x6E, 0x20, - 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x6F, 0x6E, 0x6F, - 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x73, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x22, 0x3E, 0x3C, 0x2F, 0x73, - 0x70, 0x61, 0x6E, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x2F, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x3E, 0x0A, 0x09, - 0x09, 0x09, 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0A, - 0x09, 0x09, 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0A, - 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x68, 0x31, 0x3E, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x20, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x3C, 0x2F, 0x68, 0x31, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x3C, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x63, 0x6C, 0x61, - 0x73, 0x73, 0x3D, 0x22, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x20, - 0x74, 0x61, 0x62, 0x6C, 0x65, 0x2D, 0x73, 0x74, 0x72, 0x69, - 0x70, 0x65, 0x64, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x74, 0x72, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x3C, 0x74, 0x64, 0x3E, 0x3C, 0x62, 0x3E, 0x55, 0x70, 0x74, - 0x69, 0x6D, 0x65, 0x3A, 0x3C, 0x2F, 0x62, 0x3E, 0x3C, 0x2F, - 0x74, 0x64, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x3C, - 0x74, 0x64, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x75, 0x70, 0x74, - 0x69, 0x6D, 0x65, 0x22, 0x3E, 0x3C, 0x2F, 0x74, 0x64, 0x3E, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x2F, 0x74, 0x72, 0x3E, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x74, 0x72, 0x3E, 0x0A, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x74, 0x64, 0x3E, 0x3C, - 0x62, 0x3E, 0x46, 0x72, 0x65, 0x65, 0x20, 0x68, 0x65, 0x61, - 0x70, 0x3A, 0x3C, 0x2F, 0x62, 0x3E, 0x3C, 0x2F, 0x74, 0x64, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x74, 0x64, - 0x20, 0x69, 0x64, 0x3D, 0x22, 0x68, 0x65, 0x61, 0x70, 0x22, - 0x3E, 0x3C, 0x2F, 0x74, 0x64, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x2F, 0x74, 0x72, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x74, 0x72, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x3C, 0x74, 0x64, 0x3E, 0x3C, 0x62, 0x3E, 0x4C, 0x45, - 0x44, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3A, 0x3C, 0x2F, - 0x62, 0x3E, 0x3C, 0x2F, 0x74, 0x64, 0x3E, 0x0A, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x3C, 0x74, 0x64, 0x20, 0x69, 0x64, 0x3D, - 0x22, 0x6C, 0x65, 0x64, 0x22, 0x3E, 0x3C, 0x2F, 0x74, 0x64, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x3C, 0x2F, 0x74, 0x72, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x2F, 0x74, 0x61, 0x62, - 0x6C, 0x65, 0x3E, 0x0A, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x68, - 0x31, 0x3E, 0x48, 0x6F, 0x77, 0x20, 0x69, 0x74, 0x20, 0x77, - 0x6F, 0x72, 0x6B, 0x73, 0x3C, 0x2F, 0x68, 0x31, 0x3E, 0x0A, - 0x09, 0x09, 0x09, 0x3C, 0x70, 0x3E, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x64, 0x65, 0x6D, 0x6F, 0x20, 0x75, 0x73, 0x65, 0x73, - 0x20, 0x32, 0x20, 0x57, 0x65, 0x62, 0x53, 0x63, 0x6F, 0x6B, - 0x65, 0x74, 0x73, 0x2E, 0x20, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6D, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6D, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, - 0x69, 0x6E, 0x20, 0x4A, 0x53, 0x4F, 0x4E, 0x20, 0x66, 0x6F, - 0x72, 0x6D, 0x61, 0x74, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x20, 0x32, 0x20, 0x73, 0x65, 0x63, 0x6F, 0x6E, 0x64, 0x73, - 0x2E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x41, 0x20, 0x3C, 0x63, - 0x6F, 0x64, 0x65, 0x3E, 0x77, 0x65, 0x62, 0x73, 0x6F, 0x63, - 0x6B, 0x65, 0x74, 0x5F, 0x74, 0x61, 0x73, 0x6B, 0x3C, 0x2F, - 0x63, 0x6F, 0x64, 0x65, 0x3E, 0x20, 0x69, 0x73, 0x20, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x65, 0x61, 0x63, - 0x68, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20, 0x61, 0x20, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x55, 0x52, - 0x49, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2E, 0x3C, 0x2F, 0x70, 0x3E, 0x0A, - 0x09, 0x09, 0x09, 0x3C, 0x70, 0x3E, 0x41, 0x44, 0x43, 0x20, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x62, 0x65, 0x69, 0x6E, 0x67, 0x20, 0x63, 0x6F, 0x6E, - 0x74, 0x69, 0x6E, 0x75, 0x6F, 0x75, 0x73, 0x6C, 0x79, 0x20, - 0x70, 0x6F, 0x6C, 0x6C, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6C, 0x69, 0x65, 0x6E, 0x74, - 0x20, 0x28, 0x69, 0x2E, 0x65, 0x2E, 0x20, 0x79, 0x6F, 0x75, - 0x72, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x73, 0x65, 0x72, 0x29, - 0x2E, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x45, 0x61, 0x63, 0x68, - 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20, 0x61, 0x20, 0x57, 0x65, - 0x62, 0x53, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x20, 0x66, 0x72, - 0x61, 0x6D, 0x65, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x6F, 0x6E, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, - 0x73, 0x69, 0x64, 0x65, 0x2C, 0x20, 0x3C, 0x63, 0x6F, 0x64, - 0x65, 0x3E, 0x77, 0x65, 0x62, 0x73, 0x6F, 0x63, 0x6B, 0x65, - 0x74, 0x5F, 0x63, 0x62, 0x3C, 0x2F, 0x63, 0x6F, 0x64, 0x65, - 0x3E, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x20, 0x69, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6E, 0x67, 0x20, - 0x63, 0x61, 0x6C, 0x6C, 0x65, 0x64, 0x2E, 0x3C, 0x2F, 0x70, - 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, - 0x0A, 0x0A, 0x09, 0x09, 0x3C, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, - 0x78, 0x74, 0x2F, 0x6A, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x22, 0x20, 0x73, 0x72, 0x63, 0x3D, 0x22, - 0x6A, 0x73, 0x2F, 0x73, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, - 0x65, 0x5F, 0x6D, 0x69, 0x6E, 0x2E, 0x6A, 0x73, 0x22, 0x3E, - 0x3C, 0x2F, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3E, 0x0A, - 0x09, 0x09, 0x3C, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3E, - 0x0A, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x77, 0x73, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x72, - 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3B, 0x0A, 0x09, 0x09, - 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x20, 0x3D, 0x20, 0x6E, 0x65, 0x77, 0x20, 0x54, 0x69, - 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x28, 0x29, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x77, 0x69, 0x6E, 0x64, 0x6F, - 0x77, 0x2E, 0x6F, 0x6E, 0x6C, 0x6F, 0x61, 0x64, 0x20, 0x3D, - 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, - 0x29, 0x20, 0x7B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x77, 0x73, - 0x4F, 0x70, 0x65, 0x6E, 0x28, 0x29, 0x3B, 0x0A, 0x09, 0x09, - 0x09, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6F, 0x6C, - 0x6C, 0x69, 0x6E, 0x67, 0x28, 0x29, 0x3B, 0x0A, 0x09, 0x09, - 0x09, 0x7D, 0x0A, 0x09, 0x09, 0x09, 0x66, 0x75, 0x6E, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x73, 0x65, 0x74, 0x4D, 0x73, - 0x67, 0x28, 0x63, 0x6C, 0x73, 0x2C, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x29, 0x20, 0x7B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x73, - 0x62, 0x6F, 0x78, 0x20, 0x3D, 0x20, 0x64, 0x6F, 0x63, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, - 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x27, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F, 0x62, 0x6F, - 0x78, 0x27, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x73, - 0x62, 0x6F, 0x78, 0x2E, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x4E, - 0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x22, 0x61, 0x6C, 0x65, - 0x72, 0x74, 0x20, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x2D, 0x22, - 0x20, 0x2B, 0x20, 0x63, 0x6C, 0x73, 0x3B, 0x0A, 0x09, 0x09, - 0x09, 0x09, 0x73, 0x62, 0x6F, 0x78, 0x2E, 0x69, 0x6E, 0x6E, - 0x65, 0x72, 0x48, 0x54, 0x4D, 0x4C, 0x20, 0x3D, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x63, - 0x6F, 0x6E, 0x73, 0x6F, 0x6C, 0x65, 0x2E, 0x6C, 0x6F, 0x67, - 0x28, 0x74, 0x65, 0x78, 0x74, 0x29, 0x3B, 0x0A, 0x09, 0x09, - 0x09, 0x7D, 0x0A, 0x09, 0x09, 0x09, 0x66, 0x75, 0x6E, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x50, 0x6F, 0x6C, 0x6C, 0x69, 0x6E, 0x67, 0x28, 0x29, 0x20, - 0x7B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x20, 0x3D, 0x20, 0x6E, 0x65, - 0x77, 0x20, 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, - 0x43, 0x68, 0x61, 0x72, 0x74, 0x28, 0x7B, 0x6D, 0x69, 0x6C, - 0x6C, 0x69, 0x73, 0x50, 0x65, 0x72, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x3A, 0x31, 0x31, 0x2C, 0x67, 0x72, 0x69, 0x64, 0x3A, - 0x7B, 0x66, 0x69, 0x6C, 0x6C, 0x53, 0x74, 0x79, 0x6C, 0x65, - 0x3A, 0x27, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x27, - 0x2C, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x53, 0x74, 0x79, - 0x6C, 0x65, 0x3A, 0x27, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x27, 0x2C, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x56, - 0x69, 0x73, 0x69, 0x62, 0x6C, 0x65, 0x3A, 0x66, 0x61, 0x6C, - 0x73, 0x65, 0x7D, 0x2C, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x3A, 0x7B, 0x66, 0x69, - 0x6C, 0x6C, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3A, 0x27, 0x23, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x27, 0x7D, 0x2C, 0x6D, - 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x31, 0x30, - 0x32, 0x34, 0x2C, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x3A, 0x30, 0x7D, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x2E, 0x61, 0x64, 0x64, - 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x28, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2C, 0x20, 0x7B, - 0x6C, 0x69, 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3A, - 0x32, 0x2C, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x53, 0x74, - 0x79, 0x6C, 0x65, 0x3A, 0x27, 0x23, 0x30, 0x33, 0x61, 0x39, - 0x66, 0x34, 0x27, 0x2C, 0x66, 0x69, 0x6C, 0x6C, 0x53, 0x74, - 0x79, 0x6C, 0x65, 0x3A, 0x27, 0x23, 0x66, 0x31, 0x66, 0x35, - 0x66, 0x61, 0x27, 0x7D, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x63, 0x68, 0x61, 0x72, 0x74, 0x2E, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6D, 0x54, 0x6F, 0x28, 0x64, 0x6F, 0x63, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, - 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x22, 0x63, 0x68, 0x61, 0x72, 0x74, 0x43, 0x61, 0x6E, 0x76, - 0x61, 0x73, 0x22, 0x29, 0x2C, 0x20, 0x35, 0x30, 0x30, 0x29, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x73, 0x65, 0x74, 0x49, - 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C, 0x28, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x29, 0x20, 0x7B, - 0x20, 0x77, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x28, 0x27, - 0x41, 0x27, 0x29, 0x3B, 0x20, 0x7D, 0x2C, 0x20, 0x35, 0x30, - 0x30, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x7D, 0x0A, 0x09, - 0x09, 0x09, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x20, 0x6F, 0x6E, 0x4D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x28, 0x65, 0x76, 0x74, 0x29, 0x20, 0x7B, 0x0A, 0x09, 0x09, - 0x09, 0x09, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, - 0x3D, 0x20, 0x30, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x76, - 0x61, 0x72, 0x20, 0x64, 0x76, 0x20, 0x3D, 0x20, 0x6E, 0x65, - 0x77, 0x20, 0x44, 0x61, 0x74, 0x61, 0x56, 0x69, 0x65, 0x77, - 0x28, 0x65, 0x76, 0x74, 0x2E, 0x64, 0x61, 0x74, 0x61, 0x29, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, - 0x76, 0x61, 0x6C, 0x20, 0x3D, 0x20, 0x64, 0x76, 0x2E, 0x67, - 0x65, 0x74, 0x55, 0x69, 0x6E, 0x74, 0x31, 0x36, 0x28, 0x30, - 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, - 0x28, 0x76, 0x61, 0x6C, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x78, - 0x42, 0x45, 0x45, 0x46, 0x20, 0x7C, 0x7C, 0x20, 0x76, 0x61, - 0x6C, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x78, 0x44, 0x45, 0x41, - 0x44, 0x29, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x63, 0x6F, - 0x6E, 0x73, 0x6F, 0x6C, 0x65, 0x2E, 0x6C, 0x6F, 0x67, 0x28, - 0x22, 0x4C, 0x45, 0x44, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x65, 0x64, 0x22, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x65, 0x6C, 0x73, 0x65, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x61, 0x70, - 0x70, 0x65, 0x6E, 0x64, 0x28, 0x6E, 0x65, 0x77, 0x20, 0x44, - 0x61, 0x74, 0x65, 0x28, 0x29, 0x2E, 0x67, 0x65, 0x74, 0x54, - 0x69, 0x6D, 0x65, 0x28, 0x29, 0x2C, 0x20, 0x76, 0x61, 0x6C, - 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x7D, 0x0A, 0x09, 0x09, - 0x09, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, - 0x77, 0x73, 0x4F, 0x70, 0x65, 0x6E, 0x28, 0x29, 0x20, 0x7B, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x77, - 0x73, 0x20, 0x3D, 0x3D, 0x3D, 0x20, 0x75, 0x6E, 0x64, 0x65, - 0x66, 0x69, 0x6E, 0x65, 0x64, 0x20, 0x7C, 0x7C, 0x20, 0x77, - 0x73, 0x2E, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x20, 0x21, 0x3D, 0x20, 0x30, 0x29, 0x20, 0x7B, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, - 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x29, 0x0A, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x73, 0x65, 0x74, 0x4D, 0x73, - 0x67, 0x28, 0x22, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x22, 0x2C, - 0x20, 0x22, 0x57, 0x65, 0x62, 0x53, 0x6F, 0x63, 0x6B, 0x65, - 0x74, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x2C, - 0x20, 0x72, 0x65, 0x74, 0x72, 0x79, 0x69, 0x6E, 0x67, 0x2E, - 0x2E, 0x22, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x65, 0x6C, 0x73, 0x65, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x73, 0x65, 0x74, 0x4D, 0x73, 0x67, 0x28, 0x22, 0x69, - 0x6E, 0x66, 0x6F, 0x22, 0x2C, 0x20, 0x22, 0x4F, 0x70, 0x65, - 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x57, 0x65, 0x62, 0x53, 0x6F, - 0x63, 0x6B, 0x65, 0x74, 0x2E, 0x2E, 0x22, 0x29, 0x3B, 0x0A, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x77, 0x73, 0x20, 0x3D, 0x20, - 0x6E, 0x65, 0x77, 0x20, 0x57, 0x65, 0x62, 0x53, 0x6F, 0x63, - 0x6B, 0x65, 0x74, 0x28, 0x22, 0x77, 0x73, 0x3A, 0x2F, 0x2F, - 0x22, 0x20, 0x2B, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, - 0x6F, 0x6E, 0x2E, 0x68, 0x6F, 0x73, 0x74, 0x29, 0x3B, 0x0A, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x77, 0x73, 0x2E, 0x62, 0x69, - 0x6E, 0x61, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3D, - 0x20, 0x27, 0x61, 0x72, 0x72, 0x61, 0x79, 0x62, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x27, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x77, 0x73, 0x2E, 0x6F, 0x6E, 0x6F, 0x70, 0x65, 0x6E, - 0x20, 0x3D, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x28, 0x65, 0x76, 0x74, 0x29, 0x20, 0x7B, 0x20, 0x72, - 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x3D, 0x20, 0x30, - 0x3B, 0x20, 0x73, 0x65, 0x74, 0x4D, 0x73, 0x67, 0x28, 0x22, - 0x64, 0x6F, 0x6E, 0x65, 0x22, 0x2C, 0x20, 0x22, 0x57, 0x65, - 0x62, 0x53, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x20, 0x69, 0x73, - 0x20, 0x6F, 0x70, 0x65, 0x6E, 0x2E, 0x22, 0x29, 0x3B, 0x20, - 0x7D, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x77, 0x73, - 0x2E, 0x6F, 0x6E, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x3D, - 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, - 0x65, 0x76, 0x74, 0x29, 0x20, 0x7B, 0x20, 0x73, 0x65, 0x74, - 0x4D, 0x73, 0x67, 0x28, 0x22, 0x65, 0x72, 0x72, 0x6F, 0x72, - 0x22, 0x2C, 0x20, 0x22, 0x57, 0x65, 0x62, 0x53, 0x6F, 0x63, - 0x6B, 0x65, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x21, - 0x22, 0x29, 0x3B, 0x20, 0x7D, 0x3B, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x77, 0x73, 0x2E, 0x6F, 0x6E, 0x6D, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x20, 0x3D, 0x20, 0x66, 0x75, 0x6E, - 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x65, 0x76, 0x74, 0x29, - 0x20, 0x7B, 0x20, 0x6F, 0x6E, 0x4D, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x28, 0x65, 0x76, 0x74, 0x29, 0x3B, 0x20, 0x7D, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x77, 0x73, 0x4F, - 0x70, 0x65, 0x6E, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6D, 0x28, - 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x3D, 0x20, 0x30, 0x3B, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x7D, 0x0A, 0x09, 0x09, 0x09, - 0x7D, 0x0A, 0x09, 0x09, 0x09, 0x66, 0x75, 0x6E, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x20, 0x77, 0x73, 0x4F, 0x70, 0x65, 0x6E, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6D, 0x28, 0x29, 0x20, 0x7B, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x75, - 0x72, 0x69, 0x20, 0x3D, 0x20, 0x22, 0x2F, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6D, 0x22, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x76, - 0x61, 0x72, 0x20, 0x77, 0x73, 0x20, 0x3D, 0x20, 0x6E, 0x65, - 0x77, 0x20, 0x57, 0x65, 0x62, 0x53, 0x6F, 0x63, 0x6B, 0x65, - 0x74, 0x28, 0x22, 0x77, 0x73, 0x3A, 0x2F, 0x2F, 0x22, 0x20, - 0x2B, 0x20, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x2E, 0x68, 0x6F, 0x73, 0x74, 0x20, 0x2B, 0x20, 0x75, 0x72, - 0x69, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x77, 0x73, - 0x2E, 0x6F, 0x6E, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x20, 0x3D, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x28, 0x65, 0x76, 0x74, 0x29, 0x20, 0x7B, 0x0A, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x63, 0x6F, 0x6E, 0x73, 0x6F, 0x6C, - 0x65, 0x2E, 0x6C, 0x6F, 0x67, 0x28, 0x65, 0x76, 0x74, 0x2E, - 0x64, 0x61, 0x74, 0x61, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x74, 0x61, 0x74, - 0x73, 0x20, 0x3D, 0x20, 0x4A, 0x53, 0x4F, 0x4E, 0x2E, 0x70, - 0x61, 0x72, 0x73, 0x65, 0x28, 0x65, 0x76, 0x74, 0x2E, 0x64, - 0x61, 0x74, 0x61, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x63, 0x6F, 0x6E, 0x73, 0x6F, 0x6C, 0x65, 0x2E, 0x6C, - 0x6F, 0x67, 0x28, 0x73, 0x74, 0x61, 0x74, 0x73, 0x29, 0x3B, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x64, 0x6F, 0x63, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, - 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x27, 0x75, 0x70, 0x74, 0x69, 0x6D, 0x65, 0x27, 0x29, 0x2E, - 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x48, 0x54, 0x4D, 0x4C, 0x20, - 0x3D, 0x20, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2E, 0x75, 0x70, - 0x74, 0x69, 0x6D, 0x65, 0x20, 0x2B, 0x20, 0x27, 0x20, 0x73, - 0x65, 0x63, 0x6F, 0x6E, 0x64, 0x73, 0x27, 0x3B, 0x0A, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, - 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, 0x65, 0x6D, - 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, 0x27, 0x68, - 0x65, 0x61, 0x70, 0x27, 0x29, 0x2E, 0x69, 0x6E, 0x6E, 0x65, - 0x72, 0x48, 0x54, 0x4D, 0x4C, 0x20, 0x3D, 0x20, 0x73, 0x74, - 0x61, 0x74, 0x73, 0x2E, 0x68, 0x65, 0x61, 0x70, 0x20, 0x2B, - 0x20, 0x27, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x27, 0x3B, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x64, 0x6F, 0x63, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, 0x74, 0x45, 0x6C, - 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x27, 0x6C, 0x65, 0x64, 0x27, 0x29, 0x2E, 0x69, 0x6E, 0x6E, - 0x65, 0x72, 0x48, 0x54, 0x4D, 0x4C, 0x20, 0x3D, 0x20, 0x28, - 0x73, 0x74, 0x61, 0x74, 0x73, 0x2E, 0x6C, 0x65, 0x64, 0x20, - 0x3D, 0x3D, 0x20, 0x31, 0x29, 0x20, 0x3F, 0x20, 0x27, 0x4F, - 0x6E, 0x27, 0x20, 0x3A, 0x20, 0x27, 0x4F, 0x66, 0x66, 0x27, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x7D, 0x3B, 0x0A, 0x09, - 0x09, 0x09, 0x7D, 0x0A, 0x09, 0x09, 0x09, 0x66, 0x75, 0x6E, - 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x77, 0x73, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x28, 0x64, 0x61, 0x74, 0x61, 0x29, 0x20, - 0x7B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, - 0x77, 0x73, 0x2E, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x20, 0x3D, 0x3D, 0x20, 0x33, 0x20, 0x7C, - 0x7C, 0x20, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x2B, - 0x2B, 0x20, 0x3E, 0x20, 0x35, 0x29, 0x0A, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x77, 0x73, 0x4F, 0x70, 0x65, 0x6E, 0x28, 0x29, - 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x65, 0x6C, 0x73, 0x65, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x73, 0x2E, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, - 0x3D, 0x20, 0x31, 0x29, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x77, 0x73, 0x2E, 0x73, 0x65, 0x6E, 0x64, 0x28, 0x64, 0x61, - 0x74, 0x61, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x7D, 0x0A, - 0x09, 0x09, 0x09, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x20, 0x67, 0x70, 0x69, 0x6F, 0x28, 0x29, 0x20, 0x7B, - 0x0A, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x64, - 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x2E, 0x67, 0x65, - 0x74, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x42, 0x79, - 0x49, 0x64, 0x28, 0x27, 0x6C, 0x65, 0x64, 0x2D, 0x73, 0x77, - 0x69, 0x74, 0x63, 0x68, 0x27, 0x29, 0x2E, 0x63, 0x68, 0x65, - 0x63, 0x6B, 0x65, 0x64, 0x29, 0x0A, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x77, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x28, 0x27, - 0x45, 0x27, 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x65, - 0x6C, 0x73, 0x65, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x77, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x28, 0x27, 0x44, 0x27, - 0x29, 0x3B, 0x0A, 0x09, 0x09, 0x09, 0x7D, 0x0A, 0x09, 0x09, - 0x3C, 0x2F, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3E, 0x0A, - 0x09, 0x3C, 0x2F, 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0A, 0x3C, - 0x2F, 0x68, 0x74, 0x6D, 0x6C, 0x3E, 0x0A, }; - -static const unsigned char data_about_html[] = { - /* /about.html */ - 0x2F, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0, - 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x32, - 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0D, 0x0A, 0x6C, 0x77, 0x49, - 0x50, 0x2F, 0x31, 0x2E, 0x34, 0x2E, 0x31, 0x20, 0x28, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x61, 0x76, 0x61, - 0x6E, 0x6E, 0x61, 0x68, 0x2E, 0x6E, 0x6F, 0x6E, 0x67, 0x6E, - 0x75, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x70, 0x72, 0x6F, 0x6A, - 0x65, 0x63, 0x74, 0x73, 0x2F, 0x6C, 0x77, 0x69, 0x70, 0x29, - 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, - 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x2F, 0x68, 0x74, 0x6D, 0x6C, 0x0D, 0x0A, 0x0D, 0x0A, 0x3C, - 0x21, 0x44, 0x4F, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, - 0x74, 0x6D, 0x6C, 0x3E, 0x0A, 0x3C, 0x68, 0x74, 0x6D, 0x6C, - 0x3E, 0x0A, 0x09, 0x3C, 0x68, 0x65, 0x61, 0x64, 0x3E, 0x0A, - 0x09, 0x09, 0x3C, 0x6D, 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x3D, 0x22, 0x75, 0x74, 0x66, - 0x2D, 0x38, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x6D, 0x65, - 0x74, 0x61, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x3D, 0x22, 0x76, - 0x69, 0x65, 0x77, 0x70, 0x6F, 0x72, 0x74, 0x22, 0x20, 0x63, - 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x3D, 0x22, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3D, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x2D, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x2D, 0x73, 0x63, 0x61, 0x6C, 0x61, 0x62, 0x6C, - 0x65, 0x3D, 0x6E, 0x6F, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, - 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, 0x3D, 0x22, - 0x73, 0x74, 0x79, 0x6C, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, - 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, - 0x78, 0x74, 0x2F, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3D, 0x22, 0x63, 0x73, 0x73, 0x2F, 0x73, 0x69, - 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x6D, 0x69, 0x6E, 0x2E, - 0x63, 0x73, 0x73, 0x22, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x6C, - 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, 0x3D, 0x22, 0x73, - 0x74, 0x79, 0x6C, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x2F, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3D, 0x22, 0x63, 0x73, 0x73, 0x2F, 0x73, 0x74, 0x79, - 0x6C, 0x65, 0x2E, 0x63, 0x73, 0x73, 0x22, 0x3E, 0x0A, 0x09, - 0x09, 0x3C, 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x72, 0x65, 0x6C, - 0x3D, 0x22, 0x73, 0x68, 0x6F, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x20, 0x69, 0x63, 0x6F, 0x6E, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3D, 0x22, 0x69, 0x6D, 0x67, 0x2F, 0x66, 0x61, 0x76, - 0x69, 0x63, 0x6F, 0x6E, 0x2E, 0x70, 0x6E, 0x67, 0x22, 0x3E, - 0x0A, 0x09, 0x09, 0x3C, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x3E, - 0x48, 0x54, 0x54, 0x50, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x3C, 0x2F, 0x74, 0x69, 0x74, 0x6C, 0x65, 0x3E, 0x0A, - 0x09, 0x3C, 0x2F, 0x68, 0x65, 0x61, 0x64, 0x3E, 0x0A, 0x09, - 0x3C, 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0A, 0x09, 0x09, 0x3C, - 0x75, 0x6C, 0x20, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, - 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, 0x22, 0x3E, 0x0A, 0x09, - 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x3E, 0x3C, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3D, 0x22, 0x2F, 0x22, 0x3E, 0x48, 0x6F, - 0x6D, 0x65, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, 0x6C, 0x69, - 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x3E, 0x3C, - 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, 0x22, 0x77, 0x65, - 0x62, 0x73, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x73, 0x22, 0x3E, - 0x57, 0x65, 0x62, 0x53, 0x6F, 0x63, 0x6B, 0x65, 0x74, 0x73, - 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, 0x6C, 0x69, 0x3E, 0x0A, - 0x09, 0x09, 0x09, 0x3C, 0x6C, 0x69, 0x3E, 0x3C, 0x61, 0x20, - 0x63, 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, - 0x22, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x22, 0x3E, 0x41, 0x62, - 0x6F, 0x75, 0x74, 0x3C, 0x2F, 0x61, 0x3E, 0x3C, 0x2F, 0x6C, - 0x69, 0x3E, 0x0A, 0x09, 0x09, 0x3C, 0x2F, 0x75, 0x6C, 0x3E, - 0x0A, 0x0A, 0x09, 0x09, 0x3C, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6C, 0x61, 0x73, 0x73, 0x3D, 0x22, 0x67, 0x72, 0x69, 0x64, - 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x22, 0x3E, 0x0A, 0x09, 0x09, - 0x09, 0x3C, 0x68, 0x31, 0x3E, 0x41, 0x62, 0x6F, 0x75, 0x74, - 0x3C, 0x2F, 0x68, 0x31, 0x3E, 0x0A, 0x09, 0x09, 0x09, 0x3C, - 0x70, 0x3E, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x20, 0x6F, 0x6E, 0x20, 0x68, 0x74, 0x74, 0x70, - 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x4C, 0x77, 0x49, - 0x50, 0x2E, 0x3C, 0x2F, 0x70, 0x3E, 0x0A, 0x09, 0x09, 0x09, - 0x3C, 0x70, 0x3E, 0x54, 0x6F, 0x20, 0x65, 0x6E, 0x61, 0x62, - 0x6C, 0x65, 0x20, 0x64, 0x65, 0x62, 0x75, 0x67, 0x67, 0x69, - 0x6E, 0x67, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x65, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x66, 0x6C, 0x61, 0x67, - 0x73, 0x20, 0x2D, 0x44, 0x4C, 0x57, 0x49, 0x50, 0x5F, 0x44, - 0x45, 0x42, 0x55, 0x47, 0x3D, 0x31, 0x20, 0x2D, 0x44, 0x48, - 0x54, 0x54, 0x50, 0x44, 0x5F, 0x44, 0x45, 0x42, 0x55, 0x47, - 0x3D, 0x4C, 0x57, 0x49, 0x50, 0x5F, 0x44, 0x42, 0x47, 0x5F, - 0x4F, 0x4E, 0x2E, 0x3C, 0x2F, 0x70, 0x3E, 0x0A, 0x09, 0x09, - 0x09, 0x3C, 0x70, 0x3E, 0x46, 0x6F, 0x72, 0x20, 0x6D, 0x6F, - 0x72, 0x65, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x20, 0x73, 0x65, - 0x65, 0x20, 0x3C, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3D, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, - 0x77, 0x2E, 0x6E, 0x6F, 0x6E, 0x67, 0x6E, 0x75, 0x2E, 0x6F, - 0x72, 0x67, 0x2F, 0x6C, 0x77, 0x69, 0x70, 0x2F, 0x32, 0x5F, - 0x30, 0x5F, 0x30, 0x2F, 0x67, 0x72, 0x6F, 0x75, 0x70, 0x5F, - 0x5F, 0x68, 0x74, 0x74, 0x70, 0x64, 0x2E, 0x68, 0x74, 0x6D, - 0x6C, 0x22, 0x3E, 0x48, 0x54, 0x54, 0x50, 0x20, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, - 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3C, 0x2F, - 0x61, 0x3E, 0x2E, 0x3C, 0x2F, 0x70, 0x3E, 0x0A, 0x09, 0x09, - 0x3C, 0x2F, 0x64, 0x69, 0x76, 0x3E, 0x0A, 0x09, 0x3C, 0x2F, - 0x62, 0x6F, 0x64, 0x79, 0x3E, 0x0A, 0x3C, 0x2F, 0x68, 0x74, - 0x6D, 0x6C, 0x3E, 0x0A, }; - -static const unsigned char data_js_smoothie_min_js[] = { - /* /js/smoothie_min.js */ - 0x2F, 0x6A, 0x73, 0x2F, 0x73, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x5F, 0x6D, 0x69, 0x6E, 0x2E, 0x6A, 0x73, 0, - 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x32, - 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0D, 0x0A, 0x6C, 0x77, 0x49, - 0x50, 0x2F, 0x31, 0x2E, 0x34, 0x2E, 0x31, 0x20, 0x28, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x61, 0x76, 0x61, - 0x6E, 0x6E, 0x61, 0x68, 0x2E, 0x6E, 0x6F, 0x6E, 0x67, 0x6E, - 0x75, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x70, 0x72, 0x6F, 0x6A, - 0x65, 0x63, 0x74, 0x73, 0x2F, 0x6C, 0x77, 0x69, 0x70, 0x29, - 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, - 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x61, 0x70, 0x70, 0x6C, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x78, 0x2D, - 0x6A, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x2F, 0x2F, 0x20, 0x4D, - 0x49, 0x54, 0x20, 0x4C, 0x69, 0x63, 0x65, 0x6E, 0x73, 0x65, - 0x3A, 0x0A, 0x2F, 0x2F, 0x0A, 0x2F, 0x2F, 0x20, 0x43, 0x6F, - 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, - 0x29, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2D, 0x32, 0x30, 0x31, - 0x33, 0x2C, 0x20, 0x4A, 0x6F, 0x65, 0x20, 0x57, 0x61, 0x6C, - 0x6E, 0x65, 0x73, 0x0A, 0x2F, 0x2F, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x32, 0x30, 0x31, 0x33, 0x2D, 0x32, 0x30, 0x31, 0x34, - 0x2C, 0x20, 0x44, 0x72, 0x65, 0x77, 0x20, 0x4E, 0x6F, 0x61, - 0x6B, 0x65, 0x73, 0x0A, 0x2F, 0x2F, 0x0A, 0x2F, 0x2F, 0x20, - 0x50, 0x65, 0x72, 0x6D, 0x69, 0x73, 0x73, 0x69, 0x6F, 0x6E, - 0x20, 0x69, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, 0x62, 0x79, - 0x20, 0x67, 0x72, 0x61, 0x6E, 0x74, 0x65, 0x64, 0x2C, 0x20, - 0x66, 0x72, 0x65, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x2C, 0x20, 0x74, 0x6F, 0x20, 0x61, - 0x6E, 0x79, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x20, - 0x6F, 0x62, 0x74, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, - 0x61, 0x20, 0x63, 0x6F, 0x70, 0x79, 0x0A, 0x2F, 0x2F, 0x20, - 0x6F, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6F, - 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6E, 0x64, - 0x20, 0x61, 0x73, 0x73, 0x6F, 0x63, 0x69, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x64, 0x6F, 0x63, 0x75, 0x6D, 0x65, 0x6E, 0x74, - 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x69, 0x6C, 0x65, - 0x73, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x22, 0x53, 0x6F, - 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x29, 0x2C, 0x20, - 0x74, 0x6F, 0x20, 0x64, 0x65, 0x61, 0x6C, 0x0A, 0x2F, 0x2F, - 0x20, 0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6F, - 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x6F, 0x75, 0x74, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, - 0x69, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x69, 0x6E, - 0x63, 0x6C, 0x75, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x6F, 0x75, 0x74, 0x20, 0x6C, 0x69, 0x6D, 0x69, - 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x0A, 0x2F, 0x2F, - 0x20, 0x74, 0x6F, 0x20, 0x75, 0x73, 0x65, 0x2C, 0x20, 0x63, - 0x6F, 0x70, 0x79, 0x2C, 0x20, 0x6D, 0x6F, 0x64, 0x69, 0x66, - 0x79, 0x2C, 0x20, 0x6D, 0x65, 0x72, 0x67, 0x65, 0x2C, 0x20, - 0x70, 0x75, 0x62, 0x6C, 0x69, 0x73, 0x68, 0x2C, 0x20, 0x64, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2C, - 0x20, 0x73, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x65, 0x6E, 0x73, - 0x65, 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x2F, 0x6F, 0x72, 0x20, - 0x73, 0x65, 0x6C, 0x6C, 0x0A, 0x2F, 0x2F, 0x20, 0x63, 0x6F, - 0x70, 0x69, 0x65, 0x73, 0x20, 0x6F, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, - 0x2C, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x70, - 0x65, 0x72, 0x6D, 0x69, 0x74, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x6F, 0x6E, 0x73, 0x20, 0x74, 0x6F, 0x20, 0x77, 0x68, 0x6F, - 0x6D, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6F, 0x66, 0x74, - 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x0A, 0x2F, 0x2F, - 0x20, 0x66, 0x75, 0x72, 0x6E, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x20, 0x74, 0x6F, 0x20, 0x64, 0x6F, 0x20, 0x73, 0x6F, 0x2C, - 0x20, 0x73, 0x75, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x74, - 0x6F, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6F, 0x6C, 0x6C, - 0x6F, 0x77, 0x69, 0x6E, 0x67, 0x20, 0x63, 0x6F, 0x6E, 0x64, - 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x3A, 0x0A, 0x2F, 0x2F, - 0x0A, 0x2F, 0x2F, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x62, - 0x6F, 0x76, 0x65, 0x20, 0x63, 0x6F, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x20, 0x6E, 0x6F, 0x74, 0x69, 0x63, 0x65, - 0x20, 0x61, 0x6E, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x70, 0x65, 0x72, 0x6D, 0x69, 0x73, 0x73, 0x69, 0x6F, 0x6E, - 0x20, 0x6E, 0x6F, 0x74, 0x69, 0x63, 0x65, 0x20, 0x73, 0x68, - 0x61, 0x6C, 0x6C, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6E, 0x63, - 0x6C, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x0A, 0x2F, - 0x2F, 0x20, 0x61, 0x6C, 0x6C, 0x20, 0x63, 0x6F, 0x70, 0x69, - 0x65, 0x73, 0x20, 0x6F, 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, - 0x74, 0x61, 0x6E, 0x74, 0x69, 0x61, 0x6C, 0x20, 0x70, 0x6F, - 0x72, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x20, 0x6F, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x53, 0x6F, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x2E, 0x0A, 0x3B, 0x28, 0x66, 0x75, 0x6E, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x65, 0x78, 0x70, 0x6F, 0x72, - 0x74, 0x73, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x55, 0x74, - 0x69, 0x6C, 0x3D, 0x7B, 0x65, 0x78, 0x74, 0x65, 0x6E, 0x64, - 0x3A, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, - 0x29, 0x7B, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, - 0x73, 0x5B, 0x30, 0x5D, 0x3D, 0x61, 0x72, 0x67, 0x75, 0x6D, - 0x65, 0x6E, 0x74, 0x73, 0x5B, 0x30, 0x5D, 0x7C, 0x7C, 0x7B, - 0x7D, 0x3B, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, - 0x69, 0x3D, 0x31, 0x3B, 0x69, 0x3C, 0x61, 0x72, 0x67, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x2E, 0x6C, 0x65, 0x6E, 0x67, - 0x74, 0x68, 0x3B, 0x69, 0x2B, 0x3D, 0x31, 0x29, 0x7B, 0x66, - 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x6B, 0x65, 0x79, - 0x20, 0x69, 0x6E, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, - 0x6E, 0x74, 0x73, 0x5B, 0x69, 0x5D, 0x29, 0x7B, 0x69, 0x66, - 0x28, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, - 0x5B, 0x69, 0x5D, 0x2E, 0x68, 0x61, 0x73, 0x4F, 0x77, 0x6E, - 0x50, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x28, 0x6B, - 0x65, 0x79, 0x29, 0x29, 0x7B, 0x69, 0x66, 0x28, 0x74, 0x79, - 0x70, 0x65, 0x6F, 0x66, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6D, - 0x65, 0x6E, 0x74, 0x73, 0x5B, 0x69, 0x5D, 0x5B, 0x6B, 0x65, - 0x79, 0x5D, 0x29, 0x3D, 0x3D, 0x3D, 0x27, 0x6F, 0x62, 0x6A, - 0x65, 0x63, 0x74, 0x27, 0x29, 0x7B, 0x69, 0x66, 0x28, 0x61, - 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x5B, 0x69, - 0x5D, 0x5B, 0x6B, 0x65, 0x79, 0x5D, 0x69, 0x6E, 0x73, 0x74, - 0x61, 0x6E, 0x63, 0x65, 0x6F, 0x66, 0x20, 0x41, 0x72, 0x72, - 0x61, 0x79, 0x29, 0x7B, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, - 0x6E, 0x74, 0x73, 0x5B, 0x30, 0x5D, 0x5B, 0x6B, 0x65, 0x79, - 0x5D, 0x3D, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, - 0x73, 0x5B, 0x69, 0x5D, 0x5B, 0x6B, 0x65, 0x79, 0x5D, 0x7D, - 0x65, 0x6C, 0x73, 0x65, 0x7B, 0x61, 0x72, 0x67, 0x75, 0x6D, - 0x65, 0x6E, 0x74, 0x73, 0x5B, 0x30, 0x5D, 0x5B, 0x6B, 0x65, - 0x79, 0x5D, 0x3D, 0x55, 0x74, 0x69, 0x6C, 0x2E, 0x65, 0x78, - 0x74, 0x65, 0x6E, 0x64, 0x28, 0x61, 0x72, 0x67, 0x75, 0x6D, - 0x65, 0x6E, 0x74, 0x73, 0x5B, 0x30, 0x5D, 0x5B, 0x6B, 0x65, - 0x79, 0x5D, 0x2C, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, 0x6E, - 0x74, 0x73, 0x5B, 0x69, 0x5D, 0x5B, 0x6B, 0x65, 0x79, 0x5D, - 0x29, 0x7D, 0x7D, 0x65, 0x6C, 0x73, 0x65, 0x7B, 0x61, 0x72, - 0x67, 0x75, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x5B, 0x30, 0x5D, - 0x5B, 0x6B, 0x65, 0x79, 0x5D, 0x3D, 0x61, 0x72, 0x67, 0x75, - 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x5B, 0x69, 0x5D, 0x5B, 0x6B, - 0x65, 0x79, 0x5D, 0x7D, 0x7D, 0x7D, 0x7D, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, - 0x6E, 0x74, 0x73, 0x5B, 0x30, 0x5D, 0x7D, 0x7D, 0x3B, 0x66, - 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x54, 0x69, - 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x28, 0x6F, - 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x29, 0x7B, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, - 0x3D, 0x55, 0x74, 0x69, 0x6C, 0x2E, 0x65, 0x78, 0x74, 0x65, - 0x6E, 0x64, 0x28, 0x7B, 0x7D, 0x2C, 0x54, 0x69, 0x6D, 0x65, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6C, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2C, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x29, - 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x63, 0x6C, 0x65, 0x61, - 0x72, 0x28, 0x29, 0x7D, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x2E, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6C, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x3D, - 0x7B, 0x72, 0x65, 0x73, 0x65, 0x74, 0x42, 0x6F, 0x75, 0x6E, - 0x64, 0x73, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C, - 0x3A, 0x33, 0x30, 0x30, 0x30, 0x2C, 0x72, 0x65, 0x73, 0x65, - 0x74, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x3A, 0x74, 0x72, - 0x75, 0x65, 0x7D, 0x3B, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x2E, 0x70, 0x72, 0x6F, 0x74, 0x6F, - 0x74, 0x79, 0x70, 0x65, 0x2E, 0x63, 0x6C, 0x65, 0x61, 0x72, - 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, - 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, - 0x61, 0x3D, 0x5B, 0x5D, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x4E, - 0x75, 0x6D, 0x62, 0x65, 0x72, 0x2E, 0x4E, 0x61, 0x4E, 0x3B, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6D, 0x69, 0x6E, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x3D, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, - 0x2E, 0x4E, 0x61, 0x4E, 0x3B, 0x7D, 0x3B, 0x54, 0x69, 0x6D, - 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x70, 0x72, - 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x2E, 0x72, 0x65, - 0x73, 0x65, 0x74, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x3D, - 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x29, - 0x7B, 0x69, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, - 0x61, 0x74, 0x61, 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, - 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6D, 0x61, 0x78, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x64, 0x61, 0x74, 0x61, 0x5B, 0x30, 0x5D, 0x5B, 0x31, - 0x5D, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6D, 0x69, 0x6E, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x64, 0x61, 0x74, 0x61, 0x5B, 0x30, 0x5D, 0x5B, 0x31, - 0x5D, 0x3B, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, - 0x69, 0x3D, 0x31, 0x3B, 0x69, 0x3C, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x64, 0x61, 0x74, 0x61, 0x2E, 0x6C, 0x65, 0x6E, 0x67, - 0x74, 0x68, 0x3B, 0x69, 0x2B, 0x3D, 0x31, 0x29, 0x7B, 0x76, - 0x61, 0x72, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, 0x5B, 0x69, - 0x5D, 0x5B, 0x31, 0x5D, 0x3B, 0x69, 0x66, 0x28, 0x76, 0x61, - 0x6C, 0x75, 0x65, 0x3E, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6D, - 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x7B, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, - 0x75, 0x65, 0x3D, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x69, - 0x66, 0x28, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3C, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6D, 0x69, - 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x76, 0x61, 0x6C, - 0x75, 0x65, 0x7D, 0x7D, 0x7D, 0x65, 0x6C, 0x73, 0x65, 0x7B, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6D, 0x61, 0x78, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x3D, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, - 0x2E, 0x4E, 0x61, 0x4E, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x4E, - 0x75, 0x6D, 0x62, 0x65, 0x72, 0x2E, 0x4E, 0x61, 0x4E, 0x7D, - 0x7D, 0x3B, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x2E, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, - 0x70, 0x65, 0x2E, 0x61, 0x70, 0x70, 0x65, 0x6E, 0x64, 0x3D, - 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x74, - 0x69, 0x6D, 0x65, 0x73, 0x74, 0x61, 0x6D, 0x70, 0x2C, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x73, 0x75, 0x6D, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6D, 0x65, - 0x53, 0x74, 0x61, 0x6D, 0x70, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x73, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x69, 0x3D, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, 0x2E, 0x6C, - 0x65, 0x6E, 0x67, 0x74, 0x68, 0x2D, 0x31, 0x3B, 0x77, 0x68, - 0x69, 0x6C, 0x65, 0x28, 0x69, 0x3E, 0x3D, 0x30, 0x26, 0x26, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, 0x5B, - 0x69, 0x5D, 0x5B, 0x30, 0x5D, 0x3E, 0x74, 0x69, 0x6D, 0x65, - 0x73, 0x74, 0x61, 0x6D, 0x70, 0x29, 0x7B, 0x69, 0x2D, 0x3D, - 0x31, 0x7D, 0x69, 0x66, 0x28, 0x69, 0x3D, 0x3D, 0x3D, 0x2D, - 0x31, 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, - 0x74, 0x61, 0x2E, 0x73, 0x70, 0x6C, 0x69, 0x63, 0x65, 0x28, - 0x30, 0x2C, 0x30, 0x2C, 0x5B, 0x74, 0x69, 0x6D, 0x65, 0x73, - 0x74, 0x61, 0x6D, 0x70, 0x2C, 0x76, 0x61, 0x6C, 0x75, 0x65, - 0x5D, 0x29, 0x7D, 0x65, 0x6C, 0x73, 0x65, 0x20, 0x69, 0x66, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, - 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x3E, 0x30, 0x26, - 0x26, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, - 0x5B, 0x69, 0x5D, 0x5B, 0x30, 0x5D, 0x3D, 0x3D, 0x3D, 0x74, - 0x69, 0x6D, 0x65, 0x73, 0x74, 0x61, 0x6D, 0x70, 0x29, 0x7B, - 0x69, 0x66, 0x28, 0x73, 0x75, 0x6D, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x74, - 0x61, 0x6D, 0x70, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x29, - 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, - 0x5B, 0x69, 0x5D, 0x5B, 0x31, 0x5D, 0x2B, 0x3D, 0x76, 0x61, - 0x6C, 0x75, 0x65, 0x3B, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3D, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, 0x5B, - 0x69, 0x5D, 0x5B, 0x31, 0x5D, 0x7D, 0x65, 0x6C, 0x73, 0x65, - 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, - 0x5B, 0x69, 0x5D, 0x5B, 0x31, 0x5D, 0x3D, 0x76, 0x61, 0x6C, - 0x75, 0x65, 0x7D, 0x7D, 0x65, 0x6C, 0x73, 0x65, 0x20, 0x69, - 0x66, 0x28, 0x69, 0x3C, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, - 0x61, 0x74, 0x61, 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, - 0x2D, 0x31, 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, - 0x61, 0x74, 0x61, 0x2E, 0x73, 0x70, 0x6C, 0x69, 0x63, 0x65, - 0x28, 0x69, 0x2B, 0x31, 0x2C, 0x30, 0x2C, 0x5B, 0x74, 0x69, - 0x6D, 0x65, 0x73, 0x74, 0x61, 0x6D, 0x70, 0x2C, 0x76, 0x61, - 0x6C, 0x75, 0x65, 0x5D, 0x29, 0x7D, 0x65, 0x6C, 0x73, 0x65, - 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, - 0x2E, 0x70, 0x75, 0x73, 0x68, 0x28, 0x5B, 0x74, 0x69, 0x6D, - 0x65, 0x73, 0x74, 0x61, 0x6D, 0x70, 0x2C, 0x76, 0x61, 0x6C, - 0x75, 0x65, 0x5D, 0x29, 0x7D, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x69, - 0x73, 0x4E, 0x61, 0x4E, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x3F, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x4D, 0x61, 0x74, 0x68, - 0x2E, 0x6D, 0x61, 0x78, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x29, 0x3B, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, - 0x69, 0x73, 0x4E, 0x61, 0x4E, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x29, - 0x3F, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x3A, 0x4D, 0x61, 0x74, - 0x68, 0x2E, 0x6D, 0x69, 0x6E, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x2C, - 0x76, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x7D, 0x3B, 0x54, 0x69, - 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x70, - 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x2E, 0x64, - 0x72, 0x6F, 0x70, 0x4F, 0x6C, 0x64, 0x44, 0x61, 0x74, 0x61, - 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, - 0x6F, 0x6C, 0x64, 0x65, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, - 0x64, 0x54, 0x69, 0x6D, 0x65, 0x2C, 0x6D, 0x61, 0x78, 0x44, - 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x4C, 0x65, 0x6E, 0x67, - 0x74, 0x68, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, - 0x6D, 0x6F, 0x76, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x3D, - 0x30, 0x3B, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x64, 0x61, 0x74, 0x61, 0x2E, 0x6C, 0x65, - 0x6E, 0x67, 0x74, 0x68, 0x2D, 0x72, 0x65, 0x6D, 0x6F, 0x76, - 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x3E, 0x3D, 0x6D, 0x61, - 0x78, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x4C, 0x65, - 0x6E, 0x67, 0x74, 0x68, 0x26, 0x26, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x64, 0x61, 0x74, 0x61, 0x5B, 0x72, 0x65, 0x6D, 0x6F, - 0x76, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x2B, 0x31, 0x5D, - 0x5B, 0x30, 0x5D, 0x3C, 0x6F, 0x6C, 0x64, 0x65, 0x73, 0x74, - 0x56, 0x61, 0x6C, 0x69, 0x64, 0x54, 0x69, 0x6D, 0x65, 0x29, - 0x7B, 0x72, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x43, 0x6F, 0x75, - 0x6E, 0x74, 0x2B, 0x3D, 0x31, 0x7D, 0x69, 0x66, 0x28, 0x72, - 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, - 0x21, 0x3D, 0x3D, 0x30, 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x64, 0x61, 0x74, 0x61, 0x2E, 0x73, 0x70, 0x6C, 0x69, - 0x63, 0x65, 0x28, 0x30, 0x2C, 0x72, 0x65, 0x6D, 0x6F, 0x76, - 0x65, 0x43, 0x6F, 0x75, 0x6E, 0x74, 0x29, 0x7D, 0x7D, 0x3B, - 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x53, - 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, - 0x72, 0x74, 0x28, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, - 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x3D, 0x55, 0x74, 0x69, 0x6C, 0x2E, - 0x65, 0x78, 0x74, 0x65, 0x6E, 0x64, 0x28, 0x7B, 0x7D, 0x2C, - 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, - 0x61, 0x72, 0x74, 0x2E, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6C, - 0x74, 0x43, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, - 0x6F, 0x6E, 0x73, 0x2C, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x29, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x3D, 0x5B, 0x5D, - 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6E, 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, - 0x6E, 0x67, 0x65, 0x3D, 0x31, 0x3B, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x56, 0x69, - 0x73, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, - 0x30, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6C, 0x61, 0x73, - 0x74, 0x52, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x54, 0x69, 0x6D, - 0x65, 0x4D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x3D, 0x30, 0x7D, - 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, - 0x61, 0x72, 0x74, 0x2E, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6C, - 0x74, 0x43, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, - 0x6F, 0x6E, 0x73, 0x3D, 0x7B, 0x6D, 0x69, 0x6C, 0x6C, 0x69, - 0x73, 0x50, 0x65, 0x72, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x3A, - 0x32, 0x30, 0x2C, 0x65, 0x6E, 0x61, 0x62, 0x6C, 0x65, 0x44, - 0x70, 0x69, 0x53, 0x63, 0x61, 0x6C, 0x69, 0x6E, 0x67, 0x3A, - 0x74, 0x72, 0x75, 0x65, 0x2C, 0x79, 0x4D, 0x69, 0x6E, 0x46, - 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x3A, 0x66, - 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x6D, 0x69, - 0x6E, 0x2C, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6F, - 0x6E, 0x29, 0x7B, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, - 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x6C, 0x6F, 0x61, 0x74, - 0x28, 0x6D, 0x69, 0x6E, 0x29, 0x2E, 0x74, 0x6F, 0x46, 0x69, - 0x78, 0x65, 0x64, 0x28, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6F, 0x6E, 0x29, 0x7D, 0x2C, 0x79, 0x4D, 0x61, 0x78, - 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x3A, - 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x6D, - 0x61, 0x78, 0x2C, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6F, 0x6E, 0x29, 0x7B, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x6C, 0x6F, 0x61, - 0x74, 0x28, 0x6D, 0x61, 0x78, 0x29, 0x2E, 0x74, 0x6F, 0x46, - 0x69, 0x78, 0x65, 0x64, 0x28, 0x70, 0x72, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6F, 0x6E, 0x29, 0x7D, 0x2C, 0x6D, 0x61, 0x78, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x53, 0x63, 0x61, 0x6C, 0x65, - 0x3A, 0x31, 0x2C, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x53, 0x63, 0x61, 0x6C, 0x65, 0x3A, 0x31, 0x2C, 0x69, - 0x6E, 0x74, 0x65, 0x72, 0x70, 0x6F, 0x6C, 0x61, 0x74, 0x69, - 0x6F, 0x6E, 0x3A, 0x27, 0x62, 0x65, 0x7A, 0x69, 0x65, 0x72, - 0x27, 0x2C, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x53, 0x6D, 0x6F, - 0x6F, 0x74, 0x68, 0x69, 0x6E, 0x67, 0x3A, 0x30, 0x2E, 0x31, - 0x32, 0x35, 0x2C, 0x6D, 0x61, 0x78, 0x44, 0x61, 0x74, 0x61, - 0x53, 0x65, 0x74, 0x4C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x3A, - 0x32, 0x2C, 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0x42, 0x61, - 0x63, 0x6B, 0x77, 0x61, 0x72, 0x64, 0x73, 0x3A, 0x66, 0x61, - 0x6C, 0x73, 0x65, 0x2C, 0x67, 0x72, 0x69, 0x64, 0x3A, 0x7B, - 0x66, 0x69, 0x6C, 0x6C, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3A, - 0x27, 0x23, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x27, 0x2C, - 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x53, 0x74, 0x79, 0x6C, - 0x65, 0x3A, 0x27, 0x23, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, - 0x27, 0x2C, 0x6C, 0x69, 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, - 0x68, 0x3A, 0x31, 0x2C, 0x73, 0x68, 0x61, 0x72, 0x70, 0x4C, - 0x69, 0x6E, 0x65, 0x73, 0x3A, 0x66, 0x61, 0x6C, 0x73, 0x65, - 0x2C, 0x6D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x50, 0x65, 0x72, - 0x4C, 0x69, 0x6E, 0x65, 0x3A, 0x31, 0x30, 0x30, 0x30, 0x2C, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x53, 0x65, - 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x3A, 0x32, 0x2C, 0x62, - 0x6F, 0x72, 0x64, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, - 0x6C, 0x65, 0x3A, 0x74, 0x72, 0x75, 0x65, 0x7D, 0x2C, 0x6C, - 0x61, 0x62, 0x65, 0x6C, 0x73, 0x3A, 0x7B, 0x66, 0x69, 0x6C, - 0x6C, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3A, 0x27, 0x23, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x27, 0x2C, 0x64, 0x69, 0x73, - 0x61, 0x62, 0x6C, 0x65, 0x64, 0x3A, 0x66, 0x61, 0x6C, 0x73, - 0x65, 0x2C, 0x66, 0x6F, 0x6E, 0x74, 0x53, 0x69, 0x7A, 0x65, - 0x3A, 0x31, 0x30, 0x2C, 0x66, 0x6F, 0x6E, 0x74, 0x46, 0x61, - 0x6D, 0x69, 0x6C, 0x79, 0x3A, 0x27, 0x6D, 0x6F, 0x6E, 0x6F, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x27, 0x2C, 0x70, 0x72, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6F, 0x6E, 0x3A, 0x32, 0x7D, 0x2C, - 0x68, 0x6F, 0x72, 0x69, 0x7A, 0x6F, 0x6E, 0x74, 0x61, 0x6C, - 0x4C, 0x69, 0x6E, 0x65, 0x73, 0x3A, 0x5B, 0x5D, 0x7D, 0x3B, - 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, - 0x61, 0x72, 0x74, 0x2E, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, - 0x65, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, - 0x6C, 0x69, 0x74, 0x79, 0x3D, 0x28, 0x66, 0x75, 0x6E, 0x63, - 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x29, 0x7B, 0x76, 0x61, 0x72, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6E, - 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, 0x72, 0x61, - 0x6D, 0x65, 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x28, 0x63, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, - 0x2C, 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x29, 0x7B, - 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x46, 0x72, 0x61, 0x6D, 0x65, 0x3D, 0x77, 0x69, 0x6E, 0x64, - 0x6F, 0x77, 0x2E, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, - 0x72, 0x61, 0x6D, 0x65, 0x7C, 0x7C, 0x77, 0x69, 0x6E, 0x64, - 0x6F, 0x77, 0x2E, 0x77, 0x65, 0x62, 0x6B, 0x69, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6E, 0x69, 0x6D, - 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, 0x72, 0x61, 0x6D, 0x65, - 0x7C, 0x7C, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x2E, 0x6D, - 0x6F, 0x7A, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, - 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, 0x72, - 0x61, 0x6D, 0x65, 0x7C, 0x7C, 0x77, 0x69, 0x6E, 0x64, 0x6F, - 0x77, 0x2E, 0x6F, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, - 0x72, 0x61, 0x6D, 0x65, 0x7C, 0x7C, 0x77, 0x69, 0x6E, 0x64, - 0x6F, 0x77, 0x2E, 0x6D, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x7C, 0x7C, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x63, 0x61, 0x6C, - 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x29, 0x7B, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x20, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, - 0x2E, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, - 0x74, 0x28, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x28, 0x29, 0x7B, 0x63, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, - 0x6B, 0x28, 0x6E, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, - 0x28, 0x29, 0x2E, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6D, 0x65, - 0x28, 0x29, 0x29, 0x7D, 0x2C, 0x31, 0x36, 0x29, 0x7D, 0x3B, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x2E, 0x63, - 0x61, 0x6C, 0x6C, 0x28, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, - 0x2C, 0x63, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x2C, - 0x65, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x29, 0x7D, 0x2C, - 0x63, 0x61, 0x6E, 0x63, 0x65, 0x6C, 0x41, 0x6E, 0x69, 0x6D, - 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, 0x72, 0x61, 0x6D, 0x65, - 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, - 0x69, 0x64, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x63, 0x61, - 0x6E, 0x63, 0x65, 0x6C, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x3D, 0x77, - 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x2E, 0x63, 0x61, 0x6E, 0x63, - 0x65, 0x6C, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x7C, 0x7C, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x69, 0x64, 0x29, - 0x7B, 0x63, 0x6C, 0x65, 0x61, 0x72, 0x54, 0x69, 0x6D, 0x65, - 0x6F, 0x75, 0x74, 0x28, 0x69, 0x64, 0x29, 0x7D, 0x3B, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x63, 0x61, 0x6E, 0x63, - 0x65, 0x6C, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x2E, 0x63, 0x61, 0x6C, - 0x6C, 0x28, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x2C, 0x69, - 0x64, 0x29, 0x7D, 0x3B, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x7B, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6E, - 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, 0x72, 0x61, - 0x6D, 0x65, 0x3A, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, - 0x72, 0x61, 0x6D, 0x65, 0x2C, 0x63, 0x61, 0x6E, 0x63, 0x65, - 0x6C, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x46, 0x72, 0x61, 0x6D, 0x65, 0x3A, 0x63, 0x61, 0x6E, 0x63, - 0x65, 0x6C, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x46, 0x72, 0x61, 0x6D, 0x65, 0x7D, 0x7D, 0x29, 0x28, - 0x29, 0x3B, 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, - 0x43, 0x68, 0x61, 0x72, 0x74, 0x2E, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6C, 0x74, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, - 0x72, 0x65, 0x73, 0x65, 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x3D, 0x7B, - 0x6C, 0x69, 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3A, - 0x31, 0x2C, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x53, 0x74, - 0x79, 0x6C, 0x65, 0x3A, 0x27, 0x23, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x27, 0x7D, 0x3B, 0x53, 0x6D, 0x6F, 0x6F, 0x74, - 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, 0x2E, 0x70, - 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x2E, 0x61, - 0x64, 0x64, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x28, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x2C, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, - 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x2E, 0x70, 0x75, 0x73, - 0x68, 0x28, 0x7B, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x3A, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x2C, 0x6F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x3A, 0x55, 0x74, 0x69, 0x6C, 0x2E, 0x65, 0x78, - 0x74, 0x65, 0x6E, 0x64, 0x28, 0x7B, 0x7D, 0x2C, 0x53, 0x6D, - 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, - 0x74, 0x2E, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, - 0x6E, 0x74, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2C, 0x6F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x29, 0x7D, 0x29, 0x3B, 0x69, 0x66, 0x28, 0x74, - 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, - 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x72, 0x65, - 0x73, 0x65, 0x74, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x26, - 0x26, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x2E, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, - 0x72, 0x65, 0x73, 0x65, 0x74, 0x42, 0x6F, 0x75, 0x6E, 0x64, - 0x73, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C, 0x3E, - 0x30, 0x29, 0x7B, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x2E, 0x72, 0x65, 0x73, 0x65, 0x74, 0x42, - 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x54, 0x69, 0x6D, 0x65, 0x72, - 0x49, 0x64, 0x3D, 0x73, 0x65, 0x74, 0x49, 0x6E, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6C, 0x28, 0x66, 0x75, 0x6E, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x28, 0x29, 0x7B, 0x74, 0x69, 0x6D, 0x65, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x72, 0x65, 0x73, - 0x65, 0x74, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x28, 0x29, - 0x7D, 0x2C, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x2E, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, - 0x2E, 0x72, 0x65, 0x73, 0x65, 0x74, 0x42, 0x6F, 0x75, 0x6E, - 0x64, 0x73, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C, - 0x29, 0x7D, 0x7D, 0x3B, 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, - 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, 0x2E, 0x70, 0x72, - 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x2E, 0x72, 0x65, - 0x6D, 0x6F, 0x76, 0x65, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x28, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, - 0x6E, 0x75, 0x6D, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x3D, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x53, 0x65, 0x74, 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, - 0x68, 0x3B, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, - 0x69, 0x3D, 0x30, 0x3B, 0x69, 0x3C, 0x6E, 0x75, 0x6D, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x3B, 0x69, 0x2B, 0x3D, 0x31, - 0x29, 0x7B, 0x69, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x5B, - 0x69, 0x5D, 0x2E, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x3D, 0x3D, 0x3D, 0x74, 0x69, 0x6D, 0x65, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x29, 0x7B, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, - 0x65, 0x74, 0x2E, 0x73, 0x70, 0x6C, 0x69, 0x63, 0x65, 0x28, - 0x69, 0x2C, 0x31, 0x29, 0x3B, 0x62, 0x72, 0x65, 0x61, 0x6B, - 0x7D, 0x7D, 0x69, 0x66, 0x28, 0x74, 0x69, 0x6D, 0x65, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x72, 0x65, 0x73, 0x65, - 0x74, 0x42, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x54, 0x69, 0x6D, - 0x65, 0x72, 0x49, 0x64, 0x29, 0x7B, 0x63, 0x6C, 0x65, 0x61, - 0x72, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6C, 0x28, - 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x2E, 0x72, 0x65, 0x73, 0x65, 0x74, 0x42, 0x6F, 0x75, 0x6E, - 0x64, 0x73, 0x54, 0x69, 0x6D, 0x65, 0x72, 0x49, 0x64, 0x29, - 0x7D, 0x7D, 0x3B, 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, - 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, 0x2E, 0x70, 0x72, 0x6F, - 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x2E, 0x67, 0x65, 0x74, - 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x3D, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x74, 0x69, 0x6D, - 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x29, 0x7B, 0x76, - 0x61, 0x72, 0x20, 0x6E, 0x75, 0x6D, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x3D, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x2E, 0x6C, 0x65, - 0x6E, 0x67, 0x74, 0x68, 0x3B, 0x66, 0x6F, 0x72, 0x28, 0x76, - 0x61, 0x72, 0x20, 0x69, 0x3D, 0x30, 0x3B, 0x69, 0x3C, 0x6E, - 0x75, 0x6D, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x3B, 0x69, - 0x2B, 0x3D, 0x31, 0x29, 0x7B, 0x69, 0x66, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, - 0x65, 0x74, 0x5B, 0x69, 0x5D, 0x2E, 0x74, 0x69, 0x6D, 0x65, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x3D, 0x3D, 0x3D, 0x74, - 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x29, - 0x7B, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, - 0x65, 0x74, 0x5B, 0x69, 0x5D, 0x2E, 0x6F, 0x70, 0x74, 0x69, - 0x6F, 0x6E, 0x73, 0x7D, 0x7D, 0x7D, 0x3B, 0x53, 0x6D, 0x6F, - 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, - 0x2E, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, - 0x2E, 0x62, 0x72, 0x69, 0x6E, 0x67, 0x54, 0x6F, 0x46, 0x72, - 0x6F, 0x6E, 0x74, 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, - 0x6F, 0x6E, 0x28, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x6E, - 0x75, 0x6D, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x3D, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x53, 0x65, 0x74, 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, - 0x3B, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, - 0x3D, 0x30, 0x3B, 0x69, 0x3C, 0x6E, 0x75, 0x6D, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x3B, 0x69, 0x2B, 0x3D, 0x31, 0x29, - 0x7B, 0x69, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x5B, 0x69, - 0x5D, 0x2E, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x3D, 0x3D, 0x3D, 0x74, 0x69, 0x6D, 0x65, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x29, 0x7B, 0x76, 0x61, 0x72, - 0x20, 0x73, 0x65, 0x74, 0x3D, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x2E, - 0x73, 0x70, 0x6C, 0x69, 0x63, 0x65, 0x28, 0x69, 0x2C, 0x31, - 0x29, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x2E, 0x70, 0x75, 0x73, - 0x68, 0x28, 0x73, 0x65, 0x74, 0x5B, 0x30, 0x5D, 0x29, 0x3B, - 0x62, 0x72, 0x65, 0x61, 0x6B, 0x7D, 0x7D, 0x7D, 0x3B, 0x53, - 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, - 0x72, 0x74, 0x2E, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, - 0x70, 0x65, 0x2E, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D, 0x54, - 0x6F, 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x28, 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2C, 0x64, 0x65, - 0x6C, 0x61, 0x79, 0x4D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x29, - 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x63, 0x61, 0x6E, 0x76, - 0x61, 0x73, 0x3D, 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x3B, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x64, 0x65, 0x6C, 0x61, 0x79, - 0x3D, 0x64, 0x65, 0x6C, 0x61, 0x79, 0x4D, 0x69, 0x6C, 0x6C, - 0x69, 0x73, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x28, 0x29, 0x7D, 0x3B, 0x53, 0x6D, 0x6F, - 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, - 0x2E, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, - 0x2E, 0x72, 0x65, 0x73, 0x69, 0x7A, 0x65, 0x3D, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x29, 0x7B, 0x69, - 0x66, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6F, 0x70, - 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x65, 0x6E, 0x61, 0x62, - 0x6C, 0x65, 0x44, 0x70, 0x69, 0x53, 0x63, 0x61, 0x6C, 0x69, - 0x6E, 0x67, 0x7C, 0x7C, 0x21, 0x77, 0x69, 0x6E, 0x64, 0x6F, - 0x77, 0x7C, 0x7C, 0x77, 0x69, 0x6E, 0x64, 0x6F, 0x77, 0x2E, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x52, 0x61, 0x74, 0x69, 0x6F, 0x3D, 0x3D, 0x3D, 0x31, - 0x29, 0x7B, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x7D, 0x76, - 0x61, 0x72, 0x20, 0x64, 0x70, 0x72, 0x3D, 0x77, 0x69, 0x6E, - 0x64, 0x6F, 0x77, 0x2E, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x69, 0x78, 0x65, 0x6C, 0x52, 0x61, 0x74, 0x69, 0x6F, - 0x3B, 0x76, 0x61, 0x72, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3D, 0x70, 0x61, 0x72, 0x73, 0x65, 0x49, 0x6E, 0x74, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x63, 0x61, 0x6E, 0x76, 0x61, - 0x73, 0x2E, 0x67, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x28, 0x27, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x27, 0x29, 0x29, 0x3B, 0x76, 0x61, 0x72, 0x20, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3D, 0x70, 0x61, 0x72, 0x73, - 0x65, 0x49, 0x6E, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2E, 0x67, 0x65, 0x74, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, - 0x27, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x27, 0x29, 0x29, - 0x3B, 0x69, 0x66, 0x28, 0x21, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x6F, 0x72, 0x69, 0x67, 0x69, 0x6E, 0x61, 0x6C, 0x57, 0x69, - 0x64, 0x74, 0x68, 0x7C, 0x7C, 0x28, 0x4D, 0x61, 0x74, 0x68, - 0x2E, 0x66, 0x6C, 0x6F, 0x6F, 0x72, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2E, 0x6F, 0x72, 0x69, 0x67, 0x69, 0x6E, 0x61, 0x6C, - 0x57, 0x69, 0x64, 0x74, 0x68, 0x2A, 0x64, 0x70, 0x72, 0x29, - 0x21, 0x3D, 0x3D, 0x77, 0x69, 0x64, 0x74, 0x68, 0x29, 0x29, - 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6F, 0x72, 0x69, 0x67, - 0x69, 0x6E, 0x61, 0x6C, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3D, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3B, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2E, 0x73, 0x65, - 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x28, 0x27, 0x77, 0x69, 0x64, 0x74, 0x68, 0x27, 0x2C, 0x28, - 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x66, 0x6C, 0x6F, 0x6F, 0x72, - 0x28, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2A, 0x64, 0x70, 0x72, - 0x29, 0x29, 0x2E, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, - 0x67, 0x28, 0x29, 0x29, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2E, 0x73, 0x74, 0x79, - 0x6C, 0x65, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3D, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x2B, 0x27, 0x70, 0x78, 0x27, 0x3B, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x63, 0x61, 0x6E, 0x76, 0x61, - 0x73, 0x2E, 0x67, 0x65, 0x74, 0x43, 0x6F, 0x6E, 0x74, 0x65, - 0x78, 0x74, 0x28, 0x27, 0x32, 0x64, 0x27, 0x29, 0x2E, 0x73, - 0x63, 0x61, 0x6C, 0x65, 0x28, 0x64, 0x70, 0x72, 0x2C, 0x64, - 0x70, 0x72, 0x29, 0x7D, 0x69, 0x66, 0x28, 0x21, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x6F, 0x72, 0x69, 0x67, 0x69, 0x6E, 0x61, - 0x6C, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7C, 0x7C, 0x28, - 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x66, 0x6C, 0x6F, 0x6F, 0x72, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6F, 0x72, 0x69, 0x67, - 0x69, 0x6E, 0x61, 0x6C, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x2A, 0x64, 0x70, 0x72, 0x29, 0x21, 0x3D, 0x3D, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x29, 0x29, 0x7B, 0x74, 0x68, 0x69, - 0x73, 0x2E, 0x6F, 0x72, 0x69, 0x67, 0x69, 0x6E, 0x61, 0x6C, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3D, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x63, - 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2E, 0x73, 0x65, 0x74, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x28, 0x27, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x27, 0x2C, 0x28, 0x4D, - 0x61, 0x74, 0x68, 0x2E, 0x66, 0x6C, 0x6F, 0x6F, 0x72, 0x28, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2A, 0x64, 0x70, 0x72, - 0x29, 0x29, 0x2E, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, - 0x67, 0x28, 0x29, 0x29, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2E, 0x73, 0x74, 0x79, - 0x6C, 0x65, 0x2E, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3D, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2B, 0x27, 0x70, 0x78, - 0x27, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x63, 0x61, 0x6E, - 0x76, 0x61, 0x73, 0x2E, 0x67, 0x65, 0x74, 0x43, 0x6F, 0x6E, - 0x74, 0x65, 0x78, 0x74, 0x28, 0x27, 0x32, 0x64, 0x27, 0x29, - 0x2E, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x28, 0x64, 0x70, 0x72, - 0x2C, 0x64, 0x70, 0x72, 0x29, 0x7D, 0x7D, 0x3B, 0x53, 0x6D, - 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, - 0x74, 0x2E, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, - 0x65, 0x2E, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3D, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x29, 0x7B, 0x69, - 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x66, 0x72, 0x61, - 0x6D, 0x65, 0x29, 0x7B, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x7D, 0x76, 0x61, 0x72, 0x20, 0x61, 0x6E, 0x69, 0x6D, 0x61, - 0x74, 0x65, 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x28, 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x66, - 0x72, 0x61, 0x6D, 0x65, 0x3D, 0x53, 0x6D, 0x6F, 0x6F, 0x74, - 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, 0x2E, 0x41, - 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x65, 0x43, 0x6F, 0x6D, 0x70, - 0x61, 0x74, 0x69, 0x62, 0x69, 0x6C, 0x69, 0x74, 0x79, 0x2E, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x6E, 0x69, - 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, 0x72, 0x61, 0x6D, - 0x65, 0x28, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x28, 0x29, 0x7B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x72, 0x65, - 0x6E, 0x64, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x61, 0x6E, 0x69, - 0x6D, 0x61, 0x74, 0x65, 0x28, 0x29, 0x7D, 0x2E, 0x62, 0x69, - 0x6E, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x29, 0x7D, - 0x2E, 0x62, 0x69, 0x6E, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x29, 0x3B, 0x61, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x65, 0x28, - 0x29, 0x7D, 0x3B, 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, - 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, 0x2E, 0x70, 0x72, 0x6F, - 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x2E, 0x73, 0x74, 0x6F, - 0x70, 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x28, 0x29, 0x7B, 0x69, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x66, 0x72, 0x61, 0x6D, 0x65, 0x29, 0x7B, 0x53, 0x6D, - 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, - 0x74, 0x2E, 0x41, 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x65, 0x43, - 0x6F, 0x6D, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6C, 0x69, - 0x74, 0x79, 0x2E, 0x63, 0x61, 0x6E, 0x63, 0x65, 0x6C, 0x41, - 0x6E, 0x69, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x46, 0x72, - 0x61, 0x6D, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x66, - 0x72, 0x61, 0x6D, 0x65, 0x29, 0x3B, 0x64, 0x65, 0x6C, 0x65, - 0x74, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x66, 0x72, - 0x61, 0x6D, 0x65, 0x7D, 0x7D, 0x3B, 0x53, 0x6D, 0x6F, 0x6F, - 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, 0x2E, - 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x2E, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x3D, 0x66, 0x75, 0x6E, - 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x29, 0x7B, 0x76, 0x61, - 0x72, 0x20, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x3D, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2C, 0x63, 0x68, - 0x61, 0x72, 0x74, 0x4D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x3D, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x2E, 0x4E, - 0x61, 0x4E, 0x2C, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x69, - 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x4E, 0x75, 0x6D, - 0x62, 0x65, 0x72, 0x2E, 0x4E, 0x61, 0x4E, 0x3B, 0x66, 0x6F, - 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x64, 0x3D, 0x30, 0x3B, - 0x64, 0x3C, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x2E, 0x6C, 0x65, 0x6E, - 0x67, 0x74, 0x68, 0x3B, 0x64, 0x2B, 0x3D, 0x31, 0x29, 0x7B, - 0x76, 0x61, 0x72, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x3D, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x5B, - 0x64, 0x5D, 0x2E, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x3B, 0x69, 0x66, 0x28, 0x21, 0x69, 0x73, - 0x4E, 0x61, 0x4E, 0x28, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x2E, 0x6D, 0x61, 0x78, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x29, 0x29, 0x7B, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, - 0x21, 0x69, 0x73, 0x4E, 0x61, 0x4E, 0x28, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x29, 0x3F, 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x6D, 0x61, 0x78, - 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x61, 0x78, 0x56, - 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x74, 0x69, 0x6D, 0x65, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x6D, 0x61, 0x78, 0x56, - 0x61, 0x6C, 0x75, 0x65, 0x29, 0x3A, 0x74, 0x69, 0x6D, 0x65, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x6D, 0x61, 0x78, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x69, 0x66, 0x28, 0x21, - 0x69, 0x73, 0x4E, 0x61, 0x4E, 0x28, 0x74, 0x69, 0x6D, 0x65, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x6D, 0x69, 0x6E, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x29, 0x7B, 0x63, 0x68, - 0x61, 0x72, 0x74, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x3D, 0x21, 0x69, 0x73, 0x4E, 0x61, 0x4E, 0x28, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, - 0x75, 0x65, 0x29, 0x3F, 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x6D, - 0x69, 0x6E, 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x69, - 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x74, 0x69, 0x6D, - 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x6D, 0x69, - 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x3A, 0x74, 0x69, - 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x6D, - 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x7D, 0x69, - 0x66, 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6D, 0x61, 0x78, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x21, 0x3D, 0x6E, 0x75, 0x6C, 0x6C, 0x29, - 0x7B, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x61, 0x78, 0x56, - 0x61, 0x6C, 0x75, 0x65, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6D, 0x61, - 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x65, 0x6C, 0x73, - 0x65, 0x7B, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x61, 0x78, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x2A, 0x3D, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, - 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x53, 0x63, - 0x61, 0x6C, 0x65, 0x7D, 0x69, 0x66, 0x28, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, - 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x21, 0x3D, - 0x6E, 0x75, 0x6C, 0x6C, 0x29, 0x7B, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x7D, 0x65, 0x6C, 0x73, 0x65, 0x7B, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x2D, 0x3D, 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x61, 0x62, 0x73, - 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x69, 0x6E, 0x56, - 0x61, 0x6C, 0x75, 0x65, 0x2A, 0x63, 0x68, 0x61, 0x72, 0x74, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6D, 0x69, - 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x53, 0x63, 0x61, 0x6C, - 0x65, 0x2D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x69, 0x6E, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x7D, 0x69, 0x66, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x79, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x46, - 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x29, 0x7B, 0x76, - 0x61, 0x72, 0x20, 0x72, 0x61, 0x6E, 0x67, 0x65, 0x3D, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x79, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x46, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x7B, 0x6D, 0x69, - 0x6E, 0x3A, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x69, 0x6E, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x6D, 0x61, 0x78, 0x3A, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x61, 0x78, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x7D, 0x29, 0x3B, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3D, - 0x72, 0x61, 0x6E, 0x67, 0x65, 0x2E, 0x6D, 0x69, 0x6E, 0x3B, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x61, 0x78, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x3D, 0x72, 0x61, 0x6E, 0x67, 0x65, 0x2E, - 0x6D, 0x61, 0x78, 0x7D, 0x69, 0x66, 0x28, 0x21, 0x69, 0x73, - 0x4E, 0x61, 0x4E, 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, - 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x26, 0x26, - 0x21, 0x69, 0x73, 0x4E, 0x61, 0x4E, 0x28, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, - 0x29, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, - 0x6E, 0x67, 0x65, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, - 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x2D, 0x63, 0x68, - 0x61, 0x72, 0x74, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x3B, 0x76, 0x61, 0x72, 0x20, 0x76, 0x61, 0x6C, 0x75, - 0x65, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x44, 0x69, 0x66, 0x66, - 0x3D, 0x28, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x2D, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, - 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, - 0x65, 0x29, 0x3B, 0x76, 0x61, 0x72, 0x20, 0x6D, 0x69, 0x6E, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x44, 0x69, 0x66, 0x66, 0x3D, - 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x69, 0x6E, 0x56, - 0x61, 0x6C, 0x75, 0x65, 0x2D, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x56, 0x69, 0x73, - 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x3B, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x69, 0x73, 0x41, 0x6E, 0x69, - 0x6D, 0x61, 0x74, 0x69, 0x6E, 0x67, 0x53, 0x63, 0x61, 0x6C, - 0x65, 0x3D, 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x61, 0x62, 0x73, - 0x28, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, - 0x65, 0x44, 0x69, 0x66, 0x66, 0x29, 0x3E, 0x30, 0x2E, 0x31, - 0x7C, 0x7C, 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x61, 0x62, 0x73, - 0x28, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x44, - 0x69, 0x66, 0x66, 0x29, 0x3E, 0x30, 0x2E, 0x31, 0x3B, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, - 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, - 0x65, 0x2B, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, - 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x73, 0x63, 0x61, 0x6C, - 0x65, 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x6E, 0x67, - 0x2A, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, - 0x65, 0x44, 0x69, 0x66, 0x66, 0x3B, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x56, 0x69, - 0x73, 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x2B, - 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, - 0x6F, 0x6E, 0x73, 0x2E, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x53, - 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x6E, 0x67, 0x2A, 0x6D, - 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x44, 0x69, 0x66, - 0x66, 0x7D, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x76, 0x61, 0x6C, - 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x3D, 0x7B, 0x6D, - 0x69, 0x6E, 0x3A, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x69, - 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x2C, 0x6D, 0x61, 0x78, - 0x3A, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4D, 0x61, 0x78, 0x56, - 0x61, 0x6C, 0x75, 0x65, 0x7D, 0x7D, 0x3B, 0x53, 0x6D, 0x6F, - 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, - 0x2E, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, - 0x2E, 0x72, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x3D, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x63, 0x61, 0x6E, - 0x76, 0x61, 0x73, 0x2C, 0x74, 0x69, 0x6D, 0x65, 0x29, 0x7B, - 0x76, 0x61, 0x72, 0x20, 0x6E, 0x6F, 0x77, 0x4D, 0x69, 0x6C, - 0x6C, 0x69, 0x73, 0x3D, 0x6E, 0x65, 0x77, 0x20, 0x44, 0x61, - 0x74, 0x65, 0x28, 0x29, 0x2E, 0x67, 0x65, 0x74, 0x54, 0x69, - 0x6D, 0x65, 0x28, 0x29, 0x3B, 0x69, 0x66, 0x28, 0x21, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x69, 0x73, 0x41, 0x6E, 0x69, 0x6D, - 0x61, 0x74, 0x69, 0x6E, 0x67, 0x53, 0x63, 0x61, 0x6C, 0x65, - 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x6D, 0x61, 0x78, 0x49, - 0x64, 0x6C, 0x65, 0x4D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x3D, - 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x6D, 0x69, 0x6E, 0x28, 0x31, - 0x30, 0x30, 0x30, 0x2F, 0x36, 0x2C, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6D, - 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x50, 0x65, 0x72, 0x50, 0x69, - 0x78, 0x65, 0x6C, 0x29, 0x3B, 0x69, 0x66, 0x28, 0x6E, 0x6F, - 0x77, 0x4D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x2D, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x6C, 0x61, 0x73, 0x74, 0x52, 0x65, 0x6E, - 0x64, 0x65, 0x72, 0x54, 0x69, 0x6D, 0x65, 0x4D, 0x69, 0x6C, - 0x6C, 0x69, 0x73, 0x3C, 0x6D, 0x61, 0x78, 0x49, 0x64, 0x6C, - 0x65, 0x4D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x29, 0x7B, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x7D, 0x7D, 0x74, 0x68, 0x69, - 0x73, 0x2E, 0x72, 0x65, 0x73, 0x69, 0x7A, 0x65, 0x28, 0x29, - 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6C, 0x61, 0x73, 0x74, - 0x52, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x54, 0x69, 0x6D, 0x65, - 0x4D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x3D, 0x6E, 0x6F, 0x77, - 0x4D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x3B, 0x63, 0x61, 0x6E, - 0x76, 0x61, 0x73, 0x3D, 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, - 0x7C, 0x7C, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x63, 0x61, 0x6E, - 0x76, 0x61, 0x73, 0x3B, 0x74, 0x69, 0x6D, 0x65, 0x3D, 0x74, - 0x69, 0x6D, 0x65, 0x7C, 0x7C, 0x6E, 0x6F, 0x77, 0x4D, 0x69, - 0x6C, 0x6C, 0x69, 0x73, 0x2D, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x64, 0x65, 0x6C, 0x61, 0x79, 0x7C, 0x7C, 0x30, 0x29, - 0x3B, 0x74, 0x69, 0x6D, 0x65, 0x2D, 0x3D, 0x74, 0x69, 0x6D, - 0x65, 0x25, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6D, 0x69, 0x6C, 0x6C, 0x69, - 0x73, 0x50, 0x65, 0x72, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x3B, - 0x76, 0x61, 0x72, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, - 0x74, 0x3D, 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2E, 0x67, - 0x65, 0x74, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x28, - 0x27, 0x32, 0x64, 0x27, 0x29, 0x2C, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x3D, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x6F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2C, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, - 0x6E, 0x73, 0x3D, 0x7B, 0x74, 0x6F, 0x70, 0x3A, 0x30, 0x2C, - 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x30, 0x2C, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x63, 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2E, - 0x63, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x57, 0x69, 0x64, 0x74, - 0x68, 0x2C, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x63, - 0x61, 0x6E, 0x76, 0x61, 0x73, 0x2E, 0x63, 0x6C, 0x69, 0x65, - 0x6E, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7D, 0x2C, - 0x6F, 0x6C, 0x64, 0x65, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, - 0x64, 0x54, 0x69, 0x6D, 0x65, 0x3D, 0x74, 0x69, 0x6D, 0x65, - 0x2D, 0x28, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2A, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x6D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x50, 0x65, - 0x72, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x29, 0x2C, 0x76, 0x61, - 0x6C, 0x75, 0x65, 0x54, 0x6F, 0x59, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x3D, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, - 0x28, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x29, 0x7B, 0x76, 0x61, - 0x72, 0x20, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3D, 0x76, - 0x61, 0x6C, 0x75, 0x65, 0x2D, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x56, 0x69, 0x73, - 0x4D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x3B, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x56, 0x61, - 0x6C, 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x3D, 0x3D, - 0x3D, 0x30, 0x3F, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, - 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3A, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2D, 0x28, - 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x72, 0x6F, 0x75, 0x6E, 0x64, - 0x28, 0x28, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2F, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, - 0x74, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, - 0x65, 0x29, 0x2A, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, - 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x29, 0x29, 0x7D, 0x2E, 0x62, 0x69, 0x6E, 0x64, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x29, 0x2C, 0x74, 0x69, 0x6D, 0x65, 0x54, - 0x6F, 0x58, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x3D, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x74, 0x29, 0x7B, - 0x69, 0x66, 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, - 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x73, 0x63, 0x72, 0x6F, - 0x6C, 0x6C, 0x42, 0x61, 0x63, 0x6B, 0x77, 0x61, 0x72, 0x64, - 0x73, 0x29, 0x7B, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, - 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x72, 0x6F, 0x75, 0x6E, 0x64, - 0x28, 0x28, 0x74, 0x69, 0x6D, 0x65, 0x2D, 0x74, 0x29, 0x2F, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x6D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x50, - 0x65, 0x72, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x29, 0x7D, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x4D, 0x61, 0x74, 0x68, - 0x2E, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x28, 0x64, 0x69, 0x6D, - 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x2D, 0x28, 0x28, 0x74, 0x69, 0x6D, 0x65, - 0x2D, 0x74, 0x29, 0x2F, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, - 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6D, 0x69, 0x6C, - 0x6C, 0x69, 0x73, 0x50, 0x65, 0x72, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x29, 0x29, 0x7D, 0x3B, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x28, 0x29, 0x3B, 0x63, - 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x66, 0x6F, 0x6E, - 0x74, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6C, 0x61, 0x62, 0x65, 0x6C, - 0x73, 0x2E, 0x66, 0x6F, 0x6E, 0x74, 0x53, 0x69, 0x7A, 0x65, - 0x2B, 0x27, 0x70, 0x78, 0x20, 0x27, 0x2B, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, - 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x2E, 0x66, 0x6F, 0x6E, - 0x74, 0x46, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3B, 0x63, 0x6F, - 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x73, 0x61, 0x76, 0x65, - 0x28, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, - 0x2E, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x6C, 0x61, 0x74, 0x65, - 0x28, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x6C, 0x65, 0x66, 0x74, 0x2C, 0x64, 0x69, 0x6D, - 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x74, 0x6F, - 0x70, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, - 0x2E, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x50, 0x61, 0x74, 0x68, - 0x28, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, - 0x2E, 0x72, 0x65, 0x63, 0x74, 0x28, 0x30, 0x2C, 0x30, 0x2C, - 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, - 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x64, 0x69, 0x6D, - 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x63, 0x6C, 0x69, 0x70, 0x28, 0x29, - 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x73, - 0x61, 0x76, 0x65, 0x28, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x66, 0x69, 0x6C, 0x6C, 0x53, 0x74, - 0x79, 0x6C, 0x65, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, - 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x67, 0x72, 0x69, - 0x64, 0x2E, 0x66, 0x69, 0x6C, 0x6C, 0x53, 0x74, 0x79, 0x6C, - 0x65, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x63, 0x6C, 0x65, 0x61, 0x72, 0x52, 0x65, 0x63, 0x74, 0x28, - 0x30, 0x2C, 0x30, 0x2C, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x2C, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29, 0x3B, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x66, 0x69, - 0x6C, 0x6C, 0x52, 0x65, 0x63, 0x74, 0x28, 0x30, 0x2C, 0x30, - 0x2C, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x64, 0x69, - 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x29, 0x3B, 0x63, 0x6F, 0x6E, - 0x74, 0x65, 0x78, 0x74, 0x2E, 0x72, 0x65, 0x73, 0x74, 0x6F, - 0x72, 0x65, 0x28, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, - 0x78, 0x74, 0x2E, 0x73, 0x61, 0x76, 0x65, 0x28, 0x29, 0x3B, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6C, 0x69, - 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3D, 0x63, 0x68, - 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, - 0x2E, 0x67, 0x72, 0x69, 0x64, 0x2E, 0x6C, 0x69, 0x6E, 0x65, - 0x57, 0x69, 0x64, 0x74, 0x68, 0x3B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3D, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x67, - 0x72, 0x69, 0x64, 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3B, 0x69, 0x66, 0x28, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x67, 0x72, 0x69, 0x64, 0x2E, 0x6D, 0x69, 0x6C, - 0x6C, 0x69, 0x73, 0x50, 0x65, 0x72, 0x4C, 0x69, 0x6E, 0x65, - 0x3E, 0x30, 0x29, 0x7B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, - 0x74, 0x2E, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x50, 0x61, 0x74, - 0x68, 0x28, 0x29, 0x3B, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, - 0x72, 0x20, 0x74, 0x3D, 0x74, 0x69, 0x6D, 0x65, 0x2D, 0x28, - 0x74, 0x69, 0x6D, 0x65, 0x25, 0x63, 0x68, 0x61, 0x72, 0x74, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x67, 0x72, - 0x69, 0x64, 0x2E, 0x6D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x50, - 0x65, 0x72, 0x4C, 0x69, 0x6E, 0x65, 0x29, 0x3B, 0x74, 0x3E, - 0x3D, 0x6F, 0x6C, 0x64, 0x65, 0x73, 0x74, 0x56, 0x61, 0x6C, - 0x69, 0x64, 0x54, 0x69, 0x6D, 0x65, 0x3B, 0x74, 0x2D, 0x3D, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x67, 0x72, 0x69, 0x64, 0x2E, 0x6D, 0x69, - 0x6C, 0x6C, 0x69, 0x73, 0x50, 0x65, 0x72, 0x4C, 0x69, 0x6E, - 0x65, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x67, 0x78, 0x3D, - 0x74, 0x69, 0x6D, 0x65, 0x54, 0x6F, 0x58, 0x50, 0x69, 0x78, - 0x65, 0x6C, 0x28, 0x74, 0x29, 0x3B, 0x69, 0x66, 0x28, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x67, 0x72, 0x69, 0x64, 0x2E, 0x73, 0x68, 0x61, - 0x72, 0x70, 0x4C, 0x69, 0x6E, 0x65, 0x73, 0x29, 0x7B, 0x67, - 0x78, 0x2D, 0x3D, 0x30, 0x2E, 0x35, 0x7D, 0x63, 0x6F, 0x6E, - 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6D, 0x6F, 0x76, 0x65, 0x54, - 0x6F, 0x28, 0x67, 0x78, 0x2C, 0x30, 0x29, 0x3B, 0x63, 0x6F, - 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6C, 0x69, 0x6E, 0x65, - 0x54, 0x6F, 0x28, 0x67, 0x78, 0x2C, 0x64, 0x69, 0x6D, 0x65, - 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x29, 0x7D, 0x63, 0x6F, 0x6E, 0x74, 0x65, - 0x78, 0x74, 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x28, - 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x28, - 0x29, 0x7D, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, - 0x76, 0x3D, 0x31, 0x3B, 0x76, 0x3C, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x67, - 0x72, 0x69, 0x64, 0x2E, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, - 0x61, 0x6C, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, - 0x3B, 0x76, 0x2B, 0x3D, 0x31, 0x29, 0x7B, 0x76, 0x61, 0x72, - 0x20, 0x67, 0x79, 0x3D, 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x72, - 0x6F, 0x75, 0x6E, 0x64, 0x28, 0x76, 0x2A, 0x64, 0x69, 0x6D, - 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x2F, 0x63, 0x68, 0x61, 0x72, 0x74, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x67, 0x72, - 0x69, 0x64, 0x2E, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, - 0x6C, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x29, - 0x3B, 0x69, 0x66, 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, - 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x67, 0x72, 0x69, - 0x64, 0x2E, 0x73, 0x68, 0x61, 0x72, 0x70, 0x4C, 0x69, 0x6E, - 0x65, 0x73, 0x29, 0x7B, 0x67, 0x79, 0x2D, 0x3D, 0x30, 0x2E, - 0x35, 0x7D, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x62, 0x65, 0x67, 0x69, 0x6E, 0x50, 0x61, 0x74, 0x68, 0x28, - 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x6D, 0x6F, 0x76, 0x65, 0x54, 0x6F, 0x28, 0x30, 0x2C, 0x67, - 0x79, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, - 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x54, 0x6F, 0x28, 0x64, 0x69, - 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x2C, 0x67, 0x79, 0x29, 0x3B, 0x63, - 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x73, 0x74, 0x72, - 0x6F, 0x6B, 0x65, 0x28, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x63, 0x6C, 0x6F, 0x73, 0x65, 0x50, - 0x61, 0x74, 0x68, 0x28, 0x29, 0x7D, 0x69, 0x66, 0x28, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x67, 0x72, 0x69, 0x64, 0x2E, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6C, 0x65, - 0x29, 0x7B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x62, 0x65, 0x67, 0x69, 0x6E, 0x50, 0x61, 0x74, 0x68, 0x28, - 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x52, 0x65, 0x63, 0x74, - 0x28, 0x30, 0x2C, 0x30, 0x2C, 0x64, 0x69, 0x6D, 0x65, 0x6E, - 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x2C, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29, - 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x63, - 0x6C, 0x6F, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x28, 0x29, - 0x7D, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x72, - 0x65, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x28, 0x29, 0x3B, 0x69, - 0x66, 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x6F, 0x72, 0x69, 0x7A, - 0x6F, 0x6E, 0x74, 0x61, 0x6C, 0x4C, 0x69, 0x6E, 0x65, 0x73, - 0x26, 0x26, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x6F, 0x72, 0x69, 0x7A, - 0x6F, 0x6E, 0x74, 0x61, 0x6C, 0x4C, 0x69, 0x6E, 0x65, 0x73, - 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x29, 0x7B, 0x66, - 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x68, 0x6C, 0x3D, - 0x30, 0x3B, 0x68, 0x6C, 0x3C, 0x63, 0x68, 0x61, 0x72, 0x74, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x6F, - 0x72, 0x69, 0x7A, 0x6F, 0x6E, 0x74, 0x61, 0x6C, 0x4C, 0x69, - 0x6E, 0x65, 0x73, 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, - 0x3B, 0x68, 0x6C, 0x2B, 0x3D, 0x31, 0x29, 0x7B, 0x76, 0x61, - 0x72, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x3D, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, - 0x68, 0x6F, 0x72, 0x69, 0x7A, 0x6F, 0x6E, 0x74, 0x61, 0x6C, - 0x4C, 0x69, 0x6E, 0x65, 0x73, 0x5B, 0x68, 0x6C, 0x5D, 0x2C, - 0x68, 0x6C, 0x79, 0x3D, 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x72, - 0x6F, 0x75, 0x6E, 0x64, 0x28, 0x76, 0x61, 0x6C, 0x75, 0x65, - 0x54, 0x6F, 0x59, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x28, 0x6C, - 0x69, 0x6E, 0x65, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x29, - 0x29, 0x2D, 0x30, 0x2E, 0x35, 0x3B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3D, 0x6C, 0x69, 0x6E, 0x65, - 0x2E, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x7C, 0x7C, 0x27, 0x23, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x27, 0x3B, 0x63, 0x6F, - 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6C, 0x69, 0x6E, 0x65, - 0x57, 0x69, 0x64, 0x74, 0x68, 0x3D, 0x6C, 0x69, 0x6E, 0x65, - 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, - 0x7C, 0x7C, 0x31, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, - 0x74, 0x2E, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x50, 0x61, 0x74, - 0x68, 0x28, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, - 0x74, 0x2E, 0x6D, 0x6F, 0x76, 0x65, 0x54, 0x6F, 0x28, 0x30, - 0x2C, 0x68, 0x6C, 0x79, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x54, 0x6F, - 0x28, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x68, 0x6C, - 0x79, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, - 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x28, 0x29, 0x3B, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x63, 0x6C, - 0x6F, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x28, 0x29, 0x7D, - 0x7D, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x64, - 0x3D, 0x30, 0x3B, 0x64, 0x3C, 0x74, 0x68, 0x69, 0x73, 0x2E, - 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x2E, - 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x3B, 0x64, 0x2B, 0x3D, - 0x31, 0x29, 0x7B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, - 0x2E, 0x73, 0x61, 0x76, 0x65, 0x28, 0x29, 0x3B, 0x76, 0x61, - 0x72, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x3D, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x53, 0x65, 0x74, 0x5B, 0x64, 0x5D, - 0x2E, 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x2C, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x3D, - 0x74, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x2E, 0x64, 0x61, 0x74, 0x61, 0x2C, 0x73, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x3D, - 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x53, 0x65, 0x74, 0x5B, 0x64, 0x5D, 0x2E, 0x6F, 0x70, - 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x3B, 0x74, 0x69, 0x6D, 0x65, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2E, 0x64, 0x72, 0x6F, - 0x70, 0x4F, 0x6C, 0x64, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6F, - 0x6C, 0x64, 0x65, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, 0x64, - 0x54, 0x69, 0x6D, 0x65, 0x2C, 0x63, 0x68, 0x61, 0x72, 0x74, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6D, 0x61, - 0x78, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x4C, 0x65, - 0x6E, 0x67, 0x74, 0x68, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x57, 0x69, - 0x64, 0x74, 0x68, 0x3D, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6C, 0x69, - 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3B, 0x63, 0x6F, - 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x73, 0x74, 0x72, 0x6F, - 0x6B, 0x65, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3D, 0x73, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x53, 0x74, - 0x79, 0x6C, 0x65, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, - 0x74, 0x2E, 0x62, 0x65, 0x67, 0x69, 0x6E, 0x50, 0x61, 0x74, - 0x68, 0x28, 0x29, 0x3B, 0x76, 0x61, 0x72, 0x20, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x58, 0x3D, 0x30, 0x2C, 0x6C, 0x61, 0x73, - 0x74, 0x58, 0x3D, 0x30, 0x2C, 0x6C, 0x61, 0x73, 0x74, 0x59, - 0x3D, 0x30, 0x3B, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, - 0x20, 0x69, 0x3D, 0x30, 0x3B, 0x69, 0x3C, 0x64, 0x61, 0x74, - 0x61, 0x53, 0x65, 0x74, 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, - 0x68, 0x26, 0x26, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, - 0x2E, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x21, 0x3D, 0x3D, - 0x31, 0x3B, 0x69, 0x2B, 0x3D, 0x31, 0x29, 0x7B, 0x76, 0x61, - 0x72, 0x20, 0x78, 0x3D, 0x74, 0x69, 0x6D, 0x65, 0x54, 0x6F, - 0x58, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x28, 0x64, 0x61, 0x74, - 0x61, 0x53, 0x65, 0x74, 0x5B, 0x69, 0x5D, 0x5B, 0x30, 0x5D, - 0x29, 0x2C, 0x79, 0x3D, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x54, - 0x6F, 0x59, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x28, 0x64, 0x61, - 0x74, 0x61, 0x53, 0x65, 0x74, 0x5B, 0x69, 0x5D, 0x5B, 0x31, - 0x5D, 0x29, 0x3B, 0x69, 0x66, 0x28, 0x69, 0x3D, 0x3D, 0x3D, - 0x30, 0x29, 0x7B, 0x66, 0x69, 0x72, 0x73, 0x74, 0x58, 0x3D, - 0x78, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x6D, 0x6F, 0x76, 0x65, 0x54, 0x6F, 0x28, 0x78, 0x2C, 0x79, - 0x29, 0x7D, 0x65, 0x6C, 0x73, 0x65, 0x7B, 0x73, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x28, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, - 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x69, 0x6E, 0x74, - 0x65, 0x72, 0x70, 0x6F, 0x6C, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x29, 0x7B, 0x63, 0x61, 0x73, 0x65, 0x20, 0x22, 0x6C, 0x69, - 0x6E, 0x65, 0x61, 0x72, 0x22, 0x3A, 0x63, 0x61, 0x73, 0x65, - 0x20, 0x22, 0x6C, 0x69, 0x6E, 0x65, 0x22, 0x3A, 0x7B, 0x63, - 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6C, 0x69, 0x6E, - 0x65, 0x54, 0x6F, 0x28, 0x78, 0x2C, 0x79, 0x29, 0x3B, 0x62, - 0x72, 0x65, 0x61, 0x6B, 0x7D, 0x63, 0x61, 0x73, 0x65, 0x20, - 0x22, 0x62, 0x65, 0x7A, 0x69, 0x65, 0x72, 0x22, 0x3A, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x3A, 0x7B, 0x63, 0x6F, - 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x62, 0x65, 0x7A, 0x69, - 0x65, 0x72, 0x43, 0x75, 0x72, 0x76, 0x65, 0x54, 0x6F, 0x28, - 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x72, 0x6F, 0x75, 0x6E, 0x64, - 0x28, 0x28, 0x6C, 0x61, 0x73, 0x74, 0x58, 0x2B, 0x78, 0x29, - 0x2F, 0x32, 0x29, 0x2C, 0x6C, 0x61, 0x73, 0x74, 0x59, 0x2C, - 0x4D, 0x61, 0x74, 0x68, 0x2E, 0x72, 0x6F, 0x75, 0x6E, 0x64, - 0x28, 0x28, 0x6C, 0x61, 0x73, 0x74, 0x58, 0x2B, 0x78, 0x29, - 0x29, 0x2F, 0x32, 0x2C, 0x79, 0x2C, 0x78, 0x2C, 0x79, 0x29, - 0x3B, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x7D, 0x63, 0x61, 0x73, - 0x65, 0x20, 0x22, 0x73, 0x74, 0x65, 0x70, 0x22, 0x3A, 0x7B, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6C, 0x69, - 0x6E, 0x65, 0x54, 0x6F, 0x28, 0x78, 0x2C, 0x6C, 0x61, 0x73, - 0x74, 0x59, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, - 0x74, 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x54, 0x6F, 0x28, 0x78, - 0x2C, 0x79, 0x29, 0x3B, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x7D, - 0x7D, 0x7D, 0x6C, 0x61, 0x73, 0x74, 0x58, 0x3D, 0x78, 0x3B, - 0x6C, 0x61, 0x73, 0x74, 0x59, 0x3D, 0x79, 0x7D, 0x69, 0x66, - 0x28, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x74, 0x2E, 0x6C, - 0x65, 0x6E, 0x67, 0x74, 0x68, 0x3E, 0x31, 0x29, 0x7B, 0x69, - 0x66, 0x28, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4F, 0x70, - 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x66, 0x69, 0x6C, 0x6C, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x29, 0x7B, 0x63, 0x6F, 0x6E, - 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x54, - 0x6F, 0x28, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2B, 0x73, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x4F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x57, 0x69, 0x64, - 0x74, 0x68, 0x2B, 0x31, 0x2C, 0x6C, 0x61, 0x73, 0x74, 0x59, - 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x6C, 0x69, 0x6E, 0x65, 0x54, 0x6F, 0x28, 0x64, 0x69, 0x6D, - 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x2B, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6C, 0x69, - 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x2B, 0x31, 0x2C, - 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, - 0x2E, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2B, 0x73, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, - 0x68, 0x2B, 0x31, 0x29, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, - 0x78, 0x74, 0x2E, 0x6C, 0x69, 0x6E, 0x65, 0x54, 0x6F, 0x28, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x58, 0x2C, 0x64, 0x69, 0x6D, - 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x2B, 0x73, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6C, - 0x69, 0x6E, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x29, 0x3B, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x66, 0x69, - 0x6C, 0x6C, 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3D, 0x73, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x66, 0x69, 0x6C, 0x6C, 0x53, 0x74, 0x79, 0x6C, - 0x65, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, - 0x66, 0x69, 0x6C, 0x6C, 0x28, 0x29, 0x7D, 0x69, 0x66, 0x28, - 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4F, 0x70, 0x74, 0x69, - 0x6F, 0x6E, 0x73, 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x26, 0x26, 0x73, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, - 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x53, 0x74, 0x79, - 0x6C, 0x65, 0x21, 0x3D, 0x3D, 0x27, 0x6E, 0x6F, 0x6E, 0x65, - 0x27, 0x29, 0x7B, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, - 0x2E, 0x73, 0x74, 0x72, 0x6F, 0x6B, 0x65, 0x28, 0x29, 0x7D, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x63, 0x6C, - 0x6F, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x28, 0x29, 0x7D, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x72, 0x65, - 0x73, 0x74, 0x6F, 0x72, 0x65, 0x28, 0x29, 0x7D, 0x69, 0x66, - 0x28, 0x21, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6C, 0x61, 0x62, 0x65, 0x6C, - 0x73, 0x2E, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6C, 0x65, 0x64, - 0x26, 0x26, 0x21, 0x69, 0x73, 0x4E, 0x61, 0x4E, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x52, - 0x61, 0x6E, 0x67, 0x65, 0x2E, 0x6D, 0x69, 0x6E, 0x29, 0x26, - 0x26, 0x21, 0x69, 0x73, 0x4E, 0x61, 0x4E, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, - 0x6E, 0x67, 0x65, 0x2E, 0x6D, 0x61, 0x78, 0x29, 0x29, 0x7B, - 0x76, 0x61, 0x72, 0x20, 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, - 0x75, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3D, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x79, 0x4D, 0x61, 0x78, 0x46, 0x6F, 0x72, 0x6D, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x52, 0x61, 0x6E, 0x67, - 0x65, 0x2E, 0x6D, 0x61, 0x78, 0x2C, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6C, - 0x61, 0x62, 0x65, 0x6C, 0x73, 0x2E, 0x70, 0x72, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6F, 0x6E, 0x29, 0x2C, 0x6D, 0x69, 0x6E, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6E, - 0x67, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x79, 0x4D, 0x69, 0x6E, 0x46, - 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x28, 0x74, - 0x68, 0x69, 0x73, 0x2E, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x52, - 0x61, 0x6E, 0x67, 0x65, 0x2E, 0x6D, 0x69, 0x6E, 0x2C, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x2E, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6F, 0x6E, 0x29, 0x2C, - 0x6D, 0x61, 0x78, 0x4C, 0x61, 0x62, 0x65, 0x6C, 0x50, 0x6F, - 0x73, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x73, 0x63, 0x72, 0x6F, 0x6C, - 0x6C, 0x42, 0x61, 0x63, 0x6B, 0x77, 0x61, 0x72, 0x64, 0x73, - 0x3F, 0x30, 0x3A, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, - 0x6F, 0x6E, 0x73, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2D, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6D, 0x65, - 0x61, 0x73, 0x75, 0x72, 0x65, 0x54, 0x65, 0x78, 0x74, 0x28, - 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x53, 0x74, - 0x72, 0x69, 0x6E, 0x67, 0x29, 0x2E, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x2D, 0x32, 0x2C, 0x6D, 0x69, 0x6E, 0x4C, 0x61, 0x62, - 0x65, 0x6C, 0x50, 0x6F, 0x73, 0x3D, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x73, - 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0x42, 0x61, 0x63, 0x6B, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x3F, 0x30, 0x3A, 0x64, 0x69, 0x6D, - 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x2D, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, - 0x74, 0x2E, 0x6D, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x54, - 0x65, 0x78, 0x74, 0x28, 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, - 0x75, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x29, 0x2E, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x2D, 0x32, 0x3B, 0x63, 0x6F, - 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x66, 0x69, 0x6C, 0x6C, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3D, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6C, - 0x61, 0x62, 0x65, 0x6C, 0x73, 0x2E, 0x66, 0x69, 0x6C, 0x6C, - 0x53, 0x74, 0x79, 0x6C, 0x65, 0x3B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x66, 0x69, 0x6C, 0x6C, 0x54, 0x65, - 0x78, 0x74, 0x28, 0x6D, 0x61, 0x78, 0x56, 0x61, 0x6C, 0x75, - 0x65, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x2C, 0x6D, 0x61, - 0x78, 0x4C, 0x61, 0x62, 0x65, 0x6C, 0x50, 0x6F, 0x73, 0x2C, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x73, 0x2E, - 0x66, 0x6F, 0x6E, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x29, 0x3B, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x66, 0x69, - 0x6C, 0x6C, 0x54, 0x65, 0x78, 0x74, 0x28, 0x6D, 0x69, 0x6E, - 0x56, 0x61, 0x6C, 0x75, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6E, - 0x67, 0x2C, 0x6D, 0x69, 0x6E, 0x4C, 0x61, 0x62, 0x65, 0x6C, - 0x50, 0x6F, 0x73, 0x2C, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, - 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x2D, 0x32, 0x29, 0x7D, 0x69, 0x66, 0x28, 0x63, 0x68, - 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, - 0x2E, 0x74, 0x69, 0x6D, 0x65, 0x73, 0x74, 0x61, 0x6D, 0x70, - 0x46, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x26, - 0x26, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, - 0x6F, 0x6E, 0x73, 0x2E, 0x67, 0x72, 0x69, 0x64, 0x2E, 0x6D, - 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x50, 0x65, 0x72, 0x4C, 0x69, - 0x6E, 0x65, 0x3E, 0x30, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, - 0x74, 0x65, 0x78, 0x74, 0x55, 0x6E, 0x74, 0x69, 0x6C, 0x58, - 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, - 0x6F, 0x6E, 0x73, 0x2E, 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, - 0x42, 0x61, 0x63, 0x6B, 0x77, 0x61, 0x72, 0x64, 0x73, 0x3F, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6D, 0x65, - 0x61, 0x73, 0x75, 0x72, 0x65, 0x54, 0x65, 0x78, 0x74, 0x28, - 0x6D, 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x53, 0x74, - 0x72, 0x69, 0x6E, 0x67, 0x29, 0x2E, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3A, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x2D, 0x63, - 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6D, 0x65, 0x61, - 0x73, 0x75, 0x72, 0x65, 0x54, 0x65, 0x78, 0x74, 0x28, 0x6D, - 0x69, 0x6E, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x53, 0x74, 0x72, - 0x69, 0x6E, 0x67, 0x29, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x2B, 0x34, 0x3B, 0x66, 0x6F, 0x72, 0x28, 0x76, 0x61, 0x72, - 0x20, 0x74, 0x3D, 0x74, 0x69, 0x6D, 0x65, 0x2D, 0x28, 0x74, - 0x69, 0x6D, 0x65, 0x25, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, - 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x67, 0x72, 0x69, - 0x64, 0x2E, 0x6D, 0x69, 0x6C, 0x6C, 0x69, 0x73, 0x50, 0x65, - 0x72, 0x4C, 0x69, 0x6E, 0x65, 0x29, 0x3B, 0x74, 0x3E, 0x3D, - 0x6F, 0x6C, 0x64, 0x65, 0x73, 0x74, 0x56, 0x61, 0x6C, 0x69, - 0x64, 0x54, 0x69, 0x6D, 0x65, 0x3B, 0x74, 0x2D, 0x3D, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, - 0x73, 0x2E, 0x67, 0x72, 0x69, 0x64, 0x2E, 0x6D, 0x69, 0x6C, - 0x6C, 0x69, 0x73, 0x50, 0x65, 0x72, 0x4C, 0x69, 0x6E, 0x65, - 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x67, 0x78, 0x3D, 0x74, - 0x69, 0x6D, 0x65, 0x54, 0x6F, 0x58, 0x50, 0x69, 0x78, 0x65, - 0x6C, 0x28, 0x74, 0x29, 0x3B, 0x69, 0x66, 0x28, 0x28, 0x21, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0x42, - 0x61, 0x63, 0x6B, 0x77, 0x61, 0x72, 0x64, 0x73, 0x26, 0x26, - 0x67, 0x78, 0x3C, 0x74, 0x65, 0x78, 0x74, 0x55, 0x6E, 0x74, - 0x69, 0x6C, 0x58, 0x29, 0x7C, 0x7C, 0x28, 0x63, 0x68, 0x61, - 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, - 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0x42, 0x61, 0x63, 0x6B, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x26, 0x26, 0x67, 0x78, 0x3E, - 0x74, 0x65, 0x78, 0x74, 0x55, 0x6E, 0x74, 0x69, 0x6C, 0x58, - 0x29, 0x29, 0x7B, 0x76, 0x61, 0x72, 0x20, 0x74, 0x78, 0x3D, - 0x6E, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x28, 0x74, - 0x29, 0x2C, 0x74, 0x73, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, - 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x74, 0x69, - 0x6D, 0x65, 0x73, 0x74, 0x61, 0x6D, 0x70, 0x46, 0x6F, 0x72, - 0x6D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x28, 0x74, 0x78, 0x29, - 0x2C, 0x74, 0x73, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3D, 0x63, - 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x6D, 0x65, 0x61, - 0x73, 0x75, 0x72, 0x65, 0x54, 0x65, 0x78, 0x74, 0x28, 0x74, - 0x73, 0x29, 0x2E, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3B, 0x74, - 0x65, 0x78, 0x74, 0x55, 0x6E, 0x74, 0x69, 0x6C, 0x58, 0x3D, - 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, - 0x6E, 0x73, 0x2E, 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0x42, - 0x61, 0x63, 0x6B, 0x77, 0x61, 0x72, 0x64, 0x73, 0x3F, 0x67, - 0x78, 0x2B, 0x74, 0x73, 0x57, 0x69, 0x64, 0x74, 0x68, 0x2B, - 0x32, 0x3A, 0x67, 0x78, 0x2D, 0x74, 0x73, 0x57, 0x69, 0x64, - 0x74, 0x68, 0x2D, 0x32, 0x3B, 0x63, 0x6F, 0x6E, 0x74, 0x65, - 0x78, 0x74, 0x2E, 0x66, 0x69, 0x6C, 0x6C, 0x53, 0x74, 0x79, - 0x6C, 0x65, 0x3D, 0x63, 0x68, 0x61, 0x72, 0x74, 0x4F, 0x70, - 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x6C, 0x61, 0x62, 0x65, - 0x6C, 0x73, 0x2E, 0x66, 0x69, 0x6C, 0x6C, 0x53, 0x74, 0x79, - 0x6C, 0x65, 0x3B, 0x69, 0x66, 0x28, 0x63, 0x68, 0x61, 0x72, - 0x74, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x73, - 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0x42, 0x61, 0x63, 0x6B, 0x77, - 0x61, 0x72, 0x64, 0x73, 0x29, 0x7B, 0x63, 0x6F, 0x6E, 0x74, - 0x65, 0x78, 0x74, 0x2E, 0x66, 0x69, 0x6C, 0x6C, 0x54, 0x65, - 0x78, 0x74, 0x28, 0x74, 0x73, 0x2C, 0x67, 0x78, 0x2C, 0x64, - 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2D, 0x32, 0x29, 0x7D, - 0x65, 0x6C, 0x73, 0x65, 0x7B, 0x63, 0x6F, 0x6E, 0x74, 0x65, - 0x78, 0x74, 0x2E, 0x66, 0x69, 0x6C, 0x6C, 0x54, 0x65, 0x78, - 0x74, 0x28, 0x74, 0x73, 0x2C, 0x67, 0x78, 0x2D, 0x74, 0x73, - 0x57, 0x69, 0x64, 0x74, 0x68, 0x2C, 0x64, 0x69, 0x6D, 0x65, - 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x2D, 0x32, 0x29, 0x7D, 0x7D, 0x7D, 0x7D, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x78, 0x74, 0x2E, 0x72, 0x65, - 0x73, 0x74, 0x6F, 0x72, 0x65, 0x28, 0x29, 0x3B, 0x7D, 0x3B, - 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, 0x68, - 0x61, 0x72, 0x74, 0x2E, 0x74, 0x69, 0x6D, 0x65, 0x46, 0x6F, - 0x72, 0x6D, 0x61, 0x74, 0x74, 0x65, 0x72, 0x3D, 0x66, 0x75, - 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x64, 0x61, 0x74, - 0x65, 0x29, 0x7B, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x20, 0x70, 0x61, 0x64, 0x32, 0x28, 0x6E, 0x75, 0x6D, - 0x62, 0x65, 0x72, 0x29, 0x7B, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6E, 0x28, 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x3C, 0x31, - 0x30, 0x3F, 0x27, 0x30, 0x27, 0x3A, 0x27, 0x27, 0x29, 0x2B, - 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x7D, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6E, 0x20, 0x70, 0x61, 0x64, 0x32, 0x28, 0x64, - 0x61, 0x74, 0x65, 0x2E, 0x67, 0x65, 0x74, 0x48, 0x6F, 0x75, - 0x72, 0x73, 0x28, 0x29, 0x29, 0x2B, 0x27, 0x3A, 0x27, 0x2B, - 0x70, 0x61, 0x64, 0x32, 0x28, 0x64, 0x61, 0x74, 0x65, 0x2E, - 0x67, 0x65, 0x74, 0x4D, 0x69, 0x6E, 0x75, 0x74, 0x65, 0x73, - 0x28, 0x29, 0x29, 0x2B, 0x27, 0x3A, 0x27, 0x2B, 0x70, 0x61, - 0x64, 0x32, 0x28, 0x64, 0x61, 0x74, 0x65, 0x2E, 0x67, 0x65, - 0x74, 0x53, 0x65, 0x63, 0x6F, 0x6E, 0x64, 0x73, 0x28, 0x29, - 0x29, 0x7D, 0x3B, 0x65, 0x78, 0x70, 0x6F, 0x72, 0x74, 0x73, - 0x2E, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x3D, 0x54, 0x69, 0x6D, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x3B, 0x65, 0x78, 0x70, 0x6F, 0x72, 0x74, 0x73, - 0x2E, 0x53, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x69, 0x65, 0x43, - 0x68, 0x61, 0x72, 0x74, 0x3D, 0x53, 0x6D, 0x6F, 0x6F, 0x74, - 0x68, 0x69, 0x65, 0x43, 0x68, 0x61, 0x72, 0x74, 0x7D, 0x29, - 0x28, 0x74, 0x79, 0x70, 0x65, 0x6F, 0x66, 0x20, 0x65, 0x78, - 0x70, 0x6F, 0x72, 0x74, 0x73, 0x3D, 0x3D, 0x3D, 0x27, 0x75, - 0x6E, 0x64, 0x65, 0x66, 0x69, 0x6E, 0x65, 0x64, 0x27, 0x3F, - 0x74, 0x68, 0x69, 0x73, 0x3A, 0x65, 0x78, 0x70, 0x6F, 0x72, - 0x74, 0x73, 0x29, 0x3B, }; - -static const unsigned char data_img_favicon_png[] = { - /* /img/favicon.png */ - 0x2F, 0x69, 0x6D, 0x67, 0x2F, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6F, 0x6E, 0x2E, 0x70, 0x6E, 0x67, 0, - 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x32, - 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0D, 0x0A, 0x6C, 0x77, 0x49, - 0x50, 0x2F, 0x31, 0x2E, 0x34, 0x2E, 0x31, 0x20, 0x28, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x61, 0x76, 0x61, - 0x6E, 0x6E, 0x61, 0x68, 0x2E, 0x6E, 0x6F, 0x6E, 0x67, 0x6E, - 0x75, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x70, 0x72, 0x6F, 0x6A, - 0x65, 0x63, 0x74, 0x73, 0x2F, 0x6C, 0x77, 0x69, 0x70, 0x29, - 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, - 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x69, 0x6D, 0x61, 0x67, - 0x65, 0x2F, 0x70, 0x6E, 0x67, 0x0D, 0x0A, 0x0D, 0x0A, 0x89, - 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, - 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0xF3, - 0xFF, 0x61, 0x00, 0x00, 0x02, 0xBF, 0x49, 0x44, 0x41, 0x54, - 0x38, 0xCB, 0xA5, 0x92, 0x4F, 0x6C, 0x14, 0x75, 0x14, 0xC7, - 0x3F, 0x3B, 0x3B, 0x33, 0xFB, 0xBF, 0xBB, 0x74, 0x59, 0xD8, - 0xA5, 0xC5, 0x76, 0x4B, 0x65, 0x6B, 0x49, 0x10, 0x41, 0x41, - 0x20, 0x84, 0xD2, 0x80, 0x6D, 0x6C, 0x62, 0x80, 0xC4, 0x78, - 0xF1, 0x64, 0xD2, 0x93, 0x89, 0x77, 0xF1, 0xE4, 0xD9, 0x83, - 0x37, 0x63, 0x3C, 0xE0, 0xC5, 0x43, 0x2F, 0x46, 0x23, 0x90, - 0x70, 0x30, 0x01, 0xA5, 0x6A, 0x29, 0x2D, 0x65, 0xA1, 0x14, - 0xD3, 0xAD, 0x08, 0xBB, 0x9A, 0xD9, 0xA6, 0xBB, 0x65, 0xF6, - 0x5F, 0x67, 0x77, 0xE7, 0x37, 0xF3, 0xF3, 0x62, 0xD7, 0xA6, - 0xE2, 0xC9, 0x77, 0x79, 0x2F, 0x2F, 0xEF, 0xFB, 0xC9, 0x37, - 0x2F, 0x5F, 0xF8, 0x9F, 0xE5, 0xD9, 0xBE, 0x78, 0x77, 0xF2, - 0x83, 0x54, 0xA2, 0x7F, 0xF8, 0x13, 0xAF, 0x2F, 0xFC, 0xB6, - 0xAB, 0x06, 0xF4, 0xEE, 0xB0, 0x9F, 0xDB, 0xF3, 0xD9, 0x92, - 0x91, 0x5F, 0xF9, 0x72, 0xEE, 0xDA, 0xE5, 0x4B, 0x80, 0xF8, - 0x4F, 0xC0, 0x89, 0x8B, 0xEF, 0xBF, 0x63, 0x05, 0x52, 0x53, - 0x17, 0x26, 0xC6, 0x19, 0x39, 0xD4, 0x47, 0xD0, 0xA7, 0x52, - 0xB1, 0xDA, 0x2C, 0x3D, 0x2D, 0xF3, 0xFD, 0x4F, 0x77, 0x29, - 0xAE, 0x64, 0x6D, 0xBF, 0x65, 0xBC, 0xF2, 0xC3, 0x95, 0xAF, - 0x1E, 0x6E, 0x6A, 0x94, 0x8E, 0x7A, 0xE7, 0xD1, 0xB1, 0xAA, - 0x9E, 0x9A, 0x7A, 0x61, 0xE8, 0x30, 0xAA, 0x3F, 0x84, 0x5F, - 0x53, 0xD8, 0xB7, 0x3B, 0x44, 0x40, 0xF3, 0x52, 0x6D, 0x41, - 0xAA, 0xA7, 0x8F, 0x57, 0x8F, 0x9F, 0xD6, 0x0E, 0x1D, 0x3B, - 0xB5, 0x08, 0xEC, 0xD9, 0x94, 0x79, 0x37, 0x07, 0x2D, 0x73, - 0x26, 0x77, 0x76, 0x74, 0xD4, 0xB3, 0x27, 0xB9, 0x8B, 0xC1, - 0x54, 0x17, 0x89, 0xA8, 0x1F, 0xAB, 0xED, 0x10, 0xF6, 0xAB, - 0xEC, 0x8D, 0x07, 0xD1, 0x75, 0x8D, 0x74, 0x32, 0x8A, 0xA2, - 0xFA, 0x88, 0xEC, 0xDA, 0x7B, 0xEE, 0xD1, 0xDC, 0x8F, 0x9F, - 0x77, 0x1C, 0x4C, 0xBC, 0xF7, 0xE1, 0xE4, 0x81, 0xE1, 0x03, - 0x9E, 0xA6, 0x03, 0x45, 0xB3, 0xC9, 0xFE, 0x54, 0x84, 0xB6, - 0x70, 0x51, 0x14, 0x0F, 0xEB, 0xF5, 0x36, 0x56, 0x5B, 0xD0, - 0xDB, 0x1D, 0xC4, 0xA7, 0xAB, 0x44, 0x23, 0x61, 0x32, 0x99, - 0xCC, 0x41, 0xD8, 0x99, 0xE9, 0x00, 0xA2, 0xB1, 0xEE, 0xB1, - 0x42, 0xA9, 0x8E, 0xEB, 0xBA, 0x9C, 0x3F, 0xDA, 0x83, 0x69, - 0xD9, 0xE4, 0x8C, 0x1A, 0xCB, 0x46, 0x8D, 0xAA, 0x65, 0x53, - 0x6B, 0x0A, 0x5A, 0xB6, 0x4D, 0x2C, 0xA4, 0x23, 0x5C, 0x49, - 0x38, 0x12, 0x63, 0x68, 0x64, 0x74, 0xBC, 0x03, 0x10, 0xAE, - 0x4C, 0xB9, 0xAE, 0x64, 0xF4, 0xE5, 0x5E, 0xBA, 0x02, 0x2A, - 0xAE, 0x10, 0x44, 0x83, 0x1A, 0xB3, 0x2B, 0xEB, 0xAC, 0x18, - 0x35, 0xCC, 0x5A, 0x93, 0xC7, 0x46, 0x85, 0xB6, 0xED, 0x20, - 0xA5, 0x8B, 0x70, 0x1C, 0xF6, 0xA7, 0xFB, 0x77, 0x77, 0x00, - 0xD9, 0xA5, 0x5C, 0xA9, 0x65, 0x35, 0x28, 0x99, 0x75, 0x2A, - 0xB5, 0x06, 0x21, 0x5D, 0xC1, 0x15, 0x36, 0xC7, 0x06, 0xBA, - 0xF0, 0x79, 0x5D, 0x14, 0x1C, 0xE2, 0x61, 0x15, 0x29, 0x1D, - 0x14, 0x24, 0x9A, 0xD7, 0xC3, 0xAD, 0x3B, 0xD9, 0xF5, 0xCE, - 0x13, 0xCB, 0x76, 0x24, 0xB9, 0x6F, 0xA0, 0x6F, 0xBC, 0x58, - 0xB5, 0x69, 0xD8, 0x92, 0x54, 0x3C, 0x4C, 0xAB, 0x2D, 0x10, - 0xC2, 0xE1, 0x59, 0x75, 0x03, 0x9F, 0xEA, 0x21, 0xF7, 0x47, - 0x09, 0x5C, 0x87, 0x46, 0xA3, 0x4E, 0x76, 0x71, 0x89, 0xD9, - 0x6F, 0xAF, 0x5E, 0x82, 0x8A, 0xA1, 0x02, 0xD0, 0x58, 0xFB, - 0xAC, 0x55, 0x2B, 0x7F, 0x3A, 0x3D, 0x6B, 0xA2, 0xA9, 0x5E, - 0xCE, 0x1E, 0xEE, 0x47, 0x91, 0x12, 0xC7, 0x71, 0x09, 0xEA, - 0x1E, 0x96, 0xF3, 0xAB, 0xDC, 0x5B, 0xFE, 0x93, 0x2B, 0x86, - 0x01, 0x96, 0x89, 0x59, 0xFC, 0xBD, 0x00, 0xF9, 0xF9, 0x7F, - 0x72, 0x50, 0x5E, 0x6A, 0x0F, 0xF7, 0x27, 0x26, 0x69, 0x94, - 0xA8, 0x9B, 0x25, 0x56, 0xD7, 0xCA, 0x94, 0xD6, 0x4D, 0x76, - 0x84, 0x34, 0x16, 0x73, 0x79, 0xA6, 0xAE, 0xCF, 0x50, 0x28, - 0x14, 0x58, 0x98, 0xBF, 0xC7, 0x6F, 0xB9, 0x5F, 0xF1, 0x79, - 0xDD, 0x37, 0xFF, 0x95, 0x83, 0xDC, 0xC2, 0xF4, 0xDD, 0x93, - 0x23, 0xE7, 0x64, 0x2C, 0xA4, 0x9F, 0x39, 0xF2, 0x52, 0x1A, - 0x21, 0x04, 0x5F, 0x7C, 0x7D, 0x93, 0xEF, 0x6E, 0xCC, 0xB1, - 0x56, 0x28, 0xF0, 0xC6, 0xEB, 0x83, 0x2C, 0x3E, 0xB8, 0x4F, - 0x44, 0x97, 0xE3, 0xF9, 0x99, 0x6F, 0x7E, 0x79, 0x5E, 0x94, - 0x35, 0x20, 0x46, 0xA0, 0xE7, 0xAD, 0x17, 0x5F, 0x3B, 0xF5, - 0x91, 0xF0, 0x06, 0xD3, 0x89, 0xF8, 0x0E, 0x1E, 0x3D, 0x2E, - 0x30, 0xD8, 0x9B, 0x60, 0x61, 0x7A, 0x3A, 0xCB, 0xC6, 0x93, - 0x8F, 0x69, 0x56, 0x1E, 0x00, 0x06, 0xB0, 0x01, 0xC8, 0xED, - 0x80, 0xF8, 0xDF, 0x31, 0x8D, 0x00, 0xE1, 0x58, 0x32, 0x9D, - 0x1C, 0x1A, 0xE8, 0x95, 0x33, 0x3F, 0xDF, 0x2A, 0x02, 0x36, - 0xD0, 0x00, 0x56, 0x81, 0xE2, 0xF3, 0x00, 0xDB, 0x5D, 0x79, - 0xB6, 0xCC, 0x72, 0x4B, 0x97, 0x5B, 0x8F, 0xFF, 0x02, 0x78, - 0x99, 0x27, 0xDD, 0x60, 0x50, 0xF9, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82, }; - -static const unsigned char data_css_siimple_min_css[] = { - /* /css/siimple.min.css */ - 0x2F, 0x63, 0x73, 0x73, 0x2F, 0x73, 0x69, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x6D, 0x69, 0x6E, 0x2E, 0x63, 0x73, 0x73, 0, - 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x32, - 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0D, 0x0A, 0x6C, 0x77, 0x49, - 0x50, 0x2F, 0x31, 0x2E, 0x34, 0x2E, 0x31, 0x20, 0x28, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x61, 0x76, 0x61, - 0x6E, 0x6E, 0x61, 0x68, 0x2E, 0x6E, 0x6F, 0x6E, 0x67, 0x6E, - 0x75, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x70, 0x72, 0x6F, 0x6A, - 0x65, 0x63, 0x74, 0x73, 0x2F, 0x6C, 0x77, 0x69, 0x70, 0x29, - 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, - 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x2F, 0x63, 0x73, 0x73, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, - 0x2F, 0x2A, 0x2A, 0x0A, 0x20, 0x2A, 0x20, 0x73, 0x69, 0x69, - 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x2D, 0x20, 0x4D, 0x69, 0x6E, - 0x69, 0x6D, 0x61, 0x6C, 0x20, 0x43, 0x53, 0x53, 0x20, 0x66, - 0x72, 0x61, 0x6D, 0x65, 0x77, 0x6F, 0x72, 0x6B, 0x20, 0x66, - 0x6F, 0x72, 0x20, 0x66, 0x6C, 0x61, 0x74, 0x20, 0x61, 0x6E, - 0x64, 0x20, 0x63, 0x6C, 0x65, 0x61, 0x6E, 0x20, 0x64, 0x65, - 0x73, 0x69, 0x67, 0x6E, 0x73, 0x2E, 0x0A, 0x20, 0x2A, 0x20, - 0x40, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x76, - 0x31, 0x2E, 0x33, 0x2E, 0x37, 0x0A, 0x20, 0x2A, 0x20, 0x40, - 0x6C, 0x69, 0x6E, 0x6B, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3A, 0x2F, 0x2F, 0x73, 0x69, 0x69, 0x6D, 0x70, 0x6C, 0x65, - 0x2E, 0x6A, 0x75, 0x61, 0x6E, 0x65, 0x73, 0x2E, 0x78, 0x79, - 0x7A, 0x2F, 0x0A, 0x20, 0x2A, 0x20, 0x40, 0x6C, 0x69, 0x63, - 0x65, 0x6E, 0x73, 0x65, 0x20, 0x4D, 0x49, 0x54, 0x0A, 0x20, - 0x2A, 0x2F, 0x0A, 0x0A, 0x40, 0x69, 0x6D, 0x70, 0x6F, 0x72, - 0x74, 0x20, 0x75, 0x72, 0x6C, 0x28, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3A, 0x2F, 0x2F, 0x66, 0x6F, 0x6E, 0x74, 0x73, 0x2E, - 0x67, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x63, 0x73, 0x73, 0x3F, 0x66, - 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3D, 0x4F, 0x70, 0x65, 0x6E, - 0x2B, 0x53, 0x61, 0x6E, 0x73, 0x3A, 0x34, 0x30, 0x30, 0x2C, - 0x33, 0x30, 0x30, 0x29, 0x3B, 0x6F, 0x6C, 0x2C, 0x6F, 0x6C, - 0x20, 0x6C, 0x69, 0x2C, 0x70, 0x2C, 0x75, 0x6C, 0x2C, 0x75, - 0x6C, 0x20, 0x6C, 0x69, 0x7B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x32, 0x38, 0x70, - 0x78, 0x7D, 0x2E, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x2C, 0x70, - 0x72, 0x65, 0x7B, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x63, - 0x61, 0x6C, 0x63, 0x28, 0x31, 0x30, 0x30, 0x25, 0x20, 0x2D, - 0x20, 0x33, 0x30, 0x70, 0x78, 0x29, 0x7D, 0x2E, 0x61, 0x6C, - 0x65, 0x72, 0x74, 0x2C, 0x2E, 0x62, 0x74, 0x6E, 0x7B, 0x62, - 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, - 0x75, 0x73, 0x3A, 0x35, 0x70, 0x78, 0x7D, 0x2E, 0x68, 0x65, - 0x61, 0x72, 0x74, 0x3A, 0x61, 0x66, 0x74, 0x65, 0x72, 0x7B, - 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x3A, 0x22, 0x5C, - 0x32, 0x37, 0x36, 0x34, 0x22, 0x3B, 0x63, 0x6F, 0x6C, 0x6F, - 0x72, 0x3A, 0x23, 0x66, 0x34, 0x35, 0x36, 0x36, 0x30, 0x7D, - 0x62, 0x6F, 0x64, 0x79, 0x2C, 0x68, 0x31, 0x2C, 0x68, 0x32, - 0x2C, 0x68, 0x33, 0x2C, 0x68, 0x34, 0x2C, 0x68, 0x35, 0x2C, - 0x68, 0x36, 0x7B, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, - 0x35, 0x32, 0x36, 0x34, 0x37, 0x35, 0x7D, 0x62, 0x6F, 0x64, - 0x79, 0x7B, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x30, - 0x3B, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x30, - 0x3B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x66, 0x61, 0x6D, 0x69, - 0x6C, 0x79, 0x3A, 0x27, 0x4F, 0x70, 0x65, 0x6E, 0x20, 0x53, - 0x61, 0x6E, 0x73, 0x27, 0x3B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, - 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x31, 0x36, 0x70, 0x78, 0x3B, - 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3A, 0x33, 0x30, 0x30, 0x3B, 0x62, 0x61, 0x63, 0x6B, - 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, - 0x6F, 0x72, 0x3A, 0x23, 0x66, 0x66, 0x66, 0x7D, 0x2E, 0x61, - 0x6C, 0x65, 0x72, 0x74, 0x20, 0x61, 0x2C, 0x61, 0x7B, 0x74, - 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, - 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, - 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3A, 0x34, 0x30, 0x30, 0x7D, 0x62, 0x6C, 0x6F, 0x63, - 0x6B, 0x71, 0x75, 0x6F, 0x74, 0x65, 0x7B, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x34, - 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, - 0x36, 0x61, 0x37, 0x65, 0x39, 0x35, 0x3B, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x35, 0x70, 0x78, 0x20, 0x35, - 0x70, 0x78, 0x20, 0x35, 0x70, 0x78, 0x20, 0x32, 0x30, 0x70, - 0x78, 0x7D, 0x61, 0x7B, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, - 0x23, 0x30, 0x39, 0x61, 0x30, 0x66, 0x36, 0x3B, 0x74, 0x72, - 0x61, 0x6E, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x61, - 0x6C, 0x6C, 0x20, 0x2E, 0x33, 0x73, 0x7D, 0x61, 0x3A, 0x68, - 0x6F, 0x76, 0x65, 0x72, 0x7B, 0x74, 0x65, 0x78, 0x74, 0x2D, - 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x3A, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x6C, 0x69, 0x6E, 0x65, - 0x3B, 0x63, 0x75, 0x72, 0x73, 0x6F, 0x72, 0x3A, 0x70, 0x6F, - 0x69, 0x6E, 0x74, 0x65, 0x72, 0x7D, 0x70, 0x7B, 0x6D, 0x61, - 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, - 0x6D, 0x3A, 0x32, 0x30, 0x70, 0x78, 0x3B, 0x6D, 0x61, 0x72, - 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, 0x30, 0x3B, - 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x62, 0x6C, - 0x6F, 0x63, 0x6B, 0x7D, 0x6F, 0x6C, 0x2C, 0x75, 0x6C, 0x7B, - 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, - 0x74, 0x6F, 0x6D, 0x3A, 0x31, 0x36, 0x70, 0x78, 0x3B, 0x6D, - 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, 0x3A, - 0x30, 0x7D, 0x2E, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x2C, 0x68, - 0x31, 0x2C, 0x68, 0x32, 0x2C, 0x68, 0x33, 0x2C, 0x68, 0x34, - 0x2C, 0x68, 0x35, 0x2C, 0x68, 0x36, 0x7B, 0x66, 0x6F, 0x6E, - 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x33, - 0x30, 0x30, 0x3B, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, - 0x74, 0x6F, 0x70, 0x3A, 0x30, 0x3B, 0x6D, 0x61, 0x72, 0x67, - 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, - 0x32, 0x30, 0x70, 0x78, 0x3B, 0x64, 0x69, 0x73, 0x70, 0x6C, - 0x61, 0x79, 0x3A, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x7D, 0x73, - 0x6D, 0x61, 0x6C, 0x6C, 0x7B, 0x63, 0x6F, 0x6C, 0x6F, 0x72, - 0x3A, 0x23, 0x36, 0x61, 0x37, 0x65, 0x39, 0x35, 0x3B, 0x66, - 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x31, - 0x34, 0x70, 0x78, 0x7D, 0x68, 0x31, 0x7B, 0x66, 0x6F, 0x6E, - 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x33, 0x36, 0x70, - 0x78, 0x3B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3A, 0x35, 0x30, 0x70, 0x78, 0x7D, 0x68, - 0x32, 0x7B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, - 0x65, 0x3A, 0x33, 0x32, 0x70, 0x78, 0x3B, 0x6C, 0x69, 0x6E, - 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x34, - 0x36, 0x70, 0x78, 0x7D, 0x68, 0x33, 0x7B, 0x66, 0x6F, 0x6E, - 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x32, 0x38, 0x70, - 0x78, 0x3B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3A, 0x34, 0x32, 0x70, 0x78, 0x7D, 0x68, - 0x34, 0x7B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, - 0x65, 0x3A, 0x32, 0x34, 0x70, 0x78, 0x3B, 0x6C, 0x69, 0x6E, - 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x33, - 0x38, 0x70, 0x78, 0x7D, 0x68, 0x35, 0x7B, 0x66, 0x6F, 0x6E, - 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x32, 0x30, 0x70, - 0x78, 0x3B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3A, 0x33, 0x34, 0x70, 0x78, 0x7D, 0x2E, - 0x61, 0x6C, 0x65, 0x72, 0x74, 0x2C, 0x2E, 0x62, 0x74, 0x6E, - 0x2C, 0x68, 0x36, 0x7B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, - 0x69, 0x7A, 0x65, 0x3A, 0x31, 0x36, 0x70, 0x78, 0x7D, 0x68, - 0x36, 0x7B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3A, 0x33, 0x30, 0x70, 0x78, 0x7D, 0x2E, - 0x61, 0x6C, 0x65, 0x72, 0x74, 0x7B, 0x74, 0x65, 0x78, 0x74, - 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x6C, 0x65, 0x66, - 0x74, 0x3B, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3A, 0x31, 0x70, 0x78, 0x3B, 0x62, - 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x73, 0x74, 0x79, 0x6C, - 0x65, 0x3A, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x3B, 0x62, 0x61, - 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, - 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x45, 0x31, 0x46, 0x35, - 0x46, 0x45, 0x3B, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, - 0x30, 0x33, 0x41, 0x39, 0x46, 0x34, 0x3B, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, - 0x23, 0x30, 0x33, 0x41, 0x39, 0x46, 0x34, 0x3B, 0x70, 0x61, - 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x31, 0x36, 0x70, 0x78, - 0x20, 0x31, 0x34, 0x70, 0x78, 0x3B, 0x70, 0x61, 0x64, 0x64, - 0x69, 0x6E, 0x67, 0x3A, 0x31, 0x36, 0x70, 0x78, 0x20, 0x31, - 0x34, 0x70, 0x78, 0x3B, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, - 0x67, 0x3A, 0x31, 0x36, 0x70, 0x78, 0x20, 0x31, 0x34, 0x70, - 0x78, 0x7D, 0x2E, 0x62, 0x74, 0x6E, 0x2C, 0x2E, 0x62, 0x74, - 0x6E, 0x2D, 0x6F, 0x75, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x7B, - 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x66, 0x61, 0x6D, 0x69, 0x6C, - 0x79, 0x3A, 0x27, 0x4F, 0x70, 0x65, 0x6E, 0x20, 0x53, 0x61, - 0x6E, 0x73, 0x27, 0x3B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x33, 0x30, 0x30, 0x3B, - 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x69, 0x6E, - 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x62, 0x6C, 0x6F, 0x63, 0x6B, - 0x3B, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x69, 0x74, 0x69, 0x6F, - 0x6E, 0x3A, 0x61, 0x6C, 0x6C, 0x20, 0x2E, 0x33, 0x73, 0x3B, - 0x2D, 0x77, 0x65, 0x62, 0x6B, 0x69, 0x74, 0x2D, 0x74, 0x6F, - 0x75, 0x63, 0x68, 0x2D, 0x63, 0x61, 0x6C, 0x6C, 0x6F, 0x75, - 0x74, 0x3A, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x2D, 0x6B, 0x68, - 0x74, 0x6D, 0x6C, 0x2D, 0x75, 0x73, 0x65, 0x72, 0x2D, 0x73, - 0x65, 0x6C, 0x65, 0x63, 0x74, 0x3A, 0x6E, 0x6F, 0x6E, 0x65, - 0x3B, 0x2D, 0x6D, 0x6F, 0x7A, 0x2D, 0x75, 0x73, 0x65, 0x72, - 0x2D, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x3A, 0x6E, 0x6F, - 0x6E, 0x65, 0x3B, 0x2D, 0x6D, 0x73, 0x2D, 0x75, 0x73, 0x65, - 0x72, 0x2D, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x3A, 0x6E, - 0x6F, 0x6E, 0x65, 0x3B, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, - 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x63, 0x65, 0x6E, 0x74, 0x65, - 0x72, 0x3B, 0x63, 0x75, 0x72, 0x73, 0x6F, 0x72, 0x3A, 0x70, - 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x3B, 0x6D, 0x61, 0x72, - 0x67, 0x69, 0x6E, 0x3A, 0x35, 0x70, 0x78, 0x20, 0x35, 0x70, - 0x78, 0x20, 0x32, 0x30, 0x70, 0x78, 0x7D, 0x2E, 0x61, 0x6C, - 0x65, 0x72, 0x74, 0x2D, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x7B, - 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x44, 0x33, 0x32, - 0x46, 0x32, 0x46, 0x3B, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, - 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, - 0x3A, 0x23, 0x46, 0x46, 0x45, 0x42, 0x45, 0x45, 0x3B, 0x62, - 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, - 0x72, 0x3A, 0x23, 0x46, 0x34, 0x34, 0x33, 0x33, 0x36, 0x7D, - 0x2E, 0x61, 0x6C, 0x65, 0x72, 0x74, 0x2D, 0x77, 0x61, 0x72, - 0x6E, 0x69, 0x6E, 0x67, 0x7B, 0x62, 0x61, 0x63, 0x6B, 0x67, - 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, - 0x72, 0x3A, 0x23, 0x46, 0x46, 0x46, 0x38, 0x45, 0x31, 0x3B, - 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x46, 0x46, 0x38, - 0x46, 0x30, 0x30, 0x3B, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, - 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x46, 0x46, - 0x43, 0x31, 0x30, 0x37, 0x7D, 0x2E, 0x61, 0x6C, 0x65, 0x72, - 0x74, 0x2D, 0x64, 0x6F, 0x6E, 0x65, 0x7B, 0x62, 0x61, 0x63, - 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, - 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x45, 0x38, 0x46, 0x35, 0x45, - 0x39, 0x3B, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x33, - 0x38, 0x38, 0x45, 0x33, 0x43, 0x3B, 0x62, 0x6F, 0x72, 0x64, - 0x65, 0x72, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, - 0x34, 0x43, 0x41, 0x46, 0x35, 0x30, 0x7D, 0x2E, 0x62, 0x74, - 0x6E, 0x7B, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, - 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x6E, 0x6F, - 0x6E, 0x65, 0x21, 0x69, 0x6D, 0x70, 0x6F, 0x72, 0x74, 0x61, - 0x6E, 0x74, 0x3B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3A, 0x32, 0x38, 0x70, 0x78, 0x3B, - 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x66, 0x66, 0x66, - 0x3B, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, - 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x30, - 0x39, 0x61, 0x30, 0x66, 0x36, 0x3B, 0x62, 0x6F, 0x72, 0x64, - 0x65, 0x72, 0x3A, 0x30, 0x3B, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6E, 0x67, 0x3A, 0x35, 0x70, 0x78, 0x20, 0x32, 0x35, 0x70, - 0x78, 0x7D, 0x2E, 0x62, 0x74, 0x6E, 0x3A, 0x68, 0x6F, 0x76, - 0x65, 0x72, 0x7B, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, - 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x6E, - 0x6F, 0x6E, 0x65, 0x3B, 0x6F, 0x70, 0x61, 0x63, 0x69, 0x74, - 0x79, 0x3A, 0x2E, 0x38, 0x7D, 0x2E, 0x62, 0x74, 0x6E, 0x2D, - 0x73, 0x6D, 0x61, 0x6C, 0x6C, 0x7B, 0x66, 0x6F, 0x6E, 0x74, - 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x31, 0x34, 0x70, 0x78, - 0x21, 0x69, 0x6D, 0x70, 0x6F, 0x72, 0x74, 0x61, 0x6E, 0x74, - 0x3B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3A, 0x32, 0x30, 0x70, 0x78, 0x21, 0x69, 0x6D, - 0x70, 0x6F, 0x72, 0x74, 0x61, 0x6E, 0x74, 0x3B, 0x70, 0x61, - 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x34, 0x70, 0x78, 0x20, - 0x31, 0x35, 0x70, 0x78, 0x21, 0x69, 0x6D, 0x70, 0x6F, 0x72, - 0x74, 0x61, 0x6E, 0x74, 0x7D, 0x2E, 0x62, 0x74, 0x6E, 0x2D, - 0x62, 0x69, 0x67, 0x7B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, - 0x69, 0x7A, 0x65, 0x3A, 0x32, 0x32, 0x70, 0x78, 0x21, 0x69, - 0x6D, 0x70, 0x6F, 0x72, 0x74, 0x61, 0x6E, 0x74, 0x3B, 0x6C, - 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3A, 0x33, 0x34, 0x70, 0x78, 0x21, 0x69, 0x6D, 0x70, 0x6F, - 0x72, 0x74, 0x61, 0x6E, 0x74, 0x3B, 0x70, 0x61, 0x64, 0x64, - 0x69, 0x6E, 0x67, 0x3A, 0x38, 0x70, 0x78, 0x20, 0x33, 0x30, - 0x70, 0x78, 0x21, 0x69, 0x6D, 0x70, 0x6F, 0x72, 0x74, 0x61, - 0x6E, 0x74, 0x7D, 0x2E, 0x62, 0x74, 0x6E, 0x2D, 0x6F, 0x75, - 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x2C, 0x70, 0x72, 0x65, 0x7B, - 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3A, 0x32, 0x38, 0x70, 0x78, 0x7D, 0x2E, 0x62, 0x74, - 0x6E, 0x2D, 0x6F, 0x75, 0x74, 0x6C, 0x69, 0x6E, 0x65, 0x7B, - 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, - 0x31, 0x36, 0x70, 0x78, 0x3B, 0x74, 0x65, 0x78, 0x74, 0x2D, - 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, - 0x3A, 0x6E, 0x6F, 0x6E, 0x65, 0x21, 0x69, 0x6D, 0x70, 0x6F, - 0x72, 0x74, 0x61, 0x6E, 0x74, 0x3B, 0x62, 0x6F, 0x72, 0x64, - 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x3A, - 0x35, 0x70, 0x78, 0x3B, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, - 0x23, 0x30, 0x39, 0x61, 0x30, 0x66, 0x36, 0x3B, 0x62, 0x61, - 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, - 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x74, 0x72, 0x61, 0x6E, 0x73, - 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x3B, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x3A, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, - 0x6C, 0x69, 0x64, 0x20, 0x23, 0x30, 0x39, 0x61, 0x30, 0x66, - 0x36, 0x3B, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, - 0x35, 0x70, 0x78, 0x20, 0x32, 0x35, 0x70, 0x78, 0x7D, 0x2E, - 0x62, 0x74, 0x6E, 0x2D, 0x6F, 0x75, 0x74, 0x6C, 0x69, 0x6E, - 0x65, 0x3A, 0x68, 0x6F, 0x76, 0x65, 0x72, 0x7B, 0x74, 0x65, - 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, - 0x69, 0x6F, 0x6E, 0x3A, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x63, - 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x66, 0x66, 0x66, 0x3B, - 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, - 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x30, 0x39, - 0x61, 0x30, 0x66, 0x36, 0x7D, 0x63, 0x6F, 0x64, 0x65, 0x2C, - 0x70, 0x72, 0x65, 0x7B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x66, - 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3A, 0x27, 0x4F, 0x70, 0x65, - 0x6E, 0x20, 0x53, 0x61, 0x6E, 0x73, 0x27, 0x3B, 0x66, 0x6F, - 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x31, 0x36, - 0x70, 0x78, 0x3B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3A, 0x33, 0x30, 0x30, 0x3B, 0x62, - 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, - 0x75, 0x73, 0x3A, 0x35, 0x70, 0x78, 0x3B, 0x62, 0x61, 0x63, - 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, - 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x66, 0x31, 0x66, 0x35, 0x66, - 0x61, 0x7D, 0x63, 0x6F, 0x64, 0x65, 0x7B, 0x63, 0x6F, 0x6C, - 0x6F, 0x72, 0x3A, 0x23, 0x30, 0x39, 0x61, 0x30, 0x66, 0x36, - 0x3B, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x6C, - 0x65, 0x66, 0x74, 0x3A, 0x36, 0x70, 0x78, 0x3B, 0x70, 0x61, - 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x3A, 0x36, 0x70, 0x78, 0x7D, 0x70, 0x72, 0x65, 0x7B, - 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x62, 0x6C, - 0x6F, 0x63, 0x6B, 0x3B, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, - 0x67, 0x3A, 0x31, 0x34, 0x70, 0x78, 0x3B, 0x6D, 0x61, 0x72, - 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, - 0x3A, 0x32, 0x30, 0x70, 0x78, 0x3B, 0x63, 0x6F, 0x6C, 0x6F, - 0x72, 0x3A, 0x23, 0x35, 0x32, 0x36, 0x34, 0x37, 0x35, 0x3B, - 0x6F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x2D, 0x78, - 0x3A, 0x61, 0x75, 0x74, 0x6F, 0x7D, 0x2E, 0x66, 0x6F, 0x72, - 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6C, 0x65, 0x64, 0x5D, 0x2C, 0x2E, 0x66, - 0x6F, 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, - 0x74, 0x79, 0x70, 0x65, 0x3D, 0x74, 0x65, 0x78, 0x74, 0x5D, - 0x2C, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, - 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x70, 0x61, - 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 0x5D, 0x2C, 0x2E, 0x66, - 0x6F, 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, - 0x74, 0x79, 0x70, 0x65, 0x3D, 0x6E, 0x75, 0x6D, 0x62, 0x65, - 0x72, 0x5D, 0x2C, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, - 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, - 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x5D, 0x2C, 0x2E, 0x66, 0x6F, - 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, - 0x79, 0x70, 0x65, 0x3D, 0x64, 0x61, 0x74, 0x65, 0x5D, 0x7B, - 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x35, 0x32, 0x36, - 0x34, 0x37, 0x35, 0x3B, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, - 0x67, 0x3A, 0x31, 0x30, 0x70, 0x78, 0x3B, 0x6F, 0x75, 0x74, - 0x6C, 0x69, 0x6E, 0x65, 0x3A, 0x30, 0x3B, 0x62, 0x6F, 0x78, - 0x2D, 0x73, 0x69, 0x7A, 0x69, 0x6E, 0x67, 0x3A, 0x62, 0x6F, - 0x72, 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, 0x78, 0x3B, 0x6D, - 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x30, 0x20, 0x35, 0x70, - 0x78, 0x20, 0x32, 0x30, 0x70, 0x78, 0x3B, 0x66, 0x6F, 0x6E, - 0x74, 0x2D, 0x66, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3A, 0x27, - 0x4F, 0x70, 0x65, 0x6E, 0x20, 0x53, 0x61, 0x6E, 0x73, 0x27, - 0x3B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, - 0x3A, 0x31, 0x36, 0x70, 0x78, 0x3B, 0x66, 0x6F, 0x6E, 0x74, - 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x33, 0x30, - 0x30, 0x3B, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, - 0x69, 0x6E, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x62, 0x6C, 0x6F, - 0x63, 0x6B, 0x3B, 0x74, 0x72, 0x61, 0x6E, 0x73, 0x69, 0x74, - 0x69, 0x6F, 0x6E, 0x3A, 0x61, 0x6C, 0x6C, 0x20, 0x2E, 0x33, - 0x73, 0x3B, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x34, - 0x30, 0x70, 0x78, 0x7D, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, - 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, - 0x3D, 0x74, 0x65, 0x78, 0x74, 0x5D, 0x2C, 0x2E, 0x66, 0x6F, - 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, - 0x79, 0x70, 0x65, 0x3D, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, - 0x72, 0x64, 0x5D, 0x2C, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, - 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, - 0x3D, 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x5D, 0x2C, 0x2E, - 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, - 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x65, 0x6D, 0x61, 0x69, - 0x6C, 0x5D, 0x7B, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x31, - 0x30, 0x30, 0x25, 0x3B, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, - 0x3A, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, - 0x20, 0x23, 0x64, 0x31, 0x65, 0x31, 0x65, 0x38, 0x3B, 0x62, - 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, - 0x75, 0x73, 0x3A, 0x35, 0x70, 0x78, 0x3B, 0x6C, 0x69, 0x6E, - 0x65, 0x2D, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x34, - 0x30, 0x70, 0x78, 0x7D, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, - 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, - 0x3D, 0x74, 0x65, 0x78, 0x74, 0x5D, 0x3A, 0x66, 0x6F, 0x63, - 0x75, 0x73, 0x2C, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, - 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 0x5D, 0x3A, - 0x66, 0x6F, 0x63, 0x75, 0x73, 0x2C, 0x2E, 0x66, 0x6F, 0x72, - 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, - 0x70, 0x65, 0x3D, 0x6E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x5D, - 0x3A, 0x66, 0x6F, 0x63, 0x75, 0x73, 0x2C, 0x2E, 0x66, 0x6F, - 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, - 0x79, 0x70, 0x65, 0x3D, 0x65, 0x6D, 0x61, 0x69, 0x6C, 0x5D, - 0x3A, 0x66, 0x6F, 0x63, 0x75, 0x73, 0x7B, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x3A, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, - 0x6C, 0x69, 0x64, 0x20, 0x23, 0x30, 0x39, 0x61, 0x30, 0x66, - 0x36, 0x7D, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, 0x6E, - 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x64, - 0x61, 0x74, 0x65, 0x5D, 0x7B, 0x62, 0x6F, 0x72, 0x64, 0x65, - 0x72, 0x3A, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, - 0x64, 0x20, 0x23, 0x64, 0x31, 0x65, 0x31, 0x65, 0x38, 0x3B, - 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, - 0x69, 0x75, 0x73, 0x3A, 0x35, 0x70, 0x78, 0x3B, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3A, 0x61, 0x75, 0x74, 0x6F, 0x21, 0x69, - 0x6D, 0x70, 0x6F, 0x72, 0x74, 0x61, 0x6E, 0x74, 0x7D, 0x2E, - 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, - 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x64, 0x61, 0x74, 0x65, - 0x5D, 0x3A, 0x66, 0x6F, 0x63, 0x75, 0x73, 0x7B, 0x62, 0x6F, - 0x72, 0x64, 0x65, 0x72, 0x3A, 0x31, 0x70, 0x78, 0x20, 0x73, - 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x30, 0x39, 0x61, 0x30, - 0x66, 0x36, 0x7D, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, - 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6C, 0x65, 0x64, 0x5D, 0x7B, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3A, 0x31, 0x30, 0x30, 0x25, 0x3B, 0x62, 0x6F, 0x72, 0x64, - 0x65, 0x72, 0x3A, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, - 0x69, 0x64, 0x20, 0x23, 0x64, 0x31, 0x65, 0x31, 0x65, 0x38, - 0x3B, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, - 0x64, 0x69, 0x75, 0x73, 0x3A, 0x35, 0x70, 0x78, 0x3B, 0x63, - 0x75, 0x72, 0x73, 0x6F, 0x72, 0x3A, 0x6E, 0x6F, 0x74, 0x2D, - 0x61, 0x6C, 0x6C, 0x6F, 0x77, 0x65, 0x64, 0x3B, 0x62, 0x61, - 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, - 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x64, 0x31, 0x65, 0x31, - 0x65, 0x38, 0x7D, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, - 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6C, 0x65, 0x64, 0x5D, 0x3A, 0x66, 0x6F, 0x63, 0x75, 0x73, - 0x7B, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, 0x31, 0x70, - 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x30, - 0x39, 0x61, 0x30, 0x66, 0x36, 0x7D, 0x2E, 0x66, 0x6F, 0x72, - 0x6D, 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, - 0x70, 0x65, 0x3D, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x5D, - 0x2C, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x69, 0x6E, 0x70, - 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, 0x3D, 0x62, 0x75, - 0x74, 0x74, 0x6F, 0x6E, 0x5D, 0x7B, 0x66, 0x6F, 0x6E, 0x74, - 0x2D, 0x66, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3A, 0x27, 0x4F, - 0x70, 0x65, 0x6E, 0x20, 0x53, 0x61, 0x6E, 0x73, 0x27, 0x3B, - 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, - 0x31, 0x36, 0x70, 0x78, 0x3B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x33, 0x30, 0x30, - 0x3B, 0x2D, 0x77, 0x65, 0x62, 0x6B, 0x69, 0x74, 0x2D, 0x74, - 0x6F, 0x75, 0x63, 0x68, 0x2D, 0x63, 0x61, 0x6C, 0x6C, 0x6F, - 0x75, 0x74, 0x3A, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x2D, 0x6B, - 0x68, 0x74, 0x6D, 0x6C, 0x2D, 0x75, 0x73, 0x65, 0x72, 0x2D, - 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x3A, 0x6E, 0x6F, 0x6E, - 0x65, 0x3B, 0x2D, 0x6D, 0x6F, 0x7A, 0x2D, 0x75, 0x73, 0x65, - 0x72, 0x2D, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x3A, 0x6E, - 0x6F, 0x6E, 0x65, 0x3B, 0x2D, 0x6D, 0x73, 0x2D, 0x75, 0x73, - 0x65, 0x72, 0x2D, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x3A, - 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x74, 0x65, 0x78, 0x74, 0x2D, - 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x63, 0x65, 0x6E, 0x74, - 0x65, 0x72, 0x3B, 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, - 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x6E, - 0x6F, 0x6E, 0x65, 0x21, 0x69, 0x6D, 0x70, 0x6F, 0x72, 0x74, - 0x61, 0x6E, 0x74, 0x3B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x32, 0x38, 0x70, 0x78, - 0x3B, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x69, - 0x6E, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x62, 0x6C, 0x6F, 0x63, - 0x6B, 0x3B, 0x63, 0x75, 0x72, 0x73, 0x6F, 0x72, 0x3A, 0x70, - 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x3B, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, - 0x3A, 0x35, 0x70, 0x78, 0x3B, 0x74, 0x72, 0x61, 0x6E, 0x73, - 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x61, 0x6C, 0x6C, 0x20, - 0x2E, 0x33, 0x73, 0x3B, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, - 0x23, 0x66, 0x66, 0x66, 0x3B, 0x62, 0x61, 0x63, 0x6B, 0x67, - 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, - 0x72, 0x3A, 0x23, 0x30, 0x39, 0x61, 0x30, 0x66, 0x36, 0x3B, - 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, 0x30, 0x3B, 0x6D, - 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x35, 0x70, 0x78, 0x20, - 0x35, 0x70, 0x78, 0x20, 0x32, 0x30, 0x70, 0x78, 0x3B, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x35, 0x70, 0x78, - 0x20, 0x32, 0x35, 0x70, 0x78, 0x7D, 0x2E, 0x66, 0x6F, 0x72, - 0x6D, 0x2D, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x2C, 0x2E, - 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x74, 0x65, 0x78, 0x74, 0x61, - 0x72, 0x65, 0x61, 0x7B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x66, - 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3A, 0x27, 0x4F, 0x70, 0x65, - 0x6E, 0x20, 0x53, 0x61, 0x6E, 0x73, 0x27, 0x3B, 0x66, 0x6F, - 0x6E, 0x74, 0x2D, 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x31, 0x36, - 0x70, 0x78, 0x3B, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, - 0x3A, 0x69, 0x6E, 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x62, 0x6C, - 0x6F, 0x63, 0x6B, 0x3B, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, - 0x31, 0x30, 0x30, 0x25, 0x3B, 0x74, 0x72, 0x61, 0x6E, 0x73, - 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x61, 0x6C, 0x6C, 0x20, - 0x2E, 0x33, 0x73, 0x3B, 0x6F, 0x75, 0x74, 0x6C, 0x69, 0x6E, - 0x65, 0x3A, 0x30, 0x3B, 0x62, 0x6F, 0x78, 0x2D, 0x73, 0x69, - 0x7A, 0x69, 0x6E, 0x67, 0x3A, 0x62, 0x6F, 0x72, 0x64, 0x65, - 0x72, 0x2D, 0x62, 0x6F, 0x78, 0x3B, 0x6D, 0x61, 0x72, 0x67, - 0x69, 0x6E, 0x3A, 0x30, 0x20, 0x35, 0x70, 0x78, 0x20, 0x32, - 0x30, 0x70, 0x78, 0x3B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x33, 0x30, 0x30, 0x3B, - 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x35, 0x32, 0x36, - 0x34, 0x37, 0x35, 0x7D, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, - 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, 0x65, - 0x3D, 0x73, 0x75, 0x62, 0x6D, 0x69, 0x74, 0x5D, 0x3A, 0x68, - 0x6F, 0x76, 0x65, 0x72, 0x2C, 0x2E, 0x66, 0x6F, 0x72, 0x6D, - 0x2D, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x5B, 0x74, 0x79, 0x70, - 0x65, 0x3D, 0x62, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x5D, 0x3A, - 0x68, 0x6F, 0x76, 0x65, 0x72, 0x7B, 0x74, 0x65, 0x78, 0x74, - 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, 0x61, 0x74, 0x69, 0x6F, - 0x6E, 0x3A, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x6F, 0x70, 0x61, - 0x63, 0x69, 0x74, 0x79, 0x3A, 0x2E, 0x38, 0x7D, 0x2E, 0x66, - 0x6F, 0x72, 0x6D, 0x2D, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, - 0x7B, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x36, - 0x70, 0x78, 0x20, 0x31, 0x30, 0x70, 0x78, 0x20, 0x31, 0x30, - 0x70, 0x78, 0x3B, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, - 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, - 0x23, 0x64, 0x31, 0x65, 0x31, 0x65, 0x38, 0x3B, 0x62, 0x6F, - 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, 0x75, - 0x73, 0x3A, 0x35, 0x70, 0x78, 0x3B, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3A, 0x34, 0x30, 0x70, 0x78, 0x3B, 0x62, 0x61, - 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, 0x63, - 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x66, 0x66, 0x66, 0x7D, - 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x73, 0x65, 0x6C, 0x65, - 0x63, 0x74, 0x3A, 0x66, 0x6F, 0x63, 0x75, 0x73, 0x7B, 0x62, - 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, 0x31, 0x70, 0x78, 0x20, - 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x30, 0x39, 0x61, - 0x30, 0x66, 0x36, 0x7D, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, - 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x7B, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x31, 0x30, 0x70, - 0x78, 0x3B, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, 0x31, - 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, - 0x64, 0x31, 0x65, 0x31, 0x65, 0x38, 0x3B, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, - 0x3A, 0x35, 0x70, 0x78, 0x3B, 0x72, 0x65, 0x73, 0x69, 0x7A, - 0x65, 0x3A, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6C, - 0x7D, 0x2E, 0x66, 0x6F, 0x72, 0x6D, 0x2D, 0x74, 0x65, 0x78, - 0x74, 0x61, 0x72, 0x65, 0x61, 0x3A, 0x66, 0x6F, 0x63, 0x75, - 0x73, 0x7B, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, 0x31, - 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, - 0x30, 0x39, 0x61, 0x30, 0x66, 0x36, 0x7D, 0x2E, 0x66, 0x6F, - 0x72, 0x6D, 0x2D, 0x61, 0x75, 0x74, 0x6F, 0x7B, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3A, 0x61, 0x75, 0x74, 0x6F, 0x21, 0x69, - 0x6D, 0x70, 0x6F, 0x72, 0x74, 0x61, 0x6E, 0x74, 0x7D, 0x2E, - 0x67, 0x72, 0x69, 0x64, 0x7B, 0x64, 0x69, 0x73, 0x70, 0x6C, - 0x61, 0x79, 0x3A, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x3B, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3A, 0x39, 0x36, 0x30, 0x70, 0x78, - 0x3B, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, - 0x66, 0x74, 0x3A, 0x61, 0x75, 0x74, 0x6F, 0x3B, 0x6D, 0x61, - 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x3A, 0x61, 0x75, 0x74, 0x6F, 0x3B, 0x6D, 0x69, 0x6E, 0x2D, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x34, 0x30, 0x70, - 0x78, 0x7D, 0x40, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x20, 0x28, - 0x6D, 0x61, 0x78, 0x2D, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, - 0x39, 0x36, 0x30, 0x70, 0x78, 0x29, 0x7B, 0x2E, 0x67, 0x72, - 0x69, 0x64, 0x7B, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x39, - 0x34, 0x25, 0x7D, 0x7D, 0x2E, 0x67, 0x72, 0x69, 0x64, 0x2D, - 0x66, 0x6C, 0x75, 0x69, 0x64, 0x2C, 0x2E, 0x72, 0x6F, 0x77, - 0x7B, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x31, 0x30, 0x30, - 0x25, 0x7D, 0x2E, 0x72, 0x6F, 0x77, 0x7B, 0x64, 0x69, 0x73, - 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x69, 0x6E, 0x6C, 0x69, 0x6E, - 0x65, 0x2D, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x3B, 0x6D, 0x61, - 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, - 0x30, 0x3B, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3A, 0x30, 0x7D, 0x2E, 0x72, 0x6F, - 0x77, 0x3A, 0x61, 0x66, 0x74, 0x65, 0x72, 0x7B, 0x63, 0x6F, - 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x3A, 0x22, 0x20, 0x22, 0x3B, - 0x63, 0x6C, 0x65, 0x61, 0x72, 0x3A, 0x62, 0x6F, 0x74, 0x68, - 0x3B, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x74, - 0x61, 0x62, 0x6C, 0x65, 0x3B, 0x6C, 0x69, 0x6E, 0x65, 0x2D, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x30, 0x7D, 0x2E, - 0x63, 0x6F, 0x6C, 0x2D, 0x31, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, - 0x2D, 0x31, 0x30, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x31, - 0x31, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x31, 0x32, 0x2C, - 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x32, 0x2C, 0x2E, 0x63, 0x6F, - 0x6C, 0x2D, 0x33, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x34, - 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x35, 0x2C, 0x2E, 0x63, - 0x6F, 0x6C, 0x2D, 0x37, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, - 0x38, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x39, 0x7B, 0x64, - 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x69, 0x6E, 0x6C, - 0x69, 0x6E, 0x65, 0x2D, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x3B, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x2D, 0x61, - 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x74, 0x6F, 0x70, 0x3B, 0x66, - 0x6C, 0x6F, 0x61, 0x74, 0x3A, 0x6C, 0x65, 0x66, 0x74, 0x3B, - 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x31, 0x25, - 0x7D, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x31, 0x7B, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3A, 0x36, 0x2E, 0x33, 0x33, 0x25, 0x7D, - 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x32, 0x7B, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x31, 0x34, 0x2E, 0x36, 0x36, 0x25, 0x7D, - 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x33, 0x7B, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x32, 0x32, 0x2E, 0x39, 0x39, 0x25, 0x7D, - 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x34, 0x7B, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x33, 0x31, 0x2E, 0x33, 0x33, 0x25, 0x7D, - 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x35, 0x7B, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x33, 0x39, 0x2E, 0x36, 0x36, 0x25, 0x7D, - 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x36, 0x7B, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x34, 0x37, 0x2E, 0x39, 0x39, 0x25, 0x3B, - 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x69, 0x6E, - 0x6C, 0x69, 0x6E, 0x65, 0x2D, 0x62, 0x6C, 0x6F, 0x63, 0x6B, - 0x3B, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6C, 0x2D, - 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x74, 0x6F, 0x70, 0x3B, - 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x3A, 0x6C, 0x65, 0x66, 0x74, - 0x3B, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x31, - 0x25, 0x7D, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x37, 0x7B, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3A, 0x35, 0x36, 0x2E, 0x33, 0x33, - 0x25, 0x7D, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x38, 0x7B, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3A, 0x36, 0x34, 0x2E, 0x36, 0x36, - 0x25, 0x7D, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x39, 0x7B, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3A, 0x37, 0x32, 0x2E, 0x39, 0x39, - 0x25, 0x7D, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x31, 0x30, 0x7B, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x38, 0x31, 0x2E, 0x33, - 0x33, 0x25, 0x7D, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x31, 0x31, - 0x7B, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x38, 0x39, 0x2E, - 0x36, 0x36, 0x25, 0x7D, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x31, - 0x32, 0x7B, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x39, 0x37, - 0x2E, 0x39, 0x39, 0x25, 0x7D, 0x40, 0x6D, 0x65, 0x64, 0x69, - 0x61, 0x20, 0x28, 0x6D, 0x61, 0x78, 0x2D, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x34, 0x30, 0x30, 0x70, 0x78, 0x29, 0x7B, - 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x31, 0x2C, 0x2E, 0x63, 0x6F, - 0x6C, 0x2D, 0x31, 0x30, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, - 0x31, 0x31, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x31, 0x32, - 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x32, 0x2C, 0x2E, 0x63, - 0x6F, 0x6C, 0x2D, 0x33, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, - 0x34, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x35, 0x2C, 0x2E, - 0x63, 0x6F, 0x6C, 0x2D, 0x36, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, - 0x2D, 0x37, 0x2C, 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x38, 0x2C, - 0x2E, 0x63, 0x6F, 0x6C, 0x2D, 0x39, 0x7B, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x39, 0x38, 0x25, 0x7D, 0x7D, 0x2E, 0x74, - 0x61, 0x62, 0x6C, 0x65, 0x7B, 0x64, 0x69, 0x73, 0x70, 0x6C, - 0x61, 0x79, 0x3A, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x3B, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3A, 0x31, 0x30, 0x30, 0x25, 0x3B, - 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x30, 0x3B, 0x62, 0x6F, 0x72, 0x64, 0x65, - 0x72, 0x2D, 0x63, 0x6F, 0x6C, 0x6C, 0x61, 0x70, 0x73, 0x65, - 0x3A, 0x63, 0x6F, 0x6C, 0x6C, 0x61, 0x70, 0x73, 0x65, 0x3B, - 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3A, 0x33, 0x30, 0x30, 0x3B, 0x63, 0x6F, 0x6C, 0x6F, - 0x72, 0x3A, 0x23, 0x35, 0x32, 0x36, 0x34, 0x37, 0x35, 0x3B, - 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, 0x74, 0x6F, 0x70, - 0x3A, 0x30, 0x3B, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, 0x2D, - 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, 0x32, 0x30, 0x70, - 0x78, 0x7D, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x64, 0x20, 0x74, 0x72, 0x20, 0x74, 0x64, - 0x7B, 0x66, 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3A, 0x34, 0x30, 0x30, 0x3B, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, - 0x3A, 0x32, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, - 0x20, 0x23, 0x64, 0x31, 0x65, 0x31, 0x65, 0x38, 0x3B, 0x62, - 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x2D, - 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x23, 0x66, 0x36, 0x66, - 0x38, 0x66, 0x61, 0x7D, 0x2E, 0x74, 0x61, 0x62, 0x6C, 0x65, - 0x20, 0x74, 0x72, 0x20, 0x74, 0x64, 0x7B, 0x62, 0x6F, 0x72, - 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, - 0x3A, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, - 0x20, 0x23, 0x64, 0x31, 0x65, 0x31, 0x65, 0x38, 0x3B, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x74, 0x6F, 0x70, - 0x3A, 0x31, 0x30, 0x70, 0x78, 0x3B, 0x70, 0x61, 0x64, 0x64, - 0x69, 0x6E, 0x67, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, - 0x3A, 0x31, 0x30, 0x70, 0x78, 0x3B, 0x70, 0x61, 0x64, 0x64, - 0x69, 0x6E, 0x67, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x31, - 0x30, 0x70, 0x78, 0x7D, }; - -static const unsigned char data_css_style_css[] = { - /* /css/style.css */ - 0x2F, 0x63, 0x73, 0x73, 0x2F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x2E, 0x63, 0x73, 0x73, 0, - 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x20, 0x32, - 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0D, 0x0A, 0x6C, 0x77, 0x49, - 0x50, 0x2F, 0x31, 0x2E, 0x34, 0x2E, 0x31, 0x20, 0x28, 0x68, - 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x73, 0x61, 0x76, 0x61, - 0x6E, 0x6E, 0x61, 0x68, 0x2E, 0x6E, 0x6F, 0x6E, 0x67, 0x6E, - 0x75, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x70, 0x72, 0x6F, 0x6A, - 0x65, 0x63, 0x74, 0x73, 0x2F, 0x6C, 0x77, 0x69, 0x70, 0x29, - 0x0D, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, - 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x2F, 0x63, 0x73, 0x73, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, - 0x75, 0x6C, 0x2E, 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, 0x20, - 0x7B, 0x0A, 0x09, 0x6C, 0x69, 0x73, 0x74, 0x2D, 0x73, 0x74, - 0x79, 0x6C, 0x65, 0x2D, 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, - 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x0A, 0x09, 0x6D, 0x61, 0x72, - 0x67, 0x69, 0x6E, 0x2D, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, - 0x3A, 0x20, 0x33, 0x32, 0x70, 0x78, 0x3B, 0x0A, 0x09, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x30, 0x3B, - 0x0A, 0x09, 0x6F, 0x76, 0x65, 0x72, 0x66, 0x6C, 0x6F, 0x77, - 0x3A, 0x20, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6E, 0x3B, 0x0A, - 0x09, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, - 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, - 0x33, 0x33, 0x33, 0x3B, 0x0A, 0x7D, 0x0A, 0x75, 0x6C, 0x2E, - 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, 0x20, 0x6C, 0x69, 0x20, - 0x7B, 0x0A, 0x09, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x3A, 0x20, - 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x0A, 0x7D, 0x0A, 0x75, 0x6C, - 0x2E, 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, 0x20, 0x6C, 0x69, - 0x20, 0x61, 0x20, 0x7B, 0x0A, 0x09, 0x64, 0x69, 0x73, 0x70, - 0x6C, 0x61, 0x79, 0x3A, 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, - 0x3B, 0x0A, 0x09, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, - 0x77, 0x68, 0x69, 0x74, 0x65, 0x3B, 0x0A, 0x09, 0x74, 0x65, - 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, - 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x3B, 0x0A, 0x09, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x3A, 0x20, 0x31, 0x34, - 0x70, 0x78, 0x20, 0x31, 0x36, 0x70, 0x78, 0x3B, 0x0A, 0x09, - 0x74, 0x65, 0x78, 0x74, 0x2D, 0x64, 0x65, 0x63, 0x6F, 0x72, - 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, - 0x65, 0x3B, 0x0A, 0x7D, 0x0A, 0x75, 0x6C, 0x2E, 0x6E, 0x61, - 0x76, 0x62, 0x61, 0x72, 0x20, 0x6C, 0x69, 0x20, 0x61, 0x3A, - 0x68, 0x6F, 0x76, 0x65, 0x72, 0x3A, 0x6E, 0x6F, 0x74, 0x28, - 0x2E, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x29, 0x20, 0x7B, - 0x0A, 0x09, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, - 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, - 0x23, 0x31, 0x31, 0x31, 0x3B, 0x0A, 0x7D, 0x0A, 0x75, 0x6C, - 0x2E, 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, 0x20, 0x6C, 0x69, - 0x20, 0x61, 0x2E, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x7B, 0x0A, 0x09, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, - 0x75, 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, - 0x20, 0x23, 0x30, 0x39, 0x61, 0x30, 0x66, 0x36, 0x3B, 0x0A, - 0x7D, 0x0A, 0x40, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x20, 0x73, - 0x63, 0x72, 0x65, 0x65, 0x6E, 0x20, 0x61, 0x6E, 0x64, 0x20, - 0x28, 0x6D, 0x61, 0x78, 0x2D, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3A, 0x20, 0x36, 0x30, 0x30, 0x70, 0x78, 0x29, 0x7B, 0x0A, - 0x09, 0x75, 0x6C, 0x2E, 0x6E, 0x61, 0x76, 0x62, 0x61, 0x72, - 0x20, 0x6C, 0x69, 0x2E, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2C, - 0x20, 0x0A, 0x09, 0x75, 0x6C, 0x2E, 0x6E, 0x61, 0x76, 0x62, - 0x61, 0x72, 0x20, 0x6C, 0x69, 0x20, 0x7B, 0x66, 0x6C, 0x6F, - 0x61, 0x74, 0x3A, 0x20, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x7D, - 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x7B, 0x0A, 0x09, 0x70, - 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x72, - 0x65, 0x6C, 0x61, 0x74, 0x69, 0x76, 0x65, 0x3B, 0x20, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x39, 0x30, 0x70, 0x78, - 0x3B, 0x0A, 0x09, 0x2D, 0x77, 0x65, 0x62, 0x6B, 0x69, 0x74, - 0x2D, 0x75, 0x73, 0x65, 0x72, 0x2D, 0x73, 0x65, 0x6C, 0x65, - 0x63, 0x74, 0x3A, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x20, 0x2D, - 0x6D, 0x6F, 0x7A, 0x2D, 0x75, 0x73, 0x65, 0x72, 0x2D, 0x73, - 0x65, 0x6C, 0x65, 0x63, 0x74, 0x3A, 0x6E, 0x6F, 0x6E, 0x65, - 0x3B, 0x20, 0x2D, 0x6D, 0x73, 0x2D, 0x75, 0x73, 0x65, 0x72, - 0x2D, 0x73, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x3A, 0x20, 0x6E, - 0x6F, 0x6E, 0x65, 0x3B, 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, - 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, - 0x63, 0x68, 0x65, 0x63, 0x6B, 0x62, 0x6F, 0x78, 0x20, 0x7B, - 0x0A, 0x09, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, - 0x20, 0x6E, 0x6F, 0x6E, 0x65, 0x3B, 0x0A, 0x7D, 0x0A, 0x2E, - 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, - 0x68, 0x2D, 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x7B, 0x0A, - 0x09, 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x20, - 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x3B, 0x20, 0x6F, 0x76, 0x65, - 0x72, 0x66, 0x6C, 0x6F, 0x77, 0x3A, 0x20, 0x68, 0x69, 0x64, - 0x64, 0x65, 0x6E, 0x3B, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6F, - 0x72, 0x3A, 0x20, 0x70, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, - 0x3B, 0x0A, 0x09, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, - 0x20, 0x32, 0x70, 0x78, 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, - 0x20, 0x23, 0x30, 0x33, 0x41, 0x39, 0x46, 0x34, 0x3B, 0x20, - 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, - 0x69, 0x75, 0x73, 0x3A, 0x20, 0x32, 0x30, 0x70, 0x78, 0x3B, - 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x69, 0x6E, 0x6E, 0x65, - 0x72, 0x20, 0x7B, 0x0A, 0x09, 0x64, 0x69, 0x73, 0x70, 0x6C, - 0x61, 0x79, 0x3A, 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x3B, - 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3A, 0x20, 0x32, 0x30, - 0x30, 0x25, 0x3B, 0x20, 0x6D, 0x61, 0x72, 0x67, 0x69, 0x6E, - 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, 0x2D, 0x31, 0x30, - 0x30, 0x25, 0x3B, 0x0A, 0x09, 0x74, 0x72, 0x61, 0x6E, 0x73, - 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x6D, 0x61, 0x72, - 0x67, 0x69, 0x6E, 0x20, 0x30, 0x2E, 0x33, 0x73, 0x20, 0x65, - 0x61, 0x73, 0x65, 0x2D, 0x69, 0x6E, 0x20, 0x30, 0x73, 0x3B, - 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x69, 0x6E, 0x6E, 0x65, - 0x72, 0x3A, 0x62, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x2C, 0x20, - 0x2E, 0x6F, 0x6E, 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x2D, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x3A, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x20, 0x7B, 0x0A, 0x09, 0x64, 0x69, - 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x20, 0x62, 0x6C, 0x6F, - 0x63, 0x6B, 0x3B, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x3A, - 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x20, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x3A, 0x20, 0x35, 0x30, 0x25, 0x3B, 0x20, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x33, 0x30, 0x70, - 0x78, 0x3B, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, - 0x3A, 0x20, 0x30, 0x3B, 0x20, 0x6C, 0x69, 0x6E, 0x65, 0x2D, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x33, 0x30, - 0x70, 0x78, 0x3B, 0x0A, 0x09, 0x66, 0x6F, 0x6E, 0x74, 0x2D, - 0x73, 0x69, 0x7A, 0x65, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, - 0x3B, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x77, - 0x68, 0x69, 0x74, 0x65, 0x3B, 0x20, 0x66, 0x6F, 0x6E, 0x74, - 0x2D, 0x66, 0x61, 0x6D, 0x69, 0x6C, 0x79, 0x3A, 0x20, 0x54, - 0x72, 0x65, 0x62, 0x75, 0x63, 0x68, 0x65, 0x74, 0x2C, 0x20, - 0x41, 0x72, 0x69, 0x61, 0x6C, 0x2C, 0x20, 0x73, 0x61, 0x6E, - 0x73, 0x2D, 0x73, 0x65, 0x72, 0x69, 0x66, 0x3B, 0x20, 0x66, - 0x6F, 0x6E, 0x74, 0x2D, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3A, 0x20, 0x62, 0x6F, 0x6C, 0x64, 0x3B, 0x0A, 0x09, 0x62, - 0x6F, 0x78, 0x2D, 0x73, 0x69, 0x7A, 0x69, 0x6E, 0x67, 0x3A, - 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2D, 0x62, 0x6F, - 0x78, 0x3B, 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, 0x6F, 0x66, - 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x69, 0x6E, - 0x6E, 0x65, 0x72, 0x3A, 0x62, 0x65, 0x66, 0x6F, 0x72, 0x65, - 0x20, 0x7B, 0x0A, 0x09, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, - 0x74, 0x3A, 0x20, 0x22, 0x4F, 0x4E, 0x22, 0x3B, 0x0A, 0x09, - 0x74, 0x65, 0x78, 0x74, 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, - 0x3A, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x0A, 0x09, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x6C, 0x65, 0x66, - 0x74, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, 0x3B, 0x0A, 0x09, - 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, - 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x45, - 0x31, 0x46, 0x35, 0x46, 0x45, 0x3B, 0x20, 0x63, 0x6F, 0x6C, - 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x30, 0x33, 0x41, 0x39, 0x46, - 0x34, 0x3B, 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, 0x6F, 0x66, - 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x69, 0x6E, - 0x6E, 0x65, 0x72, 0x3A, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x7B, 0x0A, 0x09, 0x63, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, - 0x3A, 0x20, 0x22, 0x4F, 0x46, 0x46, 0x22, 0x3B, 0x0A, 0x09, - 0x70, 0x61, 0x64, 0x64, 0x69, 0x6E, 0x67, 0x2D, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x3A, 0x20, 0x31, 0x34, 0x70, 0x78, 0x3B, - 0x0A, 0x09, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, - 0x6E, 0x64, 0x2D, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, - 0x23, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x3B, 0x20, 0x63, - 0x6F, 0x6C, 0x6F, 0x72, 0x3A, 0x20, 0x23, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x3B, 0x0A, 0x09, 0x74, 0x65, 0x78, 0x74, - 0x2D, 0x61, 0x6C, 0x69, 0x67, 0x6E, 0x3A, 0x20, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x3B, 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, - 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x7B, 0x0A, 0x09, - 0x64, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x3A, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x3B, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3A, 0x20, 0x31, 0x38, 0x70, 0x78, 0x3B, 0x20, 0x6D, - 0x61, 0x72, 0x67, 0x69, 0x6E, 0x3A, 0x20, 0x36, 0x70, 0x78, - 0x3B, 0x0A, 0x09, 0x62, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, - 0x75, 0x6E, 0x64, 0x3A, 0x20, 0x23, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x3B, 0x0A, 0x09, 0x70, 0x6F, 0x73, 0x69, 0x74, - 0x69, 0x6F, 0x6E, 0x3A, 0x20, 0x61, 0x62, 0x73, 0x6F, 0x6C, - 0x75, 0x74, 0x65, 0x3B, 0x20, 0x74, 0x6F, 0x70, 0x3A, 0x20, - 0x30, 0x3B, 0x20, 0x62, 0x6F, 0x74, 0x74, 0x6F, 0x6D, 0x3A, - 0x20, 0x30, 0x3B, 0x0A, 0x09, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x3A, 0x20, 0x35, 0x36, 0x70, 0x78, 0x3B, 0x0A, 0x09, 0x62, - 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3A, 0x20, 0x32, 0x70, 0x78, - 0x20, 0x73, 0x6F, 0x6C, 0x69, 0x64, 0x20, 0x23, 0x30, 0x33, - 0x41, 0x39, 0x46, 0x34, 0x3B, 0x20, 0x62, 0x6F, 0x72, 0x64, - 0x65, 0x72, 0x2D, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x3A, - 0x20, 0x32, 0x30, 0x70, 0x78, 0x3B, 0x0A, 0x09, 0x74, 0x72, - 0x61, 0x6E, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3A, 0x20, - 0x61, 0x6C, 0x6C, 0x20, 0x30, 0x2E, 0x33, 0x73, 0x20, 0x65, - 0x61, 0x73, 0x65, 0x2D, 0x69, 0x6E, 0x20, 0x30, 0x73, 0x3B, - 0x20, 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, 0x6F, 0x66, 0x66, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x63, 0x68, 0x65, - 0x63, 0x6B, 0x62, 0x6F, 0x78, 0x3A, 0x63, 0x68, 0x65, 0x63, - 0x6B, 0x65, 0x64, 0x20, 0x2B, 0x20, 0x2E, 0x6F, 0x6E, 0x6F, - 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x6C, - 0x61, 0x62, 0x65, 0x6C, 0x20, 0x2E, 0x6F, 0x6E, 0x6F, 0x66, - 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x69, 0x6E, - 0x6E, 0x65, 0x72, 0x20, 0x7B, 0x0A, 0x09, 0x6D, 0x61, 0x72, - 0x67, 0x69, 0x6E, 0x2D, 0x6C, 0x65, 0x66, 0x74, 0x3A, 0x20, - 0x30, 0x3B, 0x0A, 0x7D, 0x0A, 0x2E, 0x6F, 0x6E, 0x6F, 0x66, - 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x63, 0x68, - 0x65, 0x63, 0x6B, 0x62, 0x6F, 0x78, 0x3A, 0x63, 0x68, 0x65, - 0x63, 0x6B, 0x65, 0x64, 0x20, 0x2B, 0x20, 0x2E, 0x6F, 0x6E, - 0x6F, 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, - 0x6C, 0x61, 0x62, 0x65, 0x6C, 0x20, 0x2E, 0x6F, 0x6E, 0x6F, - 0x66, 0x66, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x2D, 0x73, - 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x7B, 0x0A, 0x09, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3A, 0x20, 0x30, 0x70, 0x78, 0x3B, - 0x20, 0x0A, 0x7D, }; - -const struct fsdata_file file_index_ssi[] = {{ -NULL, -data_index_ssi, data_index_ssi + 11, -sizeof(data_index_ssi) - 11, -1 -}}; - -const struct fsdata_file file_404_html[] = {{ -file_index_ssi, -data_404_html, data_404_html + 10, -sizeof(data_404_html) - 10, -1 -}}; - -const struct fsdata_file file_websockets_html[] = {{ -file_404_html, -data_websockets_html, data_websockets_html + 17, -sizeof(data_websockets_html) - 17, -1 -}}; - -const struct fsdata_file file_about_html[] = {{ -file_websockets_html, -data_about_html, data_about_html + 12, -sizeof(data_about_html) - 12, -1 -}}; - -const struct fsdata_file file_js_smoothie_min_js[] = {{ -file_about_html, -data_js_smoothie_min_js, data_js_smoothie_min_js + 20, -sizeof(data_js_smoothie_min_js) - 20, -1 -}}; - -const struct fsdata_file file_img_favicon_png[] = {{ -file_js_smoothie_min_js, -data_img_favicon_png, data_img_favicon_png + 17, -sizeof(data_img_favicon_png) - 17, -1 -}}; - -const struct fsdata_file file_css_siimple_min_css[] = {{ -file_img_favicon_png, -data_css_siimple_min_css, data_css_siimple_min_css + 21, -sizeof(data_css_siimple_min_css) - 21, -1 -}}; - -const struct fsdata_file file_css_style_css[] = {{ -file_css_siimple_min_css, -data_css_style_css, data_css_style_css + 15, -sizeof(data_css_style_css) - 15, -1 -}}; - -#define FS_ROOT file_css_style_css - -#define FS_NUMFILES 8 diff --git a/examples/http_server/fsdata/makefsdata b/examples/http_server/fsdata/makefsdata deleted file mode 100755 index 5361370..0000000 --- a/examples/http_server/fsdata/makefsdata +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/perl - -$incHttpHeader = 1; - -open(OUTPUT, "> fsdata.c"); -print(OUTPUT "#include \"httpd/fsdata.h\"\n\n"); - -chdir("fs"); -open(FILES, "find . -type f |"); - -while($file = ) { - - # Do not include files in CVS directories nor backup files. - if($file =~ /(CVS|~)/) { - next; - } - - chop($file); - - if($incHttpHeader == 1) { - open(HEADER, "> /tmp/header") || die $!; - if($file =~ /404/) { - print(HEADER "HTTP/1.0 404 File not found\r\n"); - } else { - print(HEADER "HTTP/1.0 200 OK\r\n"); - } - print(HEADER "lwIP/1.4.1 (http://savannah.nongnu.org/projects/lwip)\r\n"); - if($file =~ /\.html$/ || $file =~ /\.htm$/ || $file =~ /\.shtml$/ || $file =~ /\.shtm$/ || $file =~ /\.ssi$/) { - print(HEADER "Content-type: text/html\r\n"); - } elsif($file =~ /\.js$/) { - print(HEADER "Content-type: application/x-javascript\r\n\r\n"); - } elsif($file =~ /\.css$/) { - print(HEADER "Content-type: text/css\r\n\r\n"); - } elsif($file =~ /\.ico$/) { - print(HEADER "Content-type: image/x-icon\r\n\r\n"); - } elsif($file =~ /\.gif$/) { - print(HEADER "Content-type: image/gif\r\n"); - } elsif($file =~ /\.png$/) { - print(HEADER "Content-type: image/png\r\n"); - } elsif($file =~ /\.jpg$/) { - print(HEADER "Content-type: image/jpeg\r\n"); - } elsif($file =~ /\.bmp$/) { - print(HEADER "Content-type: image/bmp\r\n\r\n"); - } elsif($file =~ /\.class$/) { - print(HEADER "Content-type: application/octet-stream\r\n"); - } elsif($file =~ /\.ram$/) { - print(HEADER "Content-type: audio/x-pn-realaudio\r\n"); - } else { - print(HEADER "Content-type: text/plain\r\n"); - } - print(HEADER "\r\n"); - close(HEADER); - - unless($file =~ /\.plain$/ || $file =~ /cgi/) { - system("cat /tmp/header $file > /tmp/file"); - } else { - system("cp $file /tmp/file"); - } - } else { - system("cp $file /tmp/file"); - } - - open(FILE, "/tmp/file"); - unlink("/tmp/file"); - unlink("/tmp/header"); - - $file =~ s/\.//; - $fvar = $file; - $fvar =~ s-/-_-g; - $fvar =~ s-\.-_-g; - - print(OUTPUT "static const unsigned char data".$fvar."[] = {\n"); - print(OUTPUT "\t/* $file */\n\t"); - for($j = 0; $j < length($file); $j++) { - printf(OUTPUT "0x%02X, ", unpack("C", substr($file, $j, 1))); - } - printf(OUTPUT "0,\n"); - - - $i = 0; - while(read(FILE, $data, 1)) { - if($i == 0) { - print(OUTPUT "\t"); - } - printf(OUTPUT "0x%02X, ", unpack("C", $data)); - $i++; - if($i == 10) { - print(OUTPUT "\n"); - $i = 0; - } - } - print(OUTPUT "};\n\n"); - close(FILE); - push(@fvars, $fvar); - push(@files, $file); -} - -for($i = 0; $i < @fvars; $i++) { - $file = $files[$i]; - $fvar = $fvars[$i]; - - if($i == 0) { - $prevfile = "NULL"; - } else { - $prevfile = "file" . $fvars[$i - 1]; - } - print(OUTPUT "const struct fsdata_file file".$fvar."[] = {{\n$prevfile,\ndata$fvar, "); - print(OUTPUT "data$fvar + ". (length($file) + 1) .",\n"); - print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) .",\n"); - print(OUTPUT $incHttpHeader."\n}};\n\n"); -} - -print(OUTPUT "#define FS_ROOT file$fvars[$i - 1]\n\n"); -print(OUTPUT "#define FS_NUMFILES $i\n"); diff --git a/examples/http_server/fsdata/readme.txt b/examples/http_server/fsdata/readme.txt deleted file mode 100644 index a1db0c7..0000000 --- a/examples/http_server/fsdata/readme.txt +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains a script ('makefsdata') to create C code suitable for -httpd for given html pages (or other files) in a directory. diff --git a/examples/http_server/http_server.c b/examples/http_server/http_server.c deleted file mode 100644 index cbe9a58..0000000 --- a/examples/http_server/http_server.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * HTTP server example. - * - * This sample code is in the public domain. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define LED_PIN 2 - -enum { - SSI_UPTIME, - SSI_FREE_HEAP, - SSI_LED_STATE -}; - -int32_t ssi_handler(int32_t iIndex, char *pcInsert, int32_t iInsertLen) -{ - switch (iIndex) { - case SSI_UPTIME: - snprintf(pcInsert, iInsertLen, "%d", - xTaskGetTickCount() * portTICK_PERIOD_MS / 1000); - break; - case SSI_FREE_HEAP: - snprintf(pcInsert, iInsertLen, "%d", (int) xPortGetFreeHeapSize()); - break; - case SSI_LED_STATE: - snprintf(pcInsert, iInsertLen, (GPIO.OUT & BIT(LED_PIN)) ? "Off" : "On"); - break; - default: - snprintf(pcInsert, iInsertLen, "N/A"); - break; - } - - /* Tell the server how many characters to insert */ - return (strlen(pcInsert)); -} - -const char *gpio_cgi_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[]) -{ - for (int i = 0; i < iNumParams; i++) { - if (strcmp(pcParam[i], "on") == 0) { - uint8_t gpio_num = atoi(pcValue[i]); - gpio_enable(gpio_num, GPIO_OUTPUT); - gpio_write(gpio_num, true); - } else if (strcmp(pcParam[i], "off") == 0) { - uint8_t gpio_num = atoi(pcValue[i]); - gpio_enable(gpio_num, GPIO_OUTPUT); - gpio_write(gpio_num, false); - } else if (strcmp(pcParam[i], "toggle") == 0) { - uint8_t gpio_num = atoi(pcValue[i]); - gpio_enable(gpio_num, GPIO_OUTPUT); - gpio_toggle(gpio_num); - } - } - return "/index.ssi"; -} - -const char *about_cgi_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[]) -{ - return "/about.html"; -} - -const char *websocket_cgi_handler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[]) -{ - return "/websockets.html"; -} - -void websocket_task(void *pvParameter) -{ - struct tcp_pcb *pcb = (struct tcp_pcb *) pvParameter; - - for (;;) { - if (pcb == NULL || pcb->state != ESTABLISHED) { - printf("Connection closed, deleting task\n"); - break; - } - - int uptime = xTaskGetTickCount() * portTICK_PERIOD_MS / 1000; - int heap = (int) xPortGetFreeHeapSize(); - int led = !gpio_read(LED_PIN); - - /* Generate response in JSON format */ - char response[64]; - int len = snprintf(response, sizeof (response), - "{\"uptime\" : \"%d\"," - " \"heap\" : \"%d\"," - " \"led\" : \"%d\"}", uptime, heap, led); - if (len < sizeof (response)) - websocket_write(pcb, (unsigned char *) response, len, WS_TEXT_MODE); - - vTaskDelay(2000 / portTICK_PERIOD_MS); - } - - vTaskDelete(NULL); -} - -/** - * This function is called when websocket frame is received. - * - * Note: this function is executed on TCP thread and should return as soon - * as possible. - */ -void websocket_cb(struct tcp_pcb *pcb, uint8_t *data, u16_t data_len, uint8_t mode) -{ - printf("[websocket_callback]:\n%.*s\n", (int) data_len, (char*) data); - - uint8_t response[2]; - uint16_t val; - - switch (data[0]) { - case 'A': // ADC - /* This should be done on a separate thread in 'real' applications */ - val = sdk_system_adc_read(); - break; - case 'D': // Disable LED - gpio_write(LED_PIN, true); - val = 0xDEAD; - break; - case 'E': // Enable LED - gpio_write(LED_PIN, false); - val = 0xBEEF; - break; - default: - printf("Unknown command\n"); - val = 0; - break; - } - - response[1] = (uint8_t) val; - response[0] = val >> 8; - - websocket_write(pcb, response, 2, WS_BIN_MODE); -} - -/** - * This function is called when new websocket is open and - * creates a new websocket_task if requested URI equals '/stream'. - */ -void websocket_open_cb(struct tcp_pcb *pcb, const char *uri) -{ - printf("WS URI: %s\n", uri); - if (!strcmp(uri, "/stream")) { - printf("request for streaming\n"); - xTaskCreate(&websocket_task, "websocket_task", 256, (void *) pcb, 2, NULL); - } -} - -void httpd_task(void *pvParameters) -{ - tCGI pCGIs[] = { - {"/gpio", (tCGIHandler) gpio_cgi_handler}, - {"/about", (tCGIHandler) about_cgi_handler}, - {"/websockets", (tCGIHandler) websocket_cgi_handler}, - }; - - const char *pcConfigSSITags[] = { - "uptime", // SSI_UPTIME - "heap", // SSI_FREE_HEAP - "led" // SSI_LED_STATE - }; - - /* register handlers and start the server */ - http_set_cgi_handlers(pCGIs, sizeof (pCGIs) / sizeof (pCGIs[0])); - http_set_ssi_handler((tSSIHandler) ssi_handler, pcConfigSSITags, - sizeof (pcConfigSSITags) / sizeof (pcConfigSSITags[0])); - websocket_register_callbacks((tWsOpenHandler) websocket_open_cb, - (tWsHandler) websocket_cb); - httpd_init(); - - for (;;); -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - struct sdk_station_config config = { - .ssid = WIFI_SSID, - .password = WIFI_PASS, - }; - - /* required to call wifi_set_opmode before station_set_config */ - sdk_wifi_set_opmode(STATION_MODE); - sdk_wifi_station_set_config(&config); - sdk_wifi_station_connect(); - - /* turn off LED */ - gpio_enable(LED_PIN, GPIO_OUTPUT); - gpio_write(LED_PIN, true); - - /* initialize tasks */ - xTaskCreate(&httpd_task, "HTTP Daemon", 128, NULL, 2, NULL); -} diff --git a/examples/i2c_lcd_test/Makefile b/examples/i2c_lcd_test/Makefile deleted file mode 100644 index 4e03494..0000000 --- a/examples/i2c_lcd_test/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -PROGRAM = i2c_lcd_test -EXTRA_COMPONENTS = extras/i2c extras/pcf8574 extras/hd44780 - -HD44780_I2C = 1 - -include ../../common.mk diff --git a/examples/i2c_lcd_test/i2c_lcd.png b/examples/i2c_lcd_test/i2c_lcd.png deleted file mode 100644 index 815f4fe..0000000 Binary files a/examples/i2c_lcd_test/i2c_lcd.png and /dev/null differ diff --git a/examples/i2c_lcd_test/main.c b/examples/i2c_lcd_test/main.c deleted file mode 100644 index cb2af04..0000000 --- a/examples/i2c_lcd_test/main.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Example of using driver for text LCD - * connected to I2C by PCF8574 - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include - -#include - -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 -#define ADDR 0x27 - -static const uint8_t char_data[] = { - 0x04, 0x0e, 0x0e, 0x0e, 0x1f, 0x00, 0x04, 0x00, - 0x1f, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x1f, 0x00 -}; - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - - hd44780_t lcd = { - .i2c_dev.bus = I2C_BUS, - .i2c_dev.addr = ADDR, - .font = HD44780_FONT_5X8, - .lines = 2, - .pins = { - .rs = 0, - .e = 2, - .d4 = 4, - .d5 = 5, - .d6 = 6, - .d7 = 7, - .bl = 3 - }, - .backlight = true - }; - - hd44780_init(&lcd); - hd44780_upload_character(&lcd, 0, char_data); - hd44780_upload_character(&lcd, 1, char_data + 8); - - hd44780_gotoxy(&lcd, 0, 0); - hd44780_puts(&lcd, "\x08 Hello world!"); - hd44780_gotoxy(&lcd, 0, 1); - hd44780_puts(&lcd, "\x09 "); - - char time[16]; - - while (true) - { - hd44780_gotoxy(&lcd, 2, 1); - - snprintf(time, 7, "%u ", sdk_system_get_time() / 1000000); - time[sizeof(time) - 1] = 0; - - hd44780_puts(&lcd, time); - - for (uint32_t i = 0; i < 1000; i++) - sdk_os_delay_us(1000); - } -} diff --git a/examples/i2s_audio/Makefile b/examples/i2s_audio/Makefile deleted file mode 100644 index d732ffa..0000000 --- a/examples/i2s_audio/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -PROGRAM=i2s_audio_example -EXTRA_COMPONENTS = extras/spiffs extras/i2s_dma -FLASH_SIZE = 32 - -# spiffs configuration -SPIFFS_BASE_ADDR = 0x200000 -SPIFFS_SIZE = 0x100000 - -include ../../common.mk - -$(eval $(call make_spiffs_image,files)) diff --git a/examples/i2s_audio/i2s_audio_example.c b/examples/i2s_audio/i2s_audio_example.c deleted file mode 100644 index 7b48c02..0000000 --- a/examples/i2s_audio/i2s_audio_example.c +++ /dev/null @@ -1,197 +0,0 @@ -/* i2s_audio_example.c - Plays wav file from spiffs. - * - * This example demonstrates how to use I2S with DMA to output audio. - * The example is tested with TDA5143 16 bit DAC. But should work with - * any I2S DAC. - * - * The example reads a file with name "sample.wav" from the file system and - * feeds audio samples into DMA subsystem which outputs it into I2S bus. - * Currently only 44100 Hz 16 bit 2 channel audio is supported. - * - * In order to test this example you need to place a file with name "sample.wav" - * into directory "files". This file will be uploaded into spiffs on the device. - * The size of the sample file must be less than 1MB to fit into spiffs image. - * The format of the sample file must be 44100Hz, 16bit, 2 channels. - * Also you need a DAC connected to ESP8266 to convert I2S stream to analog - * output. Three wire must be connected: DATA, WS, CLOCK. - * - * This sample code is in the public domain., - */ -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "queue.h" -#include "task.h" -#include "esp8266.h" - -#include "fcntl.h" -#include "unistd.h" - -#include -#include - -#include "esp_spiffs.h" -#include "i2s_dma/i2s_dma.h" - -// Very simple WAV header, ignores most fields -typedef struct __attribute__((packed)) { - uint8_t ignore_0[22]; - uint16_t num_channels; - uint32_t sample_rate; - uint8_t ignore_1[6]; - uint16_t bits_per_sample; - uint8_t ignore_2[4]; - uint32_t data_size; - uint8_t data[]; -} dumb_wav_header_t; - -// When samples are not sent fast enough underrun condition occurs -volatile uint32_t underrun_counter = 0; - -#define DMA_BUFFER_SIZE 2048 -#define DMA_QUEUE_SIZE 8 - -// Circular list of descriptors -static dma_descriptor_t dma_block_list[DMA_QUEUE_SIZE]; - -// Array of buffers for circular list of descriptors -static uint8_t dma_buffer[DMA_QUEUE_SIZE][DMA_BUFFER_SIZE]; - -// Queue of empty DMA blocks -static QueueHandle_t dma_queue; - -/** - * Create a circular list of DMA descriptors - */ -static inline void init_descriptors_list() -{ - memset(dma_buffer, 0, DMA_QUEUE_SIZE * DMA_BUFFER_SIZE); - - for (int i = 0; i < DMA_QUEUE_SIZE; i++) { - dma_block_list[i].owner = 1; - dma_block_list[i].eof = 1; - dma_block_list[i].sub_sof = 0; - dma_block_list[i].unused = 0; - dma_block_list[i].buf_ptr = dma_buffer[i]; - dma_block_list[i].datalen = DMA_BUFFER_SIZE; - dma_block_list[i].blocksize = DMA_BUFFER_SIZE; - if (i == (DMA_QUEUE_SIZE - 1)) { - dma_block_list[i].next_link_ptr = &dma_block_list[0]; - } else { - dma_block_list[i].next_link_ptr = &dma_block_list[i + 1]; - } - } - - // The queue depth is one smaller than the amount of buffers we have, - // because there's always a buffer that is being used by the DMA subsystem - // *right now* and we don't want to be able to write to that simultaneously - dma_queue = xQueueCreate(DMA_QUEUE_SIZE - 1, sizeof(uint8_t*)); -} - -// DMA interrupt handler. It is called each time a DMA block is finished processing. -static void dma_isr_handler(void *args) -{ - portBASE_TYPE task_awoken = pdFALSE; - - if (i2s_dma_is_eof_interrupt()) { - dma_descriptor_t *descr = i2s_dma_get_eof_descriptor(); - - if (xQueueIsQueueFullFromISR(dma_queue)) { - // List of empty blocks is full. Sender don't send data fast enough. - int dummy; - underrun_counter++; - // Discard top of the queue - xQueueReceiveFromISR(dma_queue, &dummy, &task_awoken); - } - // Push the processed buffer to the queue so sender can refill it. - xQueueSendFromISR(dma_queue, (void*)(&descr->buf_ptr), &task_awoken); - } - i2s_dma_clear_interrupt(); - - portEND_SWITCHING_ISR(task_awoken); -} - -static bool play_data(int fd) -{ - uint8_t *curr_dma_buf; - - // Get a free block from the DMA queue. This call will suspend the task - // until a free block is available in the queue. - if (xQueueReceive(dma_queue, &curr_dma_buf, portMAX_DELAY) == pdFALSE) { - // Or timeout occurs - printf("Cound't get free blocks to push data\n"); - } - - int read_bytes = read(fd, curr_dma_buf, DMA_BUFFER_SIZE); - if (read_bytes <= 0) { - return false; - } - - return true; -} - -void play_task(void *pvParameters) -{ - esp_spiffs_init(); - if (esp_spiffs_mount() != SPIFFS_OK) { - printf("Error mount SPIFFS\n"); - } - - int fd = open("sample.wav", O_RDONLY); - - if (fd < 0) { - printf("Error opening file\n"); - return; - } - - dumb_wav_header_t wav_header; - read(fd, (void*)&wav_header, sizeof(wav_header)); - printf("Number of channels: %d\n", wav_header.num_channels); - printf("Bits per sample: %d\n", wav_header.bits_per_sample); - printf("Sample rate: %d\n", wav_header.sample_rate); - printf("Data size: %d\n", wav_header.data_size); - - if (wav_header.bits_per_sample != 16) { - printf("Only 16 bit per sample is supported\n"); - return; - } - - if (wav_header.num_channels != 2) { - printf("Only 2 channels is supported\n"); - return; - } - - i2s_clock_div_t clock_div = i2s_get_clock_div( - wav_header.sample_rate * 2 * 16); - - printf("i2s clock dividers, bclk=%d, clkm=%d\n", - clock_div.bclk_div, clock_div.clkm_div); - - i2s_pins_t i2s_pins = {.data = true, .clock = true, .ws = true}; - - i2s_dma_init(dma_isr_handler, NULL, clock_div, i2s_pins); - - while (1) { - init_descriptors_list(); - - i2s_dma_start(dma_block_list); - lseek(fd, sizeof(dumb_wav_header_t), SEEK_SET); - - while (play_data(fd)) {}; - i2s_dma_stop(); - - vQueueDelete(dma_queue); - - printf("underrun counter: %d\n", underrun_counter); - - vTaskDelay(1000 / portTICK_PERIOD_MS); - } - - close(fd); -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - - xTaskCreate(play_task, "test_task", 1024, NULL, 2, NULL); -} diff --git a/examples/ina3221_test/Makefile b/examples/ina3221_test/Makefile deleted file mode 100644 index a257987..0000000 --- a/examples/ina3221_test/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=ina3221_test -EXTRA_COMPONENTS = extras/i2c extras/ina3221 -include ../../common.mk diff --git a/examples/ina3221_test/main.c b/examples/ina3221_test/main.c deleted file mode 100644 index e64e879..0000000 --- a/examples/ina3221_test/main.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Example of using INA3221 - * - * Part of esp-open-rtos - * Copyright (C) 2016 Zaltora - * MIT Licensed as described in the file LICENSE - */ - -#include "espressif/esp_common.h" -#include "FreeRTOS.h" -#include "task.h" -#include -#include -#include "ina3221/ina3221.h" - -#define I2C_BUS 0 -#define PIN_SCL 5 -#define PIN_SDA 2 -#define ADDR INA3221_ADDR_0 - -#define WARNING_CHANNEL 1 -#define WARNING_CURRENT (40.0) - -//#define STRUCT_SETTING 0 -#define MODE false // true : continuous measurements // false : trigger measurements - -void ina_measure(void *pvParameters) -{ - uint32_t measure_number = 0; - float bus_voltage; - float shunt_voltage; - float shunt_current; - bool warning = false ; - - // Create ina3221 device - ina3221_t dev = { - .i2c_dev.bus = I2C_BUS, - .i2c_dev.addr = ADDR, - .shunt = { 100 ,100 ,100 }, // shunt values are 100 mOhm for each channel - .mask.mask_register = INA3221_DEFAULT_MASK, // Init - .config.config_register = INA3221_DEFAULT_CONFIG, // Init - }; - -#ifndef STRUCT_SETTING - if(ina3221_setting(&dev ,MODE, true, true)) // mode selection , bus and shunt activated - goto error_loop; - if(ina3221_enableChannel(&dev , true, true, true)) // Enable all channels - goto error_loop; - if(ina3221_setAverage(&dev, INA3221_AVG_64)) // 64 samples average - goto error_loop; - if(ina3221_setBusConversionTime(&dev, INA3221_CT_2116)) // 2ms by channel - goto error_loop; - if(ina3221_setShuntConversionTime(&dev, INA3221_CT_2116)) // 2ms by channel - goto error_loop; -#else - dev.config.mode = MODE; // mode selection - dev.config.esht = true; // shunt enable - dev.config.ebus = true; // bus enable - dev.config.ch1 = true; // channel 1 enable - dev.config.ch2 = true; // channel 2 enable - dev.config.ch3 = true; // channel 3 enable - dev.config.avg = INA3221_AVG_64; // 64 samples average - dev.config.vbus = INA3221_CT_2116; // 2ms by channel (bus) - dev.config.vsht = INA3221_CT_2116; // 2ms by channel (shunt) - if(ina3221_sync(&dev)) - goto error_loop; -#endif - - ina3221_setWarningAlert(&dev, WARNING_CHANNEL-1, WARNING_CURRENT); //Set security flag overcurrent - - while(1) - { - measure_number++; -#if !MODE - if (ina3221_trigger(&dev)) // Start a measure - goto error_loop; - printf("trig done, wait: "); - do - { - printf("X"); - if (ina3221_getStatus(&dev)) // get mask - goto error_loop; - vTaskDelay(20/portTICK_PERIOD_MS); - if(dev.mask.wf&(1<<(3-WARNING_CHANNEL))) - warning = true ; - } while(!(dev.mask.cvrf)); // check if measure done -#else - if (ina3221_getStatus(&dev)) // get mask - goto error_loop; - if(dev.mask.wf&(1<<(3-WARNING_CHANNEL))) - warning = true ; -#endif - for (uint8_t i = 0 ; i < INA3221_BUS_NUMBER ; i++) - { - if(ina3221_getBusVoltage(&dev, i, &bus_voltage)) // Get voltage in V - goto error_loop; - if(ina3221_getShuntValue(&dev, i, &shunt_voltage, &shunt_current)) // Get voltage in mV and currant in mA - goto error_loop; - - printf("\nC%u:Measure number %u\n",i+1,measure_number); - if (warning && (i+1) == WARNING_CHANNEL) printf("C%u:Warning Current > %.2f mA !!\n",i+1,WARNING_CURRENT); - printf("C%u:Bus voltage: %.02f V\n",i+1,bus_voltage ); - printf("C%u:Shunt voltage: %.02f mV\n",i+1,shunt_voltage ); - printf("C%u:Shunt current: %.02f mA\n\n",i+1,shunt_current ); - - } - warning = false ; - vTaskDelay(5000/portTICK_PERIOD_MS); - } - - error_loop: - printf("%s: error while com with INA3221\n", __func__); - for(;;) - { - vTaskDelay(2000/portTICK_PERIOD_MS); - printf("%s: error loop\n", __FUNCTION__); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - i2c_init(I2C_BUS, PIN_SCL, PIN_SDA, I2C_FREQ_400K); - - xTaskCreate(ina_measure, "Measurements_task", 512, NULL, 2, NULL); -} diff --git a/examples/json_jsmn_simple/json_jsmn_simple.c b/examples/json_jsmn_simple/json_jsmn_simple.c index 4a01741..3a65ddf 100644 --- a/examples/json_jsmn_simple/json_jsmn_simple.c +++ b/examples/json_jsmn_simple/json_jsmn_simple.c @@ -108,5 +108,5 @@ void user_init(void) { uart_set_baud(0, 115200); printf("SDK version:%s\n", sdk_system_get_sdk_version()); - xTaskCreate(json_test, "jsont", 1024, NULL, 2, NULL); + xTaskCreate(json_test, (signed char *)"jsont", 1024, NULL, 2, NULL); } diff --git a/examples/l3gd20h/Makefile b/examples/l3gd20h/Makefile deleted file mode 100644 index 2940d3f..0000000 --- a/examples/l3gd20h/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=L3GD20H -EXTRA_COMPONENTS = extras/i2c extras/l3gd20h -include ../../common.mk diff --git a/examples/l3gd20h/l3gd20h_example.c b/examples/l3gd20h/l3gd20h_example.c deleted file mode 100644 index 179e60c..0000000 --- a/examples/l3gd20h/l3gd20h_example.c +++ /dev/null @@ -1,334 +0,0 @@ -/** - * Simple example with one sensor connected to I2C or SPI. It demonstrates the - * different approaches to fetch the data. Either one of the interrupt signals - * for axis movement wake up *INT1* and data ready interrupt *INT2* is used - * or the new data are fetched periodically. - * - * Harware configuration: - * - * I2C - * - * +-----------------+ +----------+ - * | ESP8266 / ESP32 | | L3GD20H | - * | | | | - * | GPIO 14 (SCL) ----> SCL | - * | GPIO 13 (SDA) <---> SDA | - * | GPIO 5 <---- INT1 | - * | GPIO 4 <---- DRDY/INT2| - * +-----------------+ +----------+ - * - * SPI - * - * +---------------+ +----------+ +---------------+ +----------+ - * | ESP8266 | | L3GD20H | | ESP32 | | L3GD20H | - * | | | | | | | | - * | GPIO 14 (SCK) ----> SCK | | GPIO 16 (SCK) ----> SCK | - * | GPIO 13 (MOSI)----> SDI | | GPIO 17 (MOSI)----> SDI | - * | GPIO 12 (MISO)<---- SDO | | GPIO 18 (MISO)<---- SDO | - * | GPIO 2 (CS) ----> CS | | GPIO 19 (CS) ----> CS | - * | GPIO 5 <---- INT1 | | GPIO 5 <---- INT1 | - * | GPIO 4 <---- DRDY/INT2| | GPIO 4 <---- DRDY/INT2| - * +---------------+ +---------+ +---------------+ +----------+ - */ - -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED // if defined SPI is used, otherwise I2C -// #define FIFO_MODE // multiple sample read mode -// #define INT_DATA // data interrupts used (data ready and FIFO status) -// #define INT_EVENT // event interrupts used (axis movement and wake up) - -#if defined(INT_EVENT) || defined(INT_DATA) -#define INT_USED -#endif - -/* -- includes -------------------------------------------------- */ - -#include "l3gd20h.h" - -/* -- platform dependent definitions ---------------------------- */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth -#define TASK_STACK_DEPTH 2048 - -// define SPI interface for L3GD20H sensors -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth -#define TASK_STACK_DEPTH 256 - -// define SPI interface for L3GD20H sensors -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// define I2C interfaces for L3GD20H sensors -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// define GPIOs for interrupt -#define INT1_PIN 5 -#define INT2_PIN 4 - -/* -- user tasks ---------------------------------------------- */ - -static l3gd20h_sensor_t* sensor; - -/** - * Common function used to get sensor data. - */ -void read_data (void) -{ - #ifdef FIFO_MODE - - l3gd20h_float_data_fifo_t data; - - if (l3gd20h_new_data (sensor)) - { - uint8_t num = l3gd20h_get_float_data_fifo (sensor, data); - printf("%.3f L3GD20H num=%d\n", (double)sdk_system_get_time()*1e-3, num); - for (int i = 0; i < num; i++) - // max. full scale is +-2000 dps and best sensitivity is 1 mdps, i.e. 7 digits - printf("%.3f L3GD20H (xyz)[dps]: %+9.3f %+9.3f %+9.3f\n", - (double)sdk_system_get_time()*1e-3, data[i].x, data[i].y, data[i].z); - } - - #else // !FIFO_MODE - - l3gd20h_float_data_t data; - - if (l3gd20h_new_data (sensor) && - l3gd20h_get_float_data (sensor, &data)) - // max. full scale is +-2000 dps and best sensitivity is 1 mdps, i.e. 7 digits - printf("%.3f L3GD20H (xyz)[dps]: %+9.3f %+9.3f %+9.3f\n", - (double)sdk_system_get_time()*1e-3, data.x, data.y, data.z); - - #endif // FIFO_MODE -} - - -#ifdef INT_USED -/** - * In this case, axes movement wake up interrupt *INT1* and/or data ready - * interrupt *INT2* are used. While data ready interrupt *INT2* is generated - * every time new data are available or the FIFO status changes, the axes - * movement wake up interrupt *INT1* is triggered when output data across - * defined thresholds. - * - * When interrupts are used, the user has to define interrupt handlers that - * either fetches the data directly or triggers a task which is waiting to - * fetch the data. In this example, the interrupt handler sends an event to - * a waiting task to trigger the data gathering. - */ - -static QueueHandle_t gpio_evt_queue = NULL; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint8_t gpio_num; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - if (gpio_num == INT1_PIN) - { - l3gd20h_int_event_source_t source; - - // get the source of INT1 reset INT1 signal - l3gd20h_get_int_event_source (sensor, &source); - - // in case of data ready interrupt, get the results and do something with them - if (source.active) - read_data (); - } - else if (gpio_num == INT2_PIN) - { - l3gd20h_int_data_source_t source; - - // get the source of INT2 - l3gd20h_get_int_data_source (sensor, &source); - - // if data ready interrupt, get the results and do something with them - read_data(); - } - } - } -} - -// Interrupt handler which resumes sends an event to the waiting user_task_interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -#else // !INT_USED - -/* - * In this case, no interrupts are used and the user task fetches the sensor - * values periodically every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - vTaskDelay (100/portTICK_PERIOD_MS); - - while (1) - { - // read sensor data - read_data (); - - // passive waiting until 1 second is over - vTaskDelay (100/portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ---------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - // init the sensor connnected to SPI - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = l3gd20h_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else // I2C - - // init all I2C bus interfaces at which L3GD20H sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address L3GD20H_I2C_ADDRESS_2 connected to I2C_BUS. - sensor = l3gd20h_init_sensor (I2C_BUS, L3GD20H_I2C_ADDRESS_2, 0); - - #endif // SPI_USED - - if (sensor) - { - #ifdef INT_USED - - /** --- INTERRUPT CONFIGURATION PART ---- */ - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode to avoid losing interrupts - - // create an event queue to send interrupt events from interrupt - // handler to the interrupt task - gpio_evt_queue = xQueueCreate(10, sizeof(uint8_t)); - - // configure interupt pins for *INT1* and *INT2* signals and set the - // interrupt handler - gpio_enable(INT1_PIN, GPIO_INPUT); - gpio_enable(INT2_PIN, GPIO_INPUT); - gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - gpio_set_interrupt(INT2_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - - #endif // INT_USED - - /** -- SENSOR CONFIGURATION PART --- */ - - // set type and polarity of INT signals if necessary - // l3gd20h_config_int_signals (dev, l3gd20h_push_pull, l3gd20h_high_active); - - #ifdef INT_EVENT - // enable event interrupts (axis movement and wake up) - l3gd20h_int_event_config_t int_cfg; - - l3gd20h_get_int_event_config (sensor, &int_cfg); - - int_cfg.x_high_enabled = true; - int_cfg.y_high_enabled = true; - int_cfg.z_high_enabled = true; - int_cfg.x_low_enabled = false; - int_cfg.y_low_enabled = false; - int_cfg.z_low_enabled = false; - int_cfg.x_threshold = 1000; - int_cfg.y_threshold = 1000; - int_cfg.z_threshold = 1000; - - int_cfg.filter = l3gd20h_hpf_only; - int_cfg.and_or = false; - int_cfg.duration = 0; - int_cfg.latch = true; - - l3gd20h_set_int_event_config (sensor, &int_cfg); - l3gd20h_enable_int (sensor, l3gd20h_int_event, true); - - #endif // INT_EVENT - - #ifdef INT_DATA - // enable data ready (DRDY) and FIFO interrupt signal *INT2* - // NOTE: DRDY and FIFO interrupts must not be enabled at the same time - #ifdef FIFO_MODE - l3gd20h_enable_int (sensor, l3gd20h_int_fifo_overrun, true); - l3gd20h_enable_int (sensor, l3gd20h_int_fifo_threshold, true); - #else - l3gd20h_enable_int (sensor, l3gd20h_int_data_ready, true); - #endif - #endif // INT_DATA - - #ifdef FIFO_MODE - // clear FIFO and activate FIFO mode if needed - l3gd20h_set_fifo_mode (sensor, l3gd20h_bypass, 0); - l3gd20h_set_fifo_mode (sensor, l3gd20h_stream, 10); - #endif - - // select LPF/HPF, configure HPF and reset the reference by dummy read - l3gd20h_select_output_filter (sensor, l3gd20h_hpf_only); - l3gd20h_config_hpf (sensor, l3gd20h_hpf_normal, 0); - l3gd20h_get_hpf_ref (sensor); - - // LAST STEP: Finally set scale and sensor mode to start measurements - l3gd20h_set_scale(sensor, l3gd20h_scale_245_dps); - l3gd20h_set_mode (sensor, l3gd20h_normal_odr_12_5, 3, true, true, true); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - #ifdef INT_USED - - // create a task that is triggered only in case of interrupts to fetch the data - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a user task that fetches data from sensor periodically - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #endif - } - else - printf("Could not initialize L3GD20H sensor\n"); -} - diff --git a/examples/lis3dh/Makefile b/examples/lis3dh/Makefile deleted file mode 100644 index 99a893a..0000000 --- a/examples/lis3dh/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=LIS3DH -EXTRA_COMPONENTS = extras/i2c extras/lis3dh -include ../../common.mk diff --git a/examples/lis3dh/lis3dh_example.c b/examples/lis3dh/lis3dh_example.c deleted file mode 100644 index 29534ce..0000000 --- a/examples/lis3dh/lis3dh_example.c +++ /dev/null @@ -1,367 +0,0 @@ -/** - * Simple example with one sensor connected to I2C or SPI. It demonstrates the - * different approaches to fetch the data. Either one of the interrupt signals - * is used or new data are fetched periodically. - * - * Harware configuration: - * - * I2C - * - * +-----------------+ +----------+ - * | ESP8266 / ESP32 | | LIS3DH | - * | | | | - * | GPIO 14 (SCL) ----> SCL | - * | GPIO 13 (SDA) <---> SDA | - * | GPIO 5 <---- INT1 | - * +-----------------+ +----------+ - * - * SPI - * - * +-----------------+ +----------+ +-----------------+ +----------+ - * | ESP8266 | | LIS3DH | | ESP32 | | LIS3DH | - * | | | | | | | | - * | GPIO 14 (SCK) ----> SCK | | GPIO 16 (SCK) ----> SCK | - * | GPIO 13 (MOSI)----> SDI | | GPIO 17 (MOSI)----> SDI | - * | GPIO 12 (MISO)<---- SDO | | GPIO 18 (MISO)<---- SDO | - * | GPIO 2 (CS) ----> CS | | GPIO 19 (CS) ----> CS | - * | GPIO 5 <---- INT1 | | GPIO 5 <---- INT1 | - * +-----------------+ +---------+ +-----------------+ +----------+ - */ - -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED // SPI interface is used, otherwise I2C -// #define FIFO_MODE // multiple sample read mode -// #define INT_DATA // data interrupts used (data ready and FIFO status) -// #define INT_EVENT // inertial event interrupts used (wake-up, free fall or 6D/4D orientation) -// #define INT_CLICK // click detection interrupts used - -#if defined(INT_DATA) || defined(INT_EVENT) || defined(INT_CLICK) -#define INT_USED -#endif - -/* -- includes ----------------------------------------------------- */ - -#include "lis3dh.h" - -/** -- platform dependent definitions ------------------------------ */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define INT1_PIN 5 -#define INT2_PIN 4 - -/* -- user tasks --------------------------------------------------- */ - -static lis3dh_sensor_t* sensor; - -/** - * Common function used to get sensor data. - */ -void read_data () -{ - #ifdef FIFO_MODE - - lis3dh_float_data_fifo_t fifo; - - if (lis3dh_new_data (sensor)) - { - uint8_t num = lis3dh_get_float_data_fifo (sensor, fifo); - - printf("%.3f LIS3DH num=%d\n", (double)sdk_system_get_time()*1e-3, num); - - for (int i=0; i < num; i++) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LIS3DH (xyz)[g] ax=%+7.3f ay=%+7.3f az=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - fifo[i].ax, fifo[i].ay, fifo[i].az); - } - - #else - - lis3dh_float_data_t data; - - if (lis3dh_new_data (sensor) && - lis3dh_get_float_data (sensor, &data)) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LIS3DH (xyz)[g] ax=%+7.3f ay=%+7.3f az=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - data.ax, data.ay, data.az); - - #endif // FIFO_MODE -} - - -#ifdef INT_USED -/** - * In this case, any of the possible interrupts on interrupt signal *INT1* is - * used to fetch the data. - * - * When interrupts are used, the user has to define interrupt handlers that - * either fetches the data directly or triggers a task which is waiting to - * fetch the data. In this example, the interrupt handler sends an event to - * a waiting task to trigger the data gathering. - */ - -static QueueHandle_t gpio_evt_queue = NULL; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint8_t gpio_num; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - lis3dh_int_data_source_t data_src = {}; - lis3dh_int_event_source_t event_src = {}; - lis3dh_int_click_source_t click_src = {}; - - // get the source of the interrupt and reset *INTx* signals - #ifdef INT_DATA - lis3dh_get_int_data_source (sensor, &data_src); - #endif - #ifdef INT_EVENT - lis3dh_get_int_event_source (sensor, &event_src, lis3dh_int_event1_gen); - #endif - #ifdef INT_CLICK - lis3dh_get_int_click_source (sensor, &click_src); - #endif - - // in case of DRDY interrupt or inertial event interrupt read one data sample - if (data_src.data_ready) - read_data (); - - // in case of FIFO interrupts read the whole FIFO - else if (data_src.fifo_watermark || data_src.fifo_overrun) - read_data (); - - // in case of event interrupt - else if (event_src.active) - { - printf("%.3f LIS3DH ", (double)sdk_system_get_time()*1e-3); - if (event_src.x_low) printf("x is lower than threshold\n"); - if (event_src.y_low) printf("y is lower than threshold\n"); - if (event_src.z_low) printf("z is lower than threshold\n"); - if (event_src.x_high) printf("x is higher than threshold\n"); - if (event_src.y_high) printf("y is higher than threshold\n"); - if (event_src.z_high) printf("z is higher than threshold\n"); - } - - // in case of click detection interrupt - else if (click_src.active) - printf("%.3f LIS3DH %s\n", (double)sdk_system_get_time()*1e-3, - click_src.s_click ? "single click" : "double click"); - } - } -} - -// Interrupt handler which resumes user_task_interrupt on interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -#else // !INT_USED - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - vTaskDelay (100/portTICK_PERIOD_MS); - - while (1) - { - // read sensor data - read_data (); - - // passive waiting until 1 second is over - vTaskDelay(100/portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - // init the sensor connnected to SPI - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = lis3dh_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else - - // init all I2C bus interfaces at which LIS3DH sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address LIS3DH_I2C_ADDRESS_1 connected to I2C_BUS. - sensor = lis3dh_init_sensor (I2C_BUS, LIS3DH_I2C_ADDRESS_1, 0); - - #endif - - if (sensor) - { - #ifdef INT_USED - - /** --- INTERRUPT CONFIGURATION PART ---- */ - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode to avoid losing interrupts - - // create an event queue to send interrupt events from interrupt - // handler to the interrupt task - gpio_evt_queue = xQueueCreate(10, sizeof(uint8_t)); - - // configure interupt pins for *INT1* and *INT2* signals and set the interrupt handler - gpio_enable(INT1_PIN, GPIO_INPUT); - gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - - #endif // INT_USED - - /** -- SENSOR CONFIGURATION PART --- */ - - // set polarity of INT signals if necessary - // lis3dh_config_int_signals (sensor, lis3dh_high_active); - - #ifdef INT_DATA - // enable data interrupts on INT1 (data ready or FIFO status interrupts) - // data ready and FIFO status interrupts must not be enabled at the same time - #ifdef FIFO_MODE - lis3dh_enable_int (sensor, lis3dh_int_fifo_overrun , lis3dh_int1_signal, true); - lis3dh_enable_int (sensor, lis3dh_int_fifo_watermark, lis3dh_int1_signal, true); - #else - lis3dh_enable_int (sensor, lis3dh_int_data_ready, lis3dh_int1_signal, true); - #endif // FIFO_MODE - #endif // INT_DATA - - #ifdef INT_EVENT - // enable data interrupts on INT1 - lis3dh_int_event_config_t event_config; - - event_config.mode = lis3dh_wake_up; - // event_config.mode = lis3dh_free_fall; - // event_config.mode = lis3dh_6d_movement; - // event_config.mode = lis3dh_6d_position; - // event_config.mode = lis3dh_4d_movement; - // event_config.mode = lis3dh_4d_position; - event_config.threshold = 10; - event_config.x_low_enabled = false; - event_config.x_high_enabled = true; - event_config.y_low_enabled = false; - event_config.y_high_enabled = true; - event_config.z_low_enabled = false; - event_config.z_high_enabled = true; - event_config.duration = 0; - event_config.latch = true; - - lis3dh_set_int_event_config (sensor, &event_config, lis3dh_int_event1_gen); - lis3dh_enable_int (sensor, lis3dh_int_event1, lis3dh_int1_signal, true); - #endif // INT_EVENT - - #ifdef INT_CLICK - // enable click interrupt on INT1 - lis3dh_int_click_config_t click_config; - - click_config.threshold = 10; - click_config.x_single = false; - click_config.x_double = false; - click_config.y_single = false; - click_config.y_double = false; - click_config.z_single = true; - click_config.z_double = false; - click_config.latch = true; - click_config.time_limit = 1; - click_config.time_latency = 1; - click_config.time_window = 3; - - lis3dh_set_int_click_config (sensor, &click_config); - lis3dh_enable_int (sensor, lis3dh_int_click, lis3dh_int1_signal, true); - #endif // INT_CLICK - - #ifdef FIFO_MODE - // clear FIFO and activate FIFO mode if needed - lis3dh_set_fifo_mode (sensor, lis3dh_bypass, 0, lis3dh_int1_signal); - lis3dh_set_fifo_mode (sensor, lis3dh_stream, 10, lis3dh_int1_signal); - #endif - - // configure HPF and reset the reference by dummy read - lis3dh_config_hpf (sensor, lis3dh_hpf_normal, 0, true, true, true, true); - lis3dh_get_hpf_ref (sensor); - - // enable ADC inputs and temperature sensor for ADC input 3 - lis3dh_enable_adc (sensor, true, true); - - // LAST STEP: Finally set scale and mode to start measurements - lis3dh_set_scale(sensor, lis3dh_scale_2_g); - lis3dh_set_mode (sensor, lis3dh_odr_10, lis3dh_high_res, true, true, true); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - #ifdef INT_USED - - // create a task that is triggered only in case of interrupts to fetch the data - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a user task that fetches data from sensor periodically - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #endif - } - else - printf("Could not initialize LIS3DH sensor\n"); -} - diff --git a/examples/lis3mdl/Makefile b/examples/lis3mdl/Makefile deleted file mode 100644 index a1f22da..0000000 --- a/examples/lis3mdl/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=LIS3MDL -EXTRA_COMPONENTS = extras/i2c extras/lis3mdl -include ../../common.mk diff --git a/examples/lis3mdl/lis3mdl_example.c b/examples/lis3mdl/lis3mdl_example.c deleted file mode 100644 index 29e5ec1..0000000 --- a/examples/lis3mdl/lis3mdl_example.c +++ /dev/null @@ -1,268 +0,0 @@ -/** - * Simple example with one sensor connected to I2C or SPI. It demonstrates the - * different approaches to fetch the data. Either one of the interrupt signals - * is used or new data are fetched periodically. - * - * Harware configuration: - * - * I2C - * - * +-----------------+ +----------+ - * | ESP8266 / ESP32 | | LIS3MDL | - * | | | | - * | GPIO 14 (SCL) ----> SCL | - * | GPIO 13 (SDA) <---> SDA | - * | GPIO 5 <---- INT | - * | GPIO 4 <---- DRDY | - * +-----------------+ +----------+ - * - * SPI - * - * +-----------------+ +----------+ +-----------------+ +----------+ - * | ESP8266 | | LIS3MDL | | ESP32 | | LIS3MDL | - * | | | | | | | | - * | GPIO 14 (SCK) ----> SCK | | GPIO 16 (SCK) ----> SCK | - * | GPIO 13 (MOSI)----> SDI | | GPIO 17 (MOSI)----> SDI | - * | GPIO 12 (MISO)<---- SDO | | GPIO 18 (MISO)<---- SDO | - * | GPIO 2 (CS) ----> CS | | GPIO 19 (CS) ----> CS | - * | GPIO 5 <---- INT | | GPIO 5 <---- INT | - * | GPIO 4 <---- DRDY | | GPIO 4 <---- DRDY | - * +-----------------+ +---------+ +-----------------+ +----------+ - */ - -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED // if defined SPI is used, otherwise I2C -// #define INT_DATA // data ready interrupt used -// #define INT_THRESH // threshold interrupt used - -#if defined(INT_DATA) || defined(INT_THRESH) -#define INT_USED -#endif - -/* -- includes ----------------------------------------------------- */ - -#include "lis3mdl.h" - -/** -- platform dependent definitions ------------------------------ */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define PIN_INT 5 -#define PIN_DRDY 4 - -/* -- user tasks --------------------------------------------------- */ - -static lis3mdl_sensor_t* sensor; - -/** - * Common function used to get sensor data. - */ -void read_data () -{ - lis3mdl_float_data_t data; - - if (lis3mdl_new_data (sensor) && - lis3mdl_get_float_data (sensor, &data)) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LIS3MDL (xyz)[Gs] mx=%+7.3f my=%+7.3f mz=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - data.mx, data.my, data.mz); -} - - -#ifdef INT_USED -/** - * In this case, any of the possible interrupts on interrupt signal *INT1* is - * used to fetch the data. - * - * When interrupts are used, the user has to define interrupt handlers that - * either fetches the data directly or triggers a task which is waiting to - * fetch the data. In this example, the interrupt handler sends an event to - * a waiting task to trigger the data gathering. - */ - -static QueueHandle_t gpio_evt_queue = NULL; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint8_t gpio_num; - - while (1) - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - if (gpio_num == PIN_DRDY) - { - read_data (); - } - else if (gpio_num == PIN_INT) - { - lis3mdl_int_source_t int_src; - - // get the source of the interrupt and reset INT signals - lis3mdl_get_int_source (sensor, &int_src); - - // in case of DRDY interrupt or activity interrupt read one data sample - if (int_src.active) - read_data (); - } - } -} - -// Interrupt handler which resumes user_task_interrupt on interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -#else // !INT_USED - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - vTaskDelay (100/portTICK_PERIOD_MS); - - while (1) - { - // read sensor data - read_data (); - - // passive waiting until 1 second is over - vTaskDelay(100/portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - // init the sensor connnected to SPI - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = lis3mdl_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else - - // init all I2C bus interfaces at which LIS3MDL sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address LIS3MDL_I2C_ADDRESS_2 connected to I2C_BUS. - sensor = lis3mdl_init_sensor (I2C_BUS, LIS3MDL_I2C_ADDRESS_2, 0); - - #endif - - if (sensor) - { - #ifdef INT_USED - - /** --- INTERRUPT CONFIGURATION PART ---- */ - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode to avoid losing interrupts - - // create an event queue to send interrupt events from interrupt - // handler to the interrupt task - gpio_evt_queue = xQueueCreate(10, sizeof(uint8_t)); - - // configure interupt pins for *INT* and *DRDY* signals and set the interrupt handler - gpio_enable(PIN_INT , GPIO_INPUT); - gpio_enable(PIN_DRDY, GPIO_INPUT); - gpio_set_interrupt(PIN_INT , GPIO_INTTYPE_EDGE_POS, int_signal_handler); - gpio_set_interrupt(PIN_DRDY, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - - #endif // !defined(INT_USED) - - // -- SENSOR CONFIGURATION PART --- - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode - - #ifdef INT_THRESH - // enable threshold interrupts on INT1 - lis3mdl_int_config_t int_config; - - int_config.threshold = 1000; - int_config.x_enabled = true; - int_config.y_enabled = true; - int_config.z_enabled = true; - int_config.latch = true; - int_config.signal_level= lis3mdl_high_active; - - lis3mdl_set_int_config (sensor, &int_config); - #endif // INT_THRESH - - // LAST STEP: Finally set scale and mode to start measurements - lis3mdl_set_scale(sensor, lis3mdl_scale_4_Gs); - lis3mdl_set_mode (sensor, lis3mdl_lpm_10); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - #ifdef INT_USED - - // create a task that is triggered only in case of interrupts to fetch the data - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a user task that fetches data from sensor periodically - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #endif - } - else - printf("Could not initialize LIS3MDL sensor\n"); -} - diff --git a/examples/lsm303d/Makefile b/examples/lsm303d/Makefile deleted file mode 100644 index 2073588..0000000 --- a/examples/lsm303d/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=LSM303D -EXTRA_COMPONENTS = extras/i2c extras/lsm303d -include ../../common.mk diff --git a/examples/lsm303d/lsm303d_example.c b/examples/lsm303d/lsm303d_example.c deleted file mode 100644 index 957c027..0000000 --- a/examples/lsm303d/lsm303d_example.c +++ /dev/null @@ -1,432 +0,0 @@ -/** - * Simple example with one sensor connected to I2C or SPI. It demonstrates the - * different approaches to fetch the data. Either one of the interrupt signals - * is used or new data are fetched periodically. - * - * Harware configuration: - * - * I2C - * - * +-----------------+ +----------+ - * | ESP8266 / ESP32 | | LSM303D | - * | | | | - * | GPIO 14 (SCL) ----> SCL | - * | GPIO 13 (SDA) <---> SDA | - * | GPIO 5 <---- INT1 | - * | GPIO 4 <---- INT2 | - * +-----------------+ +----------+ - * - * SPI - * - * +-----------------+ +----------+ +-----------------+ +----------+ - * | ESP8266 | | LSM303D | | ESP32 | | LSM303D | - * | | | | | | | | - * | GPIO 14 (SCK) ----> SCK | | GPIO 16 (SCK) ----> SCK | - * | GPIO 13 (MOSI)----> SDI | | GPIO 17 (MOSI)----> SDI | - * | GPIO 12 (MISO)<---- SDO | | GPIO 18 (MISO)<---- SDO | - * | GPIO 2 (CS) ----> CS | | GPIO 19 (CS) ----> CS | - * | GPIO 5 <---- INT1 | | GPIO 5 <---- INT1 | - * | GPIO 4 <---- INT2 | | GPIO 4 <---- INT2 | - * +-----------------+ +---------+ +-----------------+ +----------+ - */ - -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED // SPI interface is used, otherwise I2C -// #define FIFO_MODE // multiple sample read mode -// #define TEMP_USED // temperature sensor used -// #define INT_DATA // data interrupts used (data ready and FIFO status) -// #define INT_EVENT // inertial event interrupts used (axis movement or 6D/4D orientation) -// #define INT_CLICK // click detection interrupts used -// #define INT_THRESH // magnetic value exceeds threshold interrupt used - -#if defined(INT_DATA) || defined(INT_EVENT) || defined(INT_CLICK) || defined(INT_THRESH) -#define INT_USED -#endif - -/* -- includes ----------------------------------------------------- */ - -#include "lsm303d.h" - -/** -- platform dependent definitions ------------------------------ */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define INT1_PIN 5 -#define INT2_PIN 4 - -/* -- user tasks --------------------------------------------------- */ - -static lsm303d_sensor_t* sensor; - -/** - * Common function used to get sensor data. - */ -void read_data () -{ - #ifdef FIFO_MODE - - lsm303d_float_a_data_fifo_t fifo; - - // test for new accelerator data data - if (lsm303d_new_a_data (sensor)) - { - // fetch the accelerator data stored in FIFO - uint8_t num = lsm303d_get_float_a_data_fifo (sensor, fifo); - - printf("%.3f LSM303D num=%d\n", (double)sdk_system_get_time()*1e-3, num); - - for (int i=0; i < num; i++) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LSM303D (xyz)[g] ax=%+7.3f ay=%+7.3f az=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - fifo[i].ax, fifo[i].ay, fifo[i].az); - } - - #else - - lsm303d_float_a_data_t a_data; - - // test for new accelerator data and fetch them - if (lsm303d_new_a_data (sensor) && - lsm303d_get_float_a_data (sensor, &a_data)) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LSM303D (xyz)[g] ax=%+7.3f ay=%+7.3f az=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - a_data.ax, a_data.ay, a_data.az); - - #endif // FIFO_MODE - - lsm303d_float_m_data_t m_data; - - // test for new magnetometer data and fetch them - if (lsm303d_new_m_data (sensor) && - lsm303d_get_float_m_data (sensor, &m_data)) - // max. full scale is +-12 Gs and best resolution is 1 mGs, i.e. 5 digits - printf("%.3f LSM303D (xyz)[Gs] mx=%+7.3f my=%+7.3f mz=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - m_data.mx, m_data.my, m_data.mz); - - #ifdef TEMP_USED - float temp = lsm303d_get_temperature (sensor); - - printf("%.3f LSM303D (tmp)[°C] %+7.3f\n", (double)sdk_system_get_time()*1e-3, temp); - #endif -} - - -#ifdef INT_USED -/** - * In this case, any of the possible interrupts on interrupt signal *INT1* is - * used to fetch the data. - * - * When interrupts are used, the user has to define interrupt handlers that - * either fetches the data directly or triggers a task which is waiting to - * fetch the data. In this example, the interrupt handler sends an event to - * a waiting task to trigger the data gathering. - */ - -static QueueHandle_t gpio_evt_queue = NULL; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint8_t gpio; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio, portMAX_DELAY)) - { - lsm303d_int_data_source_t data_src = {}; - lsm303d_int_event_source_t event_src = {}; - lsm303d_int_click_source_t click_src = {}; - lsm303d_int_m_thresh_source_t thresh_src = {}; - - // get the source of the interrupt that reset *INTx* signals - #ifdef INT_DATA - lsm303d_get_int_data_source (sensor, &data_src); - #endif - #ifdef INT_THRESH - lsm303d_get_int_m_thresh_source(sensor, &thresh_src); - #endif - #ifdef INT_EVENT - lsm303d_get_int_event_source (sensor, &event_src, lsm303d_int_event1_gen); - #endif - #ifdef INT_CLICK - lsm303d_get_int_click_source (sensor, &click_src); - #endif - - // in case of DRDY interrupt - if (data_src.a_data_ready || data_src.m_data_ready) - read_data (); - - // in case of FIFO interrupts read the whole FIFO - else if (data_src.fifo_thresh || data_src.fifo_overrun) - read_data (); - - // in case of magnetic threshold interrupt - else if (thresh_src.active) - { - printf("%.3f LSM303D ", (double)sdk_system_get_time()*1e-3); - if (thresh_src.x_pos) printf("x exceeds threshold on positive side\n"); - if (thresh_src.y_pos) printf("y exceeds threshold on positive side\n"); - if (thresh_src.z_pos) printf("z exceeds threshold on positive side\n"); - if (thresh_src.x_neg) printf("x exceeds threshold on negative side\n"); - if (thresh_src.y_neg) printf("y exceeds threshold on negative side\n"); - if (thresh_src.z_neg) printf("z exceeds threshold on negative side\n"); - } - - // in case of event interrupt - else if (event_src.active) - { - printf("%.3f LSM303D ", (double)sdk_system_get_time()*1e-3); - if (event_src.x_low) printf("x is lower than threshold\n"); - if (event_src.y_low) printf("y is lower than threshold\n"); - if (event_src.z_low) printf("z is lower than threshold\n"); - if (event_src.x_high) printf("x is higher than threshold\n"); - if (event_src.y_high) printf("y is higher than threshold\n"); - if (event_src.z_high) printf("z is higher than threshold\n"); - } - - // in case of click detection interrupt - else if (click_src.active) - printf("%.3f LSM303D %s\n", (double)sdk_system_get_time()*1e-3, - click_src.s_click ? "single click" : "double click"); - } - } -} - -// Interrupt handler which resumes user_task_interrupt on interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -#else // !INT_USED - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - vTaskDelay (100/portTICK_PERIOD_MS); - - while (1) - { - // read sensor data - read_data (); - - // passive waiting until 1 second is over - vTaskDelay(200/portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - // init the SPI interface at which LMS303D sensors are connected - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = lsm303d_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else - - // init all I2C busses at which LSM303D sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address LSM303D_I2C_ADDRESS_2 connected to I2C_BUS. - sensor = lsm303d_init_sensor (I2C_BUS, LSM303D_I2C_ADDRESS_2, 0); - - #endif - - if (sensor) - { - #ifdef INT_USED - - /** --- INTERRUPT CONFIGURATION PART ---- */ - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode to avoid losing interrupts - - // create an event queue to send interrupt events from interrupt - // handler to the interrupt task - gpio_evt_queue = xQueueCreate(10, sizeof(uint8_t)); - - // configure interupt pins for *INT1* and *INT2* signals and set the interrupt handler - gpio_enable(INT1_PIN, GPIO_INPUT); - gpio_enable(INT2_PIN, GPIO_INPUT); - gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - gpio_set_interrupt(INT2_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - - #endif // INT_USED - - /** -- SENSOR CONFIGURATION PART --- */ - - // set the type of INTx signals if necessary - // lsm303d_config_int_signals (sensor, lsm303d_push_pull); - - #ifdef INT_DATA - // enable data interrupts on *INT2* (data ready or FIFO overrun and FIFO threshold) - // data ready and FIFO status interrupts must not be enabled at the same time - #ifdef FIFO_MODE - lsm303d_enable_int (sensor, lsm303d_int_fifo_overrun, lsm303d_int2_signal, true); - lsm303d_enable_int (sensor, lsm303d_int_fifo_thresh , lsm303d_int2_signal, true); - #else - lsm303d_enable_int (sensor, lsm303d_int_a_data_ready, lsm303d_int2_signal, true); - lsm303d_enable_int (sensor, lsm303d_int_m_data_ready, lsm303d_int2_signal, true); - #endif // FIFO_MODE - #endif // INT_DATA - - #ifdef INT_THRESH - // enable magnetic threshold interrupts on signal *INT1* - lsm303d_int_m_thresh_config_t m_thresh_config; - - m_thresh_config.threshold = 2000; - m_thresh_config.x_enabled = true; - m_thresh_config.y_enabled = true; - m_thresh_config.z_enabled = true; - m_thresh_config.latch = true; - m_thresh_config.signal_level = lsm303d_high_active; - - lsm303d_set_int_m_thresh_config (sensor, &m_thresh_config); - lsm303d_enable_int (sensor, lsm303d_int_m_thresh, lsm303d_int1_signal, true); - #endif // INT_THRESH - - #ifdef INT_EVENT - // enable inertial event interrupts on *INT1* - lsm303d_int_event_config_t event_config; - - event_config.mode = lsm303d_or; // axes movement wake-up - // event_config.mode = lsm303d_and; // free fall - // event_config.mode = lsm303d_6d_movement; - // event_config.mode = lsm303d_6d_position; - // event_config.mode = lsm303d_4d_movement; - // event_config.mode = lsm303d_4d_position; - event_config.threshold = 50; - event_config.x_low_enabled = false; - event_config.x_high_enabled = true; - event_config.y_low_enabled = false; - event_config.y_high_enabled = true; - event_config.z_low_enabled = false; - event_config.z_high_enabled = true; - event_config.duration = 0; - event_config.latch = true; - - lsm303d_set_int_event_config (sensor, &event_config, lsm303d_int_event1_gen); - lsm303d_enable_int (sensor, lsm303d_int_event1, lsm303d_int1_signal, true); - #endif // INT_EVENT - - #ifdef INT_CLICK - // enable single click interrupt for z-axis on signal *INT1* - lsm303d_int_click_config_t click_config; - - click_config.threshold = 10; - click_config.x_single = false; - click_config.x_double = false; - click_config.y_single = false; - click_config.y_double = false; - click_config.z_single = true; - click_config.z_double = false; - click_config.latch = true; - click_config.time_limit = 1; - click_config.time_latency = 1; - click_config.time_window = 3; - - lsm303d_set_int_click_config (sensor, &click_config); - lsm303d_enable_int (sensor, lsm303d_int_click, lsm303d_int1_signal, true); - #endif // INT_CLICK - - #ifdef FIFO_MODE - // clear the FIFO - lsm303d_set_fifo_mode (sensor, lsm303d_bypass, 0); - - // activate the FIFO with a threshold of 10 samples (max. 31); if - // interrupt *lsm303d_fifo_thresh* is enabled, an interrupt is - // generated when the FIFO content exceeds this threshold, i.e., - // when 11 samples are stored in FIFO - lsm303d_set_fifo_mode (sensor, lsm303d_stream, 10); - #endif - - // configure HPF and implicitly reset the reference by a dummy read - lsm303d_config_a_hpf (sensor, lsm303d_hpf_normal, true, true, true, true); - - #ifdef TEMP_USED - // enable the temperature sensor - lsm303d_enable_temperature (sensor, true); - #endif - - // LAST STEP: Finally set scale and mode to start measurements - lsm303d_set_a_scale(sensor, lsm303d_a_scale_2_g); - lsm303d_set_m_scale(sensor, lsm303d_m_scale_4_Gs); - lsm303d_set_a_mode (sensor, lsm303d_a_odr_12_5, lsm303d_a_aaf_bw_773, true, true, true); - lsm303d_set_m_mode (sensor, lsm303d_m_odr_12_5, lsm303d_m_low_res, lsm303d_m_continuous); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - #ifdef INT_USED - - // create a task that is triggered only in case of interrupts to fetch the data - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a user task that fetches data from sensor periodically - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #endif - } - else - printf("Could not initialize LSM303D sensor\n"); -} - diff --git a/examples/lvgl_ssd1306/Makefile b/examples/lvgl_ssd1306/Makefile deleted file mode 100644 index b11bbb5..0000000 --- a/examples/lvgl_ssd1306/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = LVGL_SSD1306 -EXTRA_COMPONENTS = lvgl extras/i2c - -include ../../common.mk diff --git a/examples/lvgl_ssd1306/lv_conf.h b/examples/lvgl_ssd1306/lv_conf.h deleted file mode 100644 index 48235dd..0000000 --- a/examples/lvgl_ssd1306/lv_conf.h +++ /dev/null @@ -1,316 +0,0 @@ -/** - * @file lv_conf.h - * - */ -#ifndef LV_CONF_H -#define LV_CONF_H - -//include complement to LV_TICK_CUSTOM_INCLUDE. -#include "FreeRTOS.h" - -/*=================== - Dynamic memory - *===================*/ - -/* Memory size which will be used by the library - * to store the graphical objects and other data */ -#define LV_MEM_CUSTOM 1 /*1: use custom malloc/free, 0: use the built-in lv_mem_alloc/lv_mem_free*/ -#if LV_MEM_CUSTOM == 0 -#define LV_MEM_SIZE (32U * 1024U) /*Size memory used by `lv_mem_alloc` in bytes (>= 2kB)*/ -#define LV_MEM_ATTR /*Complier prefix for big array declaration*/ -#define LV_MEM_AUTO_DEFRAG 1 /*Automatically defrag on free*/ -#else /*LV_MEM_CUSTOM*/ -#define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ -#define LV_MEM_CUSTOM_ALLOC malloc /*Wrapper to malloc*/ -#define LV_MEM_CUSTOM_FREE free /*Wrapper to free*/ -#endif /*LV_MEM_CUSTOM*/ - -/*=================== - Graphical settings - *===================*/ - -/* Horizontal and vertical resolution of the library.*/ -#define LV_HOR_RES (128) -#define LV_VER_RES (64) -#define LV_DPI (72) - -/* Size of VDB (Virtual Display Buffer: the internal graphics buffer). - * Required for buffered drawing, opacity and anti-aliasing - * VDB makes the double buffering, you don't need to deal with it! - * Typical size: ~1/10 screen */ -#define LV_VDB_SIZE (LV_VER_RES * LV_HOR_RES / 2) /*Size of VDB in pixel count (1/10 screen size is good for first)*/ -#define LV_VDB_PX_BPP 1 /*Bit-per-pixel of VDB. Useful for monochrome or non-standard color format displays. (Set `disp_drv->vdb_wr` and `disp_drv->vdb_rd` too)*/ -#define LV_VDB_ADR 0 /*Place VDB to a specific address (e.g. in external RAM) (0: allocate automatically into RAM; LV_VDB_ADR_INV: to replace it later with `lv_vdb_set_adr()`)*/ - -/* Use two Virtual Display buffers (VDB) parallelize rendering and flushing (optional) - * The flushing should use DMA to write the frame buffer in the background*/ -#define LV_VDB_DOUBLE 0 /*1: Enable the use of 2 VDBs*/ -#define LV_VDB2_ADR 0 /*Place VDB2 to a specific address (e.g. in external RAM) (0: allocate automatically into RAM; LV_VDB_ADR_INV: to replace it later with `lv_vdb_set_adr()`)*/ - -/* Enable anti-aliasing (lines, and radiuses will be smoothed) */ -#define LV_ANTIALIAS 0 /*1: Enable anti-aliasing*/ - -/*Screen refresh settings*/ -#define LV_REFR_PERIOD 50 /*Screen refresh period in milliseconds*/ -#define LV_INV_FIFO_SIZE 32 /*The average count of objects on a screen */ - -/*================= - Misc. setting - *=================*/ - -/*Input device settings*/ -#define LV_INDEV_READ_PERIOD 50 /*Input device read period in milliseconds*/ -#define LV_INDEV_POINT_MARKER 0 /*Mark the pressed points (required: USE_LV_REAL_DRAW = 1)*/ -#define LV_INDEV_DRAG_LIMIT 10 /*Drag threshold in pixels */ -#define LV_INDEV_DRAG_THROW 20 /*Drag throw slow-down in [%]. Greater value means faster slow-down */ -#define LV_INDEV_LONG_PRESS_TIME 400 /*Long press time in milliseconds*/ -#define LV_INDEV_LONG_PRESS_REP_TIME 100 /*Repeated trigger period in long press [ms] */ - -/*Color settings*/ -#define LV_COLOR_DEPTH 1 /*Color depth: 1/8/16/32*/ -#define LV_COLOR_16_SWAP 0 /*Swap the 2 bytes of RGB565 color. Useful if the display has a 8 bit interface (e.g. SPI)*/ -#define LV_COLOR_SCREEN_TRANSP 0 /*1: Enable screen transparency. Useful for OSD or other overlapping GUIs. Requires ARGB8888 colors*/ -#define LV_COLOR_TRANSP LV_COLOR_LIME /*Images pixels with this color will not be drawn (with chroma keying)*/ - -/*Text settings*/ -#define LV_TXT_UTF8 0 /*Enable UTF-8 coded Unicode character usage */ -#define LV_TXT_BREAK_CHARS " ,.;:-_" /*Can break texts on these chars*/ - -/*Graphics feature usage*/ -#define USE_LV_ANIMATION 1 /*1: Enable all animations*/ -#define USE_LV_SHADOW 0 /*1: Enable shadows*/ -#define USE_LV_GROUP 1 /*1: Enable object groups (for keyboards)*/ -#define USE_LV_GPU 0 /*1: Enable GPU interface*/ -#define USE_LV_REAL_DRAW 1 /*1: Enable function which draw directly to the frame buffer instead of VDB (required if LV_VDB_SIZE = 0)*/ -#define USE_LV_FILESYSTEM 1 /*1: Enable file system (required by images*/ - -/*Compiler settings*/ -#define LV_ATTRIBUTE_TICK_INC __attribute__((section(".iram1.text"))) /* Define a custom attribute to `lv_tick_inc` function */ -#define LV_ATTRIBUTE_TASK_HANDLER __attribute__((section(".iram1.text"))) /* Define a custom attribute to `lv_task_handler` function */ -#define LV_COMPILER_VLA_SUPPORTED 0 /* 1: Variable length array is supported*/ -#define LV_COMPILER_NON_CONST_INIT_SUPPORTED 0 /* 1: Initialization with non constant values are supported */ - -/*HAL settings*/ -#define LV_TICK_CUSTOM 1 /*1: use a custom tick source (removing the need to manually update the tick with `lv_tick_inc`) */ -#if LV_TICK_CUSTOM == 1 -#define LV_TICK_CUSTOM_INCLUDE "task.h" -#define LV_TICK_CUSTOM_SYS_TIME_EXPR (xTaskGetTickCount()*10) /*Expression evaluating to current systime in ms*/ -#endif /*LV_TICK_CUSTOM*/ - - -/*Log settings*/ -#define USE_LV_LOG 0 /*Enable/disable the log module*/ -#if USE_LV_LOG -/* How important log should be added: - * LV_LOG_LEVEL_TRACE A lot of logs to give detailed information - * LV_LOG_LEVEL_INFO Log important events - * LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't caused problem - * LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail - */ -#define LV_LOG_LEVEL LV_LOG_LEVEL_INFO -/* 1: Print the log with 'printf'; 0: user need to register a callback*/ - -#define LV_LOG_PRINTF 0 -#endif /*USE_LV_LOG*/ - -/*================ - * THEME USAGE - *================*/ -#define LV_THEME_LIVE_UPDATE 0 /*1: Allow theme switching at run time. Uses 8..10 kB of RAM*/ - -#define USE_LV_THEME_TEMPL 0 /*Just for test*/ -#define USE_LV_THEME_DEFAULT 0 /*Built mainly from the built-in styles. Consumes very few RAM*/ -#define USE_LV_THEME_ALIEN 0 /*Dark futuristic theme*/ -#define USE_LV_THEME_NIGHT 0 /*Dark elegant theme*/ -#define USE_LV_THEME_MONO 0 /*Mono color theme for monochrome displays*/ -#define USE_LV_THEME_MATERIAL 0 /*Flat theme with bold colors and light shadows*/ -#define USE_LV_THEME_ZEN 0 /*Peaceful, mainly light theme */ -#define USE_LV_THEME_NEMO 0 /*Water-like theme based on the movie "Finding Nemo"*/ - -/*================== - * FONT USAGE - *===================*/ - -/* More info about fonts: https://littlevgl.com/basics#fonts - * To enable a built-in font use 1,2,4 or 8 values - * which will determine the bit-per-pixel */ -#define USE_LV_FONT_DEJAVU_10 1 -#define USE_LV_FONT_DEJAVU_10_LATIN_SUP 0 -#define USE_LV_FONT_DEJAVU_10_CYRILLIC 0 -#define USE_LV_FONT_SYMBOL_10 1 - -#define USE_LV_FONT_DEJAVU_20 1 -#define USE_LV_FONT_DEJAVU_20_LATIN_SUP 0 -#define USE_LV_FONT_DEJAVU_20_CYRILLIC 0 -#define USE_LV_FONT_SYMBOL_20 1 - -#define USE_LV_FONT_DEJAVU_30 1 -#define USE_LV_FONT_DEJAVU_30_LATIN_SUP 0 -#define USE_LV_FONT_DEJAVU_30_CYRILLIC 0 -#define USE_LV_FONT_SYMBOL_30 1 - -#define USE_LV_FONT_DEJAVU_40 0 -#define USE_LV_FONT_DEJAVU_40_LATIN_SUP 0 -#define USE_LV_FONT_DEJAVU_40_CYRILLIC 0 -#define USE_LV_FONT_SYMBOL_40 0 - -#define USE_LV_FONT_MONOSPACE_8 0 - -/* Optionally declare your custom fonts here. - * You can use these fonts as default font too - * and they will be available globally. E.g. - * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \ - * LV_FONT_DECLARE(my_font_2) \ - */ -#define LV_FONT_CUSTOM_DECLARE - -#define LV_FONT_DEFAULT &lv_font_dejavu_10 /*Always set a default font from the built-in fonts*/ - -/*=================== - * LV_OBJ SETTINGS - *==================*/ -#define LV_OBJ_FREE_NUM_TYPE uint32_t /*Type of free number attribute (comment out disable free number)*/ -#define LV_OBJ_FREE_PTR 1 /*Enable the free pointer attribute*/ - -/*================== - * LV OBJ X USAGE - *================*/ -/* - * Documentation of the object types: https://littlevgl.com/object-types - */ - -/***************** - * Simple object - *****************/ - -/*Label (dependencies: -*/ -#define USE_LV_LABEL 1 -#if USE_LV_LABEL != 0 -#define LV_LABEL_SCROLL_SPEED 25 /*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_SCROLL/ROLL' mode*/ -#endif - -/*Image (dependencies: lv_label*/ -#define USE_LV_IMG 1 -#if USE_LV_IMG != 0 -#define LV_IMG_CF_INDEXED 1 /*Enable indexed (palette) images*/ -#define LV_IMG_CF_ALPHA 1 /*Enable alpha indexed images*/ -#endif - -/*Line (dependencies: -*/ -#define USE_LV_LINE 1 - -/*Arc (dependencies: -)*/ -#define USE_LV_ARC 1 - -/******************* - * Container objects - *******************/ - -/*Container (dependencies: -*/ -#define USE_LV_CONT 1 - -/*Page (dependencies: lv_cont)*/ -#define USE_LV_PAGE 1 - -/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/ -#define USE_LV_WIN 1 - -/*Tab (dependencies: lv_page, lv_btnm)*/ -#define USE_LV_TABVIEW 1 -#if USE_LV_TABVIEW != 0 -#define LV_TABVIEW_ANIM_TIME 300 /*Time of slide animation [ms] (0: no animation)*/ -#endif - -/************************* - * Data visualizer objects - *************************/ - -/*Bar (dependencies: -)*/ -#define USE_LV_BAR 1 - -/*Line meter (dependencies: *;)*/ -#define USE_LV_LMETER 1 - -/*Gauge (dependencies:bar, lmeter)*/ -#define USE_LV_GAUGE 1 - -/*Chart (dependencies: -)*/ -#define USE_LV_CHART 1 - -/*LED (dependencies: -)*/ -#define USE_LV_LED 1 - -/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/ -#define USE_LV_MBOX 1 - -/*Text area (dependencies: lv_label, lv_page)*/ -#define USE_LV_TA 1 -#if USE_LV_TA != 0 -#define LV_TA_CURSOR_BLINK_TIME 400 /*ms*/ -#define LV_TA_PWD_SHOW_TIME 1500 /*ms*/ -#endif - -/*Calendar (dependencies: -)*/ -#define USE_LV_CALENDAR 1 - -/*Preload (dependencies: arc)*/ -#define USE_LV_PRELOAD 1 -#if USE_LV_PRELOAD != 0 -#define LV_PRELOAD_DEF_ARC_LENGTH 60 /*[deg]*/ -#define LV_PRELOAD_DEF_SPIN_TIME 1000 /*[ms]*/ -#endif - -/************************* - * User input objects - *************************/ - -/*Button (dependencies: lv_cont*/ -#define USE_LV_BTN 1 -#if USE_LV_BTN != 0 -#define LV_BTN_INK_EFFECT 1 /*Enable button-state animations - draw a circle on click (dependencies: USE_LV_ANIMATION)*/ -#endif - -/*Image Button (dependencies: lv_btn*/ -#define USE_LV_IMGBTN 1 - -/*Button matrix (dependencies: -)*/ -#define USE_LV_BTNM 1 - -/*Keyboard (dependencies: lv_btnm)*/ -#define USE_LV_KB 1 - -/*Check box (dependencies: lv_btn, lv_label)*/ -#define USE_LV_CB 1 - -/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons ))*/ -#define USE_LV_LIST 1 -#if USE_LV_LIST != 0 -#define LV_LIST_FOCUS_TIME 100 /*Default animation time of focusing to a list element [ms] (0: no animation) */ -#endif - -/*Drop down list (dependencies: lv_page, lv_label)*/ -#define USE_LV_DDLIST 1 -#if USE_LV_DDLIST != 0 -#define LV_DDLIST_ANIM_TIME 200 /*Open and close default animation time [ms] (0: no animation)*/ -#endif - -/*Roller (dependencies: lv_ddlist)*/ -#define USE_LV_ROLLER 1 -#if USE_LV_ROLLER != 0 -#define LV_ROLLER_ANIM_TIME 200 /*Focus animation time [ms] (0: no animation)*/ -#endif - -/*Slider (dependencies: lv_bar)*/ -#define USE_LV_SLIDER 1 - -/*Switch (dependencies: lv_slider)*/ -#define USE_LV_SW 1 - -/************************* - * Non-user section - *************************/ -#ifdef _MSC_VER /* Disable warnings for Visual Studio*/ -# define _CRT_SECURE_NO_WARNINGS -#endif - -#endif /*LV_CONF_H*/ diff --git a/examples/lvgl_ssd1306/lv_drv_conf.h b/examples/lvgl_ssd1306/lv_drv_conf.h deleted file mode 100644 index 00788c7..0000000 --- a/examples/lvgl_ssd1306/lv_drv_conf.h +++ /dev/null @@ -1,578 +0,0 @@ -/** - * @file lv_drv_conf.h - * - */ - -#if 1 /*Remove this to enable the content*/ - -#ifndef LV_DRV_CONF_H -#define LV_DRV_CONF_H - -#include "lv_conf.h" - -/********************* - * INCLUDES - *********************/ -/* Add specific sdk include here */ -#include -#include -#include -#include - -#include -#include -#include -/********************* - * DEFINES - *********************/ -/* Disable with 0 if driver don't use an specific api */ -#define LV_DRIVER_ENABLE_COMMON 1 -#define LV_DRIVER_ENABLE_DELAY 1 -#define LV_DRIVER_ENABLE_I2C 1 -#define LV_DRIVER_ENABLE_SPI 1 -#define LV_DRIVER_ENABLE_PAR 1 - -/* use this macro if you want ignore a gpio write/read. e.g: spi.cs = LV_DRIVER_NOPIN */ -#define LV_DRIVER_NOPIN (0xFF) - -/* use this macro to add specific attribute to function call into an interupt routines */ -#define INTERUPT_ATTRIBUTE __attribute__((section(".iram1.text"))) - -/********************** - * TYPEDEFS - **********************/ -/* You can use a pointer handler or just a id number to reder to a device - * e.g: typedef const uint8_t lv_gpio_handle_t if you need just a bus id - * You can use device descriptor from your sdk too. - */ -//typedef const void* lv_gpio_handle_t ; -//typedef const void* lv_i2c_handle_t ; -//typedef const void* lv_spi_handle_t ; -typedef const void* lv_par_handle_t ; -typedef const void* lv_uart_handle_t ; - -typedef struct { - uint8_t bus; - uint8_t cs; - uint8_t dc; - spi_settings_t *s; //XXX:experimental for multi spi device - SemaphoreHandle_t* mutex; //XXX:experimental for multi spi device -} lv_spi_dev_t, *lv_spi_handle_t; - -typedef const i2c_dev_t *lv_i2c_handle_t ; -typedef uint8_t lv_gpio_handle_t ; - -/********************* - * HAL INTERFACE - *********************/ -/* - * All used peripherals must be initialized in user application, library only - * manipulate them. - * You can use a device descriptor from your SDK or do your own in this file too. - * example: - * typedef struct lv_spi_dev_t { .... }; - */ - -/*------------ - * Delay - *------------*/ -#if LV_DRIVER_ENABLE_DELAY - -/** - * Delay the given number of microseconds - * @param us Time to wait in us - */ -static inline void lv_delay_us(const uint32_t us) -{ - sdk_os_delay_us(us); -} - -/** - * Delay the given number of milliseconds - * @param ms Time to wait in ms - */ -static inline void lv_delay_ms(const uint32_t ms) -{ - if (ms/portTICK_PERIOD_MS) //if we wait more than a tick, use vTaskDelay - { - vTaskDelay(((ms-1)/portTICK_PERIOD_MS)+1); //Round superior - return; - } - for (uint32_t x = 0 ; x < ms ; x++) - { - sdk_os_delay_us(1000); - } -} - -/** - * Return system time - * @return system time (ms) - */ -static inline uint32_t lv_get_ms() -{ - return xTaskGetTickCount()*portTICK_PERIOD_MS; -} - -#endif -/*------------ - * Common - *------------*/ -#if LV_DRIVER_ENABLE_COMMON - -/** - * Change a pin level - * @param pin gpio Number - * @param val Level to set - */ -static inline void lv_gpio_write(lv_gpio_handle_t gpio, const uint8_t val) -{ - gpio_write(gpio, val); -} - -/** - * Read current level gpio - * @param pin gpio to read - * @return gpio value - */ -static inline uint8_t lv_gpio_read(lv_gpio_handle_t gpio) -{ - return gpio_read(gpio); -} - -#endif - -/*--------- - * UART - *---------*/ -/** - * Do a uart write transmission. - * @param uart_dev Pointer to uart device - * @param data_out Pointer to data buffer to send if non-null - * @param datalen Number of data byte to send - * @return Non-Zero if error occured - */ -static inline int lv_uart_write(lv_uart_handle_t uart_dev, const void* data_out, uint16_t datalen) -{ - return -1; -} - -/** - * Do a uart read transmission - * @param uart_dev Pointer to uart device - * @param data_out Pointer to data buffer to send if non-null - * @param datalen Number of data byte to read - * @return Non-Zero if error occured - */ -static inline int lv_uart_read(lv_uart_handle_t uart_dev, void* data_in, uint16_t datalen) -{ - return -1; -} - -/*--------- - * I2C - *---------*/ -#if LV_DRIVER_ENABLE_I2C - -/** - * Do a I2C write transmission on 8 bits register device. - * @param i2c_dev Pointer to i2c device - * @param reg Pointer to register address to send if non-null - * @param data_out Pointer to data buffer to send if non-null - * @param datalen Number of data byte to send - * @return Non-Zero if error occured - */ -static inline int lv_i2c_write(lv_i2c_handle_t i2c_dev, const uint8_t* reg, const void* data_out, uint16_t datalen) -{ - return i2c_slave_write(i2c_dev->bus, i2c_dev->addr, reg, (uint8_t*)data_out, datalen); -} - -/** - * Do a I2C read transmission on 8 bits register device. - * @param i2c_dev Pointer to i2c device - * @param reg Pointer to register address to send if non-null - * @param data_out Pointer to data buffer to send if non-null - * @param datalen Number of data byte to send - * @return Non-Zero if error occured - */ -static inline int lv_i2c_read(lv_i2c_handle_t i2c_dev, const uint8_t* reg, void* data_in, uint16_t datalen) -{ - return i2c_slave_read(i2c_dev->bus, i2c_dev->addr, reg, (uint8_t*)data_in, datalen); -} - -/** - * Do a I2C write transmissionon 16 bits register device - * @param i2c_dev Pointer to i2c device - * @param reg Pointer to register address to send if non-null - * @param data_out Pointer to data buffer to send if non-null - * @param datalen Number of data byte to send - * @return Non-Zero if error occured - */ -static inline int lv_i2c_write16(lv_i2c_handle_t i2c_dev, const uint16_t* reg, const void* data_out, uint16_t datalen) -{ - return -1; -} - -/** - * Do a I2C write transmissionon 16 bits register device. - * @param i2c_dev Pointer to i2c device - * @param reg Pointer to register address to send if non-null - * @param data_out Pointer to data buffer to send if non-null - * @param datalen Number of data byte to send - * @return Non-Zero if error occured - */ -static inline int lv_i2c_read16(lv_i2c_handle_t i2c_dev, const uint16_t* reg, void* data_in, uint16_t datalen) -{ - return -1; -} - -#endif -/*--------- - * SPI - *---------*/ -#if LV_DRIVER_ENABLE_SPI - -typedef enum { - LV_SPI_COMMAND, - LV_SPI_ADDRESS, - LV_SPI_DUMMY, -} lv_spi_reg_t; - -/** - * Control SPI cs pin. - * @param spi_dev Pointer to spi device - * @param lvl Gpio Level - */ -static inline void lv_spi_wr_cs(lv_spi_handle_t spi_dev, uint8_t lvl) -{ - gpio_write(spi_dev->cs, lvl); -} - -/** - * Control SPI dc pin. - * @param spi_dev Pointer to spi device - * @param lvl Gpio Level - */ -static inline void lv_spi_wr_dc(lv_spi_handle_t spi_dev, uint8_t lvl) -{ - gpio_write(spi_dev->dc, lvl); -} - -/** - * Do a SPI transaction . - * @param spi_dev Pointer to spi device - * @param data_in Receive buffer. If NULL, received data will be lost. - * @param data_out Data to send buffer. If NULL, it will only receive data. - * @param len Buffer size in words - * @param word_size Size of the word in byte - * @return Non-Zero if error occured - */ -static inline int lv_spi_transaction(lv_spi_handle_t spi_dev, void* data_in, const void* data_out, uint16_t len, uint8_t word_size) -{ - spi_transfer(spi_dev->bus, data_out, data_in, len, word_size); - return 0; -} - -/** - * Do a SPI repeat send. - * @param spi_dev Pointer to spi device - * @param template Pointer toTemplate to send throw spi. - * @param repeats Copy number - * @param template_size Size of the template in byte - * @return Non-Zero if error occured - */ -static inline int lv_spi_repeat(lv_spi_handle_t spi_dev, const void* template, uint32_t repeats, uint8_t template_size) -{ - uint32_t data = 0; - if(!template) - { - template = (void*)&data ; - } - switch (template_size) - { - case 1: - spi_repeat_send_8(spi_dev->bus,*(uint8_t*)template,repeats); - break; - case 2: - spi_repeat_send_16(spi_dev->bus,*(uint16_t*)template,repeats); - break; - case 4: - spi_repeat_send_32(spi_dev->bus,*(uint32_t*)template,repeats); - break; - default: - return -1; - break; - } - return 0; -} - -/** - * Set command to send for spi transaction - * @param spi_dev Pointer to spi device - * @param reg SPI register to set (dummy/command/address) - * @param value Value - * @param bits Bits number - * @return Non-Zero if error occured - */ -static inline int lv_spi_set_preemble(lv_spi_handle_t spi_dev, lv_spi_reg_t reg, uint32_t value, uint8_t bits) -{ - switch(reg) { - case LV_SPI_COMMAND: - spi_set_command(spi_dev->bus, bits, value); - break; - case LV_SPI_ADDRESS: - spi_set_address(spi_dev->bus, bits, value); - break; - case LV_SPI_DUMMY: - spi_set_dummy_bits(spi_dev->bus, bits, false); - break; - default: - return -1; - break; - } - return 0; -} - -/** - * Clear spi bus command - * @param spi_dev Pointer to spi device - * @param reg SPI register to clear (dummy/command/address) - * @return Non-Zero if error occured - */ -static inline int lv_spi_clr_preemble(lv_spi_handle_t spi_dev, lv_spi_reg_t reg) -{ - switch(reg) { - case LV_SPI_COMMAND: - spi_clear_command(spi_dev->bus); - break; - case LV_SPI_ADDRESS: - spi_clear_address(spi_dev->bus); - break; - case LV_SPI_DUMMY: - spi_clear_dummy(spi_dev->bus); - break; - default: - return -1; - break; - } - return 0; -} - -#endif -/*------------------ - * Parallel port - *-----------------*/ -#if LV_DRIVER_ENABLE_PAR -/** - * Control Parallel cs pin. - * @param par_dev Pointer to parallel device - * @param lvl Gpio Level - */ -static inline void lv_par_wr_cs(lv_par_handle_t par_dev, uint8_t lvl) -{ - return; -} - -/** - * Control Parallel dc pin. - * @param par_dev Pointer to parallel device - * @param lvl Gpio Level - */ -static inline void lv_par_wr_dc(lv_par_handle_t par_dev, uint8_t lvl) -{ - return; -} - -/** - * Do a Parallel port write. - * @param par_dev Pointer to parallel port device - * @param data_out Pointer to data buffer to send - * @param len Buffer size in words - * @param word_size Size of the word in byte - * @return Non-Zero if error occured - */ -static inline int lv_par_write(lv_par_handle_t par_dev, const void* data_out, uint16_t len, uint8_t word_size) -{ - return -1; -} - -/** - * Do a Parallel port read. - * @param par_dev Pointer to parallel port device - * @param data_in Pointer to data buffer to read - * @param len Buffer size in words - * @param word_size Size of the word in byte - * @return Non-Zero if error occured - */ -static inline int lv_par_read(lv_par_handle_t par_dev, void* data_in, uint16_t len, uint8_t word_size) -{ - return -1; -} - -#endif -/********************* - * DISPLAY DRIVERS - *********************/ - -/*------------------- - * Monitor of PC - *-------------------*/ -#define USE_MONITOR 0 -#if USE_MONITOR -#define MONITOR_HOR_RES LV_HOR_RES -#define MONITOR_VER_RES LV_HOR_VER -#endif - -/*---------------- - * SSD1963 - *--------------*/ -#define USE_SSD1963 0 -#if USE_SSD1963 -#define SSD1963_HOR_RES LV_HOR_RES -#define SSD1963_VER_RES LV_VER_RES -#define SSD1963_HDP 479 -#define SSD1963_HT 531 -#define SSD1963_HPS 43 -#define SSD1963_LPS 8 -#define SSD1963_HPW 10 -#define SSD1963_VDP 271 -#define SSD1963_VT 288 -#define SSD1963_VPS 12 -#define SSD1963_FPS 4 -#define SSD1963_VPW 10 -#define SSD1963_HS_NEG 0 /*Negative hsync*/ -#define SSD1963_VS_NEG 0 /*Negative vsync*/ -#define SSD1963_ORI 0 /*0, 90, 180, 270*/ -#define SSD1963_COLOR_DEPTH 16 -#endif - -/*---------------- - * ILI9341 - *--------------*/ -#define USE_ILI9341 0 -#if USE_ILI9341 -#define ILI9341_DEBUG 0 -#define ILI9341_ERR_CHECK 1 -#define ILI9341_PAR_SUPPORT 1 -#define ILI9341_SPI4WIRE_SUPPORT 1 -#define ILI9341_SPI3WIRE_SUPPORT 1 -#define ILI9341_EXTC_SUPPORT (0) -#define ILI9341_COLOR (65) //Color Mode : 65K or 262K -#define ILI9341_MAX_SAMPLE (32) //Buffer spi is 64, so select 32 for 2byte per pixel -#define ILI9341_SERIAL_BYTESWAP (0) // { 0 : None, 1: CPU Swap, 2: ILI9341 swap } -#endif - -/*---------------- - * SSD1306 - *--------------*/ -#define USE_SSD1306 1 -#if USE_SSD1306 -#define SSD1306_HOR_RES LV_HOR_RES -#define SSD1306_VER_RES LV_VER_RES -#define SSD1306_DEBUG 0 -#define SSD1306_ERR_CHECK 0 -#define SSD1306_I2C_SUPPORT 1 -#define SSD1306_SPI_4_WIRE_SUPPORT 1 -#define SSD1306_SPI_3_WIRE_SUPPORT 1 -#endif - -/*---------------- - * R61581 - *--------------*/ -#define USE_R61581 0 -#if USE_R61581 != 0 -#define R61581_HOR_RES LV_HOR_RES -#define R61581_VER_RES LV_VER_RES -#define R61581_HDP 479 -#define R61581_HT 531 -#define R61581_HPS 43 -#define R61581_LPS 8 -#define R61581_HPW 10 -#define R61581_VDP 271 -#define R61581_VT 319 -#define R61581_VPS 12 -#define R61581_FPS 4 -#define R61581_VPW 10 -#define R61581_HS_NEG 0 /*Negative hsync*/ -#define R61581_VS_NEG 0 /*Negative vsync*/ -#define R61581_ORI 180 /*0, 90, 180, 270*/ -#define R61581_LV_COLOR_DEPTH 16 -#endif - -/*------------------------------ - * ST7565 (Monochrome, low res.) - *-----------------------------*/ -#define USE_ST7565 0 -#if USE_ST7565 != 0 -/*No settings*/ -#endif /*USE_ST7565*/ - -/*----------------------------------------- - * Linux frame buffer device (/dev/fbx) - *-----------------------------------------*/ -#define USE_FBDEV 0 -#if USE_FBDEV != 0 -#define FBDEV_PATH "/dev/fb0" -#endif - -/*==================== - * Input devices - *===================*/ - -/*-------------- - * AR1000 - *--------------*/ -#define USE_AR10XX (1) -#if (USE_AR10XX != 0) -#define AR10XX_SPI_SUPPORT (1) -#define AR10XX_I2C_SUPPORT (1) -#define AR10XX_UART_SUPPORT (0) -#define AR10XX_DEBUG (1) -#define AR10XX_ERR_CHECK (0) -#define AR10XX_VERIFY_ANSWER (1) -#define AR10XX_USE_IRQ (0) -#define AR10XX_COMPONENT (21) // Version of XX (10, 11, 20 , 21) -#endif - -/*-------------- - * XPT2046 - *--------------*/ -#define USE_XPT2046 0 -#if USE_XPT2046 != 0 -#define XPT2046_HOR_RES 480 -#define XPT2046_VER_RES 320 -#define XPT2046_X_MIN 200 -#define XPT2046_Y_MIN 200 -#define XPT2046_X_MAX 3800 -#define XPT2046_Y_MAX 3800 -#define XPT2046_AVG 4 -#define XPT2046_INV 0 -#endif - -/*----------------- - * FT5406EE8 - *-----------------*/ -#define USE_FT5406EE8 0 -#if USE_FT5406EE8 -#define FT5406EE8_I2C_ADR 0x38 /*7 bit address*/ -#endif - -/*------------------------------- - * Mouse or touchpad on PC - *------------------------------*/ -#define USE_MOUSE 0 -#if USE_MOUSE -/*No settings*/ -#endif - - -/*------------------------------- - * Keyboard of a PC - *------------------------------*/ -#define USE_KEYBOARD 0 -#if USE_KEYBOARD -/*No settings*/ -#endif - -#endif /*LV_DRV_CONF_H*/ - -#endif /*Remove this to enable the content*/ diff --git a/examples/lvgl_ssd1306/main.c b/examples/lvgl_ssd1306/main.c deleted file mode 100644 index 8ebd57e..0000000 --- a/examples/lvgl_ssd1306/main.c +++ /dev/null @@ -1,220 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "lv_conf.h" -#include "lvgl/lvgl.h" -#include "lv_drivers/display/SSD1306.h" - -#define I2C_CONNECTION false -#define TICK_HANDLER false -#define OVERCLOCK false - -#define TICK_INC_MS (10) -#define RST_PIN (LV_DRIVER_NOPIN) -#define SECOND (1000 / portTICK_PERIOD_MS) - -#if (I2C_CONNECTION) -#include -#endif - -#if (I2C_CONNECTION) -#define PROTOCOL SSD1306_PROTO_I2C -#define ADDR SSD1306_I2C_ADDR_0 -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 - -const static i2c_dev_t i2c_dev = -{ - .bus = I2C_BUS, - .addr = ADDR -}; -#else -#define PROTOCOL SSD1306_PROTO_SPI3 -#define SPI_BUS 1 -#define CS_PIN 15 -#define DC_PIN 4 -/*Delare bus descriptor */ -const static lv_spi_dev_t spi_dev = -{ - .bus = SPI_BUS, - .cs = CS_PIN, - .dc = DC_PIN, -}; -#endif - -/* Declare device descriptor */ -static ssd1306_t dev; - -TimerHandle_t fps_timer_handle = NULL; // Timer handler -TimerHandle_t font_timer_handle = NULL; -TimerHandle_t lvgl_timer_handle = NULL; - -static lv_style_t style; -static lv_obj_t * label; - -static void ssd1306_task(void *pvParameters) -{ - printf("%s: Started user interface task\n", __FUNCTION__); - vTaskDelay(SECOND); - ssd1306_set_whole_display_lighting(&dev, false); - - //Set a style for the obj - lv_style_copy(&style, &lv_style_transp); - style.text.font = &lv_font_dejavu_10; /*Unicode and symbol fonts already assigned by the library*/ - style.text.color.full = 1; - style.text.opa = 255; - - style.body.main_color.full = 0; - style.body.grad_color.full = 0; - style.body.shadow.color.full = 0; - style.body.border.color.full = 0; - style.body.empty = 1; - - style.image.color.full = 1; - style.image.intense = 255; - style.image.opa = 255; - - style.line.color.full = 1; - style.line.opa = 255; - style.line.width = 1; - style.line.rounded = false; - - //Create main screen obj - lv_obj_t * scr = lv_obj_create(NULL, NULL); - lv_scr_load(scr); - lv_obj_set_style(scr, &style); - - //Create a simple label - label = lv_label_create(lv_scr_act(), NULL); - lv_obj_set_style(label, &style); - - lv_obj_align(label, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); - lv_label_set_long_mode(label, LV_LABEL_LONG_BREAK); - lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); - lv_label_set_text(label, "lvgl work with esp-open-rtos"); - lv_obj_set_width(label, LV_HOR_RES); - - while (1) { - /*draw system call */ - lv_task_handler(); - vTaskDelay(1); - } -} - - -void font_timer(TimerHandle_t h) -{ - static uint8_t index = 0; - if (index >= 2) - index=0; - else - index++; - - switch (index) { - case 0: - style.text.font = &lv_font_dejavu_10; - break; - case 1: - style.text.font = &lv_font_dejavu_20; - break; - case 2: - style.text.font = &lv_font_dejavu_30; - break; - default: - break; - } - lv_label_set_style(label, &style); - printf("Selected builtin font %d\n", index); -} - - -#if (!LV_TICK_CUSTOM) -#if (TICK_HANDLER) -void IRAM vApplicationTickHook(void) { - lv_tick_inc(portTICK_PERIOD_MS); -} -#else -void lvgl_timer(TimerHandle_t xTimerHandle) -{ - lv_tick_inc(TICK_INC_MS); -} -#endif -#endif - -void user_init(void) -{ -#if (OVERCLOCK) - sdk_system_update_cpu_freq(160); -#endif - - // Setup HW - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - -#if (I2C_CONNECTION) - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K); -#else -#if (CS_PIN == 15) - spi_init(SPI_BUS, SPI_MODE0, SPI_FREQ_DIV_8M, true, SPI_LITTLE_ENDIAN, false); -#else - spi_init(SPI_BUS, SPI_MODE0, SPI_FREQ_DIV_8M, true, SPI_LITTLE_ENDIAN, true); - gpio_enable(CS_PIN, GPIO_OUTPUT); -#endif -#endif -#if (RST_PIN != LV_DRIVER_NOPIN) - gpio_enable(RST_PIN, GPIO_OUTPUT); -#endif - - /*Gui initialization*/ - lv_init(); - - /*Screen initialization*/ -#if (I2C_CONNECTION) - dev.i2c_dev = (lv_i2c_handle_t)&i2c_dev; -#else - dev.spi_dev = (lv_spi_handle_t)&spi_dev; -#endif - dev.protocol = PROTOCOL ; //SSD1306_PROTO_SPI3; - dev.screen = SH1106_SCREEN; //SSD1306_SCREEN, SH1106_SCREEN - dev.width = LV_HOR_RES; - dev.height = LV_VER_RES; - dev.rst_pin = RST_PIN; //No RST PIN USED - - while (ssd1306_init(&dev) != 0) { - printf("%s: failed to init SSD1306 lcd\n", __func__); - vTaskDelay(SECOND); - } - - ssd1306_set_whole_display_lighting(&dev, true); - - /*inverse screen (180°) */ - ssd1306_set_scan_direction_fwd(&dev,true); - ssd1306_set_segment_remapping_enabled(&dev, false); - vTaskDelay(SECOND); - - /*lvgl screen registration */ - lv_disp_drv_t disp_drv; - lv_disp_drv_init(&disp_drv); - /*Set up the functions to access to your display*/ - disp_drv.disp_flush = ssd1306_flush; /*Used in buffered mode (LV_VDB_SIZE != 0 in lv_conf.h)*/ - disp_drv.disp_fill = NULL;//ex_disp_fill; /*Used in unbuffered mode (LV_VDB_SIZE == 0 in lv_conf.h)*/ - disp_drv.disp_map = NULL;//ex_disp_map; /*Used in unbuffered mode (LV_VDB_SIZE == 0 in lv_conf.h)*/ - disp_drv.vdb_wr = ssd1306_vdb_wr; - lv_disp_drv_register(&disp_drv); - - /* Create user interface task */ - xTaskCreate(ssd1306_task, "ssd1306_task", 512, NULL, 2, NULL); - - font_timer_handle = xTimerCreate("font_timer", 5 * SECOND, pdTRUE, NULL, font_timer); - xTimerStart(font_timer_handle, 0); - -#if (!TICK_HANDLER && !LV_TICK_CUSTOM) - lvgl_timer_handle = xTimerCreate("lvgl_timer", TICK_INC_MS/portTICK_PERIOD_MS, pdTRUE, NULL, lvgl_timer); - xTimerStart(lvgl_timer_handle, 0); -#endif -} diff --git a/examples/max7219_7seg/Makefile b/examples/max7219_7seg/Makefile deleted file mode 100644 index fc55387..0000000 --- a/examples/max7219_7seg/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM = max7219_7seg -EXTRA_COMPONENTS = extras/max7219 -include ../../common.mk diff --git a/examples/max7219_7seg/main.c b/examples/max7219_7seg/main.c deleted file mode 100644 index d90d01b..0000000 --- a/examples/max7219_7seg/main.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Example of using MAX7219 driver with 7 segment displays - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include -#include -#include -#include - -#define CS_PIN 5 -#define DELAY 2000 - -static max7219_display_t disp = { - .cs_pin = CS_PIN, - .digits = 8, - .cascade_size = 1, - .mirrored = true -}; - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - max7219_init(&disp); - //max7219_set_decode_mode(&disp, true); - - char buf[9]; - while (true) - { - max7219_clear(&disp); - max7219_draw_text(&disp, 0, "7219LEDS"); - vTaskDelay(DELAY / portTICK_PERIOD_MS); - - max7219_clear(&disp); - sprintf(buf, "%2.4f A", 34.6782); - max7219_draw_text(&disp, 0, buf); - vTaskDelay(DELAY / portTICK_PERIOD_MS); - - max7219_clear(&disp); - sprintf(buf, "%08x", hwrand()); - max7219_draw_text(&disp, 0, buf); - vTaskDelay(DELAY / portTICK_PERIOD_MS); - } -} diff --git a/examples/mcp4725_test/Makefile b/examples/mcp4725_test/Makefile deleted file mode 100644 index bc50fa2..0000000 --- a/examples/mcp4725_test/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = mcp4725_test -EXTRA_COMPONENTS = extras/i2c extras/mcp4725 -#ESPBAUD = 460800 -include ../../common.mk diff --git a/examples/mcp4725_test/main.c b/examples/mcp4725_test/main.c deleted file mode 100644 index bcb839b..0000000 --- a/examples/mcp4725_test/main.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Example of using MCP4725 DAC - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include - -#include -#include - -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 -#define ADDR MCP4725A0_ADDR0 -#define VDD 3.3 - -inline static void wait_for_eeprom(i2c_dev_t *dev) -{ - while (mcp4725_eeprom_busy(dev)) - { - printf("...DAC is busy, waiting...\n"); - vTaskDelay(1); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - i2c_dev_t dev = { - .addr = ADDR, - .bus = I2C_BUS, - }; - - // setup EEPROM values - if (mcp4725_get_power_mode(&dev, true) != MCP4725_PM_NORMAL) - { - printf("DAC was sleeping... Wake up Neo!\n"); - mcp4725_set_power_mode(&dev, MCP4725_PM_NORMAL, true); - wait_for_eeprom(&dev); - } - - printf("Set default DAC ouptut value to MAX...\n"); - mcp4725_set_raw_output(&dev, MCP4725_MAX_VALUE, true); - wait_for_eeprom(&dev); - - printf("And now default DAC output value is 0x%03x\n", mcp4725_get_raw_output(&dev, true)); - - printf("Now let's generate the sawtooth wave in slow manner\n"); - - float vout = 0; - while (true) - { - vout += 0.1; - if (vout > VDD) vout = 0; - - printf("Vout: %.02f\n", vout); - mcp4725_set_voltage(&dev, VDD, vout, false); - - // It will be very low freq wave - vTaskDelay(100 / portTICK_PERIOD_MS); - } -} diff --git a/examples/mqtt_client/mqtt_client.c b/examples/mqtt_client/mqtt_client.c index 6efbd2d..422169a 100644 --- a/examples/mqtt_client/mqtt_client.c +++ b/examples/mqtt_client/mqtt_client.c @@ -1,3 +1,18 @@ +/* + MQTT Example Client + + Connects to mosquitto test server, publishes to /beat and + subscribes to /esptopic + + If using mosquitto, then commands to interact with this example are: + + mosquitto_pub -h test.mosquitto.org -t /esptopic -m "Hello!" + + mosquitto_sub -h test.mosquitto.org -t /beat + + Sample code originally by @baoshi, adapted by Yudi Ludkevich & Angus + Gratton. BSD Licensed. + */ #include "espressif/esp_common.h" #include "esp/uart.h" @@ -10,47 +25,45 @@ #include #include -#include -#include +#include #include - /* You can use http://test.mosquitto.org/ to test mqtt_client instead * of setting up your own MQTT server */ -#define MQTT_HOST ("test.mosquitto.org") +#define MQTT_HOST "test.mosquitto.org" #define MQTT_PORT 1883 #define MQTT_USER NULL #define MQTT_PASS NULL -SemaphoreHandle_t wifi_alive; -QueueHandle_t publish_queue; +xSemaphoreHandle wifi_alive; +xQueueHandle publish_queue; #define PUB_MSG_LEN 16 static void beat_task(void *pvParameters) { - TickType_t xLastWakeTime = xTaskGetTickCount(); + portTickType xLastWakeTime = xTaskGetTickCount(); char msg[PUB_MSG_LEN]; int count = 0; while (1) { - vTaskDelayUntil(&xLastWakeTime, 10000 / portTICK_PERIOD_MS); - printf("beat\r\n"); + vTaskDelayUntil(&xLastWakeTime, 10000 / portTICK_RATE_MS); snprintf(msg, PUB_MSG_LEN, "Beat %d\r\n", count++); + printf(msg); if (xQueueSend(publish_queue, (void *)msg, 0) == pdFALSE) { printf("Publish queue overflow.\r\n"); } } } -static void topic_received(mqtt_message_data_t *md) +static void topic_received(struct MessageData *md) { int i; - mqtt_message_t *message = md->message; + MQTTMessage *message = md->message; printf("Received: "); - for( i = 0; i < md->topic->lenstring.len; ++i) - printf("%c", md->topic->lenstring.data[ i ]); + for( i = 0; i < md->topicName->lenstring.len; ++i) + printf("%c", md->topicName->lenstring.data[ i ]); printf(" = "); for( i = 0; i < (int)message->payloadlen; ++i) @@ -86,15 +99,15 @@ static const char * get_my_id(void) static void mqtt_task(void *pvParameters) { - int ret = 0; - struct mqtt_network network; - mqtt_client_t client = mqtt_client_default; + int ret = 0; + Client client; + Network network; char mqtt_client_id[20]; uint8_t mqtt_buf[100]; uint8_t mqtt_readbuf[100]; - mqtt_packet_connect_data_t data = mqtt_packet_connect_data_initializer; + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; - mqtt_network_new( &network ); + NewNetwork( &network ); memset(mqtt_client_id, 0, sizeof(mqtt_client_id)); strcpy(mqtt_client_id, "ESP-"); strcat(mqtt_client_id, get_my_id()); @@ -104,14 +117,14 @@ static void mqtt_task(void *pvParameters) printf("%s: started\n\r", __func__); printf("%s: (Re)connecting to MQTT server %s ... ",__func__, MQTT_HOST); - ret = mqtt_network_connect(&network, MQTT_HOST, MQTT_PORT); + ret = ConnectNetwork(&network, MQTT_HOST, MQTT_PORT); if( ret ){ printf("error: %d\n\r", ret); taskYIELD(); continue; } printf("done\n\r"); - mqtt_client_new(&client, &network, 5000, mqtt_buf, 100, + MQTTClient(&client, &network, 5000, mqtt_buf, 100, mqtt_readbuf, 100); data.willFlag = 0; @@ -122,15 +135,15 @@ static void mqtt_task(void *pvParameters) data.keepAliveInterval = 10; data.cleansession = 0; printf("Send MQTT connect ... "); - ret = mqtt_connect(&client, &data); + ret = MQTTConnect(&client, &data); if(ret){ printf("error: %d\n\r", ret); - mqtt_network_disconnect(&network); + DisconnectNetwork(&network); taskYIELD(); continue; } printf("done\r\n"); - mqtt_subscribe(&client, "/esptopic", MQTT_QOS1, topic_received); + MQTTSubscribe(&client, "/esptopic", QOS1, topic_received); xQueueReset(publish_queue); while(1){ @@ -139,25 +152,24 @@ static void mqtt_task(void *pvParameters) while(xQueueReceive(publish_queue, (void *)msg, 0) == pdTRUE){ printf("got message to publish\r\n"); - mqtt_message_t message; + MQTTMessage message; message.payload = msg; message.payloadlen = PUB_MSG_LEN; message.dup = 0; - message.qos = MQTT_QOS1; + message.qos = QOS1; message.retained = 0; - ret = mqtt_publish(&client, "/beat", &message); - if (ret != MQTT_SUCCESS ){ + ret = MQTTPublish(&client, "/beat", &message); + if (ret != SUCCESS ){ printf("error while publishing message: %d\n", ret ); break; } } - ret = mqtt_yield(&client, 1000); - if (ret == MQTT_DISCONNECTED) + ret = MQTTYield(&client, 1000); + if (ret == FAILURE) break; } printf("Connection dropped, request restart\n\r"); - mqtt_network_disconnect(&network); taskYIELD(); } } @@ -190,7 +202,7 @@ static void wifi_task(void *pvParameters) printf("WiFi: connection failed\r\n"); break; } - vTaskDelay( 1000 / portTICK_PERIOD_MS ); + vTaskDelay( 1000 / portTICK_RATE_MS ); --retries; } if (status == STATION_GOT_IP) { @@ -205,7 +217,7 @@ static void wifi_task(void *pvParameters) } printf("WiFi: disconnected\n\r"); sdk_wifi_station_disconnect(); - vTaskDelay( 1000 / portTICK_PERIOD_MS ); + vTaskDelay( 1000 / portTICK_RATE_MS ); } } @@ -216,7 +228,7 @@ void user_init(void) vSemaphoreCreateBinary(wifi_alive); publish_queue = xQueueCreate(3, PUB_MSG_LEN); - xTaskCreate(&wifi_task, "wifi_task", 256, NULL, 2, NULL); - xTaskCreate(&beat_task, "beat_task", 256, NULL, 3, NULL); - xTaskCreate(&mqtt_task, "mqtt_task", 1024, NULL, 4, NULL); + xTaskCreate(&wifi_task, (int8_t *)"wifi_task", 256, NULL, 2, NULL); + xTaskCreate(&beat_task, (int8_t *)"beat_task", 256, NULL, 2, NULL); + xTaskCreate(&mqtt_task, (int8_t *)"mqtt_task", 1024, NULL, 2, NULL); } diff --git a/examples/ms561101ba03/Makefile b/examples/ms561101ba03/Makefile deleted file mode 100644 index 8f1b28c..0000000 --- a/examples/ms561101ba03/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = ms561101ba03 -EXTRA_COMPONENTS = extras/i2c extras/ms561101ba03 -ESPBAUD = 460800 -include ../../common.mk diff --git a/examples/ms561101ba03/main.c b/examples/ms561101ba03/main.c deleted file mode 100644 index b4b9c73..0000000 --- a/examples/ms561101ba03/main.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Example of using MS561101ba03 driver - * - * Copyright (C) 2016 Bernhard Guillon - * - * Loosely based on main.c with: - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include - -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 - -void user_init(void) -{ - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - - uart_set_baud(0, 115200); - printf("SDK version:%s\n\n", sdk_system_get_sdk_version()); - - ms561101ba03_t device = { - .i2c_dev.bus = I2C_BUS, - .i2c_dev.addr = MS561101BA03_ADDR_CSB_LOW, - .osr = MS561101BA03_OSR_4096, - }; - - while (!ms561101ba03_init(&device)) - printf("Device not found\n"); - - while (true) - { - if (!ms561101ba03_get_sensor_data(&device)) - printf("Error reading sensor data from device"); - printf("Temperature in C * 100: %i \nPressure in mbar * 100: %i\n", device.result.temperature, device.result.pressure); - } -} diff --git a/examples/multipwm/Makefile b/examples/multipwm/Makefile deleted file mode 100644 index 4138f8b..0000000 --- a/examples/multipwm/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -# Simple makefile for multipwm example -PROGRAM=multipwm_test -EXTRA_COMPONENTS = extras/multipwm -include ../../common.mk diff --git a/examples/multipwm/multipwm_test.c b/examples/multipwm/multipwm_test.c deleted file mode 100644 index 46ddce8..0000000 --- a/examples/multipwm/multipwm_test.c +++ /dev/null @@ -1,50 +0,0 @@ -/* An example for the multipwm library - * Connect LEDs to pins 12, 13, 15 to see the light changes - * - * Part of esp-open-rtos - * Copyright (c) Sashka Nochkin (https://github.com/nochkin) - * MIT Licensed - */ - -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "task.h" - -#include "multipwm.h" - -void multipwm_task(void *pvParameters) -{ - uint32_t counts[] = {500, 2100, 3000}; - int32_t steps[] = {100, 300, 200}; - uint8_t pins[] = { 12, 13, 15}; - - pwm_info_t pwm_info; - pwm_info.channels = 3; - - multipwm_init(&pwm_info); - for (uint8_t ii=0; ii= 10000) || (counts[ii] == 0)) { - steps[ii] = -steps[ii]; - } - } - multipwm_start(&pwm_info); - vTaskDelay(1); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - xTaskCreate(multipwm_task, "multipwm", 256, NULL, 2, NULL); -} diff --git a/examples/ota_basic/ota_basic.c b/examples/ota_basic/ota_basic.c index 23102dd..c2050d5 100644 --- a/examples/ota_basic/ota_basic.c +++ b/examples/ota_basic/ota_basic.c @@ -109,10 +109,10 @@ void tftp_client_task(void *pvParameters) */ while(1) { tftpclient_download_and_verify_file1(slot, &conf); - vTaskDelay(5000 / portTICK_PERIOD_MS); + vTaskDelay(5000 / portTICK_RATE_MS); tftpclient_download_file2(slot); - vTaskDelay(5000 / portTICK_PERIOD_MS); + vTaskDelay(5000 / portTICK_RATE_MS); } } @@ -138,5 +138,5 @@ void user_init(void) printf("Starting TFTP server..."); ota_tftp_init_server(TFTP_PORT); - xTaskCreate(&tftp_client_task, "tftp_client", 2048, NULL, 2, NULL); + xTaskCreate(&tftp_client_task, (signed char *)"tftp_client", 2048, NULL, 2, NULL); } diff --git a/examples/pca9685_pwm/Makefile b/examples/pca9685_pwm/Makefile deleted file mode 100644 index 21a2d90..0000000 --- a/examples/pca9685_pwm/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM = pca9685_pwm -EXTRA_COMPONENTS = extras/i2c extras/pca9685 -include ../../common.mk diff --git a/examples/pca9685_pwm/main.c b/examples/pca9685_pwm/main.c deleted file mode 100644 index 07c0aac..0000000 --- a/examples/pca9685_pwm/main.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Example of using PCA9685 PWM driver - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * Public domain - */ -#include -#include -#include -#include -#include - -#define ADDR PCA9685_ADDR_BASE - -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 - -#define PWM_FREQ 500 - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - i2c_dev_t dev = { - .addr = ADDR, - .bus = I2C_BUS, - }; - - pca9685_init(&dev); - - pca9685_set_pwm_frequency(&dev, 1000); - printf("Freq 1000Hz, real %d\n", pca9685_get_pwm_frequency(&dev)); - - uint16_t val = 0; - while (true) - { - printf("Set ch0 to %d, ch4 to %d\n", val, 4096 - val); - pca9685_set_pwm_value(&dev, 0, val); - pca9685_set_pwm_value(&dev, 4, 4096 - val); - - if (val++ == 4096) - val = 0; - } -} diff --git a/examples/pcf8591/Makefile b/examples/pcf8591/Makefile deleted file mode 100644 index f9d5768..0000000 --- a/examples/pcf8591/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM = pcf8591 -EXTRA_COMPONENTS = extras/i2c extras/pcf8591 -include ../../common.mk diff --git a/examples/pcf8591/main.c b/examples/pcf8591/main.c deleted file mode 100644 index 442d3c1..0000000 --- a/examples/pcf8591/main.c +++ /dev/null @@ -1,42 +0,0 @@ -#include - -#include "espressif/esp_common.h" -#include "esp/uart.h" - -#include "FreeRTOS.h" -#include "task.h" - -#include "i2c/i2c.h" -#include "pcf8591/pcf8591.h" - -#define ADDR PCF8591_DEFAULT_ADDRESS -#define I2C_BUS 0 -#define SCL_PIN 5 -#define SDA_PIN 4 - -static void measure(void *pvParameters) -{ - i2c_dev_t dev = { - .addr = ADDR, - .bus = I2C_BUS, - }; - while (1) - { - vTaskDelay(1000 / portTICK_PERIOD_MS); - printf("Value: %d\n", pcf8591_read(&dev, PCF8591_IC_4_SINGLES, 3)); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - - // Just some information - printf("\n"); - printf("SDK version : %s\n", sdk_system_get_sdk_version()); - printf("GIT version : %s\n", GITSHORTREV); - - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - - xTaskCreate(measure, "measure_task", 256, NULL, 2, NULL); -} diff --git a/examples/pwm_test/Makefile b/examples/pwm_test/Makefile index 574420d..36ee7d0 100644 --- a/examples/pwm_test/Makefile +++ b/examples/pwm_test/Makefile @@ -1,4 +1,4 @@ # Simple makefile for simple example PROGRAM=pwm_test -EXTRA_COMPONENTS = extras/pwm +COMPONENTS = FreeRTOS lwip core extras/pwm include ../../common.mk diff --git a/examples/pwm_test/pwm_test.c b/examples/pwm_test/pwm_test.c index 782d295..d0372ac 100644 --- a/examples/pwm_test/pwm_test.c +++ b/examples/pwm_test/pwm_test.c @@ -35,7 +35,7 @@ void user_init(void) printf("pwm_init(1, [14])\n"); pins[0] = 14; - pwm_init(1, pins, false); + pwm_init(1, pins); printf("pwm_set_freq(1000) # 1 kHz\n"); pwm_set_freq(1000); @@ -46,5 +46,5 @@ void user_init(void) printf("pwm_start()\n"); pwm_start(); - xTaskCreate(task1, "tsk1", 256, NULL, 2, NULL); + xTaskCreate(task1, (signed char *)"tsk1", 256, NULL, 2, NULL); } diff --git a/examples/sdio_raw/Makefile b/examples/sdio_raw/Makefile deleted file mode 100644 index 1629f05..0000000 --- a/examples/sdio_raw/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = sdio_raw -EXTRA_COMPONENTS = extras/sdio -#ESPBAUD = 460800 -include ../../common.mk diff --git a/examples/sdio_raw/main.c b/examples/sdio_raw/main.c deleted file mode 100644 index 0d620fc..0000000 --- a/examples/sdio_raw/main.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Example of using SDIO driver - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include -#include -#include - -// Blink while IO :) -#define CS_GPIO_PIN 2 -// Set SPI frequency to 20MHz -#define SDIO_SPI_FREQ_DIV SPI_FREQ_DIV_20M - -static const char *errors[] = { - [SDIO_ERR_NONE] = NULL, - [SDIO_ERR_TIMEOUT] = "Timeout", - [SDIO_ERR_UNSUPPORTED] = "Unsupported", - [SDIO_ERR_IO] = "General I/O error", - [SDIO_ERR_CRC] = "CRC check failed" -}; - -static const char *types[] = { - [SDIO_TYPE_UNKNOWN] = "Unknown", - [SDIO_TYPE_MMC] = "MMC", - [SDIO_TYPE_SD1] = "SD v1.x", - [SDIO_TYPE_SD2] = "SD v2.x", - [SDIO_TYPE_SDHC] = "SDHC", -}; - -static void dump_line(const uint8_t *data) -{ - for (uint8_t i = 0; i < 16; i ++) - printf(" %02x", data[i]); - printf("\n"); -} - -static uint8_t buffer[SDIO_BLOCK_SIZE]; - -#define TEST_COUNT 1000 - -inline static void test_read(sdio_card_t *card) -{ - printf("Simple random access test speed: "); - uint32_t start = sdk_system_get_time(); - //sdk_system_update_cpu_freq(160); - for (uint32_t i = 0; i < TEST_COUNT; i ++) - { - printf("%08u / %08u\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08", i + 1, TEST_COUNT); - if (sdio_read_sectors(card, hwrand() % card->sectors, buffer, 1) != SDIO_ERR_NONE) - { - printf("Error: %d (%s)\n", card->error, errors[card->error]); - return; - } - } - uint32_t time = sdk_system_get_time() - start; - float speed = (float)TEST_COUNT / time * 1000000; - float stime = (time / 1000000.0) / TEST_COUNT; - uint32_t bs = (uint32_t)speed * 512; - printf("\nDone. Time: %u ms, speed: %.4f sectors/s, sector in %.4f s, %u bytes/s \n", time, speed, stime, bs); -} - -inline static void dump_card(sdio_card_t *card) -{ - char product_name[6]; - memcpy(product_name, card->cid.bits.product_name, 5); - product_name[5] = 0; - - printf("-------------------------------------------\n"); - printf(" SD/MMC card info\n"); - printf("-------------------------------------------\n"); - printf("%20s : %s\n", "Card type", types[card->type]); - printf("%20s : %s\n", "CRC enabled", card->crc_enabled ? "yes" : "no"); - printf("%20s : %d\n", "512 byte sectors", card->sectors); - printf("%20s : 0x%02x\n", "Manufacturer ID", card->cid.bits.manufacturer_id); - printf("%20s : %c%c\n", "OEM ID", card->cid.bits.oem_id[0], card->cid.bits.oem_id[1]); - printf("%20s : %s\n", "Product name", product_name); - printf("%20s : %d.%d\n", "Product revision", card->cid.bits.product_rev_major, card->cid.bits.product_rev_minor); - printf("%20s : 0x%08x\n", "Serial #", card->cid.bits.product_serial); - printf("%20s : %02d / %04d\n", "Manufacturing date", card->cid.bits.date_month, card->cid.bits.date_year_h * 10 + card->cid.bits.date_year_l + 2000); - printf("%20s : 0x%08x\n", "OCR", card->ocr.data); - printf("%20s :", "CID"); - dump_line(card->cid.data); - printf("%20s :", "CSD"); - dump_line(card->csd.data); - test_read(card); -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n\n", sdk_system_get_sdk_version()); - - while (true) - { - printf("\nInitializing card...\n"); - do - { - sdio_card_t card; - if (sdio_init(&card, CS_GPIO_PIN, SDIO_SPI_FREQ_DIV)) - { - printf("Error: %d (%s)\n", card.error, errors[card.error]); - break; - } - dump_card(&card); - } while (0); - - for (size_t i = 0; i < 1000; i ++) - sdk_os_delay_us(1000); - } -} diff --git a/examples/sdio_raw/schematics.png b/examples/sdio_raw/schematics.png deleted file mode 100644 index 93fb227..0000000 Binary files a/examples/sdio_raw/schematics.png and /dev/null differ diff --git a/examples/sht3x/Makefile b/examples/sht3x/Makefile deleted file mode 100644 index d17a4e1..0000000 --- a/examples/sht3x/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=SHT3x -EXTRA_COMPONENTS = extras/i2c extras/sht3x -include ../../common.mk diff --git a/examples/sht3x/README.md b/examples/sht3x/README.md deleted file mode 100644 index 453fad4..0000000 --- a/examples/sht3x/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# SHT3x Driver Examples - -These examples demonstrate the usage of the SHT3x driver with only one and multiple SHT3x sensors. - -## Hardware setup - -There are examples for only one sensor and examples for two sensors. - -To run examples with **one sensor**, just use GPIO14 (SCL) and GPIO13 (SDA) to connect to the SHT3x sensor's I2C interface. - -``` - +-----------------+ +----------+ - | ESP8266 / ESP32 | | SHT3x | - | | | | - | GPIO 14 (SCL) ------> SCL | - | GPIO 13 (SDA) <-----> SDA | - +-----------------+ +----------+ -``` - -If you want to run examples with **two sensors**, you could do this with only one bus and different I2C addresses or with two buses and the same or different I2C addresses. In later case, use GPIO5 (SCL) and GPIO4 (SDA) for the second bus to connect to the second SHT3x sensor's I2C interface. - -``` - +-----------------+ +----------+ - | ESP8266 / ESP32 | | SHT3x_1 | - | | | | - | GPIO 14 (SCL) ------> SCL | - | GPIO 13 (SDA) <-----> SDA | - | | +----------+ - | | | SHT3x_2 | - | | | | - | GPIO 5 (SCL) ------> SCL | - | GPIO 4 (SDA) <-----> SDA | - +-----------------+ +----------+ -``` - -## Example description - -It shows different user task implementations in *single shot mode* and *periodic mode*. In *single shot* mode either low level or high level functions are used. Constants SINGLE_SHOT_LOW_LEVEL and SINGLE_SHOT_HIGH_LEVEL controls which task implementation is used. diff --git a/examples/sht3x/sht3x.c b/examples/sht3x/sht3x.c deleted file mode 100644 index 1bf3ed4..0000000 --- a/examples/sht3x/sht3x.c +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Simple example with SHT3x sensor. - * - * It shows different user task implementations in *single shot mode* and - * *periodic mode*. In *single shot* mode either low level or high level - * functions are used. - * - * Constants SINGLE_SHOT_LOW_LEVEL and SINGLE_SHOT_HIGH_LEVEL controls which - * task implementation is used. - * - * Harware configuration: - * - * +-----------------+ +----------+ - * | ESP8266 / ESP32 | | SHT3x | - * | | | | - * | GPIO 14 (SCL) ------> SCL | - * | GPIO 13 (SDA) <-----> SDA | - * +-----------------+ +----------+ - */ - -/* -- use following constants to define the example mode ----------- */ - -// #define SINGLE_SHOT_LOW_LEVEL -// #define SINGLE_SHOT_HIGH_LEVEL - -/* -- includes ----------------------------------------------------- */ - -#include "sht3x.h" - -/* -- platform dependent definitions ------------------------------- */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -/* -- user tasks --------------------------------------------------- */ - -static sht3x_sensor_t* sensor; // sensor device data structure - -#if defined(SINGLE_SHOT_HIGH_LEVEL) -/* - * User task that triggers a measurement every 5 seconds. Due to power - * efficiency reasons it uses *single shot* mode. In this example it uses the - * high level function *sht3x_measure* to perform one measurement in each cycle. - */ -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // perform one measurement and do something with the results - if (sht3x_measure (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // wait until 5 seconds are over - vTaskDelayUntil(&last_wakeup, 5000 / portTICK_PERIOD_MS); - } -} - -#elif defined(SINGLE_SHOT_LOW_LEVEL) -/* - * User task that triggers a measurement every 5 seconds. Due to power - * efficiency reasons it uses *single shot* mode. In this example it starts the - * measurement, waits for the results and fetches the results using separate - * functions - */ -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - TickType_t last_wakeup = xTaskGetTickCount(); - - // get the measurement duration for high repeatability; - uint8_t duration = sht3x_get_measurement_duration(sht3x_high); - - while (1) - { - // Trigger one measurement in single shot mode with high repeatability. - sht3x_start_measurement (sensor, sht3x_single_shot, sht3x_high); - - // Wait until measurement is ready (constant time of at least 30 ms - // or the duration returned from *sht3x_get_measurement_duration*). - vTaskDelay (duration); - - // retrieve the values and do something with them - if (sht3x_get_results (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // wait until 5 seconds are over - vTaskDelayUntil(&last_wakeup, 5000 / portTICK_PERIOD_MS); - } -} - -#else // PERIODIC MODE -/* - * User task that fetches latest measurement results of sensor every 2 - * seconds. It starts the SHT3x in periodic mode with 1 measurements per - * second (*sht3x_periodic_1mps*). - */ -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - // Start periodic measurements with 1 measurement per second. - sht3x_start_measurement (sensor, sht3x_periodic_1mps, sht3x_high); - - // Wait until first measurement is ready (constant time of at least 30 ms - // or the duration returned from *sht3x_get_measurement_duration*). - vTaskDelay (sht3x_get_measurement_duration(sht3x_high)); - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // Get the values and do something with them. - if (sht3x_get_results (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // Wait until 2 seconds (cycle time) are over. - vTaskDelayUntil(&last_wakeup, 2000 / portTICK_PERIOD_MS); - } -} -#endif - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - // Init I2C bus interfaces at which SHT3x sensors are connected - // (different busses are possible). - i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // Create the sensors, multiple sensors are possible. - if ((sensor = sht3x_init_sensor (I2C_BUS, SHT3x_ADDR_2))) - { - // Create a user task that uses the sensors. - xTaskCreate(user_task, "user_task", TASK_STACK_DEPTH, NULL, 2, 0); - } - else - printf("Could not initialize SHT3x sensor\n"); - - // That's it. -} diff --git a/examples/simple/simple.c b/examples/simple/simple.c index 2f29df1..d95a040 100644 --- a/examples/simple/simple.c +++ b/examples/simple/simple.c @@ -8,7 +8,7 @@ void task1(void *pvParameters) { - QueueHandle_t *queue = (QueueHandle_t *)pvParameters; + xQueueHandle *queue = (xQueueHandle *)pvParameters; printf("Hello from task1!\r\n"); uint32_t count = 0; while(1) { @@ -21,7 +21,7 @@ void task1(void *pvParameters) void task2(void *pvParameters) { printf("Hello from task 2!\r\n"); - QueueHandle_t *queue = (QueueHandle_t *)pvParameters; + xQueueHandle *queue = (xQueueHandle *)pvParameters; while(1) { uint32_t count; if(xQueueReceive(*queue, &count, 1000)) { @@ -32,13 +32,13 @@ void task2(void *pvParameters) } } -static QueueHandle_t mainqueue; +static xQueueHandle mainqueue; void user_init(void) { uart_set_baud(0, 115200); printf("SDK version:%s\n", sdk_system_get_sdk_version()); mainqueue = xQueueCreate(10, sizeof(uint32_t)); - xTaskCreate(task1, "tsk1", 256, &mainqueue, 2, NULL); - xTaskCreate(task2, "tsk2", 256, &mainqueue, 2, NULL); + xTaskCreate(task1, (signed char *)"tsk1", 256, &mainqueue, 2, NULL); + xTaskCreate(task2, (signed char *)"tsk2", 256, &mainqueue, 2, NULL); } diff --git a/examples/simple_cplusplus/simple.cpp b/examples/simple_cplusplus/simple.cpp index c74d54b..dec286d 100644 --- a/examples/simple_cplusplus/simple.cpp +++ b/examples/simple_cplusplus/simple.cpp @@ -61,5 +61,5 @@ extern "C" void user_init(void) { uart_set_baud(0, 115200); printf("SDK version:%s\n", sdk_system_get_sdk_version()); - xTaskCreate(task1, "tsk1", 256, NULL, 2, NULL); + xTaskCreate(task1, (signed char *)"tsk1", 256, NULL, 2, NULL); } diff --git a/examples/sntp/sntp_example.c b/examples/sntp/sntp_example.c index fd16766..242489b 100644 --- a/examples/sntp/sntp_example.c +++ b/examples/sntp/sntp_example.c @@ -27,12 +27,12 @@ #define SNTP_SERVERS "0.pool.ntp.org", "1.pool.ntp.org", \ "2.pool.ntp.org", "3.pool.ntp.org" -#define vTaskDelayMs(ms) vTaskDelay((ms)/portTICK_PERIOD_MS) +#define vTaskDelayMs(ms) vTaskDelay((ms)/portTICK_RATE_MS) #define UNUSED_ARG(x) (void)x void sntp_tsk(void *pvParameters) { - const char *servers[] = {SNTP_SERVERS}; + char *servers[] = {SNTP_SERVERS}; UNUSED_ARG(pvParameters); /* Wait until we have joined AP and are assigned an IP */ @@ -74,6 +74,6 @@ void user_init(void) sdk_wifi_set_opmode(STATION_MODE); sdk_wifi_station_set_config(&config); - xTaskCreate(sntp_tsk, "SNTP", 1024, NULL, 1, NULL); + xTaskCreate(sntp_tsk, (signed char *)"SNTP", 1024, NULL, 1, NULL); } diff --git a/examples/softuart/LICENSE b/examples/softuart/LICENSE deleted file mode 100644 index 104c838..0000000 --- a/examples/softuart/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2016 Bernhard Guillon -Copyright (c) 2015 plieningerweb - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/examples/softuart/Makefile b/examples/softuart/Makefile deleted file mode 100644 index 5b3f951..0000000 --- a/examples/softuart/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = softuart -EXTRA_COMPONENTS = extras/softuart -ESPBAUD = 460800 -include ../../common.mk diff --git a/examples/softuart/main.c b/examples/softuart/main.c deleted file mode 100644 index 75b280e..0000000 --- a/examples/softuart/main.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Softuart example - * - * Copyright (C) 2017 Ruslan V. Uss - * Copyright (C) 2016 Bernhard Guillon - * Copyright (c) 2015 plieningerweb - * - * MIT Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -//#include -//#include - -#include - -#define RX_PIN 5 -#define TX_PIN 4 - -void user_init(void) -{ - // setup real UART for now - uart_set_baud(0, 115200); - printf("SDK version:%s\n\n", sdk_system_get_sdk_version()); - - // setup software uart to 9600 8n1 - softuart_open(0, 9600, RX_PIN, TX_PIN); - - while (true) - { - if (!softuart_available(0)) - continue; - - char c = softuart_read(0); - printf("input: %c, 0x%02x\n", c, c); - softuart_puts(0, "start\r\n"); - } -} diff --git a/examples/spi_test/Makefile b/examples/spi_test/Makefile deleted file mode 100644 index f28ce0c..0000000 --- a/examples/spi_test/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -# Simple makefile for simple example -PROGRAM=spi_test -include ../../common.mk diff --git a/examples/spi_test/spi_test.c b/examples/spi_test/spi_test.c deleted file mode 100644 index 0baccc3..0000000 --- a/examples/spi_test/spi_test.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Example SPI transfert - * - * This sample code is in the public domain. - */ -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "task.h" -#include "esp8266.h" -#include -#include "esp/spi.h" - -/* - * Possible Data Structure of SPI Transaction - * - * [COMMAND]+[ADDRESS]+[DataOUT]+[DUMMYBITS]+[DataIN] - * - * [COMMAND]+[ADDRESS]+[DUMMYBITS]+[DataOUT] - * - */ - - -void loop(void *pvParameters) -{ - uint32_t time = 0 ; // SPI transmission time - float avr_time = 0 ; // Average of SPI transmission - float u = 0 ; - - spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_LITTLE_ENDIAN, false); // init SPI module - - - while(1) { - - time = sdk_system_get_time(); - - spi_set_command(1,1,1) ; // Set one command bit to 1 - spi_set_address(1,4,8) ; // Set 4 address bits to 8 - spi_set_dummy_bits(1,4,false); // Set 4 dummy bit before Dout - - spi_repeat_send_16(1,0xC584,10); // Send 1 bit command + 4 bits address + 4 bits dummy + 160 bits data - - spi_clear_address(1); // remove address - spi_clear_command(1); // remove command - spi_clear_dummy(1); // remove dummy - - - time = sdk_system_get_time() -time ; - avr_time = ((avr_time * (float)u ) + (float)time)/((float)u+1.0) ; // compute average - u++; - if (u==100) { - u=0 ; - printf("Time: %f\n",avr_time); - } - vTaskDelay(100/portTICK_PERIOD_MS); - } -} - - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - xTaskCreate(loop, "loop", 1024, NULL, 2, NULL); -} diff --git a/examples/spiffs/Makefile b/examples/spiffs/Makefile deleted file mode 100644 index 813cf79..0000000 --- a/examples/spiffs/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -PROGRAM=spiffs_example -EXTRA_COMPONENTS = extras/spiffs -FLASH_SIZE = 32 - -# spiffs configuration -SPIFFS_BASE_ADDR = 0x200000 -SPIFFS_SIZE = 0x010000 - -# SPIFFS_SINGLETON = 0 # for run-time configuration - -include ../../common.mk - -$(eval $(call make_spiffs_image,files)) diff --git a/examples/spiffs/files/test.txt b/examples/spiffs/files/test.txt deleted file mode 100644 index c86fb0c..0000000 --- a/examples/spiffs/files/test.txt +++ /dev/null @@ -1 +0,0 @@ -This file will go to SPIFFS image. diff --git a/examples/spiffs/spiffs_example.c b/examples/spiffs/spiffs_example.c deleted file mode 100644 index 2d0dcbf..0000000 --- a/examples/spiffs/spiffs_example.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "task.h" -#include "esp8266.h" - -#include "fcntl.h" -#include "unistd.h" - -#include "spiffs.h" -#include "esp_spiffs.h" - -/** - * This example shows the default SPIFFS configuration when SPIFFS is - * configured in compile-time (SPIFFS_SINGLETON = 1). - * - * To configure SPIFFS in run-time uncomment SPIFFS_SINGLETON in the Makefile - * and replace the commented esp_spiffs_init in the code below. - * - */ - -static void example_read_file_posix() -{ - const int buf_size = 0xFF; - uint8_t buf[buf_size]; - - int fd = open("test.txt", O_RDONLY); - if (fd < 0) { - printf("Error opening file\n"); - return; - } - - int read_bytes = read(fd, buf, buf_size); - printf("Read %d bytes\n", read_bytes); - - buf[read_bytes] = '\0'; // zero terminate string - printf("Data: %s\n", buf); - - close(fd); -} - -static void example_read_file_spiffs() -{ - const int buf_size = 0xFF; - uint8_t buf[buf_size]; - - spiffs_file fd = SPIFFS_open(&fs, "other.txt", SPIFFS_RDONLY, 0); - if (fd < 0) { - printf("Error opening file\n"); - return; - } - - int read_bytes = SPIFFS_read(&fs, fd, buf, buf_size); - printf("Read %d bytes\n", read_bytes); - - buf[read_bytes] = '\0'; // zero terminate string - printf("Data: %s\n", buf); - - SPIFFS_close(&fs, fd); -} - -static void example_write_file() -{ - uint8_t buf[] = "Example data, written by ESP8266"; - - int fd = open("other.txt", O_WRONLY|O_CREAT, 0); - if (fd < 0) { - printf("Error opening file\n"); - return; - } - - int written = write(fd, buf, sizeof(buf)); - printf("Written %d bytes\n", written); - - close(fd); -} - -static void example_fs_info() -{ - uint32_t total, used; - SPIFFS_info(&fs, &total, &used); - printf("Total: %d bytes, used: %d bytes", total, used); -} - -void test_task(void *pvParameters) -{ -#if SPIFFS_SINGLETON == 1 - esp_spiffs_init(); -#else - // for run-time configuration when SPIFFS_SINGLETON = 0 - esp_spiffs_init(0x200000, 0x10000); -#endif - - if (esp_spiffs_mount() != SPIFFS_OK) { - printf("Error mount SPIFFS\n"); - } - - while (1) { - vTaskDelay(2000 / portTICK_PERIOD_MS); - - example_write_file(); - - example_read_file_posix(); - - example_read_file_spiffs(); - - example_fs_info(); - - printf("\n\n"); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - - xTaskCreate(test_task, "test_task", 1024, NULL, 2, NULL); -} diff --git a/examples/ssd1306_example/Makefile b/examples/ssd1306_example/Makefile deleted file mode 100644 index 805a3bd..0000000 --- a/examples/ssd1306_example/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=SSD1306_Example -EXTRA_COMPONENTS = extras/ssd1306 extras/i2c -include ../../common.mk diff --git a/examples/ssd1306_example/README.md b/examples/ssd1306_example/README.md deleted file mode 100644 index 9ffd1d5..0000000 --- a/examples/ssd1306_example/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# SSD1306 I2C/SPI OLED LCD Example - -To run this example connect the SSD1306 OLED LCD and configure protocol, display size and pins in main.c file. diff --git a/examples/ssd1306_example/image.xbm b/examples/ssd1306_example/image.xbm deleted file mode 100644 index 1bd888c..0000000 --- a/examples/ssd1306_example/image.xbm +++ /dev/null @@ -1,89 +0,0 @@ -#define image_width 128 -#define image_height 64 -static unsigned char image_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf8, 0xc3, 0xc7, 0x0f, 0x00, 0x1e, 0xfc, 0xf0, 0xe7, 0x30, 0xc0, 0x9f, - 0x7f, 0xf0, 0x80, 0x0f, 0x18, 0x30, 0xc4, 0x18, 0x80, 0x61, 0x8c, 0x31, - 0xe0, 0x30, 0xc0, 0x38, 0x0c, 0x0c, 0x63, 0x08, 0x18, 0x30, 0xc0, 0x30, - 0x80, 0x61, 0x0c, 0x33, 0xe0, 0x31, 0xc0, 0x30, 0x0c, 0x0c, 0x63, 0x00, - 0x18, 0xf0, 0xc0, 0x30, 0xc0, 0xc0, 0x0c, 0x33, 0x60, 0x31, 0xc0, 0x30, - 0x0c, 0x06, 0xe6, 0x01, 0xf8, 0xe3, 0xc7, 0x30, 0xc0, 0xc0, 0x0c, 0xf3, - 0x67, 0x33, 0xc0, 0x38, 0x0c, 0x06, 0xc6, 0x0f, 0x18, 0x80, 0xcf, 0x18, - 0xcf, 0xc0, 0x8c, 0x31, 0x60, 0x36, 0xcf, 0x1f, 0x0c, 0x06, 0x06, 0x1f, - 0x18, 0x00, 0xce, 0x0f, 0xcf, 0xc0, 0xfc, 0x30, 0x60, 0x36, 0xcf, 0x18, - 0x0c, 0x06, 0x06, 0x1c, 0x18, 0x00, 0xcc, 0x00, 0x80, 0x61, 0x0c, 0x30, - 0x60, 0x3c, 0xc0, 0x30, 0x0c, 0x0c, 0x03, 0x18, 0x18, 0x10, 0xcc, 0x00, - 0x80, 0x61, 0x0c, 0x30, 0x60, 0x38, 0xc0, 0x30, 0x0c, 0x0c, 0x23, 0x18, - 0xf8, 0xf3, 0xc3, 0x00, 0x00, 0x1e, 0x0c, 0xf0, 0x67, 0x38, 0xc0, 0x60, - 0x0c, 0xf0, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x1f, 0xfc, 0x01, 0x1c, 0xf8, 0x81, - 0x0f, 0x78, 0x00, 0x0c, 0x80, 0x1f, 0xfe, 0x00, 0xf0, 0x87, 0x3f, 0xfc, - 0x07, 0x1f, 0xfc, 0xc3, 0x1f, 0xfc, 0x00, 0x0c, 0xe0, 0x3f, 0xfe, 0x03, - 0x38, 0xc4, 0x21, 0x0c, 0x0e, 0x1b, 0x04, 0xc7, 0x18, 0x8e, 0x00, 0x0c, - 0x70, 0x20, 0x06, 0x07, 0x18, 0xc0, 0x00, 0x0c, 0x0c, 0x18, 0x00, 0x66, - 0x30, 0x07, 0x00, 0x0c, 0x30, 0x00, 0x06, 0x06, 0x18, 0xc0, 0x00, 0x0c, - 0x18, 0x18, 0x00, 0x67, 0x30, 0x03, 0x00, 0x0c, 0x18, 0x00, 0x06, 0x0c, - 0xf0, 0x81, 0x0f, 0x0c, 0x18, 0x18, 0xf0, 0x61, 0x30, 0x7b, 0x00, 0x0c, - 0x18, 0x00, 0x06, 0x0c, 0xe0, 0x07, 0x3f, 0x0c, 0x18, 0x18, 0xf0, 0x63, - 0x30, 0xff, 0x00, 0x0c, 0x18, 0x00, 0x06, 0x0c, 0x00, 0x0e, 0x70, 0x0c, - 0x18, 0x18, 0x00, 0x67, 0x30, 0xc7, 0x01, 0x0c, 0x18, 0x00, 0x06, 0x0c, - 0x00, 0x0c, 0x60, 0x0c, 0x18, 0x18, 0x00, 0x66, 0x30, 0x83, 0x01, 0x0c, - 0x18, 0x00, 0x06, 0x0c, 0x00, 0x0c, 0x60, 0x0c, 0x0c, 0x18, 0x00, 0x66, - 0x30, 0x83, 0x01, 0x0c, 0x30, 0x00, 0x06, 0x06, 0x08, 0x4e, 0x70, 0x0c, - 0x0e, 0x18, 0x04, 0xc7, 0x18, 0xc6, 0x01, 0x0c, 0x70, 0x20, 0x06, 0x07, - 0xf8, 0xc7, 0x3f, 0xfc, 0x07, 0xff, 0xfc, 0xc3, 0x1f, 0xfe, 0x00, 0xfc, - 0xe3, 0x3f, 0xfe, 0x03, 0xf0, 0x83, 0x1f, 0xfc, 0x01, 0xff, 0xf8, 0x81, - 0x0f, 0x78, 0x00, 0xfc, 0x83, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x18, - 0x18, 0x7e, 0xc0, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x01, 0x00, 0x00, 0x18, 0x18, 0xfe, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x18, 0x18, 0xc6, 0x81, 0x33, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3d, 0x06, 0x06, 0x18, - 0x18, 0x86, 0x01, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x7f, 0x06, 0x06, 0x18, 0x18, 0x86, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xe3, 0x0c, 0x03, 0x18, 0x18, 0xc6, 0x01, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0x0c, 0x03, 0x18, - 0x18, 0xfe, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xc1, 0x98, 0x01, 0x18, 0x18, 0x7e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xc1, 0x98, 0x01, 0x18, 0x18, 0xc6, 0x00, 0x1b, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xf0, 0x00, 0x18, - 0x18, 0x86, 0x81, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xe3, 0xf0, 0x00, 0x30, 0x0c, 0x86, 0x81, 0x71, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x7f, 0x60, 0x00, 0xf0, 0x0f, 0x06, 0xc3, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3d, 0x60, 0x00, 0xc0, - 0x03, 0x06, 0xe7, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }; diff --git a/examples/ssd1306_example/main.c b/examples/ssd1306_example/main.c deleted file mode 100644 index f88d798..0000000 --- a/examples/ssd1306_example/main.c +++ /dev/null @@ -1,120 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -/* Remove this line if your display connected by SPI */ -#define I2C_CONNECTION - -#ifdef I2C_CONNECTION - #include -#endif - -#include "image.xbm" - -/* Change this according to you schematics and display size */ -#define DISPLAY_WIDTH 128 -#define DISPLAY_HEIGHT 64 - -#ifdef I2C_CONNECTION - #define PROTOCOL SSD1306_PROTO_I2C - #define ADDR SSD1306_I2C_ADDR_0 - #define I2C_BUS 0 - #define SCL_PIN 5 - #define SDA_PIN 4 -#else - #define PROTOCOL SSD1306_PROTO_SPI4 - #define CS_PIN 5 - #define DC_PIN 4 -#endif - -/* Declare device descriptor */ -static const ssd1306_t dev = { - .protocol = PROTOCOL, -#ifdef I2C_CONNECTION - .i2c_dev.bus = I2C_BUS, - .i2c_dev.addr = ADDR, -#else - .cs_pin = CS_PIN, - .dc_pin = DC_PIN, -#endif - .width = DISPLAY_WIDTH, - .height = DISPLAY_HEIGHT -}; - -/* Local frame buffer */ -static uint8_t buffer[DISPLAY_WIDTH * DISPLAY_HEIGHT / 8]; -TimerHandle_t scrol_timer_handle = NULL; // Timer handler - - -#define SECOND (1000 / portTICK_PERIOD_MS) - - -static void ssd1306_task(void *pvParameters) -{ - printf("%s: Started user interface task\n", __FUNCTION__); - vTaskDelay(1000/portTICK_PERIOD_MS); - - - if (ssd1306_load_xbm(&dev, image_bits, buffer)) - goto error_loop; - - ssd1306_set_whole_display_lighting(&dev, false); - bool fwd = false; - while (1) { - vTaskDelay(2*SECOND); - printf("%s: still alive, flipping!\n", __FUNCTION__); - ssd1306_set_scan_direction_fwd(&dev, fwd); - fwd = !fwd; - } - -error_loop: - printf("%s: error while loading framebuffer into SSD1306\n", __func__); - for(;;){ - vTaskDelay(2*SECOND); - printf("%s: error loop\n", __FUNCTION__); - } -} - -void scrolling_timer(TimerHandle_t h) -{ - static bool scrol = true ; - if(scrol) - ssd1306_start_scroll_hori(&dev, false, 0, 7, FRAME_25); - else - ssd1306_stop_scroll(&dev); - printf("Scrolling status: %s\n", (scrol)? "On" : "Off"); - scrol=!scrol ; -} - -void user_init(void) -{ - // Setup HW - uart_set_baud(0, 115200); - - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - -#ifdef I2C_CONNECTION - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K); -#endif - - while (ssd1306_init(&dev) != 0) - { - printf("%s: failed to init SSD1306 lcd\n", __func__); - vTaskDelay(SECOND); - } - - ssd1306_set_whole_display_lighting(&dev, true); - vTaskDelay(SECOND); - // Create user interface task - xTaskCreate(ssd1306_task, "ssd1306_task", 256, NULL, 2, NULL); - - //Scrolling timer - scrol_timer_handle = xTimerCreate("fps_timer", 10*SECOND, pdTRUE, NULL, scrolling_timer); - xTimerStart(scrol_timer_handle, 0); - -} diff --git a/examples/ssd1306_fps/Makefile b/examples/ssd1306_fps/Makefile deleted file mode 100644 index 4417c83..0000000 --- a/examples/ssd1306_fps/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -PROGRAM = SSD1306_fps -EXTRA_COMPONENTS = extras/ssd1306 extras/i2c extras/fonts - -# include a lot of builtin fonts - -FONTS_GLCD_5X7 = 1 -FONTS_BITOCRA_4X7 = 1 -FONTS_BITOCRA_6X11 = 1 -FONTS_BITOCRA_7X13 = 1 -FONTS_TERMINUS_6X12_ISO8859_1 = 1 -FONTS_TERMINUS_8X14_ISO8859_1 = 1 -FONTS_TERMINUS_BOLD_8X14_ISO8859_1 = 1 -FONTS_TERMINUS_10X18_ISO8859_1 = 1 -FONTS_TERMINUS_BOLD_10X18_ISO8859_1 = 1 -FONTS_TERMINUS_11X22_ISO8859_1 = 1 -FONTS_TERMINUS_BOLD_11X22_ISO8859_1 = 1 -FONTS_TERMINUS_12X24_ISO8859_1 = 1 -FONTS_TERMINUS_BOLD_12X24_ISO8859_1 = 1 -FONTS_TERMINUS_14X28_ISO8859_1 = 1 -FONTS_TERMINUS_BOLD_14X28_ISO8859_1 = 1 -FONTS_TERMINUS_16X32_ISO8859_1 = 1 -FONTS_TERMINUS_BOLD_16X32_ISO8859_1 = 1 - -include ../../common.mk diff --git a/examples/ssd1306_fps/main.c b/examples/ssd1306_fps/main.c deleted file mode 100644 index dc1f1a9..0000000 --- a/examples/ssd1306_fps/main.c +++ /dev/null @@ -1,187 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#define LOAD_ICON_X 54 -#define LOAD_ICON_Y 42 -#define LOAD_ICON_SIZE 20 - -#define CIRCLE_COUNT_ICON_X 100 -#define CIRCLE_COUNT_ICON_Y 52 - -/* Remove this line if your display connected by SPI */ -#define I2C_CONNECTION - -#ifdef I2C_CONNECTION - #include -#endif -#include "fonts/fonts.h" - -/* Change this according to you schematics and display size */ -#define DISPLAY_WIDTH 128 -#define DISPLAY_HEIGHT 64 - -#ifdef I2C_CONNECTION - #define PROTOCOL SSD1306_PROTO_I2C - #define ADDR SSD1306_I2C_ADDR_0 - #define I2C_BUS 0 - #define SCL_PIN 5 - #define SDA_PIN 4 -#else - #define PROTOCOL SSD1306_PROTO_SPI4 - #define CS_PIN 5 - #define DC_PIN 4 -#endif - -#define DEFAULT_FONT FONT_FACE_TERMINUS_6X12_ISO8859_1 - -/* Declare device descriptor */ -static const ssd1306_t dev = { - .protocol = PROTOCOL, -#ifdef I2C_CONNECTION -.i2c_dev.bus = I2C_BUS, -.i2c_dev.addr = ADDR, -#else - .cs_pin = CS_PIN, - .dc_pin = DC_PIN, -#endif - .width = DISPLAY_WIDTH, - .height = DISPLAY_HEIGHT -}; - -/* Local frame buffer */ -static uint8_t buffer[DISPLAY_WIDTH * DISPLAY_HEIGHT / 8]; - -TimerHandle_t fps_timer_handle = NULL; // Timer handler -TimerHandle_t font_timer_handle = NULL; - -uint8_t frame_done = 0; // number of frame send. -uint8_t fps = 0; // image per second. - -const font_info_t *font = NULL; // current font -font_face_t font_face = 0; - -#define SECOND (1000 / portTICK_PERIOD_MS) - -static void ssd1306_task(void *pvParameters) -{ - printf("%s: Started user interface task\n", __FUNCTION__); - vTaskDelay(SECOND); - - ssd1306_set_whole_display_lighting(&dev, false); - - char text[20]; - uint8_t x0 = LOAD_ICON_X; - uint8_t y0 = LOAD_ICON_Y; - uint8_t x1 = LOAD_ICON_X + LOAD_ICON_SIZE; - uint8_t y1 = LOAD_ICON_Y + LOAD_ICON_SIZE; - uint16_t count = 0; - - while (1) { - - ssd1306_fill_rectangle(&dev, buffer, 0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT/2, OLED_COLOR_BLACK); - ssd1306_draw_string(&dev, buffer, font, 0, 0, "Hello, esp-open-rtos!", OLED_COLOR_WHITE, OLED_COLOR_BLACK); - sprintf(text, "FPS: %u ", fps); - ssd1306_draw_string(&dev, buffer, font_builtin_fonts[DEFAULT_FONT], 0, 45, text, OLED_COLOR_WHITE, OLED_COLOR_BLACK); - - // generate loading icon - ssd1306_draw_line(&dev, buffer, x0, y0, x1, y1, OLED_COLOR_BLACK); - if (x0 < (LOAD_ICON_X + LOAD_ICON_SIZE)) { - x0++; - x1--; - } - else if (y0 < (LOAD_ICON_Y + LOAD_ICON_SIZE)) { - y0++; - y1--; - } - else { - x0 = LOAD_ICON_X; - y0 = LOAD_ICON_Y; - x1 = LOAD_ICON_X + LOAD_ICON_SIZE; - y1 = LOAD_ICON_Y + LOAD_ICON_SIZE; - } - ssd1306_draw_line(&dev, buffer, x0, y0, x1, y1, OLED_COLOR_WHITE); - ssd1306_draw_rectangle(&dev, buffer, LOAD_ICON_X, LOAD_ICON_Y, - LOAD_ICON_SIZE + 1, LOAD_ICON_SIZE + 1, OLED_COLOR_WHITE); - - // generate circle counting - for (uint8_t i = 0; i < 10; i++) { - if ((count >> i) & 0x01) - ssd1306_draw_circle(&dev, buffer, CIRCLE_COUNT_ICON_X, CIRCLE_COUNT_ICON_Y, i, OLED_COLOR_BLACK); - } - - count = count == 0x03FF ? 0 : count + 1; - - for (uint8_t i = 0; i < 10; i++) { - if ((count>>i) & 0x01) - ssd1306_draw_circle(&dev,buffer, CIRCLE_COUNT_ICON_X, CIRCLE_COUNT_ICON_Y, i, OLED_COLOR_WHITE); - } - - if (ssd1306_load_frame_buffer(&dev, buffer)) - goto error_loop; - - frame_done++; - } - -error_loop: - printf("%s: error while loading framebuffer into SSD1306\n", __func__); - for (;;) { - vTaskDelay(2 * SECOND); - printf("%s: error loop\n", __FUNCTION__); - } -} - -void fps_timer(TimerHandle_t h) -{ - fps = frame_done; // Save number of frame already send to screen - frame_done = 0; -} - -void font_timer(TimerHandle_t h) -{ - do { - if (++font_face >= font_builtin_fonts_count) - font_face = 0; - font = font_builtin_fonts[font_face]; - } while (!font); - - printf("Selected builtin font %d\n", font_face); -} - -void user_init(void) -{ - //uncomment to test with CPU overclocked - //sdk_system_update_cpu_freq(160); - - // Setup HW - uart_set_baud(0, 115200); - - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - -#ifdef I2C_CONNECTION - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K); -#endif - - while (ssd1306_init(&dev) != 0) { - printf("%s: failed to init SSD1306 lcd\n", __func__); - vTaskDelay(SECOND); - } - ssd1306_set_whole_display_lighting(&dev, true); - vTaskDelay(SECOND); - - font = font_builtin_fonts[font_face]; - - // Create user interface task - xTaskCreate(ssd1306_task, "ssd1306_task", 256, NULL, 2, NULL); - - fps_timer_handle = xTimerCreate("fps_timer", SECOND, pdTRUE, NULL, fps_timer); - xTimerStart(fps_timer_handle, 0); - - font_timer_handle = xTimerCreate("font_timer", 5 * SECOND, pdTRUE, NULL, font_timer); - xTimerStart(font_timer_handle, 0); -} diff --git a/examples/sysparam_editor/Makefile b/examples/sysparam_editor/Makefile deleted file mode 100644 index 2773185..0000000 --- a/examples/sysparam_editor/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -PROGRAM=sysparam_editor - -# Setting this to 1..3 will add extra debugging output to stdout -EXTRA_CFLAGS = -DSYSPARAM_DEBUG=0 - -# Avoid writing the wifi state to flash when using wificfg. -EXTRA_CFLAGS += -DWIFI_PARAM_SAVE=0 - -include ../../common.mk - -# `make dump-flash` can be used to view the current contents of the sysparam -# regions in flash. -dump-flash: - esptool.py read_flash 0x1f7000 8192 r1.bin - hexdump -C r1.bin - esptool.py read_flash 0x1f9000 8192 r2.bin - hexdump -C r2.bin diff --git a/examples/sysparam_editor/sysparam_editor.c b/examples/sysparam_editor/sysparam_editor.c deleted file mode 100644 index df31593..0000000 --- a/examples/sysparam_editor/sysparam_editor.c +++ /dev/null @@ -1,262 +0,0 @@ -#include "FreeRTOS.h" -#include "task.h" -#include -#include -#include -#include - -#include -#include "espressif/esp_common.h" -#include "esp/uart.h" - -#define CMD_BUF_SIZE 5000 - -const int status_base = -6; -const char *status_messages[] = { - "SYSPARAM_ERR_NOMEM", - "SYSPARAM_ERR_CORRUPT", - "SYSPARAM_ERR_IO", - "SYSPARAM_ERR_FULL", - "SYSPARAM_ERR_BADVALUE", - "SYSPARAM_ERR_NOINIT", - "SYSPARAM_OK", - "SYSPARAM_NOTFOUND", - "SYSPARAM_PARSEFAILED", -}; - -void usage(void) { - printf( - "Available commands:\n" - " ? -- Query the value of \n" - " = -- Set to text \n" - " : -- Set to binary value represented as hex\n" - " dump -- Show all currently set keys/values\n" - " compact -- Compact the sysparam area\n" - " reformat -- Reinitialize (clear) the sysparam area\n" - " echo-off -- Disable input echo\n" - " echo-on -- Enable input echo\n" - " help -- Show this help screen\n" - ); -} - -size_t tty_readline(char *buffer, size_t buf_size, bool echo) { - size_t i = 0; - int c; - - while (true) { - c = getchar(); - if (c == '\r' || c == '\n') { - if (echo) putchar('\n'); - break; - } else if (c == '\b' || c == 0x7f) { - if (i) { - if (echo) { - printf("\b \b"); - fflush(stdout); - } - i--; - } - } else if (c < 0x20) { - /* Ignore other control characters */ - } else if (i >= buf_size - 1) { - if (echo) { - putchar('\a'); - fflush(stdout); - } - } else { - buffer[i++] = c; - if (echo) { - putchar(c); - fflush(stdout); - } - } - } - - buffer[i] = 0; - return i; -} - -void print_text_value(char *key, char *value) { - printf(" '%s' = '%s'\n", key, value); -} - -void print_binary_value(char *key, uint8_t *value, size_t len) { - size_t i; - - printf(" %s:", key); - for (i = 0; i < len; i++) { - if (!(i & 0x0f)) { - printf("\n "); - } - printf(" %02x", value[i]); - } - printf("\n"); -} - -sysparam_status_t dump_params(void) { - sysparam_status_t status; - sysparam_iter_t iter; - - status = sysparam_iter_start(&iter); - if (status < 0) return status; - while (true) { - status = sysparam_iter_next(&iter); - if (status != SYSPARAM_OK) break; - if (!iter.binary) { - print_text_value(iter.key, (char *)iter.value); - } else { - print_binary_value(iter.key, iter.value, iter.value_len); - } - } - sysparam_iter_end(&iter); - - if (status == SYSPARAM_NOTFOUND) { - // This is the normal status when we've reached the end of all entries. - return SYSPARAM_OK; - } else { - // Something apparently went wrong - return status; - } -} - -uint8_t *parse_hexdata(char *string, size_t *result_length) { - size_t string_len = strlen(string); - uint8_t *buf = malloc(string_len / 2); - uint8_t c; - int i, j; - bool digit = false; - - j = 0; - for (i = 0; string[i]; i++) { - c = string[i]; - if (c >= 0x30 && c <= 0x39) { - c &= 0x0f; - } else if (c >= 0x41 && c <= 0x46) { - c -= 0x37; - } else if (c >= 0x61 && c <= 0x66) { - c -= 0x57; - } else if (c == ' ') { - continue; - } else { - free(buf); - return NULL; - } - if (!digit) { - buf[j] = c << 4; - } else { - buf[j++] |= c; - } - digit = !digit; - } - if (digit) { - free(buf); - return NULL; - } - *result_length = j; - return buf; -} - -void sysparam_editor_task(void *pvParameters) { - char *cmd_buffer = malloc(CMD_BUF_SIZE); - sysparam_status_t status; - char *value; - uint8_t *bin_value; - size_t len; - uint8_t *data; - uint32_t base_addr, num_sectors; - bool echo = true; - - if (!cmd_buffer) { - printf("ERROR: Cannot allocate command buffer!\n"); - return; - } - - printf("\nWelcome to the system parameter editor! Enter 'help' for more information.\n\n"); - - status = sysparam_get_info(&base_addr, &num_sectors); - if (status == SYSPARAM_OK) { - printf("[current sysparam region is at 0x%08x (%d sectors)]\n", base_addr, num_sectors); - } else { - printf("[NOTE: No current sysparam region (initialization problem during boot?)]\n"); - // Default to the same place/size as the normal system initialization - // stuff, so if the user uses this utility to reformat it, it will put - // it somewhere the system will find it later - num_sectors = DEFAULT_SYSPARAM_SECTORS; - base_addr = sdk_flashchip.chip_size - (5 + num_sectors) * sdk_flashchip.sector_size; - } - while (true) { - printf("==> "); - fflush(stdout); - len = tty_readline(cmd_buffer, CMD_BUF_SIZE, echo); - status = 0; - if (!len) continue; - if (cmd_buffer[len - 1] == '?') { - cmd_buffer[len - 1] = 0; - printf("Querying '%s'...\n", cmd_buffer); - status = sysparam_get_string(cmd_buffer, &value); - if (status == SYSPARAM_OK) { - print_text_value(cmd_buffer, value); - free(value); - } else if (status == SYSPARAM_PARSEFAILED) { - // This means it's actually a binary value - status = sysparam_get_data(cmd_buffer, &bin_value, &len, NULL); - if (status == SYSPARAM_OK) { - print_binary_value(cmd_buffer, bin_value, len); - free(value); - } - } - } else if ((value = strchr(cmd_buffer, '='))) { - *value++ = 0; - printf("Setting '%s' to '%s'...\n", cmd_buffer, value); - status = sysparam_set_string(cmd_buffer, value); - } else if ((value = strchr(cmd_buffer, ':'))) { - *value++ = 0; - data = parse_hexdata(value, &len); - if (value) { - printf("Setting '%s' to binary data...\n", cmd_buffer); - status = sysparam_set_data(cmd_buffer, data, len, true); - free(data); - } else { - printf("Error: Unable to parse hex data\n"); - } - } else if (!strcmp(cmd_buffer, "dump")) { - printf("Dumping all params:\n"); - status = dump_params(); - } else if (!strcmp(cmd_buffer, "compact")) { - printf("Compacting...\n"); - status = sysparam_compact(); - } else if (!strcmp(cmd_buffer, "reformat")) { - printf("Re-initializing region...\n"); - status = sysparam_create_area(base_addr, num_sectors, true); - if (status == SYSPARAM_OK) { - // We need to re-init after wiping out the region we've been - // using. - status = sysparam_init(base_addr, 0); - } - } else if (!strcmp(cmd_buffer, "echo-on")) { - echo = true; - printf("Echo on\n"); - } else if (!strcmp(cmd_buffer, "echo-off")) { - echo = false; - printf("Echo off\n"); - } else if (!strcmp(cmd_buffer, "help")) { - usage(); - } else { - printf("Unrecognized command.\n\n"); - usage(); - } - - if (status != SYSPARAM_OK) { - printf("! Operation returned status: %d (%s)\n", status, status_messages[status - status_base]); - } - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - - sdk_wifi_set_opmode(NULL_MODE); - - xTaskCreate(sysparam_editor_task, "sysparam_editor_task", 512, NULL, 2, NULL); -} diff --git a/examples/tcp_non_blocking/Makefile b/examples/tcp_non_blocking/Makefile deleted file mode 100644 index c88b576..0000000 --- a/examples/tcp_non_blocking/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# Makefile for tcp_non_blocking example -PROGRAM=tcp_non_blocking -EXTRA_COMPONENTS=extras/dhcpserver - -include ../../common.mk diff --git a/examples/tcp_non_blocking/tcp_non_blocking.c b/examples/tcp_non_blocking/tcp_non_blocking.c deleted file mode 100644 index 4e35aa2..0000000 --- a/examples/tcp_non_blocking/tcp_non_blocking.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - The ESP in the example runs a echo server on 172.16.0.1 (port 50 and 100 ) that - outputs information about your ip/port then echo all text you write. - It is manage multiple connection and multiple port with one task. - - This example code is in the public domain. - */ -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#define AP_SSID "esp-open-rtos AP" -#define AP_PSK "esp-open-rtos" -#define ECHO_PORT_1 50 -#define ECHO_PORT_2 100 -#define EVENTS_QUEUE_SIZE 10 - -#ifdef CALLBACK_DEBUG -#define debug(s, ...) printf("%s: " s "\n", "Cb:", ## __VA_ARGS__) -#else -#define debug(s, ...) -#endif - -QueueHandle_t xQueue_events; -typedef struct { - struct netconn *nc ; - uint8_t type ; -} netconn_events; - -/* - * This function will be call in Lwip in each event on netconn - */ -static void netCallback(struct netconn *conn, enum netconn_evt evt, uint16_t length) -{ - //Show some callback information (debug) - debug("sock:%u\tsta:%u\tevt:%u\tlen:%u\ttyp:%u\tfla:%02X\terr:%d", \ - (uint32_t)conn,conn->state,evt,length,conn->type,conn->flags,conn->last_err); - - netconn_events events ; - - //If netconn got error, it is close or deleted, dont do treatments on it. - if (conn->pending_err) - { - return; - } - //Treatments only on rcv events. - switch (evt) { - case NETCONN_EVT_RCVPLUS: - events.nc = conn ; - events.type = evt ; - break; - default: - return; - break; - } - - //Send the event to the queue - xQueueSend(xQueue_events, &events, 1000); - -} - -/* - * Initialize a server netconn and listen port - */ -static void set_tcp_server_netconn(struct netconn **nc, uint16_t port, netconn_callback callback) -{ - if(nc == NULL) - { - printf("%s: netconn missing .\n",__FUNCTION__); - return; - } - *nc = netconn_new_with_callback(NETCONN_TCP, netCallback); - if(!*nc) { - printf("Status monitor: Failed to allocate netconn.\n"); - return; - } - netconn_set_nonblocking(*nc,NETCONN_FLAG_NON_BLOCKING); - //netconn_set_recvtimeout(*nc, 10); - netconn_bind(*nc, IP_ADDR_ANY, port); - netconn_listen(*nc); -} - -/* - * Close and delete a socket properly - */ -static void close_tcp_netconn(struct netconn *nc) -{ - nc->pending_err=ERR_CLSD; //It is hacky way to be sure than callback will don't do treatment on a netconn closed and deleted - netconn_close(nc); - netconn_delete(nc); -} - -/* - * This task manage each netconn connection without block anything - */ -static void nonBlockingTCP(void *pvParameters) -{ - - struct netconn *nc = NULL; // To create servers - - set_tcp_server_netconn(&nc, ECHO_PORT_1, netCallback); - printf("Server netconn %u ready on port %u.\n",(uint32_t)nc, ECHO_PORT_1); - set_tcp_server_netconn(&nc, ECHO_PORT_2, netCallback); - printf("Server netconn %u ready on port %u.\n",(uint32_t)nc, ECHO_PORT_2); - - struct netbuf *netbuf = NULL; // To store incoming Data - struct netconn *nc_in = NULL; // To accept incoming netconn - // - char buf[50]; - char* buffer; - uint16_t len_buf; - - while(1) { - - netconn_events events; - xQueueReceive(xQueue_events, &events, portMAX_DELAY); // Wait here an event on netconn - - if (events.nc->state == NETCONN_LISTEN) // If netconn is a server and receive incoming event on it - { - printf("Client incoming on server %u.\n", (uint32_t)events.nc); - int err = netconn_accept(events.nc, &nc_in); - if (err != ERR_OK) - { - if(nc_in) - netconn_delete(nc_in); - } - printf("New client is %u.\n",(uint32_t)nc_in); - ip_addr_t client_addr; //Address port - uint16_t client_port; //Client port - netconn_peer(nc_in, &client_addr, &client_port); - snprintf(buf, sizeof(buf), "Your address is %d.%d.%d.%d:%u.\r\n", - ip4_addr1(&client_addr), ip4_addr2(&client_addr), - ip4_addr3(&client_addr), ip4_addr4(&client_addr), - client_port); - netconn_write(nc_in, buf, strlen(buf), NETCONN_COPY); - } - else if(events.nc->state != NETCONN_LISTEN) // If netconn is the client and receive data - { - if ((netconn_recv(events.nc, &netbuf)) == ERR_OK) // data incoming ? - { - do - { - netbuf_data(netbuf, (void*)&buffer, &len_buf); - netconn_write(events.nc, buffer, strlen(buffer), NETCONN_COPY); - printf("Client %u send: %s\n",(uint32_t)events.nc,buffer); - } - while (netbuf_next(netbuf) >= 0); - netbuf_delete(netbuf); - } - else - { - close_tcp_netconn(events.nc); - printf("Error read netconn %u, close it \n",(uint32_t)events.nc); - } - } - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - sdk_os_delay_us(500); // Wait UART - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - sdk_wifi_set_opmode(SOFTAP_MODE); - struct ip_info ap_ip; - IP4_ADDR(&ap_ip.ip, 172, 16, 0, 1); - IP4_ADDR(&ap_ip.gw, 0, 0, 0, 0); - IP4_ADDR(&ap_ip.netmask, 255, 255, 0, 0); - sdk_wifi_set_ip_info(1, &ap_ip); - - struct sdk_softap_config ap_config = { - .ssid = AP_SSID, - .ssid_hidden = 0, - .channel = 3, - .ssid_len = strlen(AP_SSID), - .authmode = AUTH_WPA_WPA2_PSK, - .password = AP_PSK, - .max_connection = 3, - .beacon_interval = 100, - }; - sdk_wifi_softap_set_config(&ap_config); - - ip_addr_t first_client_ip; - IP4_ADDR(&first_client_ip, 172, 16, 0, 2); - dhcpserver_start(&first_client_ip, 4); - printf("DHCP started\n"); - - //Create a queue to store events on netconns - xQueue_events = xQueueCreate( EVENTS_QUEUE_SIZE, sizeof(netconn_events)); - - xTaskCreate(nonBlockingTCP, "lwiptest_noblock", 512, NULL, 2, NULL); -} diff --git a/examples/terminal/terminal.c b/examples/terminal/terminal.c index f25293a..83ea734 100644 --- a/examples/terminal/terminal.c +++ b/examples/terminal/terminal.c @@ -59,7 +59,7 @@ static void cmd_help(uint32_t argc, char *argv[]) static void cmd_sleep(uint32_t argc, char *argv[]) { printf("Type away while I take a 2 second nap (ie. let you test the UART HW FIFO\n"); - vTaskDelay(2000 / portTICK_PERIOD_MS); + vTaskDelay(2000 / portTICK_RATE_MS); } static void handle_command(char *cmd) @@ -94,23 +94,18 @@ static void gpiomon() int i = 0; printf("\n\n\nWelcome to gpiomon. Type 'help' for, well, help\n"); printf("%% "); - fflush(stdout); // stdout is line buffered while(1) { if (read(0, (void*)&ch, 1)) { // 0 is stdin printf("%c", ch); - fflush(stdout); if (ch == '\n' || ch == '\r') { cmd[i] = 0; i = 0; printf("\n"); handle_command((char*) cmd); printf("%% "); - fflush(stdout); } else { if (i < sizeof(cmd)) cmd[i++] = ch; } - } else { - printf("You will never see this print as read(...) is blocking\n"); } } } diff --git a/examples/tick_idle_hooks/FreeRTOSConfig.h b/examples/tick_idle_hooks/FreeRTOSConfig.h deleted file mode 100644 index e21d827..0000000 --- a/examples/tick_idle_hooks/FreeRTOSConfig.h +++ /dev/null @@ -1,10 +0,0 @@ -/** - - Configuration overrides for FreeRTOS. - -**/ - -#define configUSE_IDLE_HOOK 1 -#define configUSE_TICK_HOOK 1 - -#include_next "FreeRTOSConfig.h" \ No newline at end of file diff --git a/examples/tick_idle_hooks/Makefile b/examples/tick_idle_hooks/Makefile deleted file mode 100644 index 717b163..0000000 --- a/examples/tick_idle_hooks/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -# Simple makefile for simple example -PROGRAM=simple -include ../../common.mk diff --git a/examples/tick_idle_hooks/hooks_example.c b/examples/tick_idle_hooks/hooks_example.c deleted file mode 100644 index 8b9fa49..0000000 --- a/examples/tick_idle_hooks/hooks_example.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Very basic example that just demonstrates we can run at all! - */ -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" - -void vApplicationIdleHook(void) -{ - // Go to sleep; either deeply (waiting for an event to wake) - // or light, allowing FreeRTOS ticks to wake - sdk_wifi_set_sleep_type(WIFI_SLEEP_MODEM); -} - -void vApplicationTickHook(void) -{ - // Called every tick -} - -void task1(void *pvParameters) -{ - QueueHandle_t *queue = (QueueHandle_t *)pvParameters; - printf("Hello from task1!\r\n"); - uint32_t count = 0; - while(1) { - vTaskDelay(100); - xQueueSend(*queue, &count, 0); - count++; - } -} - -void task2(void *pvParameters) -{ - printf("Hello from task 2!\r\n"); - QueueHandle_t *queue = (QueueHandle_t *)pvParameters; - while(1) { - uint32_t count; - if(xQueueReceive(*queue, &count, 1000)) { - printf("Got %u\n", count); - } else { - printf("No msg :(\n"); - } - } -} - -static QueueHandle_t mainqueue; - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - mainqueue = xQueueCreate(10, sizeof(uint32_t)); - xTaskCreate(task1, "tsk1", 256, &mainqueue, 2, NULL); - xTaskCreate(task2, "tsk2", 256, &mainqueue, 2, NULL); -} diff --git a/examples/tls_server/Makefile b/examples/tls_server/Makefile index 1070e91..2c5ef2c 100644 --- a/examples/tls_server/Makefile +++ b/examples/tls_server/Makefile @@ -1,4 +1,4 @@ PROGRAM=tls_server -EXTRA_COMPONENTS = extras/mbedtls +COMPONENTS = FreeRTOS lwip core extras/mbedtls include ../../common.mk diff --git a/examples/tls_server/tls_server.c b/examples/tls_server/tls_server.c index 8ecfa56..9030dc0 100644 --- a/examples/tls_server/tls_server.c +++ b/examples/tls_server/tls_server.c @@ -43,7 +43,7 @@ extern const char *server_key; errors at link time if functions don't exist.) */ #include "mbedtls/config.h" -#include "mbedtls/net_sockets.h" +#include "mbedtls/net.h" #include "mbedtls/debug.h" #include "mbedtls/ssl.h" #include "mbedtls/entropy.h" @@ -202,8 +202,9 @@ void tls_server_task(void *pvParameters) socklen_t peer_addr_len = sizeof(struct sockaddr_in); getpeername(client_ctx.fd, (struct sockaddr *)&peer_addr, &peer_addr_len); unsigned char buf[256]; - int len = sprintf((char *) buf, "O hai, client " IPSTR ":%d\nFree heap size is %d bytes\n", - IP2STR((ip4_addr_t *)&peer_addr.sin_addr.s_addr), + int len = sprintf((char *) buf, "O hai, client %d.%d.%d.%d:%d\nFree heap size is %d bytes\n", + ip4_addr1(&peer_addr.sin_addr), ip4_addr2(&peer_addr.sin_addr), + ip4_addr3(&peer_addr.sin_addr), ip4_addr4(&peer_addr.sin_addr), peer_addr.sin_port, xPortGetFreeHeapSize()); while((ret = mbedtls_ssl_write(&ssl, buf, len)) <= 0) { @@ -215,7 +216,6 @@ void tls_server_task(void *pvParameters) } len = ret; - ret = 0; printf(" %d bytes written. Closing socket on client.\n\n%s", len, (char *) buf); mbedtls_ssl_close_notify(&ssl); @@ -254,5 +254,5 @@ void user_init(void) sdk_wifi_set_opmode(STATION_MODE); sdk_wifi_station_set_config(&config); - xTaskCreate(&tls_server_task, "server_task", 2048, NULL, 2, NULL); + xTaskCreate(&tls_server_task, (signed char *)"server_task", 2048, NULL, 2, NULL); } diff --git a/examples/tls_server_bearssl/Makefile b/examples/tls_server_bearssl/Makefile deleted file mode 100644 index 79c0e38..0000000 --- a/examples/tls_server_bearssl/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM=tls_server_bearssl -EXTRA_COMPONENTS = extras/bearssl - -include ../../common.mk diff --git a/examples/tls_server_bearssl/certificate.h b/examples/tls_server_bearssl/certificate.h deleted file mode 100644 index bafd713..0000000 --- a/examples/tls_server_bearssl/certificate.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2016 Thomas Pornin - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#include "bearssl.h" - -/* - * A sample server certificate chain with a single intermediate CA. - * Certificate key type: RSA - * Signing algorithm for both certificates: RSA - */ - -static const unsigned char CERT0[] = { - 0x30, 0x82, 0x03, 0x3C, 0x30, 0x82, 0x02, 0x24, 0xA0, 0x03, 0x02, 0x01, - 0x02, 0x02, 0x14, 0x58, 0xDA, 0xBA, 0x36, 0xCD, 0xED, 0xA0, 0xDA, 0x5C, - 0x10, 0x33, 0x73, 0x8E, 0x0C, 0x64, 0x92, 0x79, 0x92, 0xAF, 0x03, 0x30, - 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, - 0x05, 0x00, 0x30, 0x27, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, - 0x06, 0x13, 0x02, 0x43, 0x41, 0x31, 0x18, 0x30, 0x16, 0x06, 0x03, 0x55, - 0x04, 0x03, 0x13, 0x0F, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6D, 0x65, 0x64, - 0x69, 0x61, 0x74, 0x65, 0x20, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x31, - 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, - 0x17, 0x0D, 0x33, 0x37, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, - 0x35, 0x39, 0x5A, 0x30, 0x21, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, - 0x04, 0x06, 0x13, 0x02, 0x43, 0x41, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, - 0x55, 0x04, 0x03, 0x13, 0x09, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x68, 0x6F, - 0x73, 0x74, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, - 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, - 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xD4, - 0x7A, 0x1D, 0x27, 0xBA, 0x2B, 0x3A, 0x67, 0xB2, 0x91, 0x6A, 0xFB, 0xE7, - 0x83, 0x44, 0xCA, 0xED, 0x1C, 0x75, 0xAD, 0xDD, 0x4D, 0x83, 0x62, 0xD6, - 0xAA, 0x68, 0x95, 0xB2, 0x24, 0x21, 0x7B, 0x15, 0xAE, 0x2A, 0x99, 0x68, - 0x15, 0xED, 0x66, 0xF0, 0xB8, 0x58, 0xE7, 0xD3, 0xF5, 0x2E, 0xC6, 0xD9, - 0x2A, 0x5E, 0xE7, 0x0E, 0x2E, 0xE7, 0xFC, 0x67, 0x59, 0xC0, 0xC8, 0x61, - 0x7D, 0x4B, 0xA4, 0x6F, 0xDD, 0x9F, 0xD9, 0xC8, 0x85, 0x87, 0x64, 0xC7, - 0xBA, 0x1A, 0x0F, 0x29, 0xD4, 0x96, 0xA8, 0x78, 0x9A, 0x6B, 0x62, 0x20, - 0xA9, 0x32, 0xD0, 0xEE, 0xA9, 0x8C, 0x28, 0x61, 0x47, 0xA2, 0x50, 0x2A, - 0x63, 0xF6, 0x21, 0xDE, 0xDA, 0xD8, 0xD5, 0xF0, 0x7F, 0xC5, 0x00, 0x82, - 0x70, 0xE6, 0xA3, 0xBF, 0x5C, 0x89, 0x27, 0x4F, 0x51, 0x92, 0x77, 0x03, - 0xC3, 0xB0, 0xCC, 0x2E, 0x3B, 0xEC, 0x23, 0xF2, 0x2F, 0x53, 0x41, 0xAF, - 0x89, 0x93, 0xFF, 0xD2, 0x80, 0xB1, 0x43, 0x97, 0xDE, 0xD6, 0x19, 0xA0, - 0x92, 0x12, 0x7A, 0x3D, 0x66, 0x79, 0xE1, 0xC1, 0xBC, 0xE1, 0x77, 0x70, - 0xA2, 0x8B, 0x3D, 0x46, 0x84, 0x53, 0x3F, 0xE4, 0x4E, 0x42, 0x41, 0x37, - 0x92, 0x1E, 0x1F, 0xFD, 0x38, 0xB3, 0xF7, 0xEF, 0x87, 0x39, 0x80, 0xD3, - 0x56, 0xCF, 0xF4, 0xE0, 0x13, 0xDE, 0x64, 0xB0, 0x72, 0xA4, 0x03, 0x84, - 0xC4, 0x41, 0xED, 0x6F, 0xFA, 0x3E, 0xE2, 0xCA, 0x04, 0x20, 0xD2, 0xD7, - 0xDC, 0x2C, 0x82, 0x2B, 0x7A, 0xE2, 0x6D, 0xA1, 0x1C, 0x48, 0xDB, 0xCF, - 0x89, 0x4F, 0x34, 0x97, 0x3D, 0x28, 0xA8, 0x53, 0xDA, 0xE7, 0xC1, 0xE1, - 0x73, 0x15, 0xA3, 0x30, 0x76, 0x7F, 0x8F, 0x23, 0x42, 0x14, 0x3D, 0x51, - 0x34, 0xD2, 0x5A, 0xAD, 0x3C, 0x9B, 0xCB, 0xC8, 0xFE, 0x7F, 0x6E, 0x8E, - 0x40, 0xF3, 0xBD, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x66, 0x30, 0x64, - 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, - 0x14, 0xC5, 0x01, 0xAD, 0x7C, 0xE6, 0x63, 0xC9, 0x9C, 0x17, 0x5F, 0xC5, - 0xA2, 0xA7, 0xE1, 0x50, 0x5F, 0xE8, 0xF5, 0xA8, 0xC6, 0x30, 0x1D, 0x06, - 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xC5, 0x01, 0xAD, 0x7C, - 0xE6, 0x63, 0xC9, 0x9C, 0x17, 0x5F, 0xC5, 0xA2, 0xA7, 0xE1, 0x50, 0x5F, - 0xE8, 0xF5, 0xA8, 0xC6, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, - 0x01, 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x14, 0x06, 0x03, 0x55, 0x1D, - 0x11, 0x04, 0x0D, 0x30, 0x0B, 0x82, 0x09, 0x6C, 0x6F, 0x63, 0x61, 0x6C, - 0x68, 0x6F, 0x73, 0x74, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, - 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, - 0x71, 0xB3, 0x5D, 0x21, 0xC2, 0x0E, 0xD7, 0xD0, 0xC6, 0xF8, 0x4A, 0x73, - 0x87, 0x4D, 0x22, 0x02, 0x27, 0xD0, 0xC7, 0xF8, 0xFD, 0x1A, 0x6D, 0x62, - 0x58, 0x82, 0x08, 0x76, 0x20, 0x07, 0xC0, 0x48, 0x92, 0xF3, 0xE9, 0x98, - 0x5A, 0xEB, 0x0D, 0x4E, 0x56, 0x95, 0x63, 0x68, 0x4D, 0xAB, 0xD4, 0x00, - 0x76, 0xE0, 0x37, 0xCF, 0x0B, 0x11, 0x61, 0x59, 0x5C, 0xDE, 0xF6, 0xA5, - 0x14, 0x59, 0xD9, 0x25, 0x9F, 0x59, 0xD9, 0xD3, 0x5E, 0x86, 0xAC, 0x1D, - 0xA6, 0x2C, 0x32, 0x42, 0x19, 0x32, 0x13, 0x40, 0x0B, 0x54, 0xCD, 0x67, - 0x26, 0xB6, 0xBD, 0xB4, 0x96, 0xA4, 0xCA, 0x1F, 0x7F, 0x37, 0xD6, 0xA8, - 0x75, 0xEB, 0x3A, 0x81, 0x51, 0x30, 0xB9, 0xF9, 0x4A, 0x01, 0x6F, 0xD1, - 0xD6, 0xED, 0x4F, 0xDF, 0x3F, 0x30, 0x60, 0x06, 0x67, 0x92, 0x8E, 0x61, - 0x85, 0x5F, 0x1A, 0xB5, 0x8C, 0xB3, 0x0F, 0x61, 0xA9, 0xFA, 0xDF, 0x5D, - 0xC4, 0x64, 0x00, 0xEA, 0x87, 0xB1, 0x33, 0x5F, 0x7D, 0xCB, 0xA3, 0x85, - 0x24, 0x6E, 0x2C, 0x65, 0x3B, 0xEA, 0x73, 0x3F, 0x86, 0xD3, 0xFD, 0xE8, - 0xE4, 0x02, 0xC6, 0x61, 0x6A, 0x26, 0x17, 0x52, 0x01, 0x25, 0x5C, 0x7F, - 0xA8, 0xCE, 0x69, 0x1F, 0xAC, 0x61, 0x2C, 0xB7, 0x04, 0xAF, 0xFD, 0xA4, - 0x7A, 0x99, 0xCB, 0x26, 0x15, 0x4C, 0xFF, 0x74, 0xD4, 0x73, 0x0C, 0x57, - 0x0C, 0x26, 0xEB, 0xD7, 0x2A, 0xDC, 0x5C, 0xC3, 0x41, 0xBB, 0xC2, 0xF3, - 0xCE, 0x16, 0xBD, 0x8E, 0x7B, 0xFB, 0xE9, 0xDF, 0xAB, 0x21, 0x0D, 0x91, - 0xB3, 0x8D, 0xD8, 0xCF, 0xC8, 0xF4, 0x49, 0xB9, 0xD0, 0xE3, 0x16, 0x70, - 0x3F, 0xB3, 0xDE, 0xD4, 0x07, 0x25, 0xFA, 0x46, 0x44, 0x52, 0x89, 0x4D, - 0x89, 0xC8, 0xE2, 0xCA, 0xB5, 0x33, 0x7F, 0xC7, 0x21, 0xBD, 0x28, 0xEF, - 0xFE, 0x66, 0x74, 0x03 -}; - -static const unsigned char CERT1[] = { - 0x30, 0x82, 0x03, 0x34, 0x30, 0x82, 0x02, 0x1C, 0xA0, 0x03, 0x02, 0x01, - 0x02, 0x02, 0x14, 0x70, 0x0F, 0x60, 0xEE, 0xF0, 0x07, 0x9A, 0x9C, 0x69, - 0xAC, 0x97, 0x62, 0x26, 0x4F, 0x5D, 0x05, 0xB6, 0xF9, 0x8F, 0x48, 0x30, - 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, - 0x05, 0x00, 0x30, 0x1C, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, - 0x06, 0x13, 0x02, 0x43, 0x41, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, - 0x04, 0x03, 0x13, 0x04, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, 0x17, 0x0D, - 0x31, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x5A, 0x17, 0x0D, 0x33, 0x37, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, - 0x39, 0x35, 0x39, 0x5A, 0x30, 0x27, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, - 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x41, 0x31, 0x18, 0x30, 0x16, 0x06, - 0x03, 0x55, 0x04, 0x03, 0x13, 0x0F, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6D, - 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, - 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, - 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, - 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xB3, 0xE8, 0x6B, 0xAF, 0x9C, 0x16, - 0x52, 0xE3, 0x81, 0x0C, 0x50, 0xAB, 0x25, 0xCE, 0xCC, 0x0D, 0xC7, 0xF2, - 0x1F, 0x7F, 0x50, 0xDF, 0x2C, 0x5C, 0x35, 0xD6, 0x62, 0x2E, 0x63, 0x27, - 0x41, 0xA7, 0xE4, 0x53, 0xA8, 0x4B, 0x27, 0xFA, 0x13, 0x91, 0xA3, 0xFA, - 0x09, 0x4A, 0x2F, 0x3B, 0x5E, 0xCF, 0x77, 0xB3, 0x8A, 0xC1, 0xCD, 0x49, - 0x95, 0x9C, 0x75, 0x0D, 0x64, 0x74, 0xEF, 0xE4, 0xD7, 0x4B, 0xB9, 0xA1, - 0x9B, 0x68, 0xD2, 0x30, 0x71, 0x48, 0xEA, 0xF7, 0x4B, 0x14, 0xDF, 0x3F, - 0x47, 0xA9, 0xD8, 0xBB, 0xEC, 0x8F, 0x28, 0xCC, 0xFA, 0xDF, 0xB4, 0x1F, - 0x94, 0x7C, 0x96, 0xFC, 0x08, 0x05, 0x28, 0xF9, 0xE8, 0xF4, 0x2F, 0x2F, - 0xEE, 0x62, 0x9C, 0x8A, 0x3A, 0xE0, 0x85, 0x58, 0x60, 0xB6, 0x0F, 0x2D, - 0x30, 0xB4, 0xC0, 0x41, 0x54, 0x91, 0x4C, 0x1F, 0x5F, 0xAD, 0xF1, 0x19, - 0xF0, 0xC0, 0x22, 0xA6, 0x7D, 0xD8, 0x3F, 0x79, 0x34, 0x59, 0x42, 0x7B, - 0x5B, 0xB5, 0x41, 0xC4, 0x64, 0x7F, 0x52, 0xCF, 0x3C, 0x37, 0x22, 0xA1, - 0x2F, 0x79, 0x25, 0x94, 0x24, 0x41, 0xC2, 0x3F, 0xFA, 0xC7, 0x75, 0xFB, - 0x48, 0xB5, 0x0D, 0x18, 0xA7, 0xF4, 0x54, 0xF3, 0x2E, 0x6E, 0xD8, 0x43, - 0x58, 0xC4, 0xAB, 0x50, 0xE8, 0x05, 0xAD, 0x91, 0xB6, 0x1E, 0x01, 0x75, - 0xB3, 0x54, 0x9C, 0xDE, 0xA0, 0x99, 0x15, 0xFB, 0xAC, 0xF1, 0x5C, 0x97, - 0x49, 0x51, 0xCC, 0xEF, 0x58, 0x12, 0x6F, 0x73, 0x6B, 0xB3, 0x34, 0x14, - 0x01, 0x0F, 0x5A, 0x9D, 0xFA, 0xAA, 0xD6, 0x93, 0xD3, 0xE2, 0xEA, 0xC3, - 0xAB, 0xBC, 0x4E, 0xED, 0xCC, 0x51, 0xA1, 0xB8, 0xF8, 0x94, 0xB6, 0xB4, - 0x2C, 0xA8, 0x86, 0x2B, 0x1F, 0xF6, 0x51, 0x43, 0x29, 0x52, 0x5E, 0x13, - 0x89, 0xB3, 0x6A, 0x78, 0x60, 0x4E, 0x4E, 0xC0, 0x1B, 0xA5, 0x02, 0x03, - 0x01, 0x00, 0x01, 0xA3, 0x63, 0x30, 0x61, 0x30, 0x1F, 0x06, 0x03, 0x55, - 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xC3, 0x0A, 0xBC, 0xB4, - 0x90, 0x63, 0x96, 0x92, 0x45, 0xBC, 0x27, 0xA0, 0xF0, 0x58, 0x89, 0x2A, - 0xD5, 0x78, 0x00, 0x12, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, - 0x16, 0x04, 0x14, 0x7C, 0xCF, 0xA3, 0xC6, 0x29, 0xF7, 0xF3, 0xC5, 0xAA, - 0x19, 0xD0, 0xC0, 0x16, 0xEB, 0xE0, 0x40, 0x0F, 0xCE, 0x44, 0xA7, 0x30, - 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, - 0x02, 0x00, 0x86, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, - 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x0D, 0x06, 0x09, - 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, - 0x82, 0x01, 0x01, 0x00, 0x54, 0x3B, 0xF4, 0xEA, 0xC6, 0xE4, 0xE8, 0xC0, - 0x5B, 0x12, 0xB2, 0xAD, 0xFA, 0xBD, 0xA9, 0xF4, 0x62, 0x03, 0xAD, 0x57, - 0x4C, 0x6F, 0x07, 0xA7, 0x47, 0x35, 0x75, 0x3E, 0x48, 0xA2, 0x5B, 0x71, - 0x10, 0x01, 0x8F, 0x93, 0x99, 0x9D, 0xA7, 0x47, 0xE3, 0x8E, 0x3E, 0xAF, - 0x2D, 0xBA, 0x06, 0xFE, 0xD4, 0xE4, 0x97, 0xBC, 0x10, 0x8D, 0xA6, 0xA5, - 0x3A, 0x3C, 0xE6, 0x21, 0xCB, 0x3B, 0xDA, 0x13, 0xE3, 0x4A, 0x23, 0xEB, - 0xBC, 0xBA, 0xA5, 0x90, 0x91, 0xAD, 0x55, 0x6E, 0xD5, 0xDD, 0x85, 0x4B, - 0x6B, 0x27, 0xD2, 0x39, 0x76, 0x06, 0x2E, 0xD4, 0x23, 0x5B, 0xBB, 0x55, - 0xB5, 0x49, 0x3F, 0x7D, 0x2F, 0x21, 0xCB, 0x96, 0x75, 0x19, 0x99, 0xA9, - 0x99, 0xF1, 0x0B, 0xBB, 0x3E, 0xC7, 0x10, 0xA7, 0x8B, 0x7A, 0x52, 0xB9, - 0x49, 0xE4, 0x14, 0x08, 0x78, 0xE7, 0x3D, 0xD9, 0x98, 0x57, 0xDA, 0xFF, - 0xDA, 0xB9, 0x8D, 0x66, 0x75, 0x80, 0xB5, 0x5D, 0xB9, 0xDF, 0x69, 0x65, - 0xDB, 0x16, 0xE7, 0x1E, 0xC4, 0x40, 0xE4, 0x46, 0x8A, 0x1E, 0x76, 0x32, - 0x16, 0xE7, 0x83, 0x67, 0xDA, 0x78, 0x56, 0xAB, 0x0F, 0x4C, 0x5C, 0xF1, - 0x70, 0xDA, 0x66, 0x20, 0xF4, 0xF8, 0x0F, 0xF6, 0xDC, 0x2F, 0x72, 0x97, - 0x6B, 0x78, 0x40, 0x79, 0x9D, 0x5B, 0x6D, 0xBE, 0x03, 0xCE, 0x70, 0x42, - 0xA8, 0x2A, 0x71, 0x11, 0xDF, 0x2E, 0x81, 0x01, 0xEA, 0x86, 0x12, 0x91, - 0x4F, 0xD0, 0x18, 0xED, 0x84, 0xA4, 0x48, 0x30, 0xB9, 0xB9, 0x7B, 0x56, - 0x3E, 0xEF, 0x8D, 0xE1, 0x1F, 0xFD, 0x90, 0xB2, 0x44, 0x85, 0x58, 0x6F, - 0xA7, 0x30, 0x74, 0x7C, 0xF1, 0xAE, 0x8C, 0x99, 0x3F, 0xF1, 0x4D, 0x57, - 0xC5, 0x95, 0x68, 0xC2, 0x36, 0xB2, 0xEC, 0xC2, 0x68, 0x7A, 0xC0, 0x81, - 0xA9, 0x55, 0x05, 0xE7, 0xCF, 0xAF, 0x50, 0xAC -}; - -static const br_x509_certificate SERVER_CERTIFICATE_CHAIN[] = { - { (unsigned char *)CERT0, sizeof CERT0 }, - { (unsigned char *)CERT1, sizeof CERT1 } -}; - -#define SERVER_CERTIFICATE_CHAIN_LEN 2 diff --git a/examples/tls_server_bearssl/key.h b/examples/tls_server_bearssl/key.h deleted file mode 100644 index 41c6b28..0000000 --- a/examples/tls_server_bearssl/key.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2016 Thomas Pornin - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#include "bearssl.h" - -/* - * The private key for the server certificate (RSA). - */ - -static const unsigned char RSA_P[] = { - 0xF9, 0xF6, 0x32, 0x9C, 0x51, 0xD7, 0x71, 0xB2, 0x62, 0xED, 0x81, 0x24, - 0xDA, 0xF6, 0xA9, 0x2C, 0xC3, 0x2D, 0x55, 0x94, 0x95, 0x51, 0xE5, 0x36, - 0x12, 0x9E, 0x2E, 0x1F, 0x8E, 0xD8, 0x22, 0x22, 0x64, 0x5E, 0xA3, 0xFC, - 0x60, 0xF0, 0x14, 0xDC, 0x10, 0x48, 0x6F, 0x4F, 0x1A, 0x7D, 0xCC, 0x37, - 0x23, 0x27, 0x76, 0xB6, 0x31, 0xAA, 0xDE, 0x70, 0xC9, 0xEC, 0xAB, 0x0A, - 0x50, 0xF1, 0xEA, 0x79, 0x79, 0x74, 0xBE, 0x3B, 0xAB, 0x2E, 0x63, 0x97, - 0xA2, 0x6F, 0x0A, 0x45, 0x7B, 0xD7, 0x6C, 0xD2, 0x6D, 0x1B, 0x70, 0x31, - 0x03, 0xAF, 0x26, 0x8B, 0x28, 0xC5, 0xF8, 0x49, 0x67, 0x45, 0x41, 0xF1, - 0xD3, 0x35, 0x05, 0x27, 0x2A, 0x79, 0x21, 0xDA, 0x06, 0xB6, 0x3D, 0xA2, - 0xE8, 0x3C, 0x40, 0xFA, 0x6F, 0xC4, 0xFC, 0xF5, 0xC4, 0x05, 0xEB, 0x9A, - 0x31, 0xAA, 0x40, 0x7E, 0x5E, 0xEE, 0x22, 0x5B -}; - -static const unsigned char RSA_Q[] = { - 0xD9, 0x9C, 0x1A, 0xDC, 0x94, 0x51, 0xF6, 0xC1, 0x96, 0xDA, 0x0E, 0x11, - 0x3F, 0x37, 0x28, 0x7A, 0x33, 0xB0, 0xC4, 0xBE, 0xDF, 0x68, 0x2B, 0xD3, - 0x1C, 0x65, 0x67, 0x7A, 0x3C, 0xAF, 0x59, 0x50, 0xAB, 0x29, 0x36, 0x17, - 0x39, 0x15, 0x71, 0x97, 0x62, 0xDD, 0xCD, 0x25, 0xEE, 0x8D, 0xFF, 0x26, - 0x8F, 0x71, 0x21, 0xBE, 0x8F, 0x9C, 0x85, 0x4E, 0x3A, 0xE1, 0x24, 0xC7, - 0xE1, 0x4A, 0xDF, 0xD0, 0x60, 0xB3, 0xC4, 0x44, 0x2E, 0xAC, 0x73, 0x16, - 0x5F, 0x07, 0xC9, 0x3A, 0x73, 0x5E, 0xDA, 0x9B, 0xEE, 0xE2, 0xB4, 0xA9, - 0x3D, 0x33, 0x14, 0x7B, 0xEE, 0xA7, 0xD4, 0xAC, 0xF7, 0x53, 0xE6, 0x3E, - 0xF0, 0x85, 0x57, 0x4C, 0x8B, 0x96, 0x1B, 0xDD, 0xD7, 0x36, 0xFC, 0x89, - 0x37, 0x59, 0x75, 0x96, 0x75, 0x8B, 0x2E, 0xF7, 0x04, 0x2D, 0x29, 0x89, - 0xD9, 0xB7, 0x9F, 0x71, 0x3B, 0xE2, 0xED, 0xC7 -}; - -static const unsigned char RSA_DP[] = { - 0xE4, 0xFC, 0x02, 0x2F, 0x2B, 0xD6, 0x47, 0x04, 0xD9, 0x15, 0xA4, 0x5A, - 0x23, 0xF1, 0x14, 0xD7, 0xB9, 0xD1, 0x1C, 0xF6, 0x29, 0xB8, 0x45, 0x57, - 0x3C, 0xC5, 0x05, 0x91, 0xC9, 0x64, 0xFC, 0x18, 0x2F, 0x84, 0x77, 0x8B, - 0x6B, 0x2E, 0x64, 0x9D, 0x98, 0x99, 0x12, 0xC7, 0x0F, 0x88, 0xB0, 0x7C, - 0xCE, 0x4A, 0x87, 0xB8, 0xAE, 0x55, 0x4E, 0xC3, 0x5A, 0x67, 0xE1, 0xE4, - 0x68, 0x74, 0xC5, 0x8D, 0x14, 0x93, 0xBA, 0xF5, 0xA4, 0x82, 0xB1, 0x9F, - 0xA6, 0xA1, 0x3C, 0x72, 0x9C, 0xD9, 0xA3, 0x8A, 0x3D, 0x83, 0x86, 0x4A, - 0x90, 0x8A, 0x72, 0xAF, 0xC6, 0xE1, 0x5C, 0xEB, 0xB9, 0x9C, 0x3B, 0xA6, - 0x12, 0x0B, 0x1F, 0x36, 0x5A, 0xF5, 0x6E, 0xEA, 0x71, 0x7D, 0x9F, 0x87, - 0x4E, 0x62, 0x6C, 0x50, 0x3F, 0xF5, 0xE0, 0x9A, 0x30, 0x42, 0x10, 0x2C, - 0x48, 0x55, 0x24, 0x11, 0xE0, 0x5B, 0x1C, 0xC3 -}; - -static const unsigned char RSA_DQ[] = { - 0x8D, 0xAC, 0xE0, 0xA0, 0x33, 0xC0, 0x99, 0x52, 0xB8, 0x90, 0x07, 0x10, - 0x9B, 0x83, 0xA1, 0xCA, 0xCD, 0xD4, 0x8C, 0x83, 0x68, 0x98, 0x3D, 0xD0, - 0x18, 0x70, 0xBC, 0xCA, 0x0C, 0xB0, 0x6D, 0x09, 0xE4, 0x25, 0xD4, 0x9D, - 0x92, 0x00, 0xB0, 0x0F, 0xCB, 0xC2, 0x74, 0x49, 0xF9, 0xE2, 0x60, 0xF8, - 0x0D, 0xF3, 0xAD, 0xF0, 0x8F, 0x37, 0x6C, 0x62, 0xDE, 0x5A, 0xAE, 0xC3, - 0xA3, 0x9E, 0x47, 0xD1, 0x36, 0xE4, 0x53, 0x27, 0xC0, 0xEB, 0x6D, 0x92, - 0x67, 0x14, 0x7E, 0xA2, 0x9B, 0x72, 0x6A, 0x09, 0x93, 0xA1, 0xED, 0xD5, - 0x31, 0x8F, 0x0C, 0x0B, 0x13, 0xFA, 0x18, 0xB0, 0xF3, 0xE5, 0x9F, 0xC5, - 0xE2, 0x7A, 0x2D, 0xB8, 0x1C, 0x39, 0x02, 0xB3, 0x8F, 0xE6, 0xB0, 0xCB, - 0xF5, 0x49, 0x3D, 0x11, 0x54, 0x3D, 0xE5, 0xB9, 0xD4, 0xF2, 0x42, 0x55, - 0x09, 0x76, 0x4F, 0x4C, 0x3D, 0x9D, 0x25, 0x09 -}; - -static const unsigned char RSA_IQ[] = { - 0x72, 0x0C, 0xA7, 0xCF, 0x06, 0x95, 0x69, 0xF4, 0x75, 0x20, 0x34, 0x03, - 0xE0, 0xCF, 0x9A, 0x51, 0x93, 0xF5, 0x42, 0x2E, 0xF2, 0x85, 0xBE, 0xCE, - 0x4F, 0x38, 0xB5, 0x8C, 0xA2, 0x99, 0x42, 0xF3, 0xBD, 0x65, 0x38, 0xE2, - 0x34, 0x3F, 0x21, 0x9D, 0xF5, 0xBD, 0xB3, 0xBF, 0x73, 0x3C, 0x18, 0xDE, - 0xF6, 0xF0, 0x7F, 0xA1, 0xC2, 0x55, 0xF2, 0x38, 0xE9, 0x0E, 0x1E, 0x31, - 0xE7, 0xDB, 0x51, 0xC5, 0x71, 0x8D, 0x67, 0x71, 0x3A, 0x9F, 0x55, 0x52, - 0x60, 0xEE, 0x45, 0xF6, 0x08, 0x98, 0x81, 0xB7, 0x7B, 0x2F, 0xF2, 0x96, - 0x7D, 0x73, 0xD0, 0xA6, 0xAB, 0xAA, 0x83, 0x49, 0x41, 0x35, 0xA9, 0x90, - 0x67, 0xCE, 0xD3, 0xB9, 0x73, 0x54, 0xAA, 0x84, 0x00, 0x88, 0x88, 0x90, - 0x1D, 0x86, 0x9B, 0xE5, 0xB8, 0xCE, 0x89, 0x0A, 0x1B, 0x47, 0x62, 0x31, - 0xC2, 0x3F, 0xC3, 0x8C, 0x86, 0x09, 0x3C, 0x86 -}; - -static const br_rsa_private_key SERVER_PRIVATE_KEY = { - 2048, - (unsigned char *)RSA_P, sizeof RSA_P, - (unsigned char *)RSA_Q, sizeof RSA_Q, - (unsigned char *)RSA_DP, sizeof RSA_DP, - (unsigned char *)RSA_DQ, sizeof RSA_DQ, - (unsigned char *)RSA_IQ, sizeof RSA_IQ -}; \ No newline at end of file diff --git a/examples/tls_server_bearssl/tls_server_bearssl.c b/examples/tls_server_bearssl/tls_server_bearssl.c deleted file mode 100644 index 79e231d..0000000 --- a/examples/tls_server_bearssl/tls_server_bearssl.c +++ /dev/null @@ -1,188 +0,0 @@ -/* tls_server_bearssl - simple BearSSL TLS server that outputs some statistics to a connecting client, - * then closes the socket. - * - * Uses code from the server_basic example in BearSSL and the tls_server example. - * - * To test this program, connect to the ESP using openssl command line like this: - * - * openssl s_client -connect 192.168.66.209:800 - * - * The openssl command line client will print some information for the (self-signed) server certificate, - * then after a couple of seconds (validation) there will be a few lines of text output sent from the ESP. - * - * See the certificate.h and key.h files for private key & certificate, plus information for generation. - * - * Original Copyright (c) 2016 Thomas Pornin , MIT License. - * Additions Copyright (C) 2016 Stefan Schake, MIT License. - */ -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "esp/hwrand.h" - -#include -#include - -#include "FreeRTOS.h" -#include "task.h" - -#include "lwip/err.h" -#include "lwip/sockets.h" -#include "lwip/sys.h" -#include "lwip/netdb.h" -#include "lwip/dns.h" -#include "lwip/api.h" - -#include "ssid_config.h" - -/* Server cert & key */ -#include "certificate.h" -#include "key.h" - -#include "bearssl.h" - -#define PORT 800 - -/* - * Low-level data read callback for the simplified SSL I/O API. - */ -static int -sock_read(void *ctx, unsigned char *buf, size_t len) -{ - for (;;) { - ssize_t rlen; - - rlen = read(*(int *)ctx, buf, len); - if (rlen <= 0) { - if (rlen < 0 && errno == EINTR) { - continue; - } - return -1; - } - return (int)rlen; - } -} - -/* - * Low-level data write callback for the simplified SSL I/O API. - */ -static int -sock_write(void *ctx, const unsigned char *buf, size_t len) -{ - for (;;) { - ssize_t wlen; - - wlen = write(*(int *)ctx, buf, len); - if (wlen <= 0) { - if (wlen < 0 && errno == EINTR) { - continue; - } - return -1; - } - return (int)wlen; - } -} - -/* - * BearSSL IO buffer and server state - */ -static unsigned char iobuf[BR_SSL_BUFSIZE_MONO]; -br_ssl_server_context sc; -br_sslio_context ioc; - -void tls_server_task(void *pvParameters) -{ - int successes = 0, failures = 0; - printf("TLS server task starting...\n"); - - /* Prepare server socket */ - int sfd = socket(PF_INET, SOCK_STREAM, 0); - if (sfd < 0) { - printf("Failed to allocate socket.\r\n"); - return; - } - struct sockaddr_in addr; - bzero(&addr, sizeof(addr)); - addr.sin_port = htons(PORT); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; - if (bind(sfd, (const struct sockaddr*) &addr, sizeof(addr)) < 0) { - close(sfd); - printf("Failed to bind socket\r\n"); - return; - } - if (listen(sfd, 0) < 0) { - close(sfd); - printf("Failed to listen\r\n"); - return; - } - - /* Initialize engine */ - br_ssl_server_init_full_rsa(&sc, SERVER_CERTIFICATE_CHAIN, SERVER_CERTIFICATE_CHAIN_LEN, &SERVER_PRIVATE_KEY); - br_ssl_engine_set_buffer(&sc.eng, iobuf, sizeof iobuf, 0); - - /* - * Inject some entropy from the ESP hardware RNG - * This is necessary because we don't support any of the BearSSL methods - */ - for (int i = 0; i < 10; i++) { - int rand = hwrand(); - br_ssl_engine_inject_entropy(&sc.eng, &rand, 4); - } - - while(1) { - printf("Top of the loop, free heap = %u\r\n", xPortGetFreeHeapSize()); - - /* Accept a new client */ - struct sockaddr_in sa; - socklen_t sa_len = sizeof(sa); - int cfd = accept(sfd, (struct sockaddr*)&sa, &sa_len); - if (cfd < 0) { - continue; - } - - /* Prepare for a new handshake */ - br_ssl_server_reset(&sc); - /* Initialize the simplified IO wrapper */ - br_sslio_init(&ioc, &sc.eng, sock_read, &cfd, sock_write, &cfd); - - /* Prepare a message to the client */ - unsigned char buf[100]; - int len = sprintf((char *) buf, "O hai, client " IPSTR ":%d\r\nFree heap size is %d bytes\r\n", - IP2STR((ip4_addr_t *)&sa.sin_addr.s_addr), - ntohs(sa.sin_port), xPortGetFreeHeapSize()); - - /* Send the message and close the connection */ - br_sslio_write_all(&ioc, buf, len); - br_sslio_close(&ioc); - - /* Check if something bad happened */ - if (br_ssl_engine_last_error(&sc.eng) != BR_ERR_OK) { - close(cfd); - printf("failure, error = %d\r\n", br_ssl_engine_last_error(&sc.eng)); - failures++; - continue; - } - - close(cfd); - successes++; - printf("successes = %d failures = %d\r\n", successes, failures); - printf("Waiting for next client...\r\n"); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - struct sdk_station_config config = { - .ssid = WIFI_SSID, - .password = WIFI_PASS, - }; - - /* required to call wifi_set_opmode before station_set_config */ - sdk_wifi_set_opmode(STATION_MODE); - sdk_wifi_station_set_config(&config); - - xTaskCreate(&tls_server_task, "server_task", 2048, NULL, 2, NULL); -} diff --git a/examples/tsl2561/Makefile b/examples/tsl2561/Makefile deleted file mode 100644 index 133e3d1..0000000 --- a/examples/tsl2561/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=tsl2561_example -EXTRA_COMPONENTS = extras/i2c extras/tsl2561 -include ../../common.mk diff --git a/examples/tsl2561/tsl2561_example.c b/examples/tsl2561/tsl2561_example.c deleted file mode 100644 index 6f3582f..0000000 --- a/examples/tsl2561/tsl2561_example.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This sample code is in the public domain. - */ - -#include -#include -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "i2c/i2c.h" -#include "task.h" -#include "tsl2561/tsl2561.h" - -/* An example using the TSL2561 light sensor - * to read and print lux values from a sensor - * attached to GPIO pin 2 (SCL) and GPIO pin 0 (SDA) - * Connect 3.3v from the ESP to Vin and GND to GND - */ - -#define I2C_BUS (0) -#define SCL_PIN (2) -#define SDA_PIN (0) - -void tsl2561MeasurementTask(void *pvParameters) -{ - tsl2561_t lightSensor; - - // Options: - // TSL2561_I2C_ADDR_VCC (0x49) - // TSL2561_I2C_ADDR_GND (0x29) - // TSL2561_I2C_ADDR_FLOAT (0x39) Default - lightSensor.i2c_dev.bus = I2C_BUS; - lightSensor.i2c_dev.addr = TSL2561_I2C_ADDR_FLOAT; - - tsl2561_init(&lightSensor); - - // Options: - // TSL2561_INTEGRATION_13MS (0x00) - // TSL2561_INTEGRATION_101MS (0x01) - // TSL2561_INTEGRATION_402MS (0x02) Default - tsl2561_set_integration_time(&lightSensor, TSL2561_INTEGRATION_402MS); - - // Options: - // TSL2561_GAIN_1X (0x00) Default - // TSL2561_GAIN_16X (0x10) - tsl2561_set_gain(&lightSensor, TSL2561_GAIN_1X); - - uint32_t lux = 0; - - while (1) - { - if (tsl2561_read_lux(&lightSensor, &lux)) - { - printf("Lux: %u\n", lux); - } - else - { - printf("Could not read data from TSL2561\n"); - } - - // 0.1 second delay - vTaskDelay(100 / portTICK_PERIOD_MS); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - - xTaskCreate(tsl2561MeasurementTask, "tsl2561MeasurementTask", 256, NULL, 2, NULL); -} diff --git a/examples/tsl4531/Makefile b/examples/tsl4531/Makefile deleted file mode 100644 index f52d04f..0000000 --- a/examples/tsl4531/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=tsl4531_example -EXTRA_COMPONENTS = extras/i2c extras/tsl4531 -include ../../common.mk diff --git a/examples/tsl4531/tsl4531_example.c b/examples/tsl4531/tsl4531_example.c deleted file mode 100644 index f40213a..0000000 --- a/examples/tsl4531/tsl4531_example.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This sample code is in the public domain. - */ - -#include -#include -#include "esp/uart.h" -#include "FreeRTOS.h" -#include "i2c/i2c.h" -#include "task.h" -#include "tsl4531/tsl4531.h" - -/* An example using the TSL4531 light sensor - * to read and print lux values from a sensor - * attached to GPIO pin 2 (SCL) and GPIO pin 0 (SDA) - * Connect 3.3v from the ESP to Vin and GND to GND - */ - -#define I2C_BUS (0) -#define SCL_PIN (2) -#define SDA_PIN (0) - -void tsl4531MeasurementTask(void *pvParameters) -{ - tsl4531_t lightSensor; - lightSensor.i2c_dev.bus= I2C_BUS; - lightSensor.i2c_dev.addr= TSL4531_I2C_ADDR; - tsl4531_init(&lightSensor); - - tsl4531_set_integration_time(&lightSensor, TSL4531_INTEGRATION_400MS); - tsl4531_set_power_save_skip(&lightSensor, true); - - uint16_t lux = 0; - - while (1) - { - if (tsl4531_read_lux(&lightSensor, &lux)) - { - printf("Lux: %u\n", lux); - } - else - { - printf("Could not read data from TSL4531\n"); - } - - // 0.05 second delay - vTaskDelay(50 / portTICK_PERIOD_MS); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); - - xTaskCreate(tsl4531MeasurementTask, "tsl4531MeasurementTask", 256, NULL, 2, NULL); -} diff --git a/examples/tsoftuart/.gitignore b/examples/tsoftuart/.gitignore deleted file mode 100644 index e067149..0000000 --- a/examples/tsoftuart/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!local.mk diff --git a/examples/tsoftuart/FreeRTOSConfig.h b/examples/tsoftuart/FreeRTOSConfig.h deleted file mode 100644 index baf25a4..0000000 --- a/examples/tsoftuart/FreeRTOSConfig.h +++ /dev/null @@ -1,7 +0,0 @@ -#define configUSE_TRACE_FACILITY 1 -#define configGENERATE_RUN_TIME_STATS 1 -#define portGET_RUN_TIME_COUNTER_VALUE() (RTC.COUNTER) -#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() {} - -/* Use the defaults for everything else */ -#include_next diff --git a/examples/tsoftuart/Makefile b/examples/tsoftuart/Makefile deleted file mode 100644 index a37e702..0000000 --- a/examples/tsoftuart/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# Makefile for tsfotuart example -PROGRAM=tsoftuart -EXTRA_COMPONENTS=extras/dhcpserver extras/wificfg extras/mactimer extras/tsoftuart - -# For the mDNS responder included with lwip: -EXTRA_CFLAGS += -DLWIP_MDNS_RESPONDER=1 -DLWIP_NUM_NETIF_CLIENT_DATA=1 -DLWIP_NETIF_EXT_STATUS_CALLBACK=1 - -# Avoid writing the wifi state to flash when using wificfg. -EXTRA_CFLAGS += -DWIFI_PARAM_SAVE=0 - -EXTRA_CFLAGS += -DWIFICFG_CLIENT_TASK=1 -DWIFICFG_IRAM_TEST=1 - -include ../../common.mk diff --git a/examples/tsoftuart/local.mk b/examples/tsoftuart/local.mk deleted file mode 100644 index c6c3129..0000000 --- a/examples/tsoftuart/local.mk +++ /dev/null @@ -1 +0,0 @@ -FLASH_SIZE ?= 32 diff --git a/examples/tsoftuart/tsoftuart.c b/examples/tsoftuart/tsoftuart.c deleted file mode 100644 index 44dee02..0000000 --- a/examples/tsoftuart/tsoftuart.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Example timer based software UART drive. - * - * Copyright (C) 2019 OurAirQuality.org - * - * Licensed under the Apache License, Version 2.0, January 2004 (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/ - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS WITH THE SOFTWARE. - * - */ - -#include -#include - -#include -#include -#include -#include -#include - -#include "lwip/sockets.h" - -#include "wificfg/wificfg.h" -#include "tsoftuart/tsoftuart.h" - -static void tsoftuart_task(void *pvParameters) -{ - /* Initialize the UART Tx. */ - uint32_t tx_pin = *(uint32_t *)pvParameters; - struct tsoftuart *uart = tsoftuart_init(tx_pin, 9600); - - for (;;) { - /* Reset the timing error records. */ - uart->output_queue_error_low = 0; - uart->output_queue_error_high = 0; - - char str[] = "Hello 0123456789 abcdefghijklmnopqrstuvwxyz\r\n"; - for (size_t i = 0; i < strlen(str); i++) { - tsoftuart_putc(uart, str[i]); - } - - /* Check the timing error. */ - if (uart->output_queue_error_high > 2 || uart->output_queue_error_low < -2) { - tsoftuart_write(uart, "X\r\n", 3); - } - - vTaskDelay(200 / portTICK_PERIOD_MS); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - wificfg_init(80, NULL); - - /* Start two tasks writing to different pins. */ - - static uint32_t tx_pin1 = 1; - xTaskCreate(&tsoftuart_task, "tsoftuart1", 256, &tx_pin1, 1, NULL); - - static uint32_t tx_pin2 = 2; - xTaskCreate(&tsoftuart_task, "tsoftuart2", 256, &tx_pin2, 1, NULL); -} diff --git a/examples/uart_config/Makefile b/examples/uart_config/Makefile deleted file mode 100755 index f414a7d..0000000 --- a/examples/uart_config/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -PROGRAM=uart_config - -include ../../common.mk diff --git a/examples/uart_config/uart_config.c b/examples/uart_config/uart_config.c deleted file mode 100755 index 573b9a4..0000000 --- a/examples/uart_config/uart_config.c +++ /dev/null @@ -1,96 +0,0 @@ -/* A basic example that demonstrates how UART can be configured. - Outputs some test data with 100baud, 1.5 stopbits, even parity bit to UART1 - (GPIO2; D4 for NodeMCU boards) - - This sample code is in the public domain. - */ - -#include -#include -#include -#include - -#include -#include - -void uart_send_data(void *pvParameters){ - /* Activate UART for GPIO2 */ - gpio_set_iomux_function(2, IOMUX_GPIO2_FUNC_UART1_TXD); - - /* Set baud rate of UART1 to 100 (so it's easier to measure) */ - uart_set_baud(1, 100); - - /* Set to 1.5 stopbits */ - uart_set_stopbits(1, UART_STOPBITS_1_5); - - /* Enable parity bit */ - uart_set_parity_enabled(1, true); - - /* Set parity bit to even */ - uart_set_parity(1, UART_PARITY_EVEN); - - /* Repeatedly send some example packets */ - for(;;) - { - uart_putc(1, 0B00000000); - uart_putc(1, 0B00000001); - uart_putc(1, 0B10101010); - uart_flush_txfifo(1); - } -} - -void uart_print_config(void *pvParameters){ - for(;;) - { - /* Get data */ - int baud = uart_get_baud(1); - UART_StopBits stopbits = uart_get_stopbits(1); - bool parity_enabled = uart_get_parity_enabled(1); - UART_Parity parity = uart_get_parity(1); - - /* Print to UART0 */ - printf("Baud: %d ", baud); - - switch(stopbits){ - case UART_STOPBITS_0: - printf("Stopbits: 0 "); - break; - case UART_STOPBITS_1: - printf("Stopbits: 1 "); - break; - case UART_STOPBITS_1_5: - printf("Stopbits: 1.5 "); - break; - case UART_STOPBITS_2: - printf("Stopbits: 2"); - break; - default: - printf("Stopbits: Error"); - } - - printf("Parity bit enabled: %d ", parity_enabled); - - switch(parity){ - case UART_PARITY_EVEN: - printf("Parity: Even"); - break; - case UART_PARITY_ODD: - printf("Parity: Odd"); - break; - default: - printf("Parity: Error"); - } - - printf("\n"); - - vTaskDelay(1000.0 / portTICK_PERIOD_MS); - } -} - -void user_init(void){ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - xTaskCreate(uart_send_data, "tsk1", 256, NULL, 2, NULL); - xTaskCreate(uart_print_config, "tsk2", 256, NULL, 3, NULL); -} diff --git a/examples/ultrasonic/Makefile b/examples/ultrasonic/Makefile deleted file mode 100644 index fd56901..0000000 --- a/examples/ultrasonic/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = ultrasonic -EXTRA_COMPONENTS = extras/ultrasonic - -include ../../common.mk diff --git a/examples/ultrasonic/main.c b/examples/ultrasonic/main.c deleted file mode 100644 index b4b1ac4..0000000 --- a/examples/ultrasonic/main.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Example of using ultrasonic rnaghe meter like HC-SR04 - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include - -#define TRIGGER_PIN 5 -#define ECHO_PIN 4 - -#define MAX_DISTANCE_CM 500 // 5m max - -void delay_ms(uint32_t ms) -{ - for (uint32_t i = 0; i < ms; i ++) - sdk_os_delay_us(1000); -} - -void user_init() -{ - uart_set_baud(0, 115200); - printf("SDK version : %s\n", sdk_system_get_sdk_version()); - - ultrasonic_sensor_t sensor = { - .trigger_pin = TRIGGER_PIN, - .echo_pin = ECHO_PIN - }; - - ultrasoinc_init(&sensor); - - while (true) - { - int32_t distance = ultrasoinc_measure_cm(&sensor, MAX_DISTANCE_CM); - if (distance < 0) - { - printf("Error: "); - switch (distance) - { - case ULTRASONIC_ERROR_PING: - printf("Cannot ping (device is in invalid state)\n"); - break; - case ULTRASONIC_ERROR_PING_TIMEOUT: - printf("Ping timeout (no device found)\n"); - break; - case ULTRASONIC_ERROR_ECHO_TIMEOUT: - printf("Echo timeout (i.e. distance too big)\n"); - break; - } - } - else - printf("Distance: %d cm, %.02f m\n", distance, distance / 100.0); - - delay_ms(200); - } -} diff --git a/examples/upnp/Makefile b/examples/upnp/Makefile deleted file mode 100644 index 8e82736..0000000 --- a/examples/upnp/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -PROGRAM=upnp_test -OTA=1 -EXTRA_COMPONENTS=extras/rboot-ota - -include ../../common.mk diff --git a/examples/upnp/README.md b/examples/upnp/README.md deleted file mode 100644 index d39056c..0000000 --- a/examples/upnp/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# upnp Example - -This is an example to generate an upnp server and emulate a WeMo switch recognizable by Amazon echo Dot. diff --git a/examples/upnp/httpd.c b/examples/upnp/httpd.c deleted file mode 100644 index ea543d4..0000000 --- a/examples/upnp/httpd.c +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include -#include - -void httpd_task(void *pvParameters) -{ - struct netconn *client = NULL; - struct netconn *nc = netconn_new(NETCONN_TCP); - if (nc == NULL) { - printf("Failed to allocate socket\n"); - vTaskDelete(NULL); - } - netconn_bind(nc, IP_ADDR_ANY, 80); - netconn_listen(nc); - while (1) { - err_t err = netconn_accept(nc, &client); - if (err == ERR_OK) { - struct netbuf *nb; - if ((err = netconn_recv(client, &nb)) == ERR_OK) { - struct sdk_station_config config; - sdk_wifi_station_get_config(&config); - const char * buf = - "\ - \ - \ - urn:Belkin:device:controllee:1\ - hello\ - Belkin International Inc.\ - Emulated Socket\ - 3.1415\ - uuid:Socket-1_0-38323636-4558-4dda-9188-cda0e6cc3dc0\ - 221517K0101769\ - 0\ - \ - \ - urn:Belkin:service:basicevent:1\ - urn:Belkin:serviceId:basicevent1\ - /upnp/control/basicevent1\ - /upnp/event/basicevent1\ - /eventservice.xml\ - \ - \ - \ - "; - netconn_write(client, buf, strlen(buf), NETCONN_COPY); - } - netbuf_delete(nb); - } - printf("Closing connection\n"); - netconn_close(client); - netconn_delete(client); - } -} diff --git a/examples/upnp/httpd.h b/examples/upnp/httpd.h deleted file mode 100644 index 2dfdd1b..0000000 --- a/examples/upnp/httpd.h +++ /dev/null @@ -1,3 +0,0 @@ -#include - -void httpd_task(void *pvParameters); diff --git a/examples/upnp/lwipopts.h b/examples/upnp/lwipopts.h deleted file mode 100644 index 56f45f2..0000000 --- a/examples/upnp/lwipopts.h +++ /dev/null @@ -1,5 +0,0 @@ - -#define LWIP_IGMP 1 - -/* Use the defaults for everything else */ -#include_next diff --git a/examples/upnp/upnp.c b/examples/upnp/upnp.c deleted file mode 100644 index 0b85855..0000000 --- a/examples/upnp/upnp.c +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include -#include -#include -#include -#include "upnp.h" - -#define UPNP_MCAST_GRP ("239.255.255.250") -#define UPNP_MCAST_PORT (1900) - -static const char* get_my_ip(void) -{ - static char ip[16] = "0.0.0.0"; - ip[0] = 0; - struct ip_info ipinfo; - (void) sdk_wifi_get_ip_info(STATION_IF, &ipinfo); - snprintf(ip, sizeof(ip), IPSTR, IP2STR(&ipinfo.ip)); - return (char*) ip; -} - -/** - * @brief This function joins a multicast group with the specified ip/port - * @param group_ip the specified multicast group ip - * @param group_port the specified multicast port number - * @param recv the lwip UDP callback - * @retval udp_pcb* or NULL if joining failed - */ -static struct udp_pcb* mcast_join_group(const char *group_ip, uint16_t group_port, void (* recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)) -{ - bool status = false; - struct udp_pcb *upcb; - - printf("Joining mcast group %s:%d\n", group_ip, group_port); - do { - upcb = udp_new(); - if (!upcb) { - printf("Error, udp_new failed"); - break; - } - udp_bind(upcb, IP4_ADDR_ANY, group_port); - struct netif* netif = sdk_system_get_netif(STATION_IF); - if (!netif) { - printf("Error, netif is null"); - break; - } - if (!(netif->flags & NETIF_FLAG_IGMP)) { - netif->flags |= NETIF_FLAG_IGMP; - igmp_start(netif); - } - ip4_addr_t ipgroup; - ip4addr_aton(group_ip, &ipgroup); - err_t err = igmp_joingroup_netif(netif, &ipgroup); - if (ERR_OK != err) { - printf("Failed to join multicast group: %d", err); - break; - } - status = true; - } while(0); - - if (status) { - printf("Join successs\n"); - udp_recv(upcb, recv, upcb); - } else { - if (upcb) { - udp_remove(upcb); - } - upcb = NULL; - } - return upcb; -} - -static void send_udp(struct udp_pcb *upcb, const ip_addr_t *addr, u16_t port) -{ - struct pbuf *p; - char msg[500]; - snprintf(msg, sizeof(msg), - "HTTP/1.1 200 OK\r\n" - "CACHE-CONTROL: max-age=86400\r\n" - "DATE: Fri, 15 Apr 2016 04:56:29 GMT\r\n" - "EXT:\r\n" - "LOCATION: http://%s:80/setup.xml\r\n" - "OPT: \"http://schemas.upnp.org/upnp/1/0/\"; ns=01\r\n" - "01-NLS: b9200ebb-736d-4b93-bf03-835149d13983\r\n" - "SERVER: Unspecified, UPnP/1.0, Unspecified\r\n" - "ST: urn:Belkin:device:**\r\n" - "USN: uuid:Socket-1_0-38323636-4558-4dda-9188-cda0e6cc3dc0::urn:Belkin:device:**\r\n" - "X-User-Agent: redsonic\r\n\r\n", get_my_ip()); - - p = pbuf_alloc(PBUF_TRANSPORT, strlen(msg)+1, PBUF_RAM); - - if (!p) { - printf("Failed to allocate transport buffer\n"); - } else { - memcpy(p->payload, msg, strlen(msg)+1); - err_t err = udp_sendto(upcb, p, addr, port); - if (err < 0) { - printf("Error sending message: %s (%d)\n", lwip_strerr(err), err); - } else { - printf("Sent message '%s'\n", msg); - } - pbuf_free(p); - } -} - -/** - * @brief This function is called when an UDP datagrm has been received on the port UDP_PORT. - * @param arg user supplied argument (udp_pcb.recv_arg) - * @param pcb the udp_pcb which received data - * @param p the packet buffer that was received - * @param addr the remote IP address from which the packet was received - * @param port the remote port from which the packet was received - * @retval None - */ -static void receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) -{ - if (p) { - printf("Msg received port:%d len:%d\n", port, p->len); - uint8_t *buf = (uint8_t*) p->payload; - printf("Msg received port:%d len:%d\nbuf: %s\n", port, p->len, buf); - - send_udp(upcb, addr, port); - - pbuf_free(p); - } -} - -/** - * @brief Initialize the upnp server - * @retval true if init was succcessful - */ -bool upnp_server_init(void) -{ - struct udp_pcb *upcb = mcast_join_group(UPNP_MCAST_GRP, UPNP_MCAST_PORT, receive_callback); - return (upcb != NULL); -} diff --git a/examples/upnp/upnp.h b/examples/upnp/upnp.h deleted file mode 100644 index eb71f84..0000000 --- a/examples/upnp/upnp.h +++ /dev/null @@ -1,2 +0,0 @@ - -bool upnp_server_init(void); diff --git a/examples/upnp/upnp_test.c b/examples/upnp/upnp_test.c deleted file mode 100644 index b3da04c..0000000 --- a/examples/upnp/upnp_test.c +++ /dev/null @@ -1,114 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "lwipopts.h" -#include "upnp.h" -#include "httpd.h" - -/** User friendly FreeRTOS delay macro */ -#define delay_ms(ms) vTaskDelay(ms / portTICK_PERIOD_MS) - -/** Semaphore to signal wifi availability */ -static SemaphoreHandle_t wifi_alive; - -/** - * @brief This is the multicast task - * @param arg user supplied argument from xTaskCreate - * @retval None - */ -static void mcast_task(void *arg) -{ - xSemaphoreTake(wifi_alive, portMAX_DELAY); - xSemaphoreGive(wifi_alive); - - (void) upnp_server_init(); - while(1) { - delay_ms(2000); - } -} - -/** - * @brief This is the wifi connection task - * @param arg user supplied argument from xTaskCreate - * @retval None - */ -static void wifi_task(void *pvParameters) -{ - uint8_t status = 0; - uint8_t retries = 30; - struct sdk_station_config config = { - .ssid = WIFI_SSID, - .password = WIFI_PASS, - }; - - xSemaphoreTake(wifi_alive, portMAX_DELAY); - printf("WiFi: connecting to WiFi\n"); - sdk_wifi_set_opmode(STATION_MODE); - sdk_wifi_station_set_config(&config); - - while(1) { - while (status != STATION_GOT_IP && retries) { - status = sdk_wifi_station_get_connect_status(); - if(status == STATION_WRONG_PASSWORD) { - printf("WiFi: wrong password\n"); - break; - } else if(status == STATION_NO_AP_FOUND) { - printf("WiFi: AP not found\n"); - break; - } else if(status == STATION_CONNECT_FAIL) { - printf("WiFi: connection failed\n"); - break; - } - delay_ms(1000); - retries--; - } - if (status == STATION_GOT_IP) { - printf("WiFi: connected\n"); - xSemaphoreGive(wifi_alive); - taskYIELD(); - } - - while ((status = sdk_wifi_station_get_connect_status()) == STATION_GOT_IP) { - xSemaphoreGive(wifi_alive); - taskYIELD(); - } - printf("WiFi: disconnected\n"); - sdk_wifi_station_disconnect(); - delay_ms(1000); - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - vSemaphoreCreateBinary(wifi_alive); - ota_tftp_init_server(TFTP_PORT); - xTaskCreate(&wifi_task, "wifi_task", 256, NULL, 2, NULL); - delay_ms(250); - xTaskCreate(&httpd_task, "http_server", 1024, NULL, 4, NULL); - xTaskCreate(&mcast_task, "mcast_task", 1024, NULL, 4, NULL); -} diff --git a/examples/wifi_scan/Makefile b/examples/wifi_scan/Makefile deleted file mode 100644 index a9e5a71..0000000 --- a/examples/wifi_scan/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -PROGRAM = wifi_scan -#ESPBAUD = 460800 - -include ../../common.mk diff --git a/examples/wifi_scan/main.c b/examples/wifi_scan/main.c deleted file mode 100644 index a180a21..0000000 --- a/examples/wifi_scan/main.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * WiFi scan - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include -#include -#include - -static const char * const auth_modes [] = { - [AUTH_OPEN] = "Open", - [AUTH_WEP] = "WEP", - [AUTH_WPA_PSK] = "WPA/PSK", - [AUTH_WPA2_PSK] = "WPA2/PSK", - [AUTH_WPA_WPA2_PSK] = "WPA/WPA2/PSK" -}; - -static void scan_done_cb(void *arg, sdk_scan_status_t status) -{ - char ssid[33]; // max SSID length + zero byte - - if (status != SCAN_OK) - { - printf("Error: WiFi scan failed\n"); - return; - } - - struct sdk_bss_info *bss = (struct sdk_bss_info *)arg; - // first one is invalid - bss = bss->next.stqe_next; - - printf("\n----------------------------------------------------------------------------------\n"); - printf(" Wi-Fi networks\n"); - printf("----------------------------------------------------------------------------------\n"); - - while (NULL != bss) - { - size_t len = strlen((const char *)bss->ssid); - memcpy(ssid, bss->ssid, len); - ssid[len] = 0; - - printf("%32s (" MACSTR ") RSSI: %02d, security: %s\n", ssid, - MAC2STR(bss->bssid), bss->rssi, auth_modes[bss->authmode]); - - bss = bss->next.stqe_next; - } -} - -static void scan_task(void *arg) -{ - while (true) - { - sdk_wifi_station_scan(NULL, scan_done_cb); - vTaskDelay(5000 / portTICK_PERIOD_MS); - } -} - -void user_init() -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n\n", sdk_system_get_sdk_version()); - - // We can scan only in station mode - sdk_wifi_set_opmode(STATION_MODE); - - xTaskCreate(scan_task, "scan", 512, NULL, 2, NULL); -} diff --git a/examples/wificfg/.gitignore b/examples/wificfg/.gitignore deleted file mode 100644 index e067149..0000000 --- a/examples/wificfg/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!local.mk diff --git a/examples/wificfg/FreeRTOSConfig.h b/examples/wificfg/FreeRTOSConfig.h deleted file mode 100644 index baf25a4..0000000 --- a/examples/wificfg/FreeRTOSConfig.h +++ /dev/null @@ -1,7 +0,0 @@ -#define configUSE_TRACE_FACILITY 1 -#define configGENERATE_RUN_TIME_STATS 1 -#define portGET_RUN_TIME_COUNTER_VALUE() (RTC.COUNTER) -#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() {} - -/* Use the defaults for everything else */ -#include_next diff --git a/examples/wificfg/Makefile b/examples/wificfg/Makefile deleted file mode 100644 index 51b177f..0000000 --- a/examples/wificfg/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# Makefile for wificfg example -PROGRAM=wificfg -EXTRA_COMPONENTS=extras/dhcpserver extras/wificfg - -# For the mDNS responder included under extras: -# EXTRA_COMPONENTS += extras/mdnsresponder -# EXTRA_CFLAGS += -DEXTRAS_MDNS_RESPONDER - -# For the mDNS responder included with lwip: -EXTRA_CFLAGS += -DLWIP_MDNS_RESPONDER=1 -DLWIP_NUM_NETIF_CLIENT_DATA=1 -DLWIP_NETIF_EXT_STATUS_CALLBACK=1 - -# Avoid writing the wifi state to flash when using wificfg. -EXTRA_CFLAGS += -DWIFI_PARAM_SAVE=0 - -include ../../common.mk diff --git a/examples/wificfg/content/index.html b/examples/wificfg/content/index.html deleted file mode 100644 index 5512b7d..0000000 --- a/examples/wificfg/content/index.html +++ /dev/null @@ -1,18 +0,0 @@ -"" -"" -"" -"" -"", -"" -"" -"" -"" -"", -"" diff --git a/examples/wificfg/local.mk b/examples/wificfg/local.mk deleted file mode 100644 index c6c3129..0000000 --- a/examples/wificfg/local.mk +++ /dev/null @@ -1 +0,0 @@ -FLASH_SIZE ?= 32 diff --git a/examples/wificfg/wificfg.c b/examples/wificfg/wificfg.c deleted file mode 100644 index 33e70c0..0000000 --- a/examples/wificfg/wificfg.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Example Wifi configuration via an access point. - * - * Copyright (C) 2016 OurAirQuality.org - * - * Licensed under the Apache License, Version 2.0, January 2004 (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/ - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS WITH THE SOFTWARE. - * - */ - -#include -#include - -#include -#include -#include -#include -#include - -#include "lwip/sockets.h" - -#include "wificfg/wificfg.h" - -#include "sysparam.h" - -static const char http_success_header[] = "HTTP/1.1 200 \r\n" - "Content-Type: text/html; charset=utf-8\r\n" - "Cache-Control: no-store\r\n" - "Transfer-Encoding: chunked\r\n" - "Connection: close\r\n" - "\r\n"; -static const char *http_index_content[] = { -#include "content/index.html" -}; - -static int handle_index(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_success_header) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_index_content[0], buf, len) < 0) return -1; - if (wificfg_write_html_title(s, buf, len, "Home") < 0) return -1; - if (wificfg_write_string_chunk(s, http_index_content[1], buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, "
", buf, len) < 0) return -1; - - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (getpeername(s, (struct sockaddr *)&addr, &addr_len) == 0) { - if (((struct sockaddr *)&addr)->sa_family == AF_INET) { - struct sockaddr_in *sa = (struct sockaddr_in *)&addr; - if (wificfg_write_string_chunk(s, "
Peer address
", buf, len) < 0) return -1; - snprintf(buf, len, "
" IPSTR ", port %u
", - IP2STR((ip4_addr_t *)&sa->sin_addr.s_addr), ntohs(sa->sin_port)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - -#if LWIP_IPV6 - if (((struct sockaddr *)&addr)->sa_family == AF_INET6) { - struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&addr; - if (wificfg_write_string_chunk(s, "
Peer address
", buf, len) < 0) return -1; - if (inet6_ntoa_r(sa->sin6_addr, buf, len)) { - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - snprintf(buf, len, ", port %u
", ntohs(sa->sin6_port)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } -#endif - } - - if (wificfg_write_string_chunk(s, "
", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, http_index_content[2], buf, len) < 0) return -1; - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} - -static const wificfg_dispatch dispatch_list[] = { - {"/", HTTP_METHOD_GET, handle_index, false}, - {"/index.html", HTTP_METHOD_GET, handle_index, false}, - {NULL, HTTP_METHOD_ANY, NULL} -}; - -void user_init(void) -{ - uart_set_baud(0, 115200); - printf("SDK version:%s\n", sdk_system_get_sdk_version()); - - sdk_wifi_set_sleep_type(WIFI_SLEEP_MODEM); - - wificfg_init(80, dispatch_list); -} diff --git a/examples/ws2812_i2s/Makefile b/examples/ws2812_i2s/Makefile deleted file mode 100644 index e639c57..0000000 --- a/examples/ws2812_i2s/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# Makefile for the ws2812_i2s example - -PROGRAM=ws2812_i2s_example -EXTRA_COMPONENTS = extras/i2s_dma extras/ws2812_i2s - -include ../../common.mk diff --git a/examples/ws2812_i2s/ws2812_i2s_colour_loop.c b/examples/ws2812_i2s/ws2812_i2s_colour_loop.c deleted file mode 100644 index b28f83b..0000000 --- a/examples/ws2812_i2s/ws2812_i2s_colour_loop.c +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Example of ws2812_i2s library usage. - * - * This example shows light that travels in circle with fading tail. - * As ws2812_i2s library using hardware I2S the output pin is GPIO3 and - * can not be changed. - * - * This sample code is in the public domain., - */ -#include "espressif/esp_common.h" -#include "FreeRTOS.h" -#include "task.h" -#include "esp/uart.h" -#include -#include -#include - -#include "ws2812_i2s/ws2812_i2s.h" - -const uint32_t led_number = 12; -const uint32_t tail_fade_factor = 2; -const uint32_t tail_length = 8; - -static void fade_pixel(ws2812_pixel_t *pixel, uint32_t factor) -{ - pixel->red = pixel->red / factor; - pixel->green = pixel->green / factor; - pixel->blue = pixel->blue / factor; -} - -static int fix_index(int index) -{ - if (index < 0) { - return (int)led_number + index; - } else if (index >= led_number) { - return index - led_number; - } else { - return index; - } -} - -static ws2812_pixel_t next_colour() -{ - ws2812_pixel_t colour = { {0, 0, 0, 0} }; - colour.red = rand() % 256; - colour.green = rand() % 256; - colour.blue = rand() % 256; - - return colour; -} - -static void demo(void *pvParameters) -{ - ws2812_pixel_t pixels[led_number]; - int head_index = 0; - - ws2812_i2s_init(led_number, PIXEL_RGB); - - memset(pixels, 0, sizeof(ws2812_pixel_t) * led_number); - - while (1) { - pixels[head_index] = next_colour(); - for (int i = 0; i < led_number; i++) { - head_index = fix_index(head_index + 1); - pixels[head_index] = pixels[fix_index(head_index-1)]; - for (int ii = 1; ii < tail_length; ii++) { - fade_pixel(&pixels[fix_index(head_index - ii)], tail_fade_factor); - } - memset(&pixels[fix_index(head_index - tail_length)], 0, - sizeof(ws2812_pixel_t)); - - ws2812_i2s_update(pixels, PIXEL_RGB); - vTaskDelay(50 / portTICK_PERIOD_MS); - } - } -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - struct sdk_station_config config = { - .ssid = "Loading...", - .password = "morays59924_howitzer", - }; - - /* required to call wifi_set_opmode before station_set_config */ - sdk_wifi_set_opmode(STATION_MODE); - sdk_wifi_station_set_config(&config); - - xTaskCreate(&demo, "ws2812_i2s", 256, NULL, 10, NULL); -} diff --git a/examples/ws2812_rainbow/ws2812_rainbow.c b/examples/ws2812_rainbow/ws2812_rainbow.c index 1f67775..4d37acc 100644 --- a/examples/ws2812_rainbow/ws2812_rainbow.c +++ b/examples/ws2812_rainbow/ws2812_rainbow.c @@ -18,7 +18,7 @@ #include "ws2812.h" -#define delay_ms(ms) vTaskDelay((ms) / portTICK_PERIOD_MS) +#define delay_ms(ms) vTaskDelay((ms) / portTICK_RATE_MS) /** GPIO number used to control the RGBs */ @@ -148,6 +148,6 @@ void user_init(void) // notice the glitches due to NMI. printf("Starting a task. There may be glitches!\r\n"); - xTaskCreate(&demo, "strip demo", 256, NULL, 10, NULL); + xTaskCreate(&demo, (signed char *)"strip demo", 256, NULL, 10, NULL); #endif } diff --git a/extras/ad770x/ad770x.c b/extras/ad770x/ad770x.c deleted file mode 100644 index 0882d94..0000000 --- a/extras/ad770x/ad770x.c +++ /dev/null @@ -1,181 +0,0 @@ -/** - * Driver for AD7705/AD7706 SPI ADC - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "ad770x.h" - -#include -#include -#include -#include - -#define AD770X_DEBUG - -#define BUS 1 -#define INIT_TIMEOUT 500000 // 500ms - -#ifdef AD770X_DEBUG -#include -#define debug(fmt, ...) printf("%s" fmt "\n", "AD770x: ", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -#define timeout_expired(start, len) ((uint32_t)(sdk_system_get_time() - (start)) >= (len)) - -#define _BV(x) (1 << (x)) - -#define REG_COMM 0x00 // 8 bits -#define REG_SETUP 0x01 // 8 bits -#define REG_CLOCK 0x02 // 8 bits -#define REG_DATA 0x03 // 16 bits -#define REG_TEST 0x04 // 8 bits -#define REG_OFFS 0x06 // 24 bits -#define REG_GAIN 0x07 // 24 bits - -#define BIT_COMM_CH0 0 -#define BIT_COMM_CH1 1 -#define BIT_COMM_STBY 2 -#define BIT_COMM_RW 3 -#define BIT_COMM_RS0 4 -#define BIT_COMM_RS1 5 -#define BIT_COMM_RS2 6 -#define BIT_COMM_DRDY 7 - -#define MASK_COMM_CH 0x03 -#define MASK_COMM_RS 0x70 - -#define BIT_CLOCK_FS0 0 -#define BIT_CLOCK_FS1 1 -#define BIT_CLOCK_CLK 2 -#define BIT_CLOCK_CLKDIV 3 -#define BIT_CLOCK_CLKDIS 4 - -#define MASK_CLOCK_FS 0x03 -#define MASK_CLOCK_CLK 0x0c - -#define BIT_SETUP_FSYNC 0 -#define BIT_SETUP_BUF 1 -#define BIT_SETUP_BU 2 -#define BIT_SETUP_G0 3 -#define BIT_SETUP_G1 4 -#define BIT_SETUP_G2 5 -#define BIT_SETUP_MD0 6 -#define BIT_SETUP_MD1 7 - -#define MASK_SETUP_GAIN 0x38 -#define MASK_SETUP_MODE 0xc0 - -static const spi_settings_t config = { - .endianness = SPI_BIG_ENDIAN, - .msb = true, - .minimal_pins = true, - .mode = SPI_MODE3, - .freq_divider = SPI_FREQ_DIV_500K -}; - -static uint8_t write(uint8_t cs_pin, uint8_t value) -{ - spi_settings_t old; - spi_get_settings(BUS, &old); - spi_set_settings(BUS, &config); - - gpio_write(cs_pin, false); - uint8_t res = spi_transfer_8(BUS, value); - //debug("byte wr: 0x%02x", value); - gpio_write(cs_pin, true); - - spi_set_settings(BUS, &old); - return res; -} - -inline static uint8_t read_byte(uint8_t cs_pin) -{ - return write(cs_pin, 0); -} - -static uint16_t read_word(uint8_t cs_pin) -{ - spi_settings_t old; - spi_get_settings(BUS, &old); - spi_set_settings(BUS, &config); - - gpio_write(cs_pin, false); - uint16_t res = spi_transfer_16(BUS, 0); - gpio_write(cs_pin, true); - - spi_set_settings(BUS, &old); - return res; -} - -static void prepare(uint8_t channel, uint8_t reg, bool read, uint8_t cs_pin, bool standby) -{ - write(cs_pin, - (channel & MASK_COMM_CH) | - (read ? _BV(BIT_COMM_RW) : 0) | - ((reg << BIT_COMM_RS0) & MASK_COMM_RS) | - (standby ? _BV(BIT_COMM_STBY) : 0) - ); -} - -int ad770x_init(const ad770x_params_t *params, uint8_t channel) -{ - if (!spi_set_settings(BUS, &config)) - { - debug("Cannot init SPI"); - return -EIO; - } - - if ((params->master_clock >= AD770X_MCLK_2_4576MHz && params->update_rate < AD770X_RATE_50) - || (params->master_clock < AD770X_MCLK_2_4576MHz && params->update_rate > AD770X_RATE_200)) - { - debug("Invalid update rate / master clock combination"); - return -EINVAL; - } - - gpio_enable(params->cs_pin, GPIO_OUTPUT); - gpio_write(params->cs_pin, true); - - prepare(channel, REG_CLOCK, false, params->cs_pin, false); - write(params->cs_pin, - ((params->master_clock << BIT_CLOCK_CLK) & MASK_CLOCK_CLK) | - (params->update_rate & MASK_CLOCK_FS) - ); - - ad770x_set_mode(params, channel, AD770X_MODE_CALIBRATION); - - uint32_t start = sdk_system_get_time(); - while (!ad770x_data_ready(params, channel)) - if (timeout_expired(start, INIT_TIMEOUT)) - { - debug("Timeout while calibration"); - return -EIO; - } - - return 0; -} - -void ad770x_set_mode(const ad770x_params_t *params, uint8_t channel, ad770x_mode_t mode) -{ - prepare(channel, REG_SETUP, false, params->cs_pin, false); - write(params->cs_pin, - ((params->gain << BIT_SETUP_G0) & MASK_SETUP_GAIN) | - (params->bipolar ? 0 : _BV(BIT_SETUP_BU)) | - ((mode << BIT_SETUP_MD0) & MASK_SETUP_MODE) - ); -} - -bool ad770x_data_ready(const ad770x_params_t *params, uint8_t channel) -{ - prepare(channel, REG_COMM, true, params->cs_pin, false); - return !(read_byte(params->cs_pin) & _BV(BIT_COMM_DRDY)); -} - -uint16_t ad770x_raw_adc_value(const ad770x_params_t *params, uint8_t channel) -{ - prepare(channel, REG_DATA, true, params->cs_pin, false); - return read_word(params->cs_pin); -} diff --git a/extras/ad770x/ad770x.h b/extras/ad770x/ad770x.h deleted file mode 100644 index bfa2a98..0000000 --- a/extras/ad770x/ad770x.h +++ /dev/null @@ -1,118 +0,0 @@ -/** - * Driver for AD7705/AD7706 SPI ADC - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_AD770X_H_ -#define _EXTRAS_AD770X_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Input gain - */ -typedef enum -{ - AD770X_GAIN_1 = 0, - AD770X_GAIN_2, - AD770X_GAIN_4, - AD770X_GAIN_8, - AD770X_GAIN_16, - AD770X_GAIN_32, - AD770X_GAIN_64, - AD770X_GAIN_128 -} ad770x_gain_t; - -/** - * Master clock frequency - */ -typedef enum -{ - AD770X_MCLK_1MHz = 0, //!< 1 MHz - AD770X_MCLK_2MHz, //!< 2 MHz - AD770X_MCLK_2_4576MHz, //!< 2.4576 MHz - AD770X_MCLK_4_9152MHz, //!< 4.9152 MHz -} ad770x_master_clock_t; - -/** - * Output update rate - */ -typedef enum -{ - AD770X_RATE_20 = 0, //!< Output update rate is 20 Hz, -3 dB filter cutoff = 5.24 Hz, works with 1 or 2 MHz master clock - AD770X_RATE_25, //!< Output update rate is 25 Hz, -3 dB filter cutoff = 6.55 Hz, works with 1 or 2 MHz master clock - AD770X_RATE_100, //!< Output update rate is 100 Hz, -3 dB filter cutoff = 26.2 Hz, works with 1 or 2 MHz master clock - AD770X_RATE_200, //!< Output update rate is 200 Hz, -3 dB filter cutoff = 52.4 Hz, works with 1 or 2 MHz master clock - AD770X_RATE_50, //!< Output update rate is 50 Hz, -3 dB filter cutoff = 13.1 Hz, works with 2.4576 or 4.9152 MHz master clock - AD770X_RATE_60, //!< Output update rate is 60 Hz, -3 dB filter cutoff = 15.7 Hz, works with 2.4576 or 4.9152 MHz master clock - AD770X_RATE_250, //!< Output update rate is 250 Hz, -3 dB filter cutoff = 65.5 Hz, works with 2.4576 or 4.9152 MHz master clock - AD770X_RATE_500, //!< Output update rate is 500 Hz, -3 dB filter cutoff = 131 Hz, works with 2.4576 or 4.9152 MHz master clock -} ad770x_update_rate_t; - -/** - * Device mode - */ -typedef enum -{ - AD770X_MODE_NORMAL = 0, - AD770X_MODE_CALIBRATION, - AD770X_MODE_ZERO_CALIBRATION, - AD770X_MODE_FULL_CALIBRATION -} ad770x_mode_t; - -/** - * Device descriptor - */ -typedef struct -{ - uint8_t cs_pin; //!< GPIO pin for chip select - ad770x_master_clock_t master_clock; //!< Master clock frequency - bool bipolar; //!< Bipolar/Unipolar mode - ad770x_gain_t gain; //!< Input gain - ad770x_update_rate_t update_rate; //!< Output update rate -} ad770x_params_t; - -/** - * Init device and setup channel params - * @param params Device descriptor pointer - * @param channel Input channel - * @return Non-zero when error occured - */ -int ad770x_init(const ad770x_params_t *params, uint8_t channel); - -/** - * Set device mode (see datasheet) - * @param params Device descriptor pointer - * @param channel Input channel - * @param mode Device mode - */ -void ad770x_set_mode(const ad770x_params_t *params, uint8_t channel, ad770x_mode_t mode); - -/** - * Get conversion status - * @param params Device descriptor pointer - * @param channel Input channel - * @return true when data is ready - */ -bool ad770x_data_ready(const ad770x_params_t *params, uint8_t channel); - -/** - * Get converted ADC value - * @param params Device descriptor pointer - * @param channel Input channel - * @return Raw ADC value - */ -uint16_t ad770x_raw_adc_value(const ad770x_params_t *params, uint8_t channel); - -#ifdef __cplusplus -} -#endif - -#endif /* _EXTRAS_AD770X_H_ */ diff --git a/extras/ad770x/component.mk b/extras/ad770x/component.mk deleted file mode 100644 index a4d47f5..0000000 --- a/extras/ad770x/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ad770x (AD7705/AD7706 driver) - -# expected anyone using ADC driver includes it as 'ad770x/ad770x.h' -INC_DIRS += $(ad770x_ROOT).. - -# args for passing into compile rule generation -ad770x_SRC_DIR = $(ad770x_ROOT) - -$(eval $(call component_compile_rules,ad770x)) diff --git a/extras/ads111x/ads111x.c b/extras/ads111x/ads111x.c deleted file mode 100644 index 24bae20..0000000 --- a/extras/ads111x/ads111x.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Driver for ADS1113/ADS1114/ADS1115 I2C ADC - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "ads111x.h" - -#define ADS111X_DEBUG - -#ifdef ADS111X_DEBUG -#include -#define debug(fmt, ...) printf("%s" fmt "\n", "ADS111x: ", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -#define REG_CONVERSION 0 -#define REG_CONFIG 1 -#define REG_THRESH_L 2 -#define REG_THRESH_H 3 - -#define COMP_QUE_OFFSET 1 -#define COMP_QUE_MASK 0x03 -#define COMP_LAT_OFFSET 2 -#define COMP_LAT_MASK 0x01 -#define COMP_POL_OFFSET 3 -#define COMP_POL_MASK 0x01 -#define COMP_MODE_OFFSET 4 -#define COMP_MODE_MASK 0x01 -#define DR_OFFSET 5 -#define DR_MASK 0x07 -#define MODE_OFFSET 8 -#define MODE_MASK 0x01 -#define PGA_OFFSET 9 -#define PGA_MASK 0x07 -#define MUX_OFFSET 12 -#define MUX_MASK 0x07 -#define OS_OFFSET 15 -#define OS_MASK 0x01 - -const float ads111x_gain_values[] = { - [ADS111X_GAIN_6V144] = 6.144, - [ADS111X_GAIN_4V096] = 4.096, - [ADS111X_GAIN_2V048] = 2.048, - [ADS111X_GAIN_1V024] = 1.024, - [ADS111X_GAIN_0V512] = 0.512, - [ADS111X_GAIN_0V256] = 0.256, - [ADS111X_GAIN_0V256_2] = 0.256, - [ADS111X_GAIN_0V256_3] = 0.256 -}; - -static uint16_t read_reg(i2c_dev_t *dev, uint8_t reg) -{ - uint16_t res = 0; - if (i2c_slave_read(dev->bus, dev->addr, ®, (uint8_t *)&res, 2)) - debug("Could not read register %d", reg); - //debug("Read %d: 0x%04x", reg, res); - return res; -} - -static void write_reg(i2c_dev_t *dev, uint8_t reg, uint16_t val) -{ - //debug("Write %d: 0x%04x", reg, val); - uint8_t buf[2] = { val >> 8, val}; - if (i2c_slave_write(dev->bus, dev->addr, ®, buf, 2)) - debug("Could not write 0x%04x to register %d", val, reg); -} - -static uint16_t read_conf_bits(i2c_dev_t *dev, uint8_t offs, uint16_t mask) -{ - return (read_reg(dev, REG_CONFIG) >> offs) & mask; -} - -static void write_conf_bits(i2c_dev_t *dev, uint16_t val, uint8_t offs, uint16_t mask) -{ - write_reg(dev, REG_CONFIG, (read_reg(dev, REG_CONFIG) & ~(mask << offs)) | (val << offs)); -} - -bool ads111x_busy(i2c_dev_t *dev) -{ - return read_conf_bits(dev, OS_OFFSET, OS_MASK); -} - -void ads111x_start_conversion(i2c_dev_t *dev) -{ - write_conf_bits(dev, 1, OS_OFFSET, OS_MASK); -} - -int16_t ads111x_get_value(i2c_dev_t *dev) -{ - return read_reg(dev, REG_CONVERSION); -} - -int16_t ads101x_get_value(i2c_dev_t *dev) -{ - uint16_t res = read_reg(dev, REG_CONVERSION) >> 4; - if (res > 0x07FF) - { - // negative number - extend the sign to 16th bit - res |= 0xF000; - } - return (int16_t)res; -} - - -ads111x_gain_t ads111x_get_gain(i2c_dev_t *dev) -{ - return read_conf_bits(dev, PGA_OFFSET, PGA_MASK); -} - -void ads111x_set_gain(i2c_dev_t *dev, ads111x_gain_t gain) -{ - write_conf_bits(dev, gain, PGA_OFFSET, PGA_MASK); -} - -ads111x_mux_t ads111x_get_input_mux(i2c_dev_t *dev) -{ - return read_conf_bits(dev, MUX_OFFSET, MUX_MASK); -} - -void ads111x_set_input_mux(i2c_dev_t *dev, ads111x_mux_t mux) -{ - write_conf_bits(dev, mux, MUX_OFFSET, MUX_MASK); -} - -ads111x_mode_t ads111x_get_mode(i2c_dev_t *dev) -{ - return read_conf_bits(dev, MODE_OFFSET, MODE_MASK); -} - -void ads111x_set_mode(i2c_dev_t *dev, ads111x_mode_t mode) -{ - write_conf_bits(dev, mode, MODE_OFFSET, MODE_MASK); -} - -ads111x_data_rate_t ads111x_get_data_rate(i2c_dev_t *dev) -{ - return read_conf_bits(dev, DR_OFFSET, DR_MASK); -} - -void ads111x_set_data_rate(i2c_dev_t *dev, ads111x_data_rate_t rate) -{ - write_conf_bits(dev, rate, DR_OFFSET, DR_MASK); -} - -ads111x_comp_mode_t ads111x_get_comp_mode(i2c_dev_t *dev) -{ - return read_conf_bits(dev, COMP_MODE_OFFSET, COMP_MODE_MASK); -} - -void ads111x_set_comp_mode(i2c_dev_t *dev, ads111x_comp_mode_t mode) -{ - write_conf_bits(dev, mode, COMP_MODE_OFFSET, COMP_MODE_MASK); -} - -ads111x_comp_polarity_t ads111x_get_comp_polarity(i2c_dev_t *dev) -{ - return read_conf_bits(dev, COMP_POL_OFFSET, COMP_POL_MASK); -} - -void ads111x_set_comp_polarity(i2c_dev_t *dev, ads111x_comp_polarity_t polarity) -{ - write_conf_bits(dev, polarity, COMP_POL_OFFSET, COMP_POL_MASK); -} - -ads111x_comp_latch_t ads111x_get_comp_latch(i2c_dev_t *dev) -{ - return read_conf_bits(dev, COMP_LAT_OFFSET, COMP_LAT_MASK); -} - -void ads111x_set_comp_latch(i2c_dev_t *dev, ads111x_comp_latch_t latch) -{ - write_conf_bits(dev, latch, COMP_LAT_OFFSET, COMP_LAT_MASK); -} - -ads111x_comp_queue_t ads111x_get_comp_queue(i2c_dev_t *dev) -{ - return read_conf_bits(dev, COMP_QUE_OFFSET, COMP_QUE_MASK); -} - -void ads111x_set_comp_queue(i2c_dev_t *dev, ads111x_comp_queue_t queue) -{ - write_conf_bits(dev, queue, COMP_QUE_OFFSET, COMP_QUE_MASK); -} - -int16_t ads111x_get_comp_low_thresh(i2c_dev_t *dev) -{ - return read_reg(dev, REG_THRESH_L); -} - -void ads111x_set_comp_low_thresh(i2c_dev_t *dev, int16_t thresh) -{ - write_reg(dev, REG_THRESH_L, thresh); -} - -int16_t ads111x_get_comp_high_thresh(i2c_dev_t *dev) -{ - return read_reg(dev, REG_THRESH_H); -} - -void ads111x_set_comp_high_thresh(i2c_dev_t *dev, int16_t thresh) -{ - write_reg(dev, REG_THRESH_H, thresh); -} diff --git a/extras/ads111x/ads111x.h b/extras/ads111x/ads111x.h deleted file mode 100644 index 905fa31..0000000 --- a/extras/ads111x/ads111x.h +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Driver for ADS1113/ADS1114/ADS1115 I2C ADC - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_ADS111X_H_ -#define _EXTRAS_ADS111X_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define ADS111X_ADDR_GND 0x48 -#define ADS111X_ADDR_VCC 0x49 -#define ADS111X_ADDR_SDA 0x4a -#define ADS111X_ADDR_SCL 0x4b - -#define ADS111X_MAX_VALUE 0x7fff -#define ADS101X_MAX_VALUE 0x7ff - -// ADS101X overrides -#define ADS101X_DATA_RATE_128 ADS111X_DATA_RATE_8 -#define ADS101X_DATA_RATE_250 ADS111X_DATA_RATE_16 -#define ADS101X_DATA_RATE_490 ADS111X_DATA_RATE_32 -#define ADS101X_DATA_RATE_920 ADS111X_DATA_RATE_64 -#define ADS101X_DATA_RATE_1600 ADS111X_DATA_RATE_128 -#define ADS101X_DATA_RATE_2400 ADS111X_DATA_RATE_250 -#define ADS101X_DATA_RATE_3300 ADS111X_DATA_RATE_475 - -/** - * Gain amplifier - */ -typedef enum -{ - ADS111X_GAIN_6V144 = 0, //!< +-6.144V - ADS111X_GAIN_4V096, //!< +-4.096V - ADS111X_GAIN_2V048, //!< +-2.048V (default) - ADS111X_GAIN_1V024, //!< +-1.024V - ADS111X_GAIN_0V512, //!< +-0.512V - ADS111X_GAIN_0V256, //!< +-0.256V - ADS111X_GAIN_0V256_2, //!< +-0.256V (same as ADS111X_GAIN_0V256) - ADS111X_GAIN_0V256_3, //!< +-0.256V (same as ADS111X_GAIN_0V256) -} ads111x_gain_t; - -/** - * Gain values - */ -extern const float ads111x_gain_values[]; - -/** - * Input multiplexer configuration (ADS1115 only) - */ -typedef enum -{ - ADS111X_MUX_0_1 = 0, //!< positive = AIN0, negative = AIN1 (default) - ADS111X_MUX_0_3, //!< positive = AIN0, negative = AIN3 - ADS111X_MUX_1_3, //!< positive = AIN1, negative = AIN3 - ADS111X_MUX_2_3, //!< positive = AIN2, negative = AIN3 - ADS111X_MUX_0_GND, //!< positive = AIN0, negative = GND - ADS111X_MUX_1_GND, //!< positive = AIN1, negative = GND - ADS111X_MUX_2_GND, //!< positive = AIN2, negative = GND - ADS111X_MUX_3_GND, //!< positive = AIN3, negative = GND -} ads111x_mux_t; - -/** - * Data rate - */ -typedef enum -{ - ADS111X_DATA_RATE_8 = 0, //!< 8 samples per second - ADS111X_DATA_RATE_16, //!< 16 samples per second - ADS111X_DATA_RATE_32, //!< 32 samples per second - ADS111X_DATA_RATE_64, //!< 64 samples per second - ADS111X_DATA_RATE_128, //!< 128 samples per second (default) - ADS111X_DATA_RATE_250, //!< 250 samples per second - ADS111X_DATA_RATE_475, //!< 475 samples per second - ADS111X_DATA_RATE_860 //!< 860 samples per second -} ads111x_data_rate_t; - -/** - * Operational mode - */ -typedef enum -{ - ADS111X_MODE_CONTUNOUS = 0, //!< Continuous conversion mode - ADS111X_MODE_SINGLE_SHOT //!< Power-down single-shot mode (default) -} ads111x_mode_t; - -/** - * Comparator mode (ADS1114 and ADS1115 only) - */ -typedef enum -{ - ADS111X_COMP_MODE_NORMAL = 0, //!< Traditional comparator with hysteresis (default) - ADS111X_COMP_MODE_WINDOW //!< Window comparator -} ads111x_comp_mode_t; - -/** - * Comparator polarity (ADS1114 and ADS1115 only) - */ -typedef enum -{ - ADS111X_COMP_POLARITY_LOW = 0, //!< Active low (default) - ADS111X_COMP_POLARITY_HIGH //!< Active high -} ads111x_comp_polarity_t; - -/** - * Comparator latch (ADS1114 and ADS1115 only) - */ -typedef enum -{ - ADS111X_COMP_LATCH_DISABLED = 0, //!< Non-latching comparator (default) - ADS111X_COMP_LATCH_ENABLED //!< Latching comparator -} ads111x_comp_latch_t; - -/** - * Comparator queue - */ -typedef enum -{ - ADS111X_COMP_QUEUE_1 = 0, //!< Assert ALERT/RDY pin after one conversion - ADS111X_COMP_QUEUE_2, //!< Assert ALERT/RDY pin after two conversions - ADS111X_COMP_QUEUE_4, //!< Assert ALERT/RDY pin after four conversions - ADS111X_COMP_QUEUE_DISABLED //!< Disable comparator (default) -} ads111x_comp_queue_t; - -/** - * Get device operational status - * @param addr Deivce address - * @return true when device performing conversion - */ -bool ads111x_busy(i2c_dev_t *dev); - -/** - * Begin a single conversion (when in single-shot mode) - * @param addr Deivce address - */ -void ads111x_start_conversion(i2c_dev_t *dev); - -/** - * Read last conversion result - * @param addr - * @return Last conversion result - */ -int16_t ads111x_get_value(i2c_dev_t *dev); - -/** - * Read last conversion result for 101x - * @param addr - * @return Last conversion result - */ -int16_t ads101x_get_value(i2c_dev_t *dev); - -/** - * Read the programmable gain amplifier configuration - * (ADS1114 and ADS1115 only). - * @param addr Deivce address - * @return Gain value - */ -ads111x_gain_t ads111x_get_gain(i2c_dev_t *dev); - -/** - * Configure the programmable gain amplifier (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @param gain Gain value - */ -void ads111x_set_gain(i2c_dev_t *dev, ads111x_gain_t gain); - -/** - * Read the input multiplexer configuration (ADS1115 only) - * @param addr Deivce address - * @return Input multiplexer configuration - */ -ads111x_mux_t ads111x_get_input_mux(i2c_dev_t *dev); - -/** - * Configure the input multiplexer configuration (ADS1115 only) - * @param addr Deivce address - * @param mux Input multiplexer configuration - */ -void ads111x_set_input_mux(i2c_dev_t *dev, ads111x_mux_t mux); - -/** - * Read the device operating mode - * @param addr Deivce address - * @return Device operating mode - */ -ads111x_mode_t ads111x_get_mode(i2c_dev_t *dev); - -/** - * Set the device operating mode - * @param addr Deivce address - * @param mode Device operating mode - */ -void ads111x_set_mode(i2c_dev_t *dev, ads111x_mode_t mode); - -/** - * Read the data rate - * @param addr Deivce address - * @return Data rate - */ -ads111x_data_rate_t ads111x_get_data_rate(i2c_dev_t *dev); - -/** - * Configure the data rate - * @param addr Deivce address - * @param rate Data rate - */ -void ads111x_set_data_rate(i2c_dev_t *dev, ads111x_data_rate_t rate); - -/** - * Get comparator mode (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @return Comparator mode - */ -ads111x_comp_mode_t ads111x_get_comp_mode(i2c_dev_t *dev); - -/** - * Set comparator mode (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @param mode Comparator mode - */ -void ads111x_set_comp_mode(i2c_dev_t *dev, ads111x_comp_mode_t mode); - -/** - * Get polarity of the comparator output pin ALERT/RDY - * (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @return Comparator output pin polarity - */ -ads111x_comp_polarity_t ads111x_get_comp_polarity(i2c_dev_t *dev); - -/** - * Set polarity of the comparator output pin ALERT/RDY - * (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @param polarity Comparator output pin polarity - */ -void ads111x_set_comp_polarity(i2c_dev_t *dev, ads111x_comp_polarity_t polarity); - -/** - * Get comparator output latch mode, see datasheet. - * (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @return Comparator output latch mode - */ -ads111x_comp_latch_t ads111x_get_comp_latch(i2c_dev_t *dev); - -/** - * Set comparator output latch mode (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @param latch Comparator output latch mode - */ -void ads111x_set_comp_latch(i2c_dev_t *dev, ads111x_comp_latch_t latch); - -/** - * Set number of the comparator conversions before pin ALERT/RDY - * assertion, or disable comparator (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @return Number of the comparator conversions - */ -ads111x_comp_queue_t ads111x_get_comp_queue(i2c_dev_t *dev); - -/** - * Get number of the comparator conversions before pin ALERT/RDY - * assertion (ADS1114 and ADS1115 only) - * @param addr Deivce address - * @param queue Number of the comparator conversions - */ -void ads111x_set_comp_queue(i2c_dev_t *dev, ads111x_comp_queue_t queue); - -/** - * Get the lower threshold value used by comparator - * @param addr Deivce address - * @return Lower threshold value - */ -int16_t ads111x_get_comp_low_thresh(i2c_dev_t *dev); - -/** - * Set the lower threshold value used by comparator - * @param addr Deivce address - * @param thresh Lower threshold value - */ -void ads111x_set_comp_low_thresh(i2c_dev_t *dev, int16_t thresh); - -/** - * Get the upper threshold value used by comparator - * @param addr Deivce address - * @return Upper threshold value - */ -int16_t ads111x_get_comp_high_thresh(i2c_dev_t *dev); - -/** - * Set the upper threshold value used by comparator - * @param addr Deivce address - * @param thresh Upper threshold value - */ -void ads111x_set_comp_high_thresh(i2c_dev_t *dev, int16_t thresh); - -#ifdef __cplusplus -} -#endif - -#endif /* _EXTRAS_ADS111X_H_ */ diff --git a/extras/ads111x/component.mk b/extras/ads111x/component.mk deleted file mode 100644 index 5ae835c..0000000 --- a/extras/ads111x/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ads111x - -# expected anyone using ADC driver includes it as 'ads111x/ads111x.h' -INC_DIRS += $(ads111x_ROOT).. - -# args for passing into compile rule generation -ads111x_SRC_DIR = $(ads111x_ROOT) - -$(eval $(call component_compile_rules,ads111x)) diff --git a/extras/bearssl/BearSSL b/extras/bearssl/BearSSL deleted file mode 160000 index 2b73849..0000000 --- a/extras/bearssl/BearSSL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2b738493bd16d57fdb12d38d03631981370259be diff --git a/extras/bearssl/component.mk b/extras/bearssl/component.mk deleted file mode 100644 index 4e99cb6..0000000 --- a/extras/bearssl/component.mk +++ /dev/null @@ -1,14 +0,0 @@ -# Component makefile for BearSSL - -BEARSSL_DIR = $(bearssl_ROOT)BearSSL/ -INC_DIRS += $(BEARSSL_DIR)inc - -# args for passing into compile rule generation -bearssl_INC_DIR = $(BEARSSL_DIR)inc $(BEARSSL_DIR)src -bearssl_SRC_DIR = $(BEARSSL_DIR)src $(sort $(dir $(wildcard $(BEARSSL_DIR)src/*/))) - -$(eval $(call component_compile_rules,bearssl)) - -# Helpful error if git submodule not initialised -$(BEARSSL_DIR): - $(error "bearssl git submodule not installed. Please run 'git submodule update --init'") diff --git a/extras/bh1750/bh1750.c b/extras/bh1750/bh1750.c deleted file mode 100644 index 51860d0..0000000 --- a/extras/bh1750/bh1750.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Driver for BH1750 light sensor - * - * Part of esp-open-rtos - * Copyright (C) 2017 Andrej Krutak - * BSD Licensed as described in the file LICENSE - */ -#include "bh1750.h" -#include - -void bh1750_configure(i2c_dev_t *dev, uint8_t mode) -{ - i2c_slave_write(dev->bus, dev->addr, NULL, &mode, 1); -} - -uint16_t bh1750_read(i2c_dev_t *dev) -{ - uint8_t buf[2]; - uint16_t level; - - i2c_slave_read(dev->bus, dev->addr, NULL, buf, 2); - - level = buf[0] << 8 | buf[1]; - level = (level * 10) / 12; // convert to LUX - - return level; -} diff --git a/extras/bh1750/bh1750.h b/extras/bh1750/bh1750.h deleted file mode 100644 index a6bcae6..0000000 --- a/extras/bh1750/bh1750.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Driver for BH1750 light sensor - * - * Part of esp-open-rtos - * Copyright (C) 2017 Andrej Krutak - * BSD Licensed as described in the file LICENSE - * - * ROHM Semiconductor bh1750fvi-e.pdf - */ -#ifndef EXTRAS_BH1750_H_ -#define EXTRAS_BH1750_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Possible chip addresses */ -#define BH1750_ADDR_LO 0x23 // ADDR pin floating/low -#define BH1750_ADDR_HI 0x5c - - -/* Configuration options */ - -// No active state -#define BH1750_POWER_DOWN 0x00 - -// Wating for measurement command -#define BH1750_POWER_ON 0x01 - -// Reset data register value - not accepted in POWER_DOWN mode -#define BH1750_RESET 0x07 - - -/* Measurement modes */ - -#define BH1750_CONTINUOUS_MODE 0x10 -#define BH1750_ONE_TIME_MODE 0x20 - -// Start measurement at 1 lx resolution (measurement time typically 120ms) -#define BH1750_HIGH_RES_MODE 0x00 -// Start measurement at 0.5 lx resolution (measurement time typically 120ms) -#define BH1750_HIGH_RES_MODE2 0x01 -// Start measurement at 4 lx resolution (measurement time typically 16ms) -#define BH1750_LOW_RES_MODE 0x03 - -/* Adjust measurement time to account for optical window size (see datasheet). - * Procedure from datasheet suggests order Hi, Low and finally measurement mode - */ -#define BH1750_MEASURE_TIME_HI(mt) (0x40 | (((mt) >> 5) & 0x7)) -#define BH1750_MEASURE_TIME_LO(mt) (0x60 | ((mt) & 0x1f)) -#define BH1750_DEFAULT_MEASURE_TIME 0x45 - - -/** - * Configure the device. - * @param addr Device address - * @param mode Combination of BH1750_* flags - * - * May be called multiple times e.g. to configure the measurement time and - * the readout mode afterwards - or if one time mode is used consecutively. - * - * Example: BH1750_ADDR_LO, BH1750_CONTINUOUS_MODE | BH1750_HIGH_RES_MODE - */ -void bh1750_configure(i2c_dev_t *dev, uint8_t mode); - -/** - * Read LUX value from the device. - * - * @param addr Device address - * @returns read value in lux units - */ -uint16_t bh1750_read(i2c_dev_t *dev); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_BH1750_H_ */ diff --git a/extras/bh1750/component.mk b/extras/bh1750/component.mk deleted file mode 100644 index 0a57b31..0000000 --- a/extras/bh1750/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/bh1750 - -# expected anyone using RTC driver includes it as 'bh1750/bh1750.h' -INC_DIRS += $(bh1750_ROOT).. - -# args for passing into compile rule generation -bh1750_SRC_DIR = $(bh1750_ROOT) - -$(eval $(call component_compile_rules,bh1750)) diff --git a/extras/bme680/README.md b/extras/bme680/README.md deleted file mode 100644 index 56eab72..0000000 --- a/extras/bme680/README.md +++ /dev/null @@ -1,604 +0,0 @@ -# Driver for **BME680** digital **environmental sensor** - -The driver supports multiple BME680 sensors which are either connected to the SPI or to the same or different I2C interfaces with different addresses. - -It is for the usage with the ESP8266 and [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos). -The driver is also working with ESP32 and [ESP-IDF](https://github.com/espressif/esp-idf.git) using a wrapper component for ESP8266 functions, see folder ```components/esp8266_wrapper```, as well as Linux based systems using a wrapper library. - -## About the sensor - -BME680 is an ultra-low-power environmental sensor that integrates temperature, pressure, humidity and gas sensors in only one unit. - -## Communication interfaces - -The BME680 sensor can be connected using I2C or SPI. - -The I2C interface supports data rates up to 3.4 Mbps. It is possible to connect multiple BME680 sensors with different I2C slave addresses to the same I2C bus or to different I2C buses. Possible I2C slave addresses are 0x76 and 0x77. - -The SPI interface allows clock rates up to 10 MHz and the SPI modes '00' (CPOL=CPHA=0) and '11' (CPOL=CPHA=1). - -Interface selection is done automatically by the sensor using the SPI CS signal. As long as the CS signal keeps high after power-on reset, the I2C interface is used. Once the CS signal has been pulled down, SPI interface is used until next power-on reset. - -## Measurement process - -Once the BME680 has been initialized, it can be used for measurements. The BME680 operates in two different modes, the **sleep mode** and the **forced mode**. - -The sensor starts after power-up automatically in the *sleep mode* where it does not perform any measurement and consumes only 0.15 μA. Measurements are only done in *forced mode*. - -**Please note:** There are two further undocumented modes, the *parallel* and the *sequential* mode. They can't be supported by the driver, since it is not clear what they do and how to use them. - -#### Measurement cylce - -To perform measurements, the BME680 sensor has to be triggered to switch to the **forced mode**. In this mode, it performs exactly one measurement of temperature, pressure, humidity, and gas in that order, the so-called **TPHG measurement cycle**. After the execution of this TPHG measurement cycle, **raw sensor data** become available and the sensor returns automatically back to sleep mode. - -Each of the individual measurements can be configured or skipped separately via the sensor settings, see section **Measurement settings**. Dependent on the configuration, the **duration of a TPHG measurement cycle** can vary from some milliseconds up to about 4.5 seconds, especially if gas measurement is enabled. - -To avoid the blocking of the user task during measurements, the measurement process is therefore separated into the following steps: - -1. Trigger the sensor with function ```bme680_force_measurement``` to switch to *forced mode* in which it performs exactly one THPG measurement cycle. - -2. Wait the measurement duration using function ```vTaskDelay``` and the value returned from function ```bme680_get_measurement_duration``` or wait as long as function ```bme680_is_measuring``` returns true. - -3. Fetch the results as fixed point values with function ```bme680_get_results_fixed``` or as floating point values with function ```bme680_get_results_float```. - -``` -... -// as long as sensor configuration isn't changed, the duration can be considered as constant -uint32_t duration = bme680_get_measurement_duration(sensor); -... -if (bme680_force_measurement (sensor)) // STEP 1 -{ - // STEP 2: passive waiting until measurement results are available - vTaskDelay (duration); - - // STEP 3: get the results and do something with them - if (bme680_get_results_float (sensor, &values)) - ... -} -... -``` -Alternatively, busy waiting can be realized using function ```bme680_is_measuring```. -``` -... -if (bme680_force_measurement (sensor)) // STEP 1 -{ - // STEP 2: busy waiting until measurement results are available - while (bme680_is_measuring (sensor)) ; - - // STEP 3: get the results and do something with them - if (bme680_get_results_float (sensor, &values)) - ... -} -... -``` - -For convenience, it is also possible to use the high-level functions ```bme680_measure_float``` or ```bme680_measure_fixed```. These functions combine all 3 steps above within a single function and are therefore very easy to use. **Please note** that these functions must not be used when they are called from a software timer callback function since the calling task is delayed using function *vTaskDelay*. - -``` -... -// ONE STEP: measure, wait, get the results and do something with them -if (bme680_measure_float (sensor, &values)) - ... -... -``` - -#### Measurement results - -Once the sensor has finished the measurement raw data are available at the sensor. Either function ```bme680_get_results_fixed``` or function ```bme680_get_results_float``` can be used to fetch the results. Both functions read raw data from the sensor and converts them into utilizable fixed point or floating point sensor values. - -**Please note:** Conversion of raw sensor data into the final sensor values is based on very complex calculations that use a large number of calibration parameters. Therefore, the driver does not provide functions that only return the raw sensor data. - -Dependent on sensor value representation, measurement results contain different dimensions: - -| Value | Fixed Point | Floating Point | Conversion -| ----------- | ------------- | -------- |----------- -| temperature | 1/100 °C | °C | float = fixed / 100 -| pressure | Pascal | hPascal | float = fixed / 100 -| humidity | 1/1000 % | % | float = fixed / 1000 -| gas_resistance | Ohm | Ohm | float = fixed - -The gas resistance value in Ohm represents the resistance of sensor's gas sensitive layer. - -If the TPHG measurement cycle or fetching the results fails, invalid sensor values are returned: - -| Invalid Value | Fixed Point | Floating Point | -| ----------- | ------------- | -------- | -| temperature | INT16_MIN | -327.68 | -| pressure | 0 | 0.0 | -| humidity | 0 | 0.0 | -| gas_resistance | 0 | 0.0 | - - -## Measurement settings - -The sensor allows to change a lot of measurement parameters. - -#### Oversampling rates - -To increase the resolution of raw sensor data, the sensor supports oversampling for temperature, pressure, and humidity measurements. Using function ```bme680_set_oversampling_rates```, individual **oversampling rates** can be defined for these measurements. With an oversampling rate *osr*, the resolution of the according raw sensor data can be increased from 16 bit to 16+ld(*osr*) bit. - -Possible oversampling rates are 1x (default by the driver) 2x, 4x, 8x and 16x. It is also possible to define an oversampling rate of 0. This **deactivates** the corresponding measurement and the output values become invalid. - -``` -... -// Changes the oversampling rate for temperature to 4x and for pressure to 2x. Humidity measurement is skipped. -bme680_set_oversampling_rates(sensor, osr_4x, osr_2x, osr_none); -... -``` - -#### IIR Filter - -The sensor also integrates an internal IIR filter (low pass filter) to reduce short-term changes in sensor output values caused by external disturbances. It effectively reduces the bandwidth of the sensor output values. - -The filter can optionally be used for pressure and temperature data that are subject to many short-term changes. With the IIR filter the resolution of pressure and temperature data increases to 20 bit. Humidity and gas inside the sensor does not fluctuate rapidly and does not require such a low pass filtering. - -Using function ```bme680_set_filter_size```, the user task can change the **size of the filter**. The default size is 3. If the size of the filter becomes 0, the filter is **not used**. - -``` -... -// Change the IIR filter size for temperature and pressure to 7. -bme680_set_filter_size(sensor, iir_size_7); -... -// Don't use IIR filter -bme680_set_filter_size(sensor, iir_size_0); -... -``` - -#### Heater profile - -For the gas measurement, the sensor integrates a heater. Parameters for this heater are defined by **heater profiles**. The sensor supports up to 10 such heater profiles, which are numbered from 0 to 9. Each profile consists of a temperature set-point (the target temperature) and a heating duration. By default, only the heater profile 0 with 320 degree Celsius as target temperature and 150 ms heating duration is defined. - -**Please note:** According to the data sheet, target temperatures between 200 and 400 degrees Celsius are typical and about 20 to 30 ms are necessary for the heater to reach the desired target temperature. - -Function ```bme680_set_heater_profile``` can be used to set the parameters for one of the heater profiles 0 ... 9. Once the parameters of a heater profile are defined, the gas measurement can be activated with that heater profile using function ```bme680_use_heater_profile```. If -1 or ```BME680_HEATER_NOT_USED``` is used as heater profile, gas measurement is deactivated completely. - -``` -... -// Change the heater profile 1 to 300 degree Celsius for 100 ms and activate it -bme680_set_heater_profile (sensor, 1, 300, 100); -bme680_use_heater_profile (sensor, 1); -... -// Deactivate gas measurement completely -bme680_use_heater_profile (sensor, BME680_HEATER_NOT_USED); -... - -``` - -If several heater profiles have been defined with function ```bme680_set_heater_profile```, a sequence of gas measurements with different heater parameters can be realized by a sequence of activations of different heater profiles for successive TPHG measurements using function ```bme680_use_heater_profile```. - -For example, if there were 5 heater profiles defined with following code during the setup -``` -bme680_set_heater_profile (sensor, 0, 200, 100); -bme680_set_heater_profile (sensor, 1, 250, 120); -bme680_set_heater_profile (sensor, 2, 300, 140); -bme680_set_heater_profile (sensor, 3, 350, 160); -bme680_set_heater_profile (sensor, 4, 400, 180); -``` - -the user task could use them as a sequence like following: - -``` -... -while (1) -{ - switch (count++ % 5) - { - case 0: bme680_use_heater_profile (sensor, 0); break; - case 1: bme680_use_heater_profile (sensor, 1); break; - case 2: bme680_use_heater_profile (sensor, 2); break; - case 3: bme680_use_heater_profile (sensor, 3); break; - case 4: bme680_use_heater_profile (sensor, 4); break; - } - - // measurement duration changes in each cycle - uint32_t duration = bme680_get_measurement_duration(sensor); - - // trigger the sensor to start one TPHG measurement cycle - if (bme680_force_measurement (sensor)) - { - vTaskDelay (duration); - - // get the results and do something with them - if (bme680_get_results_float (sensor, &values)) - ... - } - ... -} -... -``` - -#### Ambient temperature - -The heater resistance calculation algorithm takes into account the ambient temperature of the sensor. Using function ```bme680_set_ambient_temperature```, the ambient temperature either determined from the sensor itself or from another temperature sensor can be set. - -``` -... -bme680_set_ambient_temperature (sensor, ambient); -... -``` - -## Error Handling - -Most driver functions return a simple boolean value to indicate whether its execution was successful or an error happened. In the latter case, the member ```error_code``` of the sensor device data structure is set which indicates what error happened. - -There are two different error levels that are ORed into one single *error_code*, errors in the I2C or SPI communication and errors of the BME680 sensor itself. To test for a certain error, first you can AND the *error_code* with one of the error masks, ```BME680_INT_ERROR_MASK``` for I2C or SPI errors and ```BME680_DRV_ERROR_MASK``` for other errors. Then you can test the result for a certain error code. - -For example, error handling for ```bme680_get_results_float``` could look like: - -``` -if (bme680_get_results_float (sensor, &values)) -{ - // no error happened - ... -} -else -{ - // error happened - - switch (sensor->error_code & BME680_INT_ERROR_MASK) - { - case BME680_I2C_BUSY: ... - case BME680_I2C_READ_FAILED: ... - ... - } - switch (sensor->error_code & BME680_DRV_ERROR_MASK) - { - case BME680_MEAS_STILL_RUNNING: ... - case BME680_NO_NEW_DATA: ... - ... - } -} -``` - -## Usage - -First, the hardware configuration has to be established. This can differ dependent on the communication interface and the number of sensors used. - -### Hardware configurations - -The driver supports multiple BME680 sensors at the same time that are connected either to I2C or SPI. Following figures show some possible hardware configurations. - -First figure shows the configuration with only one sensor at I2C bus 0. - -``` - +------------------+ +----------+ - | ESP8266 / ESP32 | | BME680 | - | | | | - | GPIO 14 (SCL) ----> SCL | - | GPIO 13 (SDA) <---> SDA | - +------------------+ +----------+ -``` - -Next figure shows the configuration with only one sensor at SPI bus. - -``` - +------------------+ +----------+ +-----------------+ +----------+ - | ESP8266 / ESP32 | | BME680 | | ESP32 | | BME680 | - | | | | | | | | - | GPIO 14 (SCK) ----> SCK | | GPIO 16 (SCK) ----> SCK | - | GPIO 13 (MOSI) ----> SDI | | GPIO 17 (MOSI)----> SDI | - | GPIO 12 (MISO) <---- SDO | | GPIO 18 (MISO)<---- SDO | - | GPIO 2 (CS) ----> CS | | GPIO 19 (CS) ----> CS | - +------------------+ +---------+ +-----------------+ +----------+ -``` - -**Please note:** - -1. Since the system flash memory is connected to SPI bus 0, the sensor has to be connected to SPI bus 1. - -2. GPIO15 which is used as CS signal of SPI bus 1 on ESP8266 does not work correctly together with the BME680. Therefore, the user has to specify another GPIO pin as CS signal, e.g., GPIO2. -Next figure shows a possible configuration with two I2C buses. In that case, the sensors can have same or different I2C slave addresses. - -``` - +------------------+ +----------+ - | ESP8266 / ESP32 | | BME680_1 | - | | | | - | GPIO 14 (SCL) ----> SCL | - | GPIO 13 (SDA) <---> SDA | - | | +----------+ - | | | BME680_2 | - | | | | - | GPIO 5 (SCL) ----> SCL | - | GPIO 4 (SDA) <---> SDA | - +------------------+ +----------+ -``` - -Last figure shows a possible configuration using I2C bus 0 and SPI bus 1 at the same time. -``` - +------------------+ +----------+ +------------------+ +----------+ - | ESP8266 | | BME680_1 | | ESP8266 | | BME680_1 | - | | | | | | | | - | GPIO 5 (SCL) ----> SCL | | GPIO 5 (SCL) ----> SCL | - | GPIO 4 (SDA) <---> SDA | | GPIO 4 (SDA) <---> SDA | - | | +----------+ | | +----------+ - | | | BME680_2 | | | | BME680_2 | - | GPIO 14 (SCK) ----> SCK | | GPIO 16 (SCK) ----> SCK | - | GPIO 13 (MOSI) ----> SDI | | GPIO 17 (MOSI) ----> SDI | - | GPIO 12 (MISO) <---- SDO | | GPIO 18 (MISO) <---- SDO | - | GPIO 2 (CS) ----> CS | | GPIO 19 (CS) ----> CS | - +------------------+ +---------+ +------------------+ +----------+ -``` - -Further configurations are possible, e.g., two sensors that are connected at the same I2C bus with different slave addresses. - -### Communication interface settings - -Dependent on the hardware configuration, the communication interface settings have to be defined. - -``` -// define SPI interface for BME680 sensors -#define SPI_BUS 1 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used -#else - -// define I2C interface for BME680 sensors -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#endif - -``` - -### Main programm - -If I2C interfaces are used, they have to be initialized first. - -``` -i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K)) -``` - -SPI interface has not to be initialized explicitly. - -Once the I2C interfaces are initialized, function ```bme680_init_sensor``` has to be called for each BME680 sensor in order to initialize the sensor and to check its availability as well as its error state. This function returns a pointer to a sensor device data structure or NULL in case of error. - -The parameter *bus* specifies the ID of the I2C or SPI bus to which the sensor is connected. - -``` -static bme680_sensor_t* sensor; -``` - -For sensors connected to an I2C interface, a valid I2C slave address has to be defined as parameter *addr*. In that case parameter *cs* is ignored. - -``` -sensor = bme680_init_sensor (I2C_BUS, BME680_I2C_ADDRESS_2, 0); - -``` - -If parameter *addr* is 0, the sensor is connected to a SPI bus. In that case, parameter *cs* defines the GPIO used as CS signal. - -``` -sensor = bme680_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - -``` - -The remaining part of the program is independent on the communication interface. - -Optionally, you could wish to set some measurement parameters. For details see the section **Measurement settings** above, the header file of the driver ```bme680.h```, and of course the data sheet of the sensor. - -``` -if (sensor) -{ - /** -- SENSOR CONFIGURATION PART (optional) --- */ - - // Changes the oversampling rates to 4x oversampling for temperature - // and 2x oversampling for humidity. Pressure measurement is skipped. - bme680_set_oversampling_rates(sensor, osr_4x, osr_none, osr_2x); - - // Change the IIR filter size for temperature and pressure to 7. - bme680_set_filter_size(sensor, iir_size_7); - - // Change the heater profile 0 to 200 degree Celsius for 100 ms. - bme680_set_heater_profile (sensor, 0, 200, 100); - bme680_use_heater_profile (sensor, 0); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - // Create a task that uses the sensor - xTaskCreate(user_task, "user_task", TASK_STACK_DEPTH, NULL, 2, NULL); - - ... -} -``` - -Finally, a user task that uses the sensor has to be created. - -**Please note:** To avoid concurrency situations when driver functions are used to access the sensor, for example to read data, the user task must not be created until the sensor configuration is completed. - - -### User task - -BME680 supports only the *forced mode* that performs exactly one measurement. Therefore, the measurement has to be triggered in each cycle. The waiting for measurement results is also required in each cycle, before the results can be fetched. - -Thus the user task could look like the following: - - -``` -void user_task(void *pvParameters) -{ - bme680_values_float_t values; - - TickType_t last_wakeup = xTaskGetTickCount(); - - // as long as sensor configuration isn't changed, duration is constant - uint32_t duration = bme680_get_measurement_duration(sensor); - - while (1) - { - // trigger the sensor to start one TPHG measurement cycle - bme680_force_measurement (sensor); - - // passive waiting until measurement results are available - vTaskDelay (duration); - - // alternatively: busy waiting until measurement results are available - // while (bme680_is_measuring (sensor)) ; - - // get the results and do something with them - if (bme680_get_results_float (sensor, &values)) - printf("%.3f BME680 Sensor: %.2f °C, %.2f %%, %.2f hPa, %.2f Ohm\n", - (double)sdk_system_get_time()*1e-3, - values.temperature, values.humidity, - values.pressure, values.gas_resistance); - - // passive waiting until 1 second is over - vTaskDelayUntil(&last_wakeup, 1000 / portTICK_PERIOD_MS); - } -} -``` - -Function ```bme680_force_measurement``` is called inside the task loop to perform exactly one measurement in each cycle. - -The task is then delayed using function ```vTaskDelay``` and the value returned from function ```bme680_get_measurement_duration``` or as long as function ```bme680_is_measuring``` returns true. - -Since the measurement duration only depends on the current sensor configuration, it changes only when sensor configuration is changed. Therefore, it can be considered as constant as long as the sensor configuration isn't changed and can be determined with function ```bme680_get_measurement_duration``` outside the task loop. If the sensor configuration changes, the function has to be executed again. - -Once the measurement results are available, they can be fetched as fixed point oder floating point sensor values using function ```bme680_get_results_float``` and ```bme680_get_results_fixed```, respectively. - -## Full Example - -``` -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED - -/* -- includes ----------------------------------------------------- */ - -#include "bme680.h" - -/* -- platform dependent definitions ------------------------------- */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -/* -- user tasks --------------------------------------------------- */ - -static bme680_sensor_t* sensor = 0; - -/* - * User task that triggers measurements of sensor every seconds. It uses - * function *vTaskDelay* to wait for measurement results. Busy wating - * alternative is shown in comments - */ -void user_task(void *pvParameters) -{ - bme680_values_float_t values; - - TickType_t last_wakeup = xTaskGetTickCount(); - - // as long as sensor configuration isn't changed, duration is constant - uint32_t duration = bme680_get_measurement_duration(sensor); - - while (1) - { - // trigger the sensor to start one TPHG measurement cycle - if (bme680_force_measurement (sensor)) - { - // passive waiting until measurement results are available - vTaskDelay (duration); - - // alternatively: busy waiting until measurement results are available - // while (bme680_is_measuring (sensor)) ; - - // get the results and do something with them - if (bme680_get_results_float (sensor, &values)) - printf("%.3f BME680 Sensor: %.2f °C, %.2f %%, %.2f hPa, %.2f Ohm\n", - (double)sdk_system_get_time()*1e-3, - values.temperature, values.humidity, - values.pressure, values.gas_resistance); - } - // passive waiting until 1 second is over - vTaskDelayUntil(&last_wakeup, 1000 / portTICK_PERIOD_MS); - } -} - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = bme680_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else // I2C - - // Init all I2C bus interfaces at which BME680 sensors are connected - i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address BME680_I2C_ADDRESS_2 connected to I2C_BUS. - sensor = bme680_init_sensor (I2C_BUS, BME680_I2C_ADDRESS_2, 0); - - #endif // SPI_USED - - if (sensor) - { - /** -- SENSOR CONFIGURATION PART (optional) --- */ - - // Changes the oversampling rates to 4x oversampling for temperature - // and 2x oversampling for humidity. Pressure measurement is skipped. - bme680_set_oversampling_rates(sensor, osr_4x, osr_none, osr_2x); - - // Change the IIR filter size for temperature and pressure to 7. - bme680_set_filter_size(sensor, iir_size_7); - - // Change the heater profile 0 to 200 degree Celcius for 100 ms. - bme680_set_heater_profile (sensor, 0, 200, 100); - bme680_use_heater_profile (sensor, 0); - - // Set ambient temperature to 10 degree Celsius - bme680_set_ambient_temperature (sensor, 10); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - // Create a task that uses the sensor - xTaskCreate(user_task, "user_task", TASK_STACK_DEPTH, NULL, 2, NULL); - } - else - printf("Could not initialize BME680 sensor\n"); -} -``` - diff --git a/extras/bme680/bme680.c b/extras/bme680/bme680.c deleted file mode 100644 index 0255d94..0000000 --- a/extras/bme680/bme680.c +++ /dev/null @@ -1,1423 +0,0 @@ -/* - * Driver for Bosch Sensortec BME680 digital temperature, humidity, pressure - * and gas sensor connected to I2C or SPI - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - * - * The information provided is believed to be accurate and reliable. The - * copyright holder assumes no responsibility for the consequences of use - * of such information nor for any infringement of patents or other rights - * of third parties which may result from its use. No license is granted by - * implication or otherwise under any patent or patent rights of the copyright - * holder. - */ - -#include -#include - -#include "bme680_platform.h" -#include "bme680.h" - -#if defined(BME680_DEBUG_LEVEL_2) -#define debug(s, f, ...) printf("%s %s: " s "\n", "BME680", f, ## __VA_ARGS__) -#define debug_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "BME680", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define debug(s, f, ...) -#define debug_dev(s, f, d, ...) -#endif - -#if defined(BME680_DEBUG_LEVEL_1) || defined(BME680_DEBUG_LEVEL_2) -#define error(s, f, ...) printf("%s %s: " s "\n", "BME680", f, ## __VA_ARGS__) -#define error_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "BME680", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define error(s, f, ...) -#define error_dev(s, f, d, ...) -#endif - -// modes: unfortunatly, only SLEEP_MODE and FORCED_MODE are documented -#define BME680_SLEEP_MODE 0x00 // low power sleeping -#define BME680_FORCED_MODE 0x01 // perform one TPHG cycle (field data 0 filled) -#define BME680_PARALLEL_MODE 0x02 // no information what it does :-( -#define BME680_SQUENTUAL_MODE 0x02 // no information what it does (field data 0+1+2 filled) - -// register addresses -#define BME680_REG_RES_HEAT_VAL 0x00 -#define BME680_REG_RES_HEAT_RANGE 0x02 -#define BME680_REG_RANGE_SW_ERROR 0x06 - -#define BME680_REG_IDAC_HEAT_BASE 0x50 // 10 regsrs idac_heat_0 ... idac_heat_9 -#define BME680_REG_RES_HEAT_BASE 0x5a // 10 registers res_heat_0 ... res_heat_9 -#define BME680_REG_GAS_WAIT_BASE 0x64 // 10 registers gas_wait_0 ... gas_wait_9 -#define BME680_REG_CTRL_GAS_0 0x70 -#define BME680_REG_CTRL_GAS_1 0x71 -#define BME680_REG_CTRL_HUM 0x72 -#define BME680_REG_STATUS 0x73 -#define BME680_REG_CTRL_MEAS 0x74 -#define BME680_REG_CONFIG 0x75 -#define BME680_REG_ID 0xd0 -#define BME680_REG_RESET 0xe0 - -// field data 0 registers -#define BME680_REG_MEAS_STATUS_0 0x1d -#define BME680_REG_MEAS_INDEX_0 0x1e -#define BME680_REG_PRESS_MSB_0 0x1f -#define BME680_REG_PRESS_LSB_0 0x20 -#define BME680_REG_PRESS_XLSB_0 0x21 -#define BME680_REG_TEMP_MSB_0 0x22 -#define BME680_REG_TEMP_LSB_0 0x23 -#define BME680_REG_TEMP_XLSB_0 0x24 -#define BME680_REG_HUM_MSB_0 0x25 -#define BME680_REG_HUM_LSB_0 0x26 -#define BME680_REG_GAS_R_MSB_0 0x2a -#define BME680_REG_GAS_R_LSB_0 0x2b - -// field data 1 registers (not documented, used in SEQUENTIAL_MODE) -#define BME680_REG_MEAS_STATUS_1 0x2e -#define BME680_REG_MEAS_INDEX_1 0x2f - -// field data 2 registers (not documented, used in SEQUENTIAL_MODE) -#define BME680_REG_MEAS_STATUS_2 0x3f -#define BME680_REG_MEAS_INDEX_2 0x40 - -// field data addresses -#define BME680_REG_RAW_DATA_0 BME680_REG_MEAS_STATUS_0 // 0x1d ... 0x2b -#define BME680_REG_RAW_DATA_1 BME680_REG_MEAS_STATUS_1 // 0x2e ... 0x3c -#define BME680_REG_RAW_DATA_2 BME680_REG_MEAS_STATUS_2 // 0x40 ... 0x4d -#define BME680_REG_RAW_DATA_LEN (BME680_REG_GAS_R_LSB_0 - BME680_REG_MEAS_STATUS_0 + 1) - -// calibration data registers -#define BME680_REG_CD1_ADDR 0x89 // 25 byte calibration data -#define BME680_REG_CD1_LEN 25 -#define BME680_REG_CD2_ADDR 0xe1 // 16 byte calibration data -#define BME680_REG_CD2_LEN 16 -#define BME680_REG_CD3_ADDR 0x00 // 8 byte device specific calibration data -#define BME680_REG_CD3_LEN 8 - -// register structure definitions -#define BME680_NEW_DATA_BITS 0x80 // BME680_REG_MEAS_STATUS<7> -#define BME680_NEW_DATA_SHIFT 7 // BME680_REG_MEAS_STATUS<7> -#define BME680_GAS_MEASURING_BITS 0x40 // BME680_REG_MEAS_STATUS<6> -#define BME680_GAS_MEASURING_SHIFT 6 // BME680_REG_MEAS_STATUS<6> -#define BME680_MEASURING_BITS 0x20 // BME680_REG_MEAS_STATUS<5> -#define BME680_MEASURING_SHIFT 5 // BME680_REG_MEAS_STATUS<5> -#define BME680_GAS_MEAS_INDEX_BITS 0x0f // BME680_REG_MEAS_STATUS<3:0> -#define BME680_GAS_MEAS_INDEX_SHIFT 0 // BME680_REG_MEAS_STATUS<3:0> - -#define BME680_GAS_R_LSB_BITS 0xc0 // BME680_REG_GAS_R_LSB<7:6> -#define BME680_GAS_R_LSB_SHIFT 6 // BME680_REG_GAS_R_LSB<7:6> -#define BME680_GAS_VALID_BITS 0x20 // BME680_REG_GAS_R_LSB<5> -#define BME680_GAS_VALID_SHIFT 5 // BME680_REG_GAS_R_LSB<5> -#define BME680_HEAT_STAB_R_BITS 0x10 // BME680_REG_GAS_R_LSB<4> -#define BME680_HEAT_STAB_R_SHIFT 4 // BME680_REG_GAS_R_LSB<4> -#define BME680_GAS_RANGE_R_BITS 0x0f // BME680_REG_GAS_R_LSB<3:0> -#define BME680_GAS_RANGE_R_SHIFT 0 // BME680_REG_GAS_R_LSB<3:0> - -#define BME680_HEAT_OFF_BITS 0x04 // BME680_REG_CTRL_GAS_0<3> -#define BME680_HEAT_OFF_SHIFT 3 // BME680_REG_CTRL_GAS_0<3> - -#define BME680_RUN_GAS_BITS 0x10 // BME680_REG_CTRL_GAS_1<4> -#define BME680_RUN_GAS_SHIFT 4 // BME680_REG_CTRL_GAS_1<4> -#define BME680_NB_CONV_BITS 0x0f // BME680_REG_CTRL_GAS_1<3:0> -#define BME680_NB_CONV_SHIFT 0 // BME680_REG_CTRL_GAS_1<3:0> - -#define BME680_SPI_3W_INT_EN_BITS 0x40 // BME680_REG_CTRL_HUM<6> -#define BME680_SPI_3W_INT_EN_SHIFT 6 // BME680_REG_CTRL_HUM<6> -#define BME680_OSR_H_BITS 0x07 // BME680_REG_CTRL_HUM<2:0> -#define BME680_OSR_H_SHIFT 0 // BME680_REG_CTRL_HUM<2:0> - -#define BME680_OSR_T_BITS 0xe0 // BME680_REG_CTRL_MEAS<7:5> -#define BME680_OSR_T_SHIFT 5 // BME680_REG_CTRL_MEAS<7:5> -#define BME680_OSR_P_BITS 0x1c // BME680_REG_CTRL_MEAS<4:2> -#define BME680_OSR_P_SHIFT 2 // BME680_REG_CTRL_MEAS<4:2> -#define BME680_MODE_BITS 0x03 // BME680_REG_CTRL_MEAS<1:0> -#define BME680_MODE_SHIFT 0 // BME680_REG_CTRL_MEAS<1:0> - -#define BME680_FILTER_BITS 0x1c // BME680_REG_CONFIG<4:2> -#define BME680_FILTER_SHIFT 2 // BME680_REG_CONFIG<4:2> -#define BME680_SPI_3W_EN_BITS 0x01 // BME680_REG_CONFIG<0> -#define BME680_SPI_3W_EN_SHIFT 0 // BME680_REG_CONFIG<0> - -#define BME680_SPI_MEM_PAGE_BITS 0x10 // BME680_REG_STATUS<4> -#define BME680_SPI_MEM_PAGE_SHIFT 4 // BME680_REG_STATUS<4> - -#define BME680_GAS_WAIT_BITS 0x3f // BME680_REG_GAS_WAIT+x<5:0> -#define BME680_GAS_WAIT_SHIFT 0 // BME680_REG_GAS_WAIT+x<5:0> -#define BME680_GAS_WAIT_MULT_BITS 0xc0 // BME680_REG_GAS_WAIT+x<7:6> -#define BME680_GAS_WAIT_MULT_SHIFT 6 // BME680_REG_GAS_WAIT+x<7:6> - -// commands -#define BME680_RESET_CMD 0xb6 // BME680_REG_RESET<7:0> -#define BME680_RESET_PERIOD 5 // reset time in ms - -#define BME680_RHR_BITS 0x30 // BME680_REG_RES_HEAT_RANGE<5:4> -#define BME680_RHR_SHIFT 4 // BME680_REG_RES_HEAT_RANGE<5:4> -#define BME680_RSWE_BITS 0xf0 // BME680_REG_RANGE_SW_ERROR<7:4> -#define BME680_RSWE_SHIFT 4 // BME680_REG_RANGE_SW_ERROR<7:4> - -// calibration data are stored in a calibration data map -#define BME680_CDM_SIZE (BME680_REG_CD1_LEN + BME680_REG_CD2_LEN + BME680_REG_CD3_LEN) -#define BME680_CDM_OFF1 0 -#define BME680_CDM_OFF2 BME680_REG_CD1_LEN -#define BME680_CDM_OFF3 BME680_CDM_OFF2 + BME680_REG_CD2_LEN - -// calibration parameter offsets in calibration data map -// calibration data from 0x89 -#define BME680_CDM_T2 1 -#define BME680_CDM_T3 3 -#define BME680_CDM_P1 5 -#define BME680_CDM_P2 7 -#define BME680_CDM_P3 9 -#define BME680_CDM_P4 11 -#define BME680_CDM_P5 13 -#define BME680_CDM_P7 15 -#define BME680_CDM_P6 16 -#define BME680_CDM_P8 19 -#define BME680_CDM_P9 21 -#define BME680_CDM_P10 23 -// calibration data from 0e1 -#define BME680_CDM_H2 25 -#define BME680_CDM_H1 26 -#define BME680_CDM_H3 28 -#define BME680_CDM_H4 29 -#define BME680_CDM_H5 30 -#define BME680_CDM_H6 31 -#define BME680_CDM_H7 32 -#define BME680_CDM_T1 33 -#define BME680_CDM_GH2 35 -#define BME680_CDM_GH1 37 -#define BME680_CDM_GH3 38 -// device specific calibration data from 0x00 -#define BME680_CDM_RHV 41 // 0x00 - res_heat_val -#define BME680_CDM_RHR 43 // 0x02 - res_heat_range -#define BME680_CDM_RSWE 45 // 0x04 - range_sw_error - - -/** - * @brief Raw data (integer values) read from sensor - */ -typedef struct { - - bool gas_valid; // indicate that gas measurement results are valid - bool heater_stable; // indicate that heater temperature was stable - - uint32_t temperature; // degree celsius x100 - uint32_t pressure; // pressure in Pascal - uint16_t humidity; // relative humidity x1000 in % - uint16_t gas_resistance; // gas resistance data - uint8_t gas_range; // gas resistance range - - uint8_t gas_index; // heater profile used (0 ... 9) - uint8_t meas_index; - - -} bme680_raw_data_t; - - -/** Forward declaration of functions for internal use */ - -static bool bme680_set_mode (bme680_sensor_t* dev, uint8_t mode); -static bool bme680_get_raw_data (bme680_sensor_t* dev, bme680_raw_data_t* raw); -static int16_t bme680_convert_temperature (bme680_sensor_t *dev, uint32_t raw_temperature); -static uint32_t bme680_convert_pressure (bme680_sensor_t *dev, uint32_t raw_pressure); -static uint32_t bme680_convert_humidity (bme680_sensor_t *dev, uint16_t raw_humidity); -static uint32_t bme680_convert_gas (bme680_sensor_t *dev, uint16_t raw_gas, uint8_t gas_range); - -static uint8_t bme680_heater_resistance (const bme680_sensor_t* dev, uint16_t temperature); -static uint8_t bme680_heater_duration (uint16_t duration); - -static bool bme680_reset (bme680_sensor_t* dev); -static bool bme680_is_available (bme680_sensor_t* dev); -static void bme680_delay_ms(uint32_t delay); - -static bool bme680_read_reg (bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool bme680_write_reg (bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool bme680_i2c_read (bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool bme680_i2c_write (bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool bme680_spi_read (bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool bme680_spi_write (bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); - -#define lsb_msb_to_type(t,b,o) (t)(((t)b[o+1] << 8) | b[o]) -#define lsb_to_type(t,b,o) (t)(b[o]) - -bme680_sensor_t* bme680_init_sensor(uint8_t bus, uint8_t addr, uint8_t cs) - -{ - bme680_sensor_t* dev; - - if ((dev = malloc (sizeof(bme680_sensor_t))) == NULL) - return NULL; - - // init sensor data structure - dev->bus = bus; - dev->addr = addr; - dev->cs = cs; - dev->meas_started = false; - dev->meas_status = 0; - dev->settings.ambient_temperature = 0; - dev->settings.osr_temperature = osr_none; - dev->settings.osr_pressure = osr_none; - dev->settings.osr_humidity = osr_none; - dev->settings.filter_size = iir_size_0; - dev->settings.heater_profile = BME680_HEATER_NOT_USED; - memset(dev->settings.heater_temperature, 0, sizeof(uint16_t)*10); - memset(dev->settings.heater_duration, 0, sizeof(uint16_t)*10); - - // if addr==0 then SPI is used and has to be initialized - if (!addr && !spi_device_init (bus, cs)) - { - error_dev ("Could not initialize SPI interface.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // reset the sensor - if (!bme680_reset(dev)) - { - error_dev ("Could not reset the sensor device.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // check availability of the sensor - if (!bme680_is_available (dev)) - { - error_dev ("Sensor is not available.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - uint8_t buf[BME680_CDM_SIZE]; - - // read all calibration parameters from sensor - if (bme680_read_reg(dev, BME680_REG_CD1_ADDR, buf+BME680_CDM_OFF1, BME680_REG_CD1_LEN) && - bme680_read_reg(dev, BME680_REG_CD2_ADDR, buf+BME680_CDM_OFF2, BME680_REG_CD2_LEN) && - bme680_read_reg(dev, BME680_REG_CD3_ADDR, buf+BME680_CDM_OFF3, BME680_REG_CD3_LEN)) - { - dev->calib_data.par_t1 = lsb_msb_to_type (uint16_t, buf, BME680_CDM_T1); - dev->calib_data.par_t2 = lsb_msb_to_type ( int16_t, buf, BME680_CDM_T2); - dev->calib_data.par_t3 = lsb_to_type ( int8_t, buf, BME680_CDM_T3); - - // pressure compensation parameters - dev->calib_data.par_p1 = lsb_msb_to_type (uint16_t, buf, BME680_CDM_P1); - dev->calib_data.par_p2 = lsb_msb_to_type ( int16_t, buf, BME680_CDM_P2); - dev->calib_data.par_p3 = lsb_to_type ( int8_t, buf, BME680_CDM_P3); - dev->calib_data.par_p4 = lsb_msb_to_type ( int16_t, buf, BME680_CDM_P4); - dev->calib_data.par_p5 = lsb_msb_to_type ( int16_t, buf, BME680_CDM_P5); - dev->calib_data.par_p6 = lsb_to_type ( int8_t, buf, BME680_CDM_P6); - dev->calib_data.par_p7 = lsb_to_type ( int8_t, buf, BME680_CDM_P7); - dev->calib_data.par_p8 = lsb_msb_to_type ( int16_t, buf, BME680_CDM_P8); - dev->calib_data.par_p9 = lsb_msb_to_type ( int16_t, buf, BME680_CDM_P9); - dev->calib_data.par_p10 = lsb_to_type ( uint8_t, buf, BME680_CDM_P10); - - // humidity compensation parameters - dev->calib_data.par_h1 = (uint16_t)(((uint16_t)buf[BME680_CDM_H1+1] << 4) | - (buf[BME680_CDM_H1] & 0x0F)); - dev->calib_data.par_h2 = (uint16_t)(((uint16_t)buf[BME680_CDM_H2] << 4) | - (buf[BME680_CDM_H2+1] >> 4)); - dev->calib_data.par_h3 = lsb_to_type ( int8_t, buf, BME680_CDM_H3); - dev->calib_data.par_h4 = lsb_to_type ( int8_t, buf, BME680_CDM_H4); - dev->calib_data.par_h5 = lsb_to_type ( int8_t, buf, BME680_CDM_H5); - dev->calib_data.par_h6 = lsb_to_type ( uint8_t, buf, BME680_CDM_H6); - dev->calib_data.par_h7 = lsb_to_type ( int8_t, buf, BME680_CDM_H7); - - // gas sensor compensation parameters - dev->calib_data.par_gh1 = lsb_to_type ( int8_t, buf, BME680_CDM_GH1); - dev->calib_data.par_gh2 = lsb_msb_to_type ( int16_t, buf, BME680_CDM_GH2); - dev->calib_data.par_gh3 = lsb_to_type ( int8_t, buf, BME680_CDM_GH3); - - dev->calib_data.res_heat_range = (lsb_to_type (uint8_t, buf ,BME680_CDM_RHR) & - BME680_RHR_BITS) >> - BME680_RHR_SHIFT; - dev->calib_data.res_heat_val = (lsb_to_type ( int8_t, buf, BME680_CDM_RHV)); - dev->calib_data.range_sw_err = (lsb_to_type ( int8_t, buf, BME680_CDM_RSWE) & - BME680_RSWE_BITS) >> - BME680_RSWE_SHIFT; - } - else - { - error_dev ("Could not read in calibration parameters.", __FUNCTION__, dev); - dev->error_code |= BME680_READ_CALIB_DATA_FAILED; - free (dev); - return NULL; - - } - - // Set the default temperature, pressure and humidity settings - if (!bme680_set_oversampling_rates (dev, osr_1x, osr_1x, osr_1x) || - !bme680_set_filter_size (dev, iir_size_3)) - { - error_dev ("Could not configure default sensor settings for TPH.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // Set ambient temperature of sensor to default value (25 degree C) - dev->settings.ambient_temperature = 25; - - // Set heater default profile 0 to 320 degree Celcius for 150 ms - if (!bme680_set_heater_profile (dev, 0, 320, 150)) - { - error_dev ("Could not configure default heater profile settings.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - if (!bme680_use_heater_profile (dev, 0)) - { - error_dev ("Could not configure default heater profile.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - return dev; -} - -bool bme680_force_measurement (bme680_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = BME680_OK; - - // return remaining time when measurement is already running - if (dev->meas_started) - { - debug_dev ("Measurement is already running.", __FUNCTION__, dev); - dev->error_code |= BME680_MEAS_ALREADY_RUNNING; - return false; - } - - // Set the power mode to forced mode to trigger one TPHG measurement cycle - if (!bme680_set_mode(dev, BME680_FORCED_MODE)) - { - error_dev ("Could not set forced mode to start TPHG measurement cycle.", __FUNCTION__, dev); - dev->error_code |= BME680_FORCE_MODE_FAILED; - return false; - } - - dev->meas_started = true; - dev->meas_status = 0; - - debug_dev ("Started measurement at %.3f.", __FUNCTION__, dev, - (double)sdk_system_get_time()*1e-3); - - return true; -} - - -/** - * @brief Estimate the measuerment duration in ms - * - * Timing formulas extracted from BME280 datasheet and test in some - * experiments. They represent the maximum measurement duration. - * - * @return estimated measurument duration in RTOS ticks or -1 on error - */ -uint32_t bme680_get_measurement_duration (const bme680_sensor_t *dev) -{ - if (!dev) return 0; - - int32_t duration = 0; /* Calculate in us */ - - // wake up duration from sleep into forced mode - duration += 1250; - - // THP cycle duration which consumes 1963 µs for each measurement at maximum - if (dev->settings.osr_temperature) duration += (1 << (dev->settings.osr_temperature-1)) * 2300; - if (dev->settings.osr_pressure ) duration += (1 << (dev->settings.osr_pressure-1)) * 2300 + 575; - if (dev->settings.osr_humidity ) duration += (1 << (dev->settings.osr_humidity-1)) * 2300 + 575; - - // if gas measurement is used - if (dev->settings.heater_profile != BME680_HEATER_NOT_USED && - dev->settings.heater_duration[dev->settings.heater_profile] && - dev->settings.heater_temperature[dev->settings.heater_profile]) - { - // gas heating time - duration += dev->settings.heater_duration[dev->settings.heater_profile]*1000; - // gas measurement duration; - duration += 2300 + 575; - } - - // round up to next ms (1 us ... 1000 us => 1 ms) - duration += 999; - duration /= 1000; - - // some ms tolerance - duration += 5; - - // ceil to next integer value that is divisible by portTICK_PERIOD_MS and - // compute RTOS ticks (1 ... portTICK_PERIOD_MS = 1 tick) - duration = (duration + portTICK_PERIOD_MS-1) / portTICK_PERIOD_MS; - - // Since first RTOS tick can be shorter than the half of defined tick period, - // the delay caused by vTaskDelay(duration) might be 1 or 2 ms shorter than - // computed duration in rare cases. Since the duration is computed for maximum - // and not for the typical durations and therefore tends to be too long, this - // should not be a problem. Therefore, only one additional tick used. - return duration + 1; -} - - -bool bme680_is_measuring (bme680_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = BME680_OK; - - // if measurement wasn't started, it is of course not measuring - if (!dev->meas_started) - { - dev->error_code |= BME680_MEAS_NOT_RUNNING; - return false; - } - - uint8_t raw[2]; - - // read maesurment status from sensor - if (!bme680_read_reg(dev, BME680_REG_MEAS_STATUS_0, raw, 2)) - { - error_dev ("Could not read measurement status from sensor.", __FUNCTION__, dev); - return false; - } - - dev->meas_status = raw[0]; - - // test whether measuring bit is set - return (dev->meas_status & BME680_MEASURING_BITS); -} - - -bool bme680_get_results_fixed (bme680_sensor_t* dev, bme680_values_fixed_t* results) -{ - if (!dev || !results) return false; - - dev->error_code = BME680_OK; - - // fill data structure with invalid values - results->temperature = INT16_MIN; - results->pressure = 0; - results->humidity = 0; - results->gas_resistance = 0; - - bme680_raw_data_t raw; - - if (!bme680_get_raw_data(dev, &raw)) - // return invalid values - return false; - - // use compensation algorithms to compute sensor values in fixed point format - - if (dev->settings.osr_temperature) - results->temperature = bme680_convert_temperature (dev, raw.temperature); - - if (dev->settings.osr_pressure) - results->pressure = bme680_convert_pressure (dev, raw.pressure); - - if (dev->settings.osr_humidity) - results->humidity = bme680_convert_humidity (dev, raw.humidity); - - if (dev->settings.heater_profile != BME680_HEATER_NOT_USED) - { - // convert gas only if raw data are valid and heater was stable - if (raw.gas_valid && raw.heater_stable) - results->gas_resistance = bme680_convert_gas (dev, raw.gas_resistance, - raw.gas_range); - else if (!raw.gas_valid) - dev->error_code = BME680_MEAS_GAS_NOT_VALID; - else - dev->error_code = BME680_HEATER_NOT_STABLE; - } - - debug_dev ("Fixed point sensor valus - %d ms: %d/100 C, %d/1000 Percent, %d Pascal, %d Ohm", - __FUNCTION__, dev, sdk_system_get_time (), - results->temperature, - results->humidity, - results->pressure, - results->gas_resistance); - - return true; -} - - -bool bme680_get_results_float (bme680_sensor_t* dev, bme680_values_float_t* results) -{ - if (!dev || !results) return false; - - bme680_values_fixed_t fixed; - - if (!bme680_get_results_fixed (dev, &fixed)) - return false; - - results->temperature = fixed.temperature / 100.0f; - results->pressure = fixed.pressure / 100.0f; - results->humidity = fixed.humidity / 1000.0f; - results->gas_resistance = fixed.gas_resistance; - - return true; -} - - -bool bme680_measure_fixed (bme680_sensor_t* dev, bme680_values_fixed_t* results) -{ - int32_t duration = bme680_force_measurement (dev); - - if (duration == BME680_NOK) - return false; // measurment couldn't be started - - else if (duration > 0) // wait for results - vTaskDelay (duration); - - return bme680_get_results_fixed (dev, results); -} - - -bool bme680_measure_float (bme680_sensor_t* dev, bme680_values_float_t* results) -{ - int32_t duration = bme680_force_measurement (dev); - - if (duration == BME680_NOK) - return false; // measurment couldn't be started - - else if (duration > 0) // wait for results - vTaskDelay (duration); - - return bme680_get_results_float (dev, results); -} - - - -#define bme_set_reg_bit(byte, bitname, bit) ( (byte & ~bitname##_BITS) | \ - ((bit << bitname##_SHIFT) & bitname##_BITS) ) -#define bme_get_reg_bit(byte, bitname) ( (byte & bitname##_BITS) >> bitname##_SHIFT ) - -bool bme680_set_oversampling_rates (bme680_sensor_t* dev, - bme680_oversampling_rate_t ost, - bme680_oversampling_rate_t osp, - bme680_oversampling_rate_t osh) -{ - if (!dev) return false; - - dev->error_code = BME680_OK; - - bool ost_changed = dev->settings.osr_temperature != ost; - bool osp_changed = dev->settings.osr_pressure != osp; - bool osh_changed = dev->settings.osr_humidity != osh; - - if (!ost_changed && !osp_changed && !osh_changed) - return true; - - // Set the temperature, pressure and humidity oversampling - dev->settings.osr_temperature = ost; - dev->settings.osr_pressure = osp; - dev->settings.osr_humidity = osh; - - uint8_t reg; - - if (ost_changed || osp_changed) - { - // read the current register value - if (!bme680_read_reg(dev, BME680_REG_CTRL_MEAS, ®, 1)) - return false; - - // set changed bit values - if (ost_changed) reg = bme_set_reg_bit (reg, BME680_OSR_T, ost); - if (osp_changed) reg = bme_set_reg_bit (reg, BME680_OSR_P, osp); - - // write back the new register value - if (!bme680_write_reg(dev, BME680_REG_CTRL_MEAS, ®, 1)) - return false; - } - - if (osh_changed) - { - // read the current register value - if (!bme680_read_reg(dev, BME680_REG_CTRL_HUM, ®, 1)) - return false; - - // set changed bit value - reg = bme_set_reg_bit (reg, BME680_OSR_H, osh); - - // write back the new register value - if (!bme680_write_reg(dev, BME680_REG_CTRL_HUM, ®, 1)) - return false; - } - - debug_dev ("Setting oversampling rates done: osrt=%d osp=%d osrh=%d", - __FUNCTION__, dev, - dev->settings.osr_temperature, - dev->settings.osr_pressure, - dev->settings.osr_humidity); - - return true; -} - - -bool bme680_set_filter_size(bme680_sensor_t* dev, bme680_filter_size_t size) -{ - if (!dev) return false; - - dev->error_code = BME680_OK; - - bool size_changed = dev->settings.filter_size != size; - - if (!size_changed) return true; - - /* Set the temperature, pressure and humidity settings */ - dev->settings.filter_size = size; - - uint8_t reg; - - // read the current register value - if (!bme680_read_reg(dev, BME680_REG_CONFIG, ®, 1)) - return false; - - // set changed bit value - reg = bme_set_reg_bit (reg, BME680_FILTER, size); - - // write back the new register value - if (!bme680_write_reg(dev, BME680_REG_CONFIG, ®, 1)) - return false; - - debug_dev ("Setting filter size done: size=%d", __FUNCTION__, dev, - dev->settings.filter_size); - - return true; -} - -bool bme680_set_heater_profile (bme680_sensor_t* dev, uint8_t profile, - uint16_t temperature, uint16_t duration) -{ - if (!dev) return false; - - if (profile > BME680_HEATER_PROFILES-1) - { - error_dev("Wrong heater profile id %d.", __FUNCTION__, dev, profile); - dev->error_code = BME680_WRONG_HEAT_PROFILE; - return false; - } - - dev->error_code = BME680_OK; - - bool temperature_changed = dev->settings.heater_temperature[profile] != temperature; - bool duration_changed = dev->settings.heater_duration[profile] != duration; - - if (!temperature_changed && !duration_changed) - return true; - - // set external gas sensor configuration - dev->settings.heater_temperature[profile] = temperature; // degree Celsius - dev->settings.heater_duration [profile] = duration; // milliseconds - - // compute internal gas sensor configuration parameters - uint8_t heat_dur = bme680_heater_duration(duration); // internal duration value - uint8_t heat_res = bme680_heater_resistance(dev, temperature); // internal temperature value - - // set internal gas sensor configuration parameters if changed - if (temperature_changed && - !bme680_write_reg(dev, BME680_REG_RES_HEAT_BASE+profile, &heat_res, 1)) - return false; - - if (duration_changed && - !bme680_write_reg(dev, BME680_REG_GAS_WAIT_BASE+profile, &heat_dur, 1)) - return false; - - debug_dev ("Setting heater profile %d done: temperature=%d duration=%d " - "heater_resistance=%02x heater_duration=%02x", - __FUNCTION__, dev, profile, - dev->settings.heater_temperature[profile], - dev->settings.heater_duration[profile], - heat_dur, heat_res); - - return true; -} - -bool bme680_use_heater_profile (bme680_sensor_t* dev, int8_t profile) -{ - if (!dev) return false; - - if (profile != BME680_HEATER_NOT_USED && (profile < 0 || profile > BME680_HEATER_PROFILES-1)) - { - error_dev("Wrong heater profile id %d.", __FUNCTION__, dev, profile); - dev->error_code = BME680_WRONG_HEAT_PROFILE; - return false; - } - - if (dev->settings.heater_profile == profile) - return false; - - dev->settings.heater_profile = profile; - - uint8_t reg = 0; // set - // set active profile - reg = bme_set_reg_bit (reg, BME680_NB_CONV, profile != BME680_HEATER_NOT_USED ? profile : 0); - - // enable or disable gas measurement - reg = bme_set_reg_bit (reg, BME680_RUN_GAS, (profile != BME680_HEATER_NOT_USED && - dev->settings.heater_temperature[profile] && - dev->settings.heater_duration[profile])); - - if (!bme680_write_reg(dev, BME680_REG_CTRL_GAS_1, ®, 1)) - return false; - - return true; -} - - -bool bme680_set_ambient_temperature (bme680_sensor_t* dev, int16_t ambient) -{ - if (!dev) return false; - - dev->error_code = BME680_OK; - - bool ambient_changed = dev->settings.ambient_temperature != ambient; - - if (!ambient_changed) - return true; - - // set ambient temperature configuration - dev->settings.ambient_temperature = ambient; // degree Celsius - - // update all valid heater profiles - uint8_t data[10]; - for (int i = 0; i < BME680_HEATER_PROFILES; i++) - { - data[i] = dev->settings.heater_temperature[i] ? - bme680_heater_resistance(dev, dev->settings.heater_temperature[i]) : 0; - } - if (!bme680_write_reg(dev, BME680_REG_RES_HEAT_BASE, data, 10)) - return false; - - debug_dev ("Setting heater ambient temperature done: ambient=%d", - __FUNCTION__, dev, dev->settings.ambient_temperature); - - return true; -} - -bool bme680_set_mode (bme680_sensor_t *dev, uint8_t mode) -{ - if (!dev) return false; - - dev->error_code = BME680_OK; - - uint8_t reg; - - if (!bme680_read_reg(dev, BME680_REG_CTRL_MEAS, ®, 1)) - return false; - - reg = bme_set_reg_bit (reg, BME680_MODE, mode); - - if (!bme680_write_reg(dev, BME680_REG_CTRL_MEAS, ®, 1)) - return false; - - return true; -} - - -/** Functions for internal use only */ - -/** - * @brief Check the chip ID to test whether sensor is available - */ -static bool bme680_is_available (bme680_sensor_t* dev) -{ - uint8_t chip_id; - - if (!dev) return false; - - dev->error_code = BME680_OK; - - if (!bme680_read_reg (dev, BME680_REG_ID, &chip_id, 1)) - return false; - - if (chip_id != 0x61) - { - error_dev ("Chip id %02x is wrong, should be 0x61.", __FUNCTION__, dev, chip_id); - dev->error_code = BME680_WRONG_CHIP_ID; - return false; - } - - return true; -} - - -static bool bme680_reset (bme680_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = BME680_OK; - - uint8_t reg = BME680_RESET_CMD; - - // send reset command - if (!bme680_write_reg(dev, BME680_REG_RESET, ®, 1)) - return false; - - // wait the time the sensor needs for reset - bme680_delay_ms (BME680_RESET_PERIOD); - - // check whether the sensor is reachable again - if (!bme680_read_reg(dev, BME680_REG_STATUS, ®, 1)) - { - dev->error_code = BME680_RESET_CMD_FAILED; - return false; - } - - return true; -} - - -/** - * @brief Calculate temperature from raw temperature value - * @ref BME280 datasheet, page 50 - */ -static int16_t bme680_convert_temperature (bme680_sensor_t *dev, uint32_t raw_temperature) -{ - if (!dev) return 0; - - bme680_calib_data_t* cd = &dev->calib_data; - - int64_t var1; - int64_t var2; - int16_t temperature; - - var1 = ((((raw_temperature >> 3) - ((int32_t)cd->par_t1 << 1))) * - ((int32_t)cd->par_t2)) >> 11; - var2 = (((((raw_temperature >> 4) - ((int32_t)cd->par_t1)) * - ((raw_temperature >> 4) - ((int32_t)cd->par_t1))) >> 12) * - ((int32_t)cd->par_t3)) >> 14; - cd->t_fine = (int32_t)(var1 + var2); - temperature = (cd->t_fine * 5 + 128) >> 8; - - return temperature; -} - - -/** - * @brief Calculate pressure from raw pressure value - * @copyright Copyright (C) 2017 - 2018 Bosch Sensortec GmbH - * - * The algorithm was extracted from the original Bosch Sensortec BME680 driver - * published as open source. Divisions and multiplications by potences of 2 - * were replaced by shift operations for effeciency reasons. - * - * @ref [BME680_diver](https://github.com/BoschSensortec/BME680_driver) - * @ref BME280 datasheet, page 50 - */ -static uint32_t bme680_convert_pressure (bme680_sensor_t *dev, uint32_t raw_pressure) -{ - if (!dev) return 0; - - bme680_calib_data_t* cd = &dev->calib_data; - - int32_t var1; - int32_t var2; - int32_t var3; - int32_t var4; - int32_t pressure; - - var1 = (((int32_t) cd->t_fine) >> 1) - 64000; - var2 = ((((var1 >> 2) * (var1 >> 2)) >> 11) * (int32_t) cd->par_p6) >> 2; - var2 = ((var2) * (int32_t) cd->par_p6) >> 2; - var2 = var2 + ((var1 * (int32_t)cd->par_p5) << 1); - var2 = (var2 >> 2) + ((int32_t) cd->par_p4 << 16); - var1 = (((var1 >> 2) * (var1 >> 2)) >> 13); - var1 = (((var1) * ((int32_t) cd->par_p3 << 5)) >> 3) + (((int32_t) cd->par_p2 * var1) >> 1); - var1 = var1 >> 18; - var1 = ((32768 + var1) * (int32_t) cd->par_p1) >> 15; - pressure = 1048576 - raw_pressure; - pressure = (int32_t)((pressure - (var2 >> 12)) * ((uint32_t)3125)); - var4 = (1 << 31); - pressure = (pressure >= var4) ? (( pressure / (uint32_t) var1) << 1) - : ((pressure << 1) / (uint32_t) var1); - var1 = ((int32_t) cd->par_p9 * (int32_t) (((pressure >> 3) * (pressure >> 3)) >> 13)) >> 12; - var2 = ((int32_t)(pressure >> 2) * (int32_t) cd->par_p8) >> 13; - var3 = ((int32_t)(pressure >> 8) * (int32_t)(pressure >> 8) - * (int32_t)(pressure >> 8) - * (int32_t)cd->par_p10) >> 17; - pressure = (int32_t)(pressure) + ((var1 + var2 + var3 + ((int32_t)cd->par_p7 << 7)) >> 4); - - return (uint32_t) pressure; -} - -/** - * @brief Calculate humidty from raw humidity data - * @copyright Copyright (C) 2017 - 2018 Bosch Sensortec GmbH - * - * The algorithm was extracted from the original Bosch Sensortec BME680 driver - * published as open source. Divisions and multiplications by potences of 2 - * were replaced by shift operations for effeciency reasons. - * - * @ref [BME680_diver](https://github.com/BoschSensortec/BME680_driver) - */ -static uint32_t bme680_convert_humidity (bme680_sensor_t *dev, uint16_t raw_humidity) -{ - if (!dev) return 0; - - bme680_calib_data_t* cd = &dev->calib_data; - - int32_t var1; - int32_t var2; - int32_t var3; - int32_t var4; - int32_t var5; - int32_t var6; - int32_t temp_scaled; - int32_t humidity; - - temp_scaled = (((int32_t) cd->t_fine * 5) + 128) >> 8; - var1 = (int32_t) (raw_humidity - ((int32_t) ((int32_t) cd->par_h1 << 4))) - - (((temp_scaled * (int32_t) cd->par_h3) / ((int32_t) 100)) >> 1); - var2 = ((int32_t) cd->par_h2 * - (((temp_scaled * (int32_t) cd->par_h4) / ((int32_t) 100)) + - (((temp_scaled * ((temp_scaled * (int32_t) cd->par_h5) / ((int32_t) 100))) >> 6) / - ((int32_t) 100)) + (int32_t) (1 << 14))) >> 10; - var3 = var1 * var2; - var4 = (int32_t) cd->par_h6 << 7; - var4 = ((var4) + ((temp_scaled * (int32_t) cd->par_h7) / ((int32_t) 100))) >> 4; - var5 = ((var3 >> 14) * (var3 >> 14)) >> 10; - var6 = (var4 * var5) >> 1; - humidity = (((var3 + var6) >> 10) * ((int32_t) 1000)) >> 12; - - if (humidity > 100000) /* Cap at 100%rH */ - humidity = 100000; - else if (humidity < 0) - humidity = 0; - - return (uint32_t) humidity; -} - - -/** - * @brief Lookup table for gas resitance computation - * @ref BME680 datasheet, page 19 - */ -static float lookup_table[16][2] = { // const1, const2 // gas_range - { 1.0 , 8000000.0 }, // 0 - { 1.0 , 4000000.0 }, // 1 - { 1.0 , 2000000.0 }, // 2 - { 1.0 , 1000000.0 }, // 3 - { 1.0 , 499500.4995 }, // 4 - { 0.99 , 248262.1648 }, // 5 - { 1.0 , 125000.0 }, // 6 - { 0.992, 63004.03226 }, // 7 - { 1.0 , 31281.28128 }, // 8 - { 1.0 , 15625.0 }, // 9 - { 0.998, 7812.5 }, // 10 - { 0.995, 3906.25 }, // 11 - { 1.0 , 1953.125 }, // 12 - { 0.99 , 976.5625 }, // 13 - { 1.0 , 488.28125 }, // 14 - { 1.0 , 244.140625 } // 15 - }; - -/** - * @brief Calculate gas resistance from raw gas resitance value and gas range - * @ref BME680 datasheet - */ -static uint32_t bme680_convert_gas (bme680_sensor_t *dev, uint16_t gas, uint8_t gas_range) -{ - if (!dev) return 0; - - bme680_calib_data_t* cd = &dev->calib_data; - - float var1 = (1340.0 + 5.0 * cd->range_sw_err) * lookup_table[gas_range][0]; - return var1 * lookup_table[gas_range][1] / (gas - 512.0 + var1); -} - -#define msb_lsb_xlsb_to_20bit(t,b,o) (t)((t) b[o] << 12 | (t) b[o+1] << 4 | b[o+2] >> 4) -#define msb_lsb_to_type(t,b,o) (t)(((t)b[o] << 8) | b[o+1]) - -#define BME680_RAW_P_OFF BME680_REG_PRESS_MSB_0-BME680_REG_MEAS_STATUS_0 -#define BME680_RAW_T_OFF (BME680_RAW_P_OFF + BME680_REG_TEMP_MSB_0 - BME680_REG_PRESS_MSB_0) -#define BME680_RAW_H_OFF (BME680_RAW_T_OFF + BME680_REG_HUM_MSB_0 - BME680_REG_TEMP_MSB_0) -#define BME680_RAW_G_OFF (BME680_RAW_H_OFF + BME680_REG_GAS_R_MSB_0 - BME680_REG_HUM_MSB_0) - -static bool bme680_get_raw_data(bme680_sensor_t *dev, bme680_raw_data_t* raw_data) -{ - if (!dev || !raw_data) return false; - - dev->error_code = BME680_OK; - - if (!dev->meas_started) - { - error_dev ("Measurement was not started.", __FUNCTION__, dev); - dev->error_code = BME680_MEAS_NOT_RUNNING; - return false; - } - - uint8_t raw[BME680_REG_RAW_DATA_LEN] = { 0 }; - - if (!(dev->meas_status & BME680_NEW_DATA_BITS)) - { - // read maesurment status from sensor - if (!bme680_read_reg(dev, BME680_REG_MEAS_STATUS_0, raw, 2)) - { - error_dev ("Could not read measurement status from sensor.", __FUNCTION__, dev); - return false; - } - - // test whether there are new data - dev->meas_status = raw[0]; - if (dev->meas_status & BME680_MEASURING_BITS && - !(dev->meas_status & BME680_NEW_DATA_BITS)) - { - debug_dev ("Measurement is still running.", __FUNCTION__, dev); - dev->error_code = BME680_MEAS_STILL_RUNNING; - return false; - } - else if (!(dev->meas_status & BME680_NEW_DATA_BITS)) - { - debug_dev ("No new data.", __FUNCTION__, dev); - dev->error_code = BME680_NO_NEW_DATA; - return false; - } - } - - dev->meas_started = false; - raw_data->gas_index = (dev->meas_status & BME680_GAS_MEAS_INDEX_BITS); - - // if there are new data, read raw data from sensor - - if (!bme680_read_reg(dev, BME680_REG_RAW_DATA_0, raw, BME680_REG_RAW_DATA_LEN)) - { - error_dev ("Could not read raw data from sensor.", __FUNCTION__, dev); - return false; - } - - raw_data->gas_valid = bme_get_reg_bit(raw[BME680_RAW_G_OFF+1],BME680_GAS_VALID); - raw_data->heater_stable = bme_get_reg_bit(raw[BME680_RAW_G_OFF+1],BME680_HEAT_STAB_R); - - raw_data->temperature = msb_lsb_xlsb_to_20bit (uint32_t, raw, BME680_RAW_T_OFF); - raw_data->pressure = msb_lsb_xlsb_to_20bit (uint32_t, raw, BME680_RAW_P_OFF); - raw_data->humidity = msb_lsb_to_type (uint16_t, raw, BME680_RAW_H_OFF); - raw_data->gas_resistance = ((uint16_t)raw[BME680_RAW_G_OFF] << 2) | raw[BME680_RAW_G_OFF+1] >> 6; - raw_data->gas_range = raw[BME680_RAW_G_OFF+1] & BME680_GAS_RANGE_R_BITS; - - /* - // These data are not documented and it is not really clear when they are filled - if (!bme680_read_reg(dev, BME680_REG_MEAS_STATUS_1, raw, BME680_REG_RAW_DATA_LEN)) - { - error_dev ("Could not read raw data from sensor.", __FUNCTION__, dev); - return false; - } - - if (!bme680_read_reg(dev, BME680_REG_MEAS_STATUS_2, raw, BME680_REG_RAW_DATA_LEN)) - { - error_dev ("Could not read raw data from sensor.", __FUNCTION__, dev); - return false; - } - */ - debug ("Raw data: %d %d %d %d %d",__FUNCTION__, - raw_data->temperature, raw_data->pressure, - raw_data->humidity, raw_data->gas_resistance, raw_data->gas_range); - - return true; -} - - -/** - * @brief Calculate internal duration representation - * - * Durations are internally representes as one byte - * - * duration = value<5:0> * multiplier<7:6> - * - * where the multiplier is 1, 4, 16, or 64. Maximum duration is therefore - * 64*64 = 4032 ms. The function takes a real world duration value given - * in milliseconds and computes the internal representation. - * - * @ref Datasheet - */ -static uint8_t bme680_heater_duration (uint16_t duration) -{ - uint8_t multiplier = 0; - - while (duration > 63) - { - duration = duration / 4; - multiplier++; - } - return (uint8_t) (duration | (multiplier << 6)); -} - - -/** - * @brief Calculate internal heater resistance value from real temperature. - * - * @ref Datasheet of BME680 - */ -static uint8_t bme680_heater_resistance (const bme680_sensor_t *dev, uint16_t temp) -{ - if (!dev) return 0; - - if (temp < BME680_HEATER_TEMP_MIN) - temp = BME680_HEATER_TEMP_MIN; - else if (temp > BME680_HEATER_TEMP_MAX) - temp = BME680_HEATER_TEMP_MAX; - - const bme680_calib_data_t* cd = &dev->calib_data; - - // from datasheet - double var1; - double var2; - double var3; - double var4; - double var5; - uint8_t res_heat_x; - - var1 = ((double)cd->par_gh1 / 16.0) + 49.0; - var2 = (((double)cd->par_gh2 / 32768.0) * 0.0005) + 0.00235; - var3 = (double)cd->par_gh3 / 1024.0; - var4 = var1 * (1.0 + (var2 * (double) temp)); - var5 = var4 + (var3 * (double)dev->settings.ambient_temperature); - res_heat_x = (uint8_t)(3.4 * ((var5 * (4.0 / (4.0 + (double)cd->res_heat_range)) * - (1.0/(1.0 + ((double)cd->res_heat_val * 0.002)))) - 25)); - return res_heat_x; - -} - - -static void bme680_delay_ms(uint32_t period) -{ - uint32_t start_time = sdk_system_get_time () / 1000; - - vTaskDelay((period + portTICK_PERIOD_MS-1) / portTICK_PERIOD_MS); - - while (sdk_system_get_time()/1000 - start_time < period) - vTaskDelay (1); -} - - -static bool bme680_read_reg(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? bme680_i2c_read (dev, reg, data, len) - : bme680_spi_read (dev, reg, data, len); -} - - -static bool bme680_write_reg(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? bme680_i2c_write (dev, reg, data, len) - : bme680_spi_write (dev, reg, data, len); -} - -#define BME680_SPI_BUF_SIZE 64 // SPI register data buffer size of ESP866 - -#define BME680_REG_SWITCH_MEM_PAGE BME680_REG_STATUS -#define BME680_BIT_SWITCH_MEM_PAGE_0 0x00 -#define BME680_BIT_SWITCH_MEM_PAGE_1 0x10 - -static bool bme680_spi_set_mem_page (bme680_sensor_t* dev, uint8_t reg) -{ - // mem pages (reg 0x00 .. 0x7f = 1, reg 0x80 ... 0xff = 0 - uint8_t mem_page = (reg < 0x80) ? BME680_BIT_SWITCH_MEM_PAGE_1 - : BME680_BIT_SWITCH_MEM_PAGE_0; - - debug_dev ("Set mem page for register %02x to %d.", __FUNCTION__, dev, reg, mem_page); - - if (!bme680_spi_write (dev, BME680_REG_SWITCH_MEM_PAGE, &mem_page, 1)) - { - dev->error_code |= BME680_SPI_SET_PAGE_FAILED; - return false; - } - // sdk_os_delay_us (100); - return true; -} - -static bool bme680_spi_read(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - if (len >= BME680_SPI_BUF_SIZE) - { - dev->error_code |= BME680_SPI_BUFFER_OVERFLOW; - error_dev ("Error on read from SPI slave on bus 1. Tried to transfer " - "more than %d byte in one read operation.", - __FUNCTION__, dev, BME680_SPI_BUF_SIZE); - return false; - } - - // set mem page first - if (!bme680_spi_set_mem_page (dev, reg)) - { - error_dev ("Error on read from SPI slave on bus 1. Could not set mem page.", - __FUNCTION__, dev); - return false; - } - - reg &= 0x7f; - reg |= 0x80; - - static uint8_t mosi[BME680_SPI_BUF_SIZE]; - static uint8_t miso[BME680_SPI_BUF_SIZE]; - - memset (mosi, 0xff, BME680_SPI_BUF_SIZE); - memset (miso, 0xff, BME680_SPI_BUF_SIZE); - - mosi[0] = reg; - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, miso, len+1)) - { - error_dev ("Could not read data from SPI", __FUNCTION__, dev); - dev->error_code |= BME680_SPI_READ_FAILED; - return false; - } - // shift data one by left, first byte received while sending register address is invalid - for (int i=0; i < len; i++) - data[i] = miso[i+1]; - - #ifdef BME680_DEBUG_LEVEL_2 - printf("BME680 %s: read the following bytes: ", __FUNCTION__); - printf("%0x ", reg); - for (int i=0; i < len; i++) - printf("%0x ", data[i]); - printf("\n"); - #endif - - return true; -} - - -static bool bme680_spi_write(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - static uint8_t mosi[BME680_SPI_BUF_SIZE]; - - if (len >= BME680_SPI_BUF_SIZE) - { - dev->error_code |= BME680_SPI_BUFFER_OVERFLOW; - error_dev ("Error on write to SPI slave on bus 1. Tried to transfer more" - "than %d byte in one write operation.", __FUNCTION__, dev, BME680_SPI_BUF_SIZE); - - return false; - } - - // set mem page first if not mem page register is used - if (reg != BME680_REG_STATUS && !bme680_spi_set_mem_page (dev, reg)) - { - error_dev ("Error on write from SPI slave on bus 1. Could not set mem page.", - __FUNCTION__, dev); - return false; - } - - reg &= 0x7f; - - // first byte in output is the register address - mosi[0] = reg; - - // shift data one byte right, first byte in output is the register address - for (int i = 0; i < len; i++) - mosi[i+1] = data[i]; - - #ifdef BME680_DEBUG_LEVEL_2 - printf("BME680 %s: Write the following bytes: ", __FUNCTION__); - for (int i = 0; i < len+1; i++) - printf("%0x ", mosi[i]); - printf("\n"); - #endif - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, NULL, len+1)) - { - error_dev ("Could not write data to SPI.", __FUNCTION__, dev); - dev->error_code |= BME680_SPI_WRITE_FAILED; - return false; - } - - return true; -} - - -static bool bme680_i2c_read(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Read %d byte from i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - int result = i2c_slave_read(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? BME680_I2C_BUSY : BME680_I2C_READ_FAILED; - error_dev ("Error %d on read %d byte from I2C slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef BME680_DEBUG_LEVEL_2 - printf("BME680 %s: Read following bytes: ", __FUNCTION__); - printf("%0x: ", reg); - for (int i=0; i < len; i++) - printf("%0x ", data[i]); - printf("\n"); -# endif - - return true; -} - - -static bool bme680_i2c_write(bme680_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Write %d byte to i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - int result = i2c_slave_write(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? BME680_I2C_BUSY : BME680_I2C_WRITE_FAILED; - error_dev ("Error %d on write %d byte to i2c slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef BME680_DEBUG_LEVEL_2 - printf("BME680 %s: Wrote the following bytes: ", __FUNCTION__); - printf("%0x: ", reg); - for (int i=0; i < len; i++) - printf("%0x ", data[i]); - printf("\n"); -# endif - - return true; -} diff --git a/extras/bme680/bme680.h b/extras/bme680/bme680.h deleted file mode 100644 index 609443b..0000000 --- a/extras/bme680/bme680.h +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Driver for Bosch Sensortec BME680 digital temperature, humidity, pressure - * and gas sensor connected to I2C or SPI - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef __BME680_H__ -#define __BME680_H__ - -// Uncomment one of the following defines to enable debug output -// #define BME680_DEBUG_LEVEL_1 // only error messages -// #define BME680_DEBUG_LEVEL_2 // debug and error messages - -#include "bme680_types.h" -#include "bme680_platform.h" - -// BME680 addresses -#define BME680_I2C_ADDRESS_1 0x76 // SDO pin is low -#define BME680_I2C_ADDRESS_2 0x77 // SDO pin is high - -// BME680 chip id -#define BME680_CHIP_ID 0x61 // BME680_REG_ID<7:0> - -// Definition of error codes -#define BME680_OK 0 -#define BME680_NOK -1 - -#define BME680_INT_ERROR_MASK 0x000f -#define BME680_DRV_ERROR_MASK 0xfff0 - -// Error codes for I2C and SPI interfaces ORed with BME680 driver error codes -#define BME680_I2C_READ_FAILED 1 -#define BME680_I2C_WRITE_FAILED 2 -#define BME680_I2C_BUSY 3 -#define BME680_SPI_WRITE_FAILED 4 -#define BME680_SPI_READ_FAILED 5 -#define BME680_SPI_BUFFER_OVERFLOW 6 -#define BME680_SPI_SET_PAGE_FAILED 7 - -// BME680 driver error codes ORed with error codes for I2C and SPI interfaces -#define BME680_RESET_CMD_FAILED ( 1 << 8) -#define BME680_WRONG_CHIP_ID ( 2 << 8) -#define BME680_READ_CALIB_DATA_FAILED ( 3 << 8) -#define BME680_MEAS_ALREADY_RUNNING ( 4 << 8) -#define BME680_MEAS_NOT_RUNNING ( 5 << 8) -#define BME680_MEAS_STILL_RUNNING ( 6 << 8) -#define BME680_FORCE_MODE_FAILED ( 7 << 8) -#define BME680_NO_NEW_DATA ( 8 << 8) -#define BME680_WRONG_HEAT_PROFILE ( 9 << 8) -#define BME680_MEAS_GAS_NOT_VALID (10 << 8) -#define BME680_HEATER_NOT_STABLE (11 << 8) - -// Driver range definitions -#define BME680_HEATER_TEMP_MIN 200 // min. 200 degree Celsius -#define BME680_HEATER_TEMP_MAX 400 // max. 200 degree Celsius -#define BME680_HEATER_PROFILES 10 // max. 10 heater profiles 0 ... 9 -#define BME680_HEATER_NOT_USED -1 // heater not used profile - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** -------------------------------------------------------------------------- - * - * Functional Description of the BME680 sensor - * - * The BME680 sensor only support two modes, the sleep mode and the forced - * mode in which measurements are done. After power-up sequence, the sensor - * automatically starts in sleep mode. To start a measurement, the sensor has - * to switch in the forced mode. In this mode it performs exactly one - * measurement of temperature, pressure, humidity, and gas in that order, - * the so-called TPHG measurement cycle. After the execution of this TPHG - * measurement cycle, raw sensor data are available and the sensor returns - * automatically back to sleep mode. - * - * Using the BME680 consists of the following steps - * - * 1. Trigger the sensor to switch into forced mode to perform one THPG cycle - * 2. Wait until the THPG cycle has been finished (measurement duration) - * 3. Fetch raw sensor data, compensate and convert them to sensor values - * - * --------------------------------------------------------------------------- - */ - -/** - * @brief Initialize a BME680 sensor - * - * The function initializes the sensor device data structure, probes the - * sensor, soft resets the sensor, and configures the sensor with the - * the following default settings: - * - * - Oversampling rate for temperature, pressure, humidity is osr_1x - * - Filter size for pressure and temperature is iir_size 3 - * - Heater profile 0 with 320 degree C and 150 ms duration - * - * The sensor can be connected either to an I2C or a SPI bus. In both cases, - * the parameter *bus* specifies the ID of the corresponding bus. Please note - * that in case of SPI, bus 1 has to be used since bus 0 is used for system - * flash memory. - * - * If parameter *addr* is greater than 0, it defines a valid I2C slave address - * and the sensor is connected to an I2C bus. In that case parameter *cs* is - * ignored. - * - * If parameter *addr* is 0, the sensor is connected to a SPI bus. In that - * case, parameter *cs* defines the GPIO used as CS signal - * - * @param bus I2C or SPI bus at which BME680 sensor is connected - * @param addr I2C addr of the BME680 sensor, 0 for SPI - * @param cs SPI CS GPIO, ignored for I2C - * @return pointer to sensor data structure, or NULL on error - */ -bme680_sensor_t* bme680_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs); - -/** - * @brief Force one single TPHG measurement - * - * The function triggers the sensor to start one THPG measurement cycle. - * Parameters for the measurement like oversampling rates, IIR filter sizes - * and heater profile can be configured before. - * - * Once the TPHG measurement is started, the user task has to wait for the - * results. The duration of the TPHG measurement can be determined with - * function *bme680_get_measurement_duration*. - * - * @param dev pointer to the sensor device data structure - * @return true on success, false on error - */ -bool bme680_force_measurement (bme680_sensor_t* dev); - - -/** - * @brief Get estimated duration of a TPHG measurement - * - * The function returns an estimated duration of the TPHG measurement cycle - * in RTOS ticks for the current configuration of the sensor. - * - * This duration is the time required by the sensor for one TPHG measurement - * until the results are available. It strongly depends on which measurements - * are performed in the THPG measurement cycle and what configuration - * parameters were set. It can vary from 1 RTOS (10 ms) tick up to 4500 RTOS - * ticks (4.5 seconds). - * - * If the measurement configuration is not changed, the duration can be - * considered as constant. - * - * @param dev pointer to the sensor device data structure - * @return duration of TPHG measurement cycle in ticks or 0 on error - */ -uint32_t bme680_get_measurement_duration (const bme680_sensor_t *dev); - -/** - * @brief Get the measurement status - * - * The function can be used to test whether a measurement that was started - * before is still running. - * - * @param dev pointer to the sensor device data structure - * @return true if measurement is still running or false otherwise - */ -bool bme680_is_measuring (bme680_sensor_t* dev); - - -/** - * @brief Get results of a measurement in fixed point representation - * - * The function returns the results of a TPHG measurement that has been - * started before. If the measurement is still running, the function fails - * and returns invalid values (see type declaration). - * - * @param dev pointer to the sensor device data structure - * @param results pointer to a data structure that is filled with results - * @return true on success, false on error - */ -bool bme680_get_results_fixed (bme680_sensor_t* dev, - bme680_values_fixed_t* results); - -/** - * @brief Get results of a measurement in floating point representation - * - * The function returns the results of a TPHG measurement that has been - * started before. If the measurement is still running, the function fails - * and returns invalid values (see type declaration). - * - * @param dev pointer to the sensor device data structure - * @param results pointer to a data structure that is filled with results - * @return true on success, false on error - */ -bool bme680_get_results_float (bme680_sensor_t* dev, - bme680_values_float_t* results); - -/** - * @brief Start a measurement, wait and return the results (fixed point) - * - * This function is a combination of functions above. For convenience it - * starts a TPHG measurement using *bme680_force_measurement*, then it waits - * the measurement duration for the results using *vTaskDelay* and finally it - * returns the results using function *bme680_get_results_fixed*. - * - * Note: Since the calling task is delayed using function *vTaskDelay*, this - * function must not be used when it is called from a software timer callback - * function. - * - * @param dev pointer to the sensor device data structure - * @param results pointer to a data structure that is filled with results - * @return true on success, false on error - */ -bool bme680_measure_fixed (bme680_sensor_t* dev, - bme680_values_fixed_t* results); - - -/** - * @brief Start a measurement, wait and return the results (floating point) - * - * This function is a combination of functions above. For convenience it - * starts a TPHG measurement using *bme680_force_measurement*, then it waits - * the measurement duration for the results using *vTaskDelay* and finally it - * returns the results using function *bme680_get_results_float*. - * - * Note: Since the calling task is delayed using function *vTaskDelay*, this - * function must not be used when it is called from a software timer callback - * function. - * - * @param dev pointer to the sensor device data structure - * @param results pointer to a data structure that is filled with results - * @return true on success, false on error - */ -bool bme680_measure_float (bme680_sensor_t* dev, - bme680_values_float_t* results); - -/** - * @brief Set the oversampling rates for measurements - * - * The BME680 sensor allows to define individual oversampling rates for - * the measurements of temperature, pressure and humidity. Using an - * oversampling rate of *osr*, the resolution of raw sensor data can be - * increased by ld(*osr*) bits. - * - * Possible oversampling rates are 1x (default), 2x, 4x, 8x, 16x, see type - * *bme680_oversampling_rate_t*. The default oversampling rate is 1. - * - * Please note: Use *osr_none* to skip the corresponding measurement. - * - * @param dev pointer to the sensor device data structure - * @param ost oversampling rate for temperature measurements - * @param osp oversampling rate for pressure measurements - * @param osh oversampling rate for humidity measurements - * @return true on success, false on error - */ -bool bme680_set_oversampling_rates (bme680_sensor_t* dev, - bme680_oversampling_rate_t osr_t, - bme680_oversampling_rate_t osr_p, - bme680_oversampling_rate_t osr_h); - - -/** - * @brief Set the size of the IIR filter - * - * The sensor integrates an internal IIR filter (low pass filter) to reduce - * short-term changes in sensor output values caused by external disturbances. - * It effectively reduces the bandwidth of the sensor output values. - * - * The filter can optionally be used for pressure and temperature data that - * are subject to many short-term changes. Using the IIR filter, increases the - * resolution of pressure and temperature data to 20 bit. Humidity and gas - * inside the sensor does not fluctuate rapidly and does not require such a - * low pass filtering. - * - * The default filter size is 3 (*iir_size_3*). - * - * Please note: If the size of the filter is 0, the filter is not used. - * - * @param dev pointer to the sensor device data structure - * @param size IIR filter size - * @return true on success, false on error - */ -bool bme680_set_filter_size(bme680_sensor_t* dev, bme680_filter_size_t size); - - -/** - * @brief Set a heater profile for gas measurements - * - * The sensor integrates a heater for the gas measurement. Parameters for this - * heater are defined by so called heater profiles. The sensor supports up to - * 10 heater profiles, which are numbered from 0 to 9. Each profile consists of - * a temperature set-point (the target temperature) and a heating duration. - * - * This function sets the parameters for one of the heater profiles 0 ... 9. - * To activate the gas measurement with this profile, use function - * *bme680_use_heater_profile*, see below. - * - * Please note: According to the data sheet, a target temperatures of between - * 200 and 400 degrees Celsius are typical and about 20 to 30 ms are necessary - * for the heater to reach the desired target temperature. - * - * @param dev pointer to the sensor device data structure - * @param profile heater profile 0 ... 9 - * @param temperature target temperature in degree Celsius - * @param duration heating duration in milliseconds - * @return true on success, false on error - */ -bool bme680_set_heater_profile (bme680_sensor_t* dev, - uint8_t profile, - uint16_t temperature, - uint16_t duration); - -/** - * @brief Activate gas measurement with a given heater profile - * - * The function activates the gas measurement with one of the heater - * profiles 0 ... 9 or deactivates the gas measurement completely when - * -1 or BME680_HEATER_NOT_USED is used as heater profile. - * - * Parameters of the activated heater profile have to be set before with - * function *bme680_set_heater_profile* otherwise the function fails. - * - * If several heater profiles have been defined with function - * *bme680_set_heater_profile*, a sequence of gas measurements with different - * heater parameters can be realized by a sequence of activations of different - * heater profiles for successive TPHG measurements using this function. - * - * @param dev pointer to the sensor device data structure0 * - * @param profile 0 ... 9 to activate or -1 to deactivate gas measure - * @return true on success, false on error - */ -bool bme680_use_heater_profile (bme680_sensor_t* dev, int8_t profile); - -/** - * @brief Set ambient temperature - * - * The heater resistance calculation algorithm takes into account the ambient - * temperature of the sensor. This function can be used to set this ambient - * temperature. Either values determined from the sensor itself or from - * another temperature sensor can be used. The default ambient temperature - * is 25 degree Celsius. - * - * @param dev pointer to the sensor device data structure - * @param temperature ambient temperature in degree Celsius - * @return true on success, false on error - */ -bool bme680_set_ambient_temperature (bme680_sensor_t* dev, - int16_t temperature); - - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __BME680_H__ */ diff --git a/extras/bme680/bme680_platform.c b/extras/bme680/bme680_platform.c deleted file mode 100644 index 00cb8cf..0000000 --- a/extras/bme680/bme680_platform.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Driver for Bosch Sensortec BME680 digital temperature, humidity, pressure - * and gas sensor connected to I2C or SPI - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#include "bme680_platform.h" - -// platform specific SPI functions - -static const spi_settings_t bus_settings = { - .mode = SPI_MODE0, - .freq_divider = SPI_FREQ_DIV_1M, - .msb = true, - .minimal_pins = false, - .endianness = SPI_LITTLE_ENDIAN -}; - -bool spi_device_init (uint8_t bus, uint8_t cs) -{ - gpio_enable(cs, GPIO_OUTPUT); - gpio_write (cs, true); - return true; -} - -size_t spi_transfer_pf(uint8_t bus, uint8_t cs, const uint8_t *mosi, uint8_t *miso, uint16_t len) -{ - spi_settings_t old_settings; - - spi_get_settings(bus, &old_settings); - spi_set_settings(bus, &bus_settings); - gpio_write(cs, false); - - size_t transfered = spi_transfer (bus, (const void*)mosi, (void*)miso, len, SPI_8BIT); - - gpio_write(cs, true); - spi_set_settings(bus, &old_settings); - - return transfered; -} - diff --git a/extras/bme680/bme680_platform.h b/extras/bme680/bme680_platform.h deleted file mode 100644 index 9f47c2e..0000000 --- a/extras/bme680/bme680_platform.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Driver for Bosch Sensortec BME680 digital temperature, humidity, pressure - * and gas sensor connected to I2C or SPI - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#ifndef __BME680_PLATFORM_H__ -#define __BME680_PLATFORM_H__ - -#if !defined(ESP_OPEN_RTOS) -#define ESP_OPEN_RTOS 1 -#endif - -#ifdef ESP_OPEN_RTOS // ESP8266 - -// platform specific includes - -#include "FreeRTOS.h" -#include "task.h" - -#include "espressif/esp_common.h" -#include "espressif/sdk_private.h" - -#include "esp/uart.h" -#include "esp/spi.h" -#include "i2c/i2c.h" - -// platform specific SPI functions - -#define spi_bus_init(bus,sck,miso,mosi) // not needed on ESP8266 - -extern bool spi_device_init (uint8_t bus, uint8_t cs); -extern size_t spi_transfer_pf (uint8_t bus, uint8_t cs, - const uint8_t *mosi, uint8_t *miso, - uint16_t len); - -#endif // ESP_OPEN_RTOS - -#endif // __BME680_PLATFORM_H__ diff --git a/extras/bme680/bme680_types.h b/extras/bme680/bme680_types.h deleted file mode 100644 index 6858797..0000000 --- a/extras/bme680/bme680_types.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Driver for Bosch Sensortec BME680 digital temperature, humidity, pressure - * and gas sensor connected to I2C or SPI - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef __BME680_TYPES_H__ -#define __BME680_TYPES_H__ - -#include "stdint.h" -#include "stdbool.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * @brief Fixed point sensor values (fixed THPG values) - */ -typedef struct { // invalid value - int16_t temperature; // temperature in degree C * 100 (INT16_MIN) - uint32_t pressure; // barometric pressure in Pascal (0) - uint32_t humidity; // relative humidity in % * 1000 (0) - uint32_t gas_resistance; // gas resistance in Ohm (0) -} bme680_values_fixed_t; - -/** - * @brief Floating point sensor values (real THPG values) - */ -typedef struct { // invalid value - float temperature; // temperature in degree C (-327.68) - float pressure; // barometric pressure in hPascal (0.0) - float humidity; // relative humidity in % (0.0) - float gas_resistance; // gas resistance in Ohm (0.0) -} bme680_values_float_t; - - -/** - * @brief Oversampling rates - */ -typedef enum { - osr_none = 0, // measurement is skipped, output values are invalid - osr_1x = 1, // default oversampling rates - osr_2x = 2, - osr_4x = 3, - osr_8x = 4, - osr_16x = 5 -} bme680_oversampling_rate_t; - - -/** - * @brief Filter sizes - */ -typedef enum { - iir_size_0 = 0, // filter is not used - iir_size_1 = 1, - iir_size_3 = 2, - iir_size_7 = 3, - iir_size_15 = 4, - iir_size_31 = 5, - iir_size_63 = 6, - iir_size_127 = 7 -} bme680_filter_size_t; - - -/** - * @brief Sensor parameters that configure the TPHG measurement cycle - * - * T - temperature measurement - * P - pressure measurement - * H - humidity measurement - * G - gas measurement - */ -typedef struct { - - uint8_t osr_temperature; // T oversampling rate (default osr_1x) - uint8_t osr_pressure; // P oversampling rate (default osr_1x) - uint8_t osr_humidity; // H oversampling rate (default osr_1x) - uint8_t filter_size; // IIR filter size (default iir_size_3) - - int8_t heater_profile; // Heater profile used (default 0) - uint16_t heater_temperature[10]; // Heater temperature for G (default 320) - uint16_t heater_duration[10]; // Heater duration for G (default 150) - - int8_t ambient_temperature; // Ambient temperature for G (default 25) - -} bme680_settings_t; - -/** - * @brief Data structure for calibration parameters - * - * These calibration parameters are used in compensation algorithms to convert - * raw sensor data to measurement results. - */ -typedef struct { - - uint16_t par_t1; // calibration data for temperature compensation - int16_t par_t2; - int8_t par_t3; - - uint16_t par_p1; // calibration data for pressure compensation - int16_t par_p2; - int8_t par_p3; - int16_t par_p4; - int16_t par_p5; - int8_t par_p7; - int8_t par_p6; - int16_t par_p8; - int16_t par_p9; - uint8_t par_p10; - - uint16_t par_h1; // calibration data for humidity compensation - uint16_t par_h2; - int8_t par_h3; - int8_t par_h4; - int8_t par_h5; - uint8_t par_h6; - int8_t par_h7; - - int8_t par_gh1; // calibration data for gas compensation - int16_t par_gh2; - int8_t par_gh3; - - int32_t t_fine; // temperatur correction factor for P and G - uint8_t res_heat_range; - int8_t res_heat_val; - int8_t range_sw_err; - -} bme680_calib_data_t; - - -/** - * @brief BME680 sensor device data structure type - */ -typedef struct { - - int error_code; // contains the error code of last operation - - uint8_t bus; // I2C = x, SPI = 1 - uint8_t addr; // I2C = slave address, SPI = 0 - uint8_t cs; // ESP8266, ESP32: GPIO used as SPI CS - // __linux__: device index - - bool meas_started; // indicates whether measurement started - uint8_t meas_status; // last sensor status (for internal use only) - - bme680_settings_t settings; // sensor settings - bme680_calib_data_t calib_data; // calibration data of the sensor - -} bme680_sensor_t; - - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __BME680_TYPES_H__ */ diff --git a/extras/bme680/component.mk b/extras/bme680/component.mk deleted file mode 100644 index cbbd51d..0000000 --- a/extras/bme680/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/bme680 - -# expected anyone using bme680 driver includes it as 'bme680/bme680.h' -INC_DIRS += $(bme680_ROOT).. -INC_DIRS += $(bme680_ROOT) - -# args for passing into compile rule generation -bme680_SRC_DIR = $(bme680_ROOT) - -$(eval $(call component_compile_rules,bme680)) diff --git a/extras/bmp180/README.md b/extras/bmp180/README.md index 9da464b..a8c41f5 100644 --- a/extras/bmp180/README.md +++ b/extras/bmp180/README.md @@ -34,7 +34,7 @@ As all data aqquired from the BMP180/BMP085 is provided to the `bmp180_informUse ``` // Own BMP180 User Inform Implementation -bool my_informUser(const QueueHandle_t* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) { +bool my_informUser(const xQueueHandle* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) { my_event_t ev; ev.event_type = MY_EVT_BMP180; diff --git a/extras/bmp180/bmp180.c b/extras/bmp180/bmp180.c index e1627a1..7291236 100644 --- a/extras/bmp180/bmp180.c +++ b/extras/bmp180/bmp180.c @@ -7,9 +7,13 @@ #include "espressif/esp_common.h" #include "espressif/sdk_private.h" +#include "i2c/i2c.h" + #define BMP180_RX_QUEUE_SIZE 10 #define BMP180_TASK_PRIORITY 9 +#define BMP180_DEVICE_ADDRESS 0x77 + #define BMP180_VERSION_REG 0xD0 #define BMP180_CONTROL_REG 0xF4 #define BMP180_RESET_REG 0xE0 @@ -23,7 +27,12 @@ // Values for BMP180_CONTROL_REG // #define BMP180_MEASURE_TEMP 0x2E -#define BMP180_MEASURE_PRESS 0x34 +#define BMP180_MEASURE_PRESS_OSS0 0x34 +#define BMP180_MEASURE_PRESS_OSS1 0x74 +#define BMP180_MEASURE_PRESS_OSS2 0xB4 +#define BMP180_MEASURE_PRESS_OSS3 0xF4 + +#define BMP180_DEFAULT_CONV_TIME 5000 // // CHIP ID stored in BMP180_VERSION_REG @@ -35,266 +44,242 @@ // #define BMP180_RESET_VALUE 0xB6 -static int bmp180_readRegister16(i2c_dev_t *dev, uint8_t reg, int16_t *r) -{ - uint8_t d[] = { 0, 0 }; - int error; - - if ((error = i2c_slave_read(dev->bus, dev->addr, ®, d, 2))) - return error; - - *r = ((int16_t)d[0] << 8) | (d[1]); - return 0; -} - -static int bmp180_start_Messurement(i2c_dev_t *dev, uint8_t cmd) -{ - uint8_t reg = BMP180_CONTROL_REG; - - return i2c_slave_write(dev->bus, dev->addr, ®, &cmd, 1); -} - -static bool bmp180_get_uncompensated_temperature(i2c_dev_t *dev, int32_t *ut) -{ - // Write Start Code into reg 0xF4. - if (bmp180_start_Messurement(dev, BMP180_MEASURE_TEMP)) - return false; - - // Wait 5ms, datasheet states 4.5ms - sdk_os_delay_us(5000); - - int16_t v; - if (bmp180_readRegister16(dev, BMP180_OUT_MSB_REG, &v)) - return false; - - *ut = v; - return true; -} - -static bool bmp180_get_uncompensated_pressure(i2c_dev_t *dev, uint8_t oss, uint32_t *up) -{ - uint16_t us; - - // Limit oss and set the measurement wait time. The datasheet - // states 4.5, 7.5, 13.5, 25.5ms for oss 0 to 3. - switch (oss) { - case 0: us = 5000; break; - case 1: us = 8000; break; - case 2: us = 14000; break; - default: oss = 3; us = 26000; break; - } - - // Write Start Code into reg 0xF4 - if (bmp180_start_Messurement(dev, BMP180_MEASURE_PRESS | (oss << 6))) - return false; - - sdk_os_delay_us(us); - - uint8_t d[] = { 0, 0, 0 }; - uint8_t reg = BMP180_OUT_MSB_REG; - if (i2c_slave_read(dev->bus, dev->addr, ®, d, 3)) - return false; - - uint32_t r = ((uint32_t)d[0] << 16) | ((uint32_t)d[1] << 8) | d[2]; - r >>= 8 - oss; - *up = r; - return true; -} - -// Returns true of success else false. -bool bmp180_fillInternalConstants(i2c_dev_t *dev, bmp180_constants_t *c) -{ - if (bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+0, &c->AC1) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+2, &c->AC2) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+4, &c->AC3) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+6, (int16_t *)&c->AC4) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+8, (int16_t *)&c->AC5) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+10, (int16_t *)&c->AC6) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+12, &c->B1) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+14, &c->B2) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+16, &c->MB) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+18, &c->MC) || - bmp180_readRegister16(dev, BMP180_CALIBRATION_REG+20, &c->MD)) { - return false; - } - -#ifdef BMP180_DEBUG - printf("%s: AC1:=%d AC2:=%d AC3:=%d AC4:=%u AC5:=%u AC6:=%u \n", __FUNCTION__, c->AC1, c->AC2, c->AC3, c->AC4, c->AC5, c->AC6); - printf("%s: B1:=%d B2:=%d\n", __FUNCTION__, c->B1, c->B2); - printf("%s: MB:=%d MC:=%d MD:=%d\n", __FUNCTION__, c->MB, c->MC, c->MD); -#endif - - // Error if any read as 0x0000 or 0xffff. - return !(c->AC1 == 0x0000 || c->AC2 == 0x0000 || c->AC3 == 0x0000 || - c->AC4 == 0x0000 || c->AC5 == 0x0000 || c->AC6 == 0x0000 || - c->B1 == 0x0000 || c->B2 == 0x0000 || - c->MB == 0x0000 || c->MC == 0x0000 || c->MD == 0x0000 || - c->AC1 == 0xffff || c->AC2 == 0xffff || c->AC3 == 0xffff || - c->AC4 == 0xffff || c->AC5 == 0xffff || c->AC6 == 0xffff || - c->B1 == 0xffff || c->B2 == 0xffff || - c->MB == 0xffff || c->MC == 0xffff || c->MD == 0xffff); -} - -bool bmp180_is_available(i2c_dev_t *dev) -{ - uint8_t id; - uint8_t reg = BMP180_VERSION_REG; - if (i2c_slave_read(dev->bus, dev->addr, ®, &id, 1)) - return false; - return id == BMP180_CHIP_ID; -} - -bool bmp180_measure(i2c_dev_t *dev, bmp180_constants_t *c, int32_t *temperature, - uint32_t *pressure, uint8_t oss) -{ - int32_t T, P; - - if (!temperature && !pressure) - return false; - - // Temperature is always needed, also required for pressure only. - // - // Calculation taken from BMP180 Datasheet - int32_t UT, X1, X2, B5; - if (!bmp180_get_uncompensated_temperature(dev, &UT)) - return false; - - X1 = ((UT - (int32_t)c->AC6) * (int32_t)c->AC5) >> 15; - X2 = ((int32_t)c->MC << 11) / (X1 + (int32_t)c->MD); - B5 = X1 + X2; - T = (B5 + 8) >> 4; - if (temperature) - *temperature = T; -#ifdef BMP180_DEBUG - printf("%s: T:= %ld.%d\n", __FUNCTION__, T/10, abs(T%10)); -#endif - - if (pressure) { - int32_t X3, B3, B6; - uint32_t B4, B7, UP; - - if (!bmp180_get_uncompensated_pressure(dev, oss, &UP)) - return false; - - // Calculation taken from BMP180 Datasheet - B6 = B5 - 4000; - X1 = ((int32_t)c->B2 * ((B6 * B6) >> 12)) >> 11; - X2 = ((int32_t)c->AC2 * B6) >> 11; - X3 = X1 + X2; - - B3 = ((((int32_t)c->AC1 * 4 + X3) << oss) + 2) >> 2; - X1 = ((int32_t)c->AC3 * B6) >> 13; - X2 = ((int32_t)c->B1 * ((B6 * B6) >> 12)) >> 16; - X3 = ((X1 + X2) + 2) >> 2; - B4 = ((uint32_t)c->AC4 * (uint32_t)(X3 + 32768)) >> 15; - B7 = ((uint32_t)UP - B3) * (uint32_t)(50000UL >> oss); - - if (B7 < 0x80000000UL) { - P = (B7 * 2) / B4; - } else { - P = (B7 / B4) * 2; - } - - X1 = (P >> 8) * (P >> 8); - X1 = (X1 * 3038) >> 16; - X2 = (-7357 * P) >> 16; - P = P + ((X1 + X2 + (int32_t)3791) >> 4); - if (pressure) - *pressure = P; -#ifdef BMP180_DEBUG - printf("%s: P:= %ld\n", __FUNCTION__, P); -#endif - } - return true; -} // BMP180_Event_Command typedef struct { uint8_t cmd; - const QueueHandle_t* resultQueue; + const xQueueHandle* resultQueue; } bmp180_command_t; -// Just works due to the fact that QueueHandle_t is a "void *" -static QueueHandle_t bmp180_rx_queue[I2C_MAX_BUS] = { NULL }; -static TaskHandle_t bmp180_task_handle[I2C_MAX_BUS] = { NULL }; +// Just works due to the fact that xQueueHandle is a "void *" +static xQueueHandle bmp180_rx_queue = NULL; +static xTaskHandle bmp180_task_handle = NULL; + +// Calibration constants +static int16_t AC1; +static int16_t AC2; +static int16_t AC3; +static uint16_t AC4; +static uint16_t AC5; +static uint16_t AC6; + +static int16_t B1; +static int16_t B2; + +static int16_t MB; +static int16_t MC; +static int16_t MD; // // Forward declarations // -static bool bmp180_informUser_Impl(const QueueHandle_t* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure); +static void bmp180_meassure(const bmp180_command_t* command); +static bool bmp180_informUser_Impl(const xQueueHandle* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure); // Set default implementation .. User gets result as bmp180_result_t event -bool (*bmp180_informUser)(const QueueHandle_t* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) = bmp180_informUser_Impl; +bool (*bmp180_informUser)(const xQueueHandle* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) = bmp180_informUser_Impl; // I2C Driver Task static void bmp180_driver_task(void *pvParameters) { // Data to be received from user bmp180_command_t current_command; - bmp180_constants_t bmp180_constants; - i2c_dev_t *dev = (i2c_dev_t*)pvParameters; #ifdef BMP180_DEBUG // Wait for commands from the outside printf("%s: Started Task\n", __FUNCTION__); #endif - // Initialize all internal constants. - if (!bmp180_fillInternalConstants(dev, &bmp180_constants)) { - printf("%s: reading internal constants failed\n", __FUNCTION__); - vTaskDelete(NULL); - } - - while(1) { + while(1) + { // Wait for user to insert commands - if (xQueueReceive(bmp180_rx_queue[dev->bus], ¤t_command, portMAX_DELAY) == pdTRUE) { + if (xQueueReceive(bmp180_rx_queue, ¤t_command, portMAX_DELAY) == pdTRUE) + { #ifdef BMP180_DEBUG printf("%s: Received user command %d 0x%p\n", __FUNCTION__, current_command.cmd, current_command.resultQueue); #endif // use user provided queue - if (current_command.resultQueue != NULL) { + if (current_command.resultQueue != NULL) + { // Work on it ... - int32_t T = 0; - uint32_t P = 0; - - if (bmp180_measure(dev, &bmp180_constants, &T, (current_command.cmd & BMP180_PRESSURE) ? &P : NULL, 3)) { - // Inform the user ... - if (!bmp180_informUser(current_command.resultQueue, - current_command.cmd, - ((bmp180_temp_t)T)/10.0, - (bmp180_press_t)P)) { - // Failed to send info to user - printf("%s: Unable to inform user bmp180_informUser returned \"false\"\n", __FUNCTION__); - } - } + bmp180_meassure(¤t_command); } } } } -static bool bmp180_create_communication_queues(i2c_dev_t *dev) +static uint8_t bmp180_readRegister8(uint8_t reg) { - // Just create them once by bus - if (bmp180_rx_queue[dev->bus] == NULL) - bmp180_rx_queue[dev->bus] = xQueueCreate(BMP180_RX_QUEUE_SIZE, sizeof(bmp180_result_t)); + uint8_t r = 0; - return bmp180_rx_queue[dev->bus] != NULL; + if (!i2c_slave_read(BMP180_DEVICE_ADDRESS, reg, &r, 1)) + { + r = 0; + } + return r; } -static bool bmp180_createTask(i2c_dev_t *dev) + +static int16_t bmp180_readRegister16(uint8_t reg) +{ + uint8_t d[] = { 0, 0 }; + int16_t r = 0; + + if (i2c_slave_read(BMP180_DEVICE_ADDRESS, reg, d, 2)) + { + r = ((int16_t)d[0]<<8) | (d[1]); + } + return r; +} + +static void bmp180_start_Messurement(uint8_t cmd) +{ + uint8_t d[] = { BMP180_CONTROL_REG, cmd }; + + i2c_slave_write(BMP180_DEVICE_ADDRESS, d, 2); +} + +static int16_t bmp180_getUncompensatedMessurement(uint8_t cmd) +{ + // Write Start Code into reg 0xF4 (Currently without oversampling ...) + bmp180_start_Messurement((cmd==BMP180_TEMPERATURE)?BMP180_MEASURE_TEMP:BMP180_MEASURE_PRESS_OSS0); + + // Wait 5ms Datasheet states 4.5ms + sdk_os_delay_us(BMP180_DEFAULT_CONV_TIME); + + return (int16_t)bmp180_readRegister16(BMP180_OUT_MSB_REG); +} + +static void bmp180_fillInternalConstants(void) +{ + AC1 = bmp180_readRegister16(BMP180_CALIBRATION_REG+0); + AC2 = bmp180_readRegister16(BMP180_CALIBRATION_REG+2); + AC3 = bmp180_readRegister16(BMP180_CALIBRATION_REG+4); + AC4 = bmp180_readRegister16(BMP180_CALIBRATION_REG+6); + AC5 = bmp180_readRegister16(BMP180_CALIBRATION_REG+8); + AC6 = bmp180_readRegister16(BMP180_CALIBRATION_REG+10); + + B1 = bmp180_readRegister16(BMP180_CALIBRATION_REG+12); + B2 = bmp180_readRegister16(BMP180_CALIBRATION_REG+14); + + MB = bmp180_readRegister16(BMP180_CALIBRATION_REG+16); + MC = bmp180_readRegister16(BMP180_CALIBRATION_REG+18); + MD = bmp180_readRegister16(BMP180_CALIBRATION_REG+20); + +#ifdef BMP180_DEBUG + printf("%s: AC1:=%d AC2:=%d AC3:=%d AC4:=%u AC5:=%u AC6:=%u \n", __FUNCTION__, AC1, AC2, AC3, AC4, AC5, AC6); + printf("%s: B1:=%d B2:=%d\n", __FUNCTION__, B1, B2); + printf("%s: MB:=%d MC:=%d MD:=%d\n", __FUNCTION__, MB, MC, MD); +#endif +} + +static bool bmp180_create_communication_queues() +{ + // Just create them once + if (bmp180_rx_queue==NULL) + { + bmp180_rx_queue = xQueueCreate(BMP180_RX_QUEUE_SIZE, sizeof(bmp180_result_t)); + } + + return (bmp180_rx_queue!=NULL); +} + +static bool bmp180_is_avaialble() +{ + return (bmp180_readRegister8(BMP180_VERSION_REG)==BMP180_CHIP_ID); +} + +static bool bmp180_createTask() { // We already have a task portBASE_TYPE x = pdPASS; - if (bmp180_task_handle[dev->bus] == NULL) { - x = xTaskCreate(bmp180_driver_task, "bmp180_driver_task", 256, (void*)dev, BMP180_TASK_PRIORITY, &bmp180_task_handle[dev->bus]); //TODO: name task with i2c bus + if (bmp180_task_handle==NULL) + { + x = xTaskCreate(bmp180_driver_task, (signed char *)"bmp180_driver_task", 256, NULL, BMP180_TASK_PRIORITY, &bmp180_task_handle); + } + return (x==pdPASS); +} + +static void bmp180_meassure(const bmp180_command_t* command) +{ + int32_t T, P; + + // Init result to 0 + T = P = 0; + + if (command->resultQueue != NULL) + { + int32_t UT, X1, X2, B5; + + // + // Temperature is always needed ... Also required for pressure only + // + // Calculation taken from BMP180 Datasheet + UT = (int32_t)bmp180_getUncompensatedMessurement(BMP180_TEMPERATURE); + + X1 = (UT - (int32_t)AC6) * ((int32_t)AC5) >> 15; + X2 = ((int32_t)MC << 11) / (X1 + (int32_t)MD); + B5 = X1 + X2; + + T = (B5 + 8) >> 4; + +#ifdef BMP180_DEBUG + printf("%s: T:= %ld.%d\n", __FUNCTION__, T/10, abs(T%10)); +#endif + + // Do we also need pressure? + if (command->cmd & BMP180_PRESSURE) + { + int32_t X3, B3, B6; + uint32_t B4, B7, UP; + + UP = ((uint32_t)bmp180_getUncompensatedMessurement(BMP180_PRESSURE) & 0xFFFF); + + // Calculation taken from BMP180 Datasheet + B6 = B5 - 4000; + X1 = ((int32_t)B2 * ((B6 * B6) >> 12)) >> 11; + X2 = ((int32_t)AC2 * B6) >> 11; + X3 = X1 + X2; + + B3 = (((int32_t)AC1 * 4 + X3) + 2) >> 2; + X1 = ((int32_t)AC3 * B6) >> 13; + X2 = ((int32_t)B1 * ((B6 * B6) >> 12)) >> 16; + X3 = ((X1 + X2) + 2) >> 2; + B4 = ((uint32_t)AC4 * (uint32_t)(X3 + 32768)) >> 15; + B7 = (UP - B3) * (uint32_t)(50000UL); + + if (B7 < 0x80000000) + { + P = (B7 * 2) / B4; + } + else + { + P = (B7 / B4) * 2; + } + + X1 = (P >> 8) * (P >> 8); + X1 = (X1 * 3038) >> 16; + X2 = (-7357 * P) >> 16; + P = P + ((X1 + X2 + (int32_t)3791) >> 4); + +#ifdef BMP180_DEBUG + printf("%s: P:= %ld\n", __FUNCTION__, P); +#endif + } + + // Inform the user ... + if (!bmp180_informUser(command->resultQueue, command->cmd, ((bmp180_temp_t)T)/10.0, (bmp180_press_t)P)) + { + // Failed to send info to user + printf("%s: Unable to inform user bmp180_informUser returned \"false\"\n", __FUNCTION__); + } } - return x == pdPASS; } // Default user inform implementation -static bool bmp180_informUser_Impl(const QueueHandle_t* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) +static bool bmp180_informUser_Impl(const xQueueHandle* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure) { bmp180_result_t result; @@ -306,51 +291,61 @@ static bool bmp180_informUser_Impl(const QueueHandle_t* resultQueue, uint8_t cmd } // Just init all needed queues -bool bmp180_init(i2c_dev_t *dev) +bool bmp180_init(uint8_t scl, uint8_t sda) { // 1. Create required queues bool result = false; - if (bmp180_create_communication_queues(dev)) { - // 2. Check for bmp180 ... - if (bmp180_is_available(dev)) { - // 3. Start driver task - if (bmp180_createTask(dev)) { + if (bmp180_create_communication_queues()) + { + // 2. Init i2c driver + i2c_init(scl, sda); + + // 3. Check for bmp180 ... + if (bmp180_is_avaialble()) + { + // 4. Init all internal constants ... + bmp180_fillInternalConstants(); + + // 5. Start driver task + if (bmp180_createTask()) + { // We are finished result = true; } } } + return result; } -void bmp180_trigger_measurement(i2c_dev_t *dev, const QueueHandle_t* resultQueue) +void bmp180_trigger_measurement(const xQueueHandle* resultQueue) { bmp180_command_t c; c.cmd = BMP180_PRESSURE + BMP180_TEMPERATURE; c.resultQueue = resultQueue; - xQueueSend(bmp180_rx_queue[dev->bus], &c, 0); + xQueueSend(bmp180_rx_queue, &c, 0); } -void bmp180_trigger_pressure_measurement(i2c_dev_t *dev, const QueueHandle_t* resultQueue) +void bmp180_trigger_pressure_measurement(const xQueueHandle* resultQueue) { bmp180_command_t c; c.cmd = BMP180_PRESSURE; c.resultQueue = resultQueue; - xQueueSend(bmp180_rx_queue[dev->bus], &c, 0); + xQueueSend(bmp180_rx_queue, &c, 0); } -void bmp180_trigger_temperature_measurement(i2c_dev_t *dev, const QueueHandle_t* resultQueue) +void bmp180_trigger_temperature_measurement(const xQueueHandle* resultQueue) { bmp180_command_t c; c.cmd = BMP180_TEMPERATURE; c.resultQueue = resultQueue; - xQueueSend(bmp180_rx_queue[dev->bus], &c, 0); + xQueueSend(bmp180_rx_queue, &c, 0); } diff --git a/extras/bmp180/bmp180.h b/extras/bmp180/bmp180.h index a29a1ae..b675130 100644 --- a/extras/bmp180/bmp180.h +++ b/extras/bmp180/bmp180.h @@ -14,20 +14,12 @@ #include "FreeRTOS.h" #include "queue.h" -#include "i2c/i2c.h" - // Uncomment to enable debug output //#define BMP180_DEBUG -#define BMP180_DEVICE_ADDRESS 0x77 - #define BMP180_TEMPERATURE (1<<0) #define BMP180_PRESSURE (1<<1) -#ifdef __cplusplus -extern "C" { -#endif - // // Create bmp180_types // @@ -46,49 +38,18 @@ typedef struct } bmp180_result_t; // Init bmp180 driver ... -bool bmp180_init(i2c_dev_t *dev); +bool bmp180_init(uint8_t scl, uint8_t sda); // Trigger a "complete" measurement (temperature and pressure will be valid when given to "bmp180_informUser) -void bmp180_trigger_measurement(i2c_dev_t *dev, const QueueHandle_t* resultQueue); +void bmp180_trigger_measurement(const xQueueHandle* resultQueue); // Trigger a "temperature only" measurement (only temperature will be valid when given to "bmp180_informUser) -void bmp180_trigger_temperature_measurement(i2c_dev_t *dev, const QueueHandle_t* resultQueue); +void bmp180_trigger_temperature_measurement(const xQueueHandle* resultQueue); // Trigger a "pressure only" measurement (only pressure will be valid when given to "bmp180_informUser) -void bmp180_trigger_pressure_measurement(i2c_dev_t *dev, const QueueHandle_t* resultQueue); +void bmp180_trigger_pressure_measurement(const xQueueHandle* resultQueue); // Give the user the chance to create it's own handler -extern bool (*bmp180_informUser)(const QueueHandle_t* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure); - -// Calibration constants -typedef struct -{ - int16_t AC1; - int16_t AC2; - int16_t AC3; - uint16_t AC4; - uint16_t AC5; - uint16_t AC6; - - int16_t B1; - int16_t B2; - - int16_t MB; - int16_t MC; - int16_t MD; -} bmp180_constants_t; - -// Returns true if the bmp180 is detected. -bool bmp180_is_available(i2c_dev_t *dev); -// Reads all the internal constants, returning true on success. -bool bmp180_fillInternalConstants(i2c_dev_t *dev, bmp180_constants_t *c); -// Reads an optional temperature and pressure. The over sampling -// setting, oss, may be 0 to 3. Returns true on success. -bool bmp180_measure(i2c_dev_t *dev, bmp180_constants_t *c, int32_t *temperature, - uint32_t *pressure, uint8_t oss); - -#ifdef __cplusplus -} -#endif +extern bool (*bmp180_informUser)(const xQueueHandle* resultQueue, uint8_t cmd, bmp180_temp_t temperature, bmp180_press_t pressure); #endif /* DRIVER_BMP180_H_ */ diff --git a/extras/bmp280/README.md b/extras/bmp280/README.md deleted file mode 100644 index 29d14f0..0000000 --- a/extras/bmp280/README.md +++ /dev/null @@ -1,108 +0,0 @@ -# Driver for BMP280 and BME280 absolute barometric pressure sensors - -The driver works only with BMP280 and BME280 sensors. For BMP080/BMP180 there's -a separate driver. Even though BMP280 is a successor of BMP180 they are not -compatible. They have different registers and different operation modes. -BMP280 supports two ways of communication: spi and i2c. This driver provides -only i2c communication. -The driver is written for [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos) -framework and requires [i2c driver](https://github.com/SuperHouse/esp-open-rtos/tree/master/extras/i2c) -from it. - -## Features - - * I2C communication. - * Forced mode (Similar to BMP180 operation). - * Normal mode. Continuous measurement. - * Soft reset. - -## Usage - -Connect BMP280 or BME280 module to you ESP8266 module and initialize the I2C SCL and SDA pins: - -``` -const uint8_t bus = 0; -const uint8_t scl_pin = 0; -const uint8_t sda_pin = 2; -i2c_init(bus, scl_pin, sda_pin, I2C_FREQ_100K); - -``` - -Pull up SDO pin of BMP280 in order to have address 0x77 `BMP280_I2C_ADDRESS_1`. -Or pull down SDO pin for address 0x76 `BMP280_I2C_ADDRESS_0`. Otherwise your -sensor will not work. - -The BMP280 or BME280 are auto-detected at initialization based on the chip ID -and this ID is stored in the device descriptor. - -BMP280 supports two operation modes. - -### Forced mode - -In forced mode, a single measurement is performed according to selected -configuration. When the measurement is finished, the sensor returns to -sleep mode and the measurement results can be read. - -### Normal mode - -Normal mode continuously cycles between measurement period and standby period, -whose time is defined by standby_time. - -## Example - -### Forced mode - -``` -bmp280_params_t params; -float pressure, temperature, humidity; - -bmp280_init_default_params(¶ms); -params.mode = BMP280_MODE_FORCED; - -bmp280_t bmp280_dev; -bmp280_dev.i2c_addr = BMP280_I2C_ADDRESS_0; -bmp280_init(&bmp280_dev, ¶ms); -bool bme280p = bmp280_dev.id == BME280_CHIP_ID; - -while(1) { - bmp280_force_measurement(&bmp280_dev)); - // wait for measurement to complete - while (bmp280_is_measuring(&bmp280_dev)) {}; - - bmp280_read_float(&bmp280_dev, &temperature, &pressure, &humidity); - printf("Pressure: %.2f Pa, Temperature: %.2f C", pressure, temperature); - if (bme280p) - printf(", Humidity: %.2f\n", humidity); - vTaskDelay(1000 / portTICK_PERIOD_MS); -} -``` - -### Normal mode - -``` -bmp280_params_t params; -float pressure, temperature, humidity; - -bmp280_init_default_params(¶ms); - -bmp280_t bmp280_dev; -bmp280_dev.i2c_addr = BMP280_I2C_ADDRESS_0; -bmp280_init(&bmp280_dev, ¶ms); -bool bme280p = bmp280_dev.id == BME280_CHIP_ID; - -while(1) { - bmp280_read_float(&bmp280_dev, &temperature, &pressure, &humidity); - printf("Pressure: %.2f Pa, Temperature: %.2f C", pressure, temperature); - if (bme280p) - printf(", Humidity: %.2f\n", humidity); - else - printf("\n"); - vTaskDelay(1000 / portTICK_PERIOD_MS); -} -``` - -## License - -The driver is released under MIT license. - -Copyright (c) 2016 sheinz (https://github.com/sheinz) diff --git a/extras/bmp280/bmp280.c b/extras/bmp280/bmp280.c deleted file mode 100644 index d2f3795..0000000 --- a/extras/bmp280/bmp280.c +++ /dev/null @@ -1,383 +0,0 @@ -/** - * The MIT License (MIT) - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include "bmp280.h" - -#ifdef BMP280_DEBUG -#include -#define debug(fmt, ...) printf("%s" fmt "\n", "bmp280: ", ## __VA_ARGS__); -#else -#define debug(fmt, ...) -#endif - -/** - * BMP280 registers - */ -#define BMP280_REG_TEMP_XLSB 0xFC /* bits: 7-4 */ -#define BMP280_REG_TEMP_LSB 0xFB -#define BMP280_REG_TEMP_MSB 0xFA -#define BMP280_REG_TEMP (BMP280_REG_TEMP_MSB) -#define BMP280_REG_PRESS_XLSB 0xF9 /* bits: 7-4 */ -#define BMP280_REG_PRESS_LSB 0xF8 -#define BMP280_REG_PRESS_MSB 0xF7 -#define BMP280_REG_PRESSURE (BMP280_REG_PRESS_MSB) -#define BMP280_REG_CONFIG 0xF5 /* bits: 7-5 t_sb; 4-2 filter; 0 spi3w_en */ -#define BMP280_REG_CTRL 0xF4 /* bits: 7-5 osrs_t; 4-2 osrs_p; 1-0 mode */ -#define BMP280_REG_STATUS 0xF3 /* bits: 3 measuring; 0 im_update */ -#define BMP280_REG_CTRL_HUM 0xF2 /* bits: 2-0 osrs_h; */ -#define BMP280_REG_RESET 0xE0 -#define BMP280_REG_ID 0xD0 -#define BMP280_REG_CALIB 0x88 -#define BMP280_REG_HUM_CALIB 0x88 - - -#define BMP280_RESET_VALUE 0xB6 - - -void bmp280_init_default_params(bmp280_params_t *params) -{ - params->mode = BMP280_MODE_NORMAL; - params->filter = BMP280_FILTER_OFF; - params->oversampling_pressure = BMP280_STANDARD; - params->oversampling_temperature = BMP280_STANDARD; - params->oversampling_humidity = BMP280_STANDARD; - params->standby = BMP280_STANDBY_250; -} - -static bool read_register16(i2c_dev_t *dev, uint8_t addr, uint16_t *value) -{ - uint8_t d[] = {0, 0}; - if (!i2c_slave_read(dev->bus, dev->addr, &addr, d, sizeof(d))) { - *value = d[0] | (d[1] << 8); - return true; - } - return false; -} - -static inline int read_data(i2c_dev_t *dev, uint8_t addr, uint8_t *value, uint8_t len) -{ - return i2c_slave_read(dev->bus, dev->addr, &addr, value, len); -} - -static bool read_calibration_data(bmp280_t *dev) -{ - - if (read_register16(&dev->i2c_dev, 0x88, &dev->dig_T1) && - read_register16(&dev->i2c_dev, 0x8a, (uint16_t *)&dev->dig_T2) && - read_register16(&dev->i2c_dev, 0x8c, (uint16_t *)&dev->dig_T3) && - read_register16(&dev->i2c_dev, 0x8e, &dev->dig_P1) && - read_register16(&dev->i2c_dev, 0x90, (uint16_t *)&dev->dig_P2) && - read_register16(&dev->i2c_dev, 0x92, (uint16_t *)&dev->dig_P3) && - read_register16(&dev->i2c_dev, 0x94, (uint16_t *)&dev->dig_P4) && - read_register16(&dev->i2c_dev, 0x96, (uint16_t *)&dev->dig_P5) && - read_register16(&dev->i2c_dev, 0x98, (uint16_t *)&dev->dig_P6) && - read_register16(&dev->i2c_dev, 0x9a, (uint16_t *)&dev->dig_P7) && - read_register16(&dev->i2c_dev, 0x9c, (uint16_t *)&dev->dig_P8) && - read_register16(&dev->i2c_dev, 0x9e, (uint16_t *)&dev->dig_P9)) { - - debug("Calibration data received:"); - debug("dig_T1=%d", dev->dig_T1); - debug("dig_T2=%d", dev->dig_T2); - debug("dig_T3=%d", dev->dig_T3); - debug("dig_P1=%d", dev->dig_P1); - debug("dig_P2=%d", dev->dig_P2); - debug("dig_P3=%d", dev->dig_P3); - debug("dig_P4=%d", dev->dig_P4); - debug("dig_P5=%d", dev->dig_P5); - debug("dig_P6=%d", dev->dig_P6); - debug("dig_P7=%d", dev->dig_P7); - debug("dig_P8=%d", dev->dig_P8); - debug("dig_P9=%d", dev->dig_P9); - - return true; - } - - return false; -} - -static bool read_hum_calibration_data(bmp280_t *dev) -{ - uint16_t h4, h5; - - if (!read_data(&dev->i2c_dev, 0xa1, &dev->dig_H1, 1) && - read_register16(&dev->i2c_dev, 0xe1, (uint16_t *)&dev->dig_H2) && - !read_data(&dev->i2c_dev, 0xe3, &dev->dig_H3, 1) && - read_register16(&dev->i2c_dev, 0xe4, &h4) && - read_register16(&dev->i2c_dev, 0xe5, &h5) && - !read_data(&dev->i2c_dev, 0xe7, (uint8_t *)&dev->dig_H6, 1)) { - dev->dig_H4 = (h4 & 0x00ff) << 4 | (h4 & 0x0f00) >> 8; - dev->dig_H5 = h5 >> 4; - debug("Calibration data received:"); - debug("dig_H1=%d", dev->dig_H1); - debug("dig_H2=%d", dev->dig_H2); - debug("dig_H3=%d", dev->dig_H3); - debug("dig_H4=%d", dev->dig_H4); - debug("dig_H5=%d", dev->dig_H5); - debug("dig_H6=%d", dev->dig_H6); - return true; - } - - return false; -} - -static int write_register8(i2c_dev_t *dev, uint8_t addr, uint8_t value) -{ - return i2c_slave_write(dev->bus, dev->addr, &addr, &value, 1); -} - -bool bmp280_init(bmp280_t *dev, bmp280_params_t *params) -{ - - if (dev->i2c_dev.addr != BMP280_I2C_ADDRESS_0 && dev->i2c_dev.addr != BMP280_I2C_ADDRESS_1) { - debug("Invalid I2C address"); - return false; - } - - if (read_data(&dev->i2c_dev, BMP280_REG_ID, &dev->id, 1)) { - debug("Sensor not found"); - return false; - } - - if (dev->id != BMP280_CHIP_ID && dev->id != BME280_CHIP_ID) { - debug("Sensor wrong version"); - return false; - } - - // Soft reset. - if (write_register8(&dev->i2c_dev, BMP280_REG_RESET, BMP280_RESET_VALUE)) { - debug("Failed resetting sensor"); - return false; - } - - // Wait until finished copying over the NVP data. - while (1) { - uint8_t status; - if (!read_data(&dev->i2c_dev, BMP280_REG_STATUS, &status, 1) && (status & 1) == 0) - break; - } - - if (!read_calibration_data(dev)) { - debug("Failed to read calibration data"); - return false; - } - - if (dev->id == BME280_CHIP_ID && !read_hum_calibration_data(dev)) { - debug("Failed to read humidity calibration data"); - return false; - } - - uint8_t config = (params->standby << 5) | (params->filter << 2); - debug("Writing config reg=%x", config); - if (write_register8(&dev->i2c_dev, BMP280_REG_CONFIG, config)) { - debug("Failed configuring sensor"); - return false; - } - - if (params->mode == BMP280_MODE_FORCED) { - params->mode = BMP280_MODE_SLEEP; // initial mode for forced is sleep - } - - uint8_t ctrl = (params->oversampling_temperature << 5) | (params->oversampling_pressure << 2) - | (params->mode); - - - if (dev->id == BME280_CHIP_ID) { - // Write crtl hum reg first, only active after write to BMP280_REG_CTRL. - uint8_t ctrl_hum = params->oversampling_humidity; - debug("Writing ctrl hum reg=%x", ctrl_hum); - if (write_register8(&dev->i2c_dev, BMP280_REG_CTRL_HUM, ctrl_hum)) { - debug("Failed controlling sensor"); - return false; - } - } - - debug("Writing ctrl reg=%x", ctrl); - if (write_register8(&dev->i2c_dev, BMP280_REG_CTRL, ctrl)) { - debug("Failed controlling sensor"); - return false; - } - - return true; -} - -bool bmp280_force_measurement(bmp280_t *dev) -{ - uint8_t ctrl; - if (read_data(&dev->i2c_dev, BMP280_REG_CTRL, &ctrl, 1)) - return false; - ctrl &= ~0b11; // clear two lower bits - ctrl |= BMP280_MODE_FORCED; - debug("Writing ctrl reg=%x", ctrl); - if (write_register8(&dev->i2c_dev, BMP280_REG_CTRL, ctrl)) { - debug("Failed starting forced mode"); - return false; - } - return true; -} - -bool bmp280_is_measuring(bmp280_t *dev) -{ - uint8_t status; - if (read_data(&dev->i2c_dev, BMP280_REG_STATUS, &status, 1)) - return false; - if (status & (1 << 3)) { - debug("Status: measuring"); - return true; - } - debug("Status: idle"); - return false; -} - -/** - * Compensation algorithm is taken from BMP280 datasheet. - * - * Return value is in degrees Celsius. - */ -static inline int32_t compensate_temperature(bmp280_t *dev, - int32_t adc_temp, int32_t *fine_temp) -{ - int32_t var1, var2; - - var1 = ((((adc_temp >> 3) - ((int32_t)dev->dig_T1 << 1))) - * (int32_t)dev->dig_T2) >> 11; - var2 = (((((adc_temp >> 4) - (int32_t)dev->dig_T1) - * ((adc_temp >> 4) - (int32_t)dev->dig_T1)) >> 12) - * (int32_t)dev->dig_T3) >> 14; - - *fine_temp = var1 + var2; - return (*fine_temp * 5 + 128) >> 8; -} - -/** - * Compensation algorithm is taken from BMP280 datasheet. - * - * Return value is in Pa, 24 integer bits and 8 fractional bits. - */ -static inline uint32_t compensate_pressure(bmp280_t *dev, - int32_t adc_press, int32_t fine_temp) -{ - int64_t var1, var2, p; - - var1 = (int64_t)fine_temp - 128000; - var2 = var1 * var1 * (int64_t)dev->dig_P6; - var2 = var2 + ((var1 * (int64_t)dev->dig_P5) << 17); - var2 = var2 + (((int64_t)dev->dig_P4) << 35); - var1 = ((var1 * var1 * (int64_t)dev->dig_P3) >> 8) + - ((var1 * (int64_t)dev->dig_P2) << 12); - var1 = (((int64_t)1 << 47) + var1) * ((int64_t)dev->dig_P1) >> 33; - - if (var1 == 0) { - return 0; // avoid exception caused by division by zero - } - - p = 1048576 - adc_press; - p = (((p << 31) - var2) * 3125) / var1; - var1 = ((int64_t)dev->dig_P9 * (p >> 13) * (p >> 13)) >> 25; - var2 = ((int64_t)dev->dig_P8 * p) >> 19; - - p = ((p + var1 + var2) >> 8) + ((int64_t)dev->dig_P7 << 4); - return p; -} - -/** - * Compensation algorithm is taken from BME280 datasheet. - * - * Return value is in Pa, 24 integer bits and 8 fractional bits. - */ -static inline uint32_t compensate_humidity(bmp280_t *dev, - int32_t adc_hum, int32_t fine_temp) -{ - int32_t v_x1_u32r; - - v_x1_u32r = fine_temp - (int32_t)76800; - v_x1_u32r = ((((adc_hum << 14) - ((int32_t)dev->dig_H4 << 20) - - ((int32_t)dev->dig_H5 * v_x1_u32r)) + - (int32_t)16384) >> 15) * - (((((((v_x1_u32r * (int32_t)dev->dig_H6) >> 10) * - (((v_x1_u32r * (int32_t)dev->dig_H3) >> 11) + - (int32_t)32768)) >> 10) + (int32_t)2097152) * - (int32_t)dev->dig_H2 + 8192) >> 14); - v_x1_u32r = v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * - (int32_t)dev->dig_H1) >> 4); - v_x1_u32r = v_x1_u32r < 0 ? 0 : v_x1_u32r; - v_x1_u32r = v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r; - return v_x1_u32r >> 12; -} - -bool bmp280_read_fixed(bmp280_t *dev, int32_t *temperature, - uint32_t *pressure, uint32_t *humidity) -{ - int32_t adc_pressure; - int32_t adc_temp; - uint8_t data[8]; - - // Only the BME280 supports reading the humidity. - if (dev->id != BME280_CHIP_ID) { - if (humidity) - *humidity = 0; - humidity = NULL; - } - - // Need to read in one sequence to ensure they match. - size_t size = humidity ? 8 : 6; - if (read_data(&dev->i2c_dev, 0xf7, data, size)) { - debug("Failed reading"); - return false; - } - - adc_pressure = data[0] << 12 | data[1] << 4 | data[2] >> 4; - adc_temp = data[3] << 12 | data[4] << 4 | data[5] >> 4; - debug("ADC temperature: %d", adc_temp); - debug("ADC pressure: %d", adc_pressure); - - int32_t fine_temp; - *temperature = compensate_temperature(dev, adc_temp, &fine_temp); - *pressure = compensate_pressure(dev, adc_pressure, fine_temp); - - if (humidity) { - int32_t adc_humidity = data[6] << 8 | data[7]; - debug("ADC humidity: %d", adc_humidity); - *humidity = compensate_humidity(dev, adc_humidity, fine_temp); - } - - return true; -} - -bool bmp280_read_float(bmp280_t *dev, float *temperature, - float *pressure, float *humidity) -{ - int32_t fixed_temperature; - uint32_t fixed_pressure; - uint32_t fixed_humidity; - if (bmp280_read_fixed(dev, &fixed_temperature, &fixed_pressure, - humidity ? &fixed_humidity : NULL)) { - *temperature = (float)fixed_temperature/100; - *pressure = (float)fixed_pressure/256; - if (humidity) - *humidity = (float)fixed_humidity/1024; - return true; - } - - return false; -} diff --git a/extras/bmp280/bmp280.h b/extras/bmp280/bmp280.h deleted file mode 100644 index 39805fc..0000000 --- a/extras/bmp280/bmp280.h +++ /dev/null @@ -1,198 +0,0 @@ -/** - * The MIT License (MIT) - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef __BMP280_H__ -#define __BMP280_H__ - -#include -#include -#include "i2c/i2c.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Uncomment to enable debug output. - */ -// #define BMP280_DEBUG - -/** - * BMP280 or BME280 address is 0x77 if SDO pin is high, and is 0x76 if - * SDO pin is low. - */ -#define BMP280_I2C_ADDRESS_0 0x76 -#define BMP280_I2C_ADDRESS_1 0x77 - -#define BMP280_CHIP_ID 0x58 /* BMP280 has chip-id 0x58 */ -#define BME280_CHIP_ID 0x60 /* BME280 has chip-id 0x60 */ - -/** - * Mode of BMP280 module operation. - * Forced - Measurement is initiated by user. - * Normal - Continues measurement. - */ -typedef enum { - BMP280_MODE_SLEEP = 0, - BMP280_MODE_FORCED = 1, - BMP280_MODE_NORMAL = 3 -} BMP280_Mode; - -typedef enum { - BMP280_FILTER_OFF = 0, - BMP280_FILTER_2 = 1, - BMP280_FILTER_4 = 2, - BMP280_FILTER_8 = 3, - BMP280_FILTER_16 = 4 -} BMP280_Filter; - -/** - * Pressure oversampling settings - */ -typedef enum { - BMP280_SKIPPED = 0, /* no measurement */ - BMP280_ULTRA_LOW_POWER = 1, /* oversampling x1 */ - BMP280_LOW_POWER = 2, /* oversampling x2 */ - BMP280_STANDARD = 3, /* oversampling x4 */ - BMP280_HIGH_RES = 4, /* oversampling x8 */ - BMP280_ULTRA_HIGH_RES = 5 /* oversampling x16 */ -} BMP280_Oversampling; - -/** - * Stand by time between measurements in normal mode - */ -typedef enum { - BMP280_STANDBY_05 = 0, /* stand by time 0.5ms */ - BMP280_STANDBY_62 = 1, /* stand by time 62.5ms */ - BMP280_STANDBY_125 = 2, /* stand by time 125ms */ - BMP280_STANDBY_250 = 3, /* stand by time 250ms */ - BMP280_STANDBY_500 = 4, /* stand by time 500ms */ - BMP280_STANDBY_1000 = 5, /* stand by time 1s */ - BMP280_STANDBY_2000 = 6, /* stand by time 2s BMP280, 10ms BME280 */ - BMP280_STANDBY_4000 = 7, /* stand by time 4s BMP280, 20ms BME280 */ -} BMP280_StandbyTime; - -/** - * Configuration parameters for BMP280 module. - * Use function bmp280_init_default_params to use default configuration. - */ -typedef struct { - BMP280_Mode mode; - BMP280_Filter filter; - BMP280_Oversampling oversampling_pressure; - BMP280_Oversampling oversampling_temperature; - BMP280_Oversampling oversampling_humidity; - BMP280_StandbyTime standby; -} bmp280_params_t; - - -typedef struct { - uint16_t dig_T1; - int16_t dig_T2; - int16_t dig_T3; - uint16_t dig_P1; - int16_t dig_P2; - int16_t dig_P3; - int16_t dig_P4; - int16_t dig_P5; - int16_t dig_P6; - int16_t dig_P7; - int16_t dig_P8; - int16_t dig_P9; - - /* Humidity compensation for BME280 */ - uint8_t dig_H1; - int16_t dig_H2; - uint8_t dig_H3; - int16_t dig_H4; - int16_t dig_H5; - int8_t dig_H6; - - i2c_dev_t i2c_dev; /* I2C dev setting. */ - uint8_t id; /* Chip ID */ -} bmp280_t; - -/** - * Initialize default parameters. - * Default configuration: - * mode: NORAML - * filter: OFF - * oversampling: x4 - * standby time: 250ms - */ -void bmp280_init_default_params(bmp280_params_t *params); - -/** - * Initialize BMP280 module, probes for the device, soft resets the device, - * reads the calibration constants, and configures the device using the supplied - * parameters. Returns true on success otherwise false. - * - * The I2C address is assumed to have been initialized in the dev, and - * may be either BMP280_I2C_ADDRESS_0 or BMP280_I2C_ADDRESS_1. If the I2C - * address is unknown then try initializing each in turn. - * - * This may be called again to soft reset the device and initialize it again. - */ -bool bmp280_init(bmp280_t *dev, bmp280_params_t *params); - -/** - * Start measurement in forced mode. - * The module remains in forced mode after this call. - * Do not call this method in normal mode. - */ -bool bmp280_force_measurement(bmp280_t *dev); - -/** - * Check if BMP280 is busy with measuring temperature/pressure. - * Return true if BMP280 is busy. - */ -bool bmp280_is_measuring(bmp280_t *dev); - -/** - * Read compensated temperature and pressure data: - * - * Temperature in degrees Celsius times 100. - * - * Pressure in Pascals in fixed point 24 bit integer 8 bit fraction format. - * - * Humidity is optional and only read for the BME280, in percent relative - * humidity as a fixed point 22 bit interger and 10 bit fraction format. - */ -bool bmp280_read_fixed(bmp280_t *dev, int32_t *temperature, - uint32_t *pressure, uint32_t *humidity); - -/** - * Read compensated temperature and pressure data: - * Temperature in degrees Celsius. - * Pressure in Pascals. - * Humidity is optional and only read for the BME280, in percent relative - * humidity. - */ -bool bmp280_read_float(bmp280_t *dev, float *temperature, - float *pressure, float *humidity); - -#ifdef __cplusplus -} -#endif - -#endif // __BMP280_H__ diff --git a/extras/bmp280/component.mk b/extras/bmp280/component.mk deleted file mode 100644 index 21323ba..0000000 --- a/extras/bmp280/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/bmp280 - -# expected anyone using bmp driver includes it as 'bmp280/bmp280.h' -INC_DIRS += $(bmp280_ROOT).. - -# args for passing into compile rule generation -bmp280_SRC_DIR = $(bmp280_ROOT) - -$(eval $(call component_compile_rules,bmp280)) diff --git a/extras/ccs811/README.md b/extras/ccs811/README.md deleted file mode 100644 index 3d39ae5..0000000 --- a/extras/ccs811/README.md +++ /dev/null @@ -1,577 +0,0 @@ -# Driver for the ams CCS811 digital gas sensor for monitoring indoor air quality. - -The driver is for the usage with the ESP8266 and [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos). - -It is also working with ESP32 and [ESP-IDF](https://github.com/espressif/esp-idf.git) using a wrapper component for ESP8266 functions, see folder ```components/esp8266_wrapper```, as well as Linux based systems using a wrapper library. - -## About the sensor - -The CCS811 is an ultra-low power digital sensor which detects **Volatile Organic Compounds (VOC)** for Indoor Air Quality (IAQ) monitoring that. The sensor allows to - -- convert raw sensor data to Total Volatile Organic Compound (TVOC) and equivalent CO2 (eCO2), -- compensate gas readings due to temperature and humidity using an external sensor, -- trigger interrupts when new measurement results are available or eCO2 value exceeds thresholds, -- correct baseline automatically or manually -- connect a NTC thermistor to provide means of calculating the local ambient temperature. - -The sensor uses an I2C interface and supports clock stretching. See the notes on clock stretching during I2C interface intialization. - -## Measurement Process - -### Sensor modes - -The CCS811 can operate in 5 different modes: - -Mode | Driver symbol | Period | RAW data | IAQ values ----- | ------------- | ------ |:--------:|:----------: -Idle, Low Current Mode | ``` ccs811_mode_idle ``` | - | - | - -Constant Power Mode | ``` ccs811_mode_1s ``` | 1 s | X | X -Pulse Heating Mode | ``` ccs811_mode_10s ``` | 10 s | X | X -Low Power Pulse Heating Mode | ``` ccs811_mode_60s ``` | 60 s | X | X -Constant Power Mode | ``` ccs811_mode_250ms ``` | 250 ms | X | - - -After power up, the sensor starts automatically in *Idle, Low Current Mode* (```mode_idle```). To start periodic measurements, the mode of the sensor has to be changed to any measurement mode. Measurement modes with with different rates of periodic measurements are available, see table above. - -**Please note:** In *Constant Power Mode* with measurements every 250 ms (```mode_250ms```) only raw data are available. In all other measurement modes, the Indoor Air Quality (IAQ) values are available additionally. The *Constant Power Mode* with measurements every 250 ms (```mode_250ms```) is only intended for systems where an external host system wants to run an algorithm with raw data. - -Once the sensor is initialized with function ```ccs811_init_sensor```, function ```ccs811_set_mode``` can be used to start periodic measurements with a given period. - -``` -static ccs811_sensor_t* sensor; -... -if ((sensor = ccs811_init_sensor (I2C_BUS, CCS811_I2C_ADDRESS_1))) -{ - ... - // start periodic measurement with one measurement per second - ccs811_set_mode (sensor, ccs811_mode_1s); -} -... -``` - -**Please note:** - -1. After setting the mode, the sensor is in conditioning period that needs up to 20 minutes, before accurate readings are generated, see the data sheet for more details. - -2. During the early-live (burn-in) period, the CCS811 sensor should run for 48 hours in the selected mode of operation to ensure sensor performance is stable, see the data sheet for more details. - -3. When the sensor operating mode is changed to a new mode with a lower sample rate, e.g., from *Pulse Heating Mode* (```mode_10s```) to *Low Power Pulse Heating Mode* (```mode_60s```), it should be placed in *Idle, Low Current Mode* (```mode_idle```) for at least 10 minutes before enabling the new mode. - -When a sensor operating mode is changed to a new mode with a higher sample rate, e.g., from *Low Power Pulse Heating Mode* (```mode_60s```) to *Pulse Heating Mode* (```mode_10s```), there is no requirement to wait before enabling the new mode. - -## Measurement results - -Once the measurement mode is set, the user task can use function ```ccs811_get_results``` with same rate as the measurement rate to fetch the results. The function returns **raw data** as well as **Indoor Air Quality (IAQ)** values. - -While raw data represents simply the current through the sensor and the voltage across the sensor with the selected current, IAQ values are the results of the processing these raw data by the sensor. IAQ values consist of the **equivalent CO2 (eCO2)** with a range from 400 ppm to 8192 ppm and **Total Volatile Organic Compound (TVOC)** with a range from 0 ppb to 1187 ppb. - -``` -uint16_t iaq_tvoc; -uint16_t iaq_eco2; -uint8_t raw_i; -uint16_t raw_v; -... -// get the results and do something with them -if (ccs811_get_results (sensor, &tvoc, &eco2, &raw_i, &raw_v)) -{ - ... -} -... -``` - -If some of the results are not needed, the corresponding pointer parameters can be set to NULL. - -If the function ```ccs811_get_results``` is called and no new data are available, e.g., due to the sensor mode time tolerance of 2%, the function still returns successfully. In this case, the results of the last measurement are returned and the error code CCS811_DRV_NO_NEW_DATA is set. - -**Please note:** - -1. In *Constant Power Mode* with measurements every 250 ms (```mode_250ms```) only raw data are available. - -2. The rate of fetching data must not be greater than the rate of measurement. Due to the sensor mode timing tolerance of 2 %, the rate of fetching data should be lower than the measurement rate. - -3. If the function is called and no new data are available, the results of the latest measurement are returned and error_code CCS811_DRV_NO_NEW_DATA is set. - -### Compensation - -If information about the environment like temperature and humidity are available from another sensor, they can be used by CCS811 to compensate gas readings due to temperature and humidity changes. Function ```ccs811_set_environmental_data``` can be used to set these environmental data. - -``` -float temperature; -float humidity; -... -if (sht3x_get_results (sht3x, &temperature, &humidity)) - // set CCS811 environmental data with values fetched from SHT3x - ccs811_set_environmental_data (ccs811, temperature, humidity); -... -``` - -### NTC - -CCS811 supports an external interface for connecting a negative thermal coefficient thermistor (R_NTC) to provide a cost effective and power efficient means of calculating the local ambient temperature. The sensor measures the voltage V_NTC across R_NTC as well as the voltage V_REF across a connected reference resistor (R_REF). Function ```ccs811_get_ntc_resistance``` can be used to fetch the current resistance of R_NTC. It uses the resistance of R_REF and measured voltages V_REF and V_NTV with the following equation: - - R_NTC = R_REF / V_REF * V_NTC - -Using the data sheet of the NTC, the ambient temperature can be calculated. See application note ams AN000372 for more details. For example, with Adafruit CCS811 Air Quality Sensor Breakout the ambienttemperature can be determined as following: - -``` -... -#define CCS811_R_REF 100000 // resistance of the reference resistor -#define CCS811_R_NTC 10000 // resistance of NTC at a reference temperature -#define CCS811_R_NTC_TEMP 25 // reference temperature for NTC -#define CCS811_BCONSTANT 3380 // B constant - -// get NTC resistance -uint32_t r_ntc = ccs811_get_ntc_resistance (sensor, CCS811_R_REF); - -// calculation of temperature from application note ams AN000372 -double ntc_temp; -ntc_temp = log((double)r_ntc / CCS811_R_NTC); // 1 -ntc_temp /= CCS811_BCONSTANT; // 2 -ntc_temp += 1.0 / (CCS811_R_NTC_TEMP + 273.15); // 3 -ntc_temp = 1.0 / ntc_temp; // 4 -ntc_temp -= 273.15; // 5 -.... -``` - -### Interrupts - -CCS811 supports two types of interrupts that can be used to fetch data: - -- data ready interrupt (INT_DATA_RDY) -- threshold interrupt (INT_THRESHOLD) - -#### Data ready interrupt - -At the end of each measurement cycle (every 250 ms, 1 second, 10 seconds, or 60 seconds), CCS811 can optionally trigger an interrupt. The signal *nINT* is driven low as soon as new sensor values are ready to read. It will stop being driven low when sensor data are read with function ```ccs811_get_results```. - -The interrupt is disabled by default. It can be enabled with function ```ccs811_enable_interrupt```. - -``` -... -// enable the data ready interrupt -ccs811_enable_interrupt (sensor, true); -... -``` - -#### Threshold interrupt - -The user task can choose that the data ready interrupt is not generated every time when new sensor values become ready but only if the eCO2 value moves from the current range (LOW, MEDIUM, or HIGH) into another range by more than a hysteresis value. Hysteresis is used to prevent multiple interrupts close to a threshold. - -The interrupt is disabled by default and can be enabled with function ```ccs811_set_eco2_thresholds```. The ranges are defined by parameters *low* and *high* as following - - LOW below parameter value *low* - MEDIUM between parameter values *low* and *high* - HIGH above parameter value *high* is range HIGH. - -If all parameters have valid values, the function sets the thresholds and enables the data ready interrupt. Using 0 for all parameters disables the interrupt. - -``` -... -// set threshold parameters and enable threshold interrupt mode -ccs811_set_eco2_thresholds (sensor, 600, 1100, 40); -... -``` - -### Baseline - -CCS81 supports automatic baseline correction over a minimum time of 24 hours. Using function ```ccs811_get_baseline```, the current baseline value can be saved before the sensor is powered down. This baseline can then be restored with function ```ccs811_set_baseline``` after sensor is powered up again to continue the automatic baseline process. - -## Error Handling - -Most driver functions return a simple boolean value to indicate whether its execution was successful or an error happened. In the latter case, the member ```error_code``` of the sensor device data structure is set which indicates what error happened. - -There are two different error levels that are ORed into one single *error_code*, errors in the I2C communication and errors of the CCS811 sensor itself. To test for a certain error, first you can AND the *error_code* with one of the error masks, ```CCS811_I2C_ERROR_MASK``` for I2C errors and ```CCS811_DRV_ERROR_MASK``` for other errors. Then you can test the result for a certain error code. - -For example, error handling for ```ccs811_get_results``` could look like: - -``` -if (ccs811_get_results (sensor, &tvoc, &eco2, &raw_i, &raw_v)) -{ - // no error happened - ... -} -else -{ - // error happened - switch (sensor->error_code & CCS811_I2C_ERROR_MASK) - { - case CCS811_I2C_BUSY: ... - case CCS811_I2C_READ_FAILED: ... - ... - } - switch (sensor->error_code & CCS811_DRV_ERROR_MASK) - { - case CCS811_WRONG_MODE: ... - case CCS811_DRV_NO_IAQ_DATA: ... - ... - } -} -``` - -## Usage - -First, the hardware configuration has to be established. - -### Hardware configurations - -Following figure shows the hardware configuration for ESP8266 and ESP32 if no interrupt is used. - -``` - +------------------+ +--------+ - | ESP8266 / ESP32 | | CCS811 | - | | | | - | GPIO 14 (SCL) >-------> SCL | - | GPIO 13 (SDA) <-------> SDA | - | GND --------> /WAKE | - +------------------+ +--------+ -``` - -If interrupt signal *nINT* is used to fetch new data, additionally the interrupt pin has to be connected to a GPIO pin. - -``` - +------------------+ +--------+ - | ESP8266 / ESP32 | | CCS811 | - | | | | - | GPIO 14 (SCL) >-------> SCL | - | GPIO 13 (SDA) <-------> SDA | - | GPIO 5 <-------- /nINT | - | GND --------> /WAKE | - +------------------+ +--------+ -``` - -If CCS811 sensor is used in conjunction with another sensor, e.g., a SHT3x sensor, the hardware configuration looks like following: - -``` - +------------------+ +--------+ - | ESP8266 / ESP32 | | CCS811 | - | | | | - | GPIO 14 (SCL) >--+----> SCL | - | GPIO 13 (SDA) <--|-+--> SDA | - | GND ---|-|--> /WAKE | - | | | | +--------+ - | | | | | SHT3x | - | | | | | | - | | +----> SCL | - | | +--> SDA | - +------------------+ +--------+ -``` - -### Communication interface settings - -Dependent on the hardware configuration, the communication interface settings have to be defined. - -``` -// define I2C interfaces at which CCS811 sensors can be connected -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 - -// define GPIO for interrupt -#define INT_GPIO 5 -``` - -### Main program - -Before using the CCS811 driver, function ```i2c_init``` needs to be called for each I2C interface to setup them. - -**Please note:** CCS811 uses clock streching that can be longer than the default I2C clock stretching. Therefore the clock stretching parameter of I2C has to be set to at least ```CCS811_I2C_CLOCK_STRETCH```. - -``` -... -i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K); -i2c_set_clock_stretch (I2C_BUS, CCS811_I2C_CLOCK_STRETCH); -... -``` - -Once I2C interfaces to be used are initialized, function ```ccs811_init_sensor``` has to be called for each CCS811 sensor to initialize the sensor and to check its availability as well as its error state. The parameters specify the I2C bus to which it is connected and its I2C slave address. - -``` -static ccs811_sensor_t* sensor; // pointer to sensor device data structure -... -if ((sensor = ccs811_init_sensor (I2C_BUS, CCS811_I2C_ADDRESS_1))) -{ - ... -} -... -``` - -Function ```ccs811_init_sensor``` returns a pointer to the sensor device data structure or NULL in case of error. - -If initialization of the sensor was successful, the sensor mode has be set to start periodic measurement. The sensor mode can be changed anytime later. - -``` -... -// start periodic measurement with one measurement per second -ccs811_set_mode (sensor, ccs811_mode_1s); -... -``` - -Finally, a user task that uses the sensor has to be created. - -``` -xTaskCreate(user_task, "user_task", 256, NULL, 2, 0); -``` - -**Please note:** To avoid concurrency situations when driver functions are used to access the sensor, for example to read data, the user task must not be created until the sensor configuration is completed. - -The user task can use different approaches to fetch new data. Either new data are fetched periodically or the interrupt signal *nINT* is used when new data are available or eCO2 value exceeds defined thresholds. - -If new data are fetched **periodically** the implementation of the user task is quite simply and could look like following. - -``` -void user_task(void *pvParameters) -{ - uint16_t tvoc; - uint16_t eco2; - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // get the results and do something with them - if (ccs811_get_results (sensor, &tvoc, &eco2, 0, 0)) - ... - // passive waiting until 1 second is over - vTaskDelayUntil(&last_wakeup, 1000 / portTICK_PERIOD_MS); - } -} -... -``` - -The user task simply fetches new data with the same rate as the measurements are performed. - -**Please note:** The rate of fetching the measurement results must be not greater than the rate of periodic measurements of the sensor, however, it *should be less* to avoid conflicts caused by the timing tolerance of the sensor. - -A different approach is to use the **interrupt** *nINT*. This interrupt signal is either triggered every time when new data are available (INT_DATA_RDY) or only whenever eCO2 value exceeds defined thresholds (INT_THRESHOLD). In both cases, the user has to implement an interrupt handler that either fetches the data directly or triggers a task, that is waiting to fetch the data. - -``` -... -TaskHandle_t nINT_task; - -// Interrupt handler which resumes user_task_interrupt on interrupt - -void nINT_handler (uint8_t gpio) -{ - xTaskResumeFromISR (nINT_task); -} - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint16_t tvoc; - uint16_t eco2; - - while (1) - { - // task suspends itself and waits to be resumed by interrupt handler - vTaskSuspend (NULL); - - // after resume get the results and do something with them - if (ccs811_get_results (sensor, &tvoc, &eco2, 0, 0)) - ... - } -} -... - -xTaskCreate(user_task_interrupt, "user_task_interrupt", 256, NULL, 2, &nINT_task); -... -``` - -In this example, a task is defined which suspends itself in each cycle to wait for fetching the data. The task is resumed by the interrupt handler. - -Finally, the interrupt handler has to be activated for the GPIO which is connected to the interrupt signal. Furthermore, the interrupt has to be enabled in the CCS811 sensor. - -Function ```ccs811_enable_interrupt``` enables the interrupt that is triggered whenever new data are available (INT_DATA_RDY). - -``` -... -// activate the interrupt for INT_GPIO and set the interrupt handler -gpio_set_interrupt(INT_GPIO, GPIO_INTTYPE_EDGE_NEG, nINT_handler); - -// enable the data ready interrupt INT_DATA_RDY -ccs811_enable_interrupt (sensor, true); -... -```` - -Function ```ccs811_set_eco2_thresholds``` enables the interrupt that is triggered whenever eCO2 value exceeds the thresholds (INT_THRESHOLD) defined by parameters. - -``` -... -// activate the interrupt for INT_GPIO and set the interrupt handler -gpio_set_interrupt(INT_GPIO, GPIO_INTTYPE_EDGE_NEG, nINT_handler); - -// set threshold parameters and enable threshold interrupt mode INT_THRESHOLD -ccs811_set_eco2_thresholds (sensor, 600, 1100, 40); -... -```` - -## Full Example - -``` -/* -- use following constants to define the example mode ----------- */ - -// #define INT_DATA_RDY_USED -// #define INT_THRESHOLD_USED - -#if defined(INT_DATA_RDY_USED) || defined(INT_THRESHOLD_USED) -#define INT_USED -#endif - -/* -- includes ----------------------------------------------------- */ - -#include "ccs811.h" - -/* -- platform dependent definitions ------------------------------- */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define nINT_PIN 13 - -/* -- user tasks --------------------------------------------------- */ - -static ccs811_sensor_t* sensor; - -#ifdef INT_USED -/** - * In this example, the interrupt *nINT* is used. It is triggered every time - * new data are available (INT_DATA_RDY_USED) or exceed defined thresholds - * (INT_THRESHOLD_USED). In this case, the user has to define an interrupt - * handler that fetches the data directly or triggers a task, that is waiting - * to fetch the data. In this example, a task is defined which suspends itself - * in each cycle to wait for fetching the data. The task is resumed by the - * the interrupt handler. - */ - -TaskHandle_t nINT_task; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint16_t tvoc; - uint16_t eco2; - - while (1) - { - // task suspends itself and waits to be resumed by interrupt handler - vTaskSuspend (NULL); - - // after resume get the results and do something with them - if (ccs811_get_results (sensor, &tvoc, &eco2, 0, 0)) - printf("%.3f CCS811 Sensor interrupt: TVOC %d ppb, eCO2 %d ppm\n", - (double)sdk_system_get_time()*1e-3, tvoc, eco2); - } -} - -// Interrupt handler which resumes user_task_interrupt on interrupt - -static void IRAM nINT_handler(uint8_t gpio) -{ - xTaskResumeFromISR (nINT_task); -} - -#else // !INT_USED - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - uint16_t tvoc; - uint16_t eco2; - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // get environmental data from another sensor and set them - // ccs811_set_environmental_data (sensor, 25.3, 47.8); - - // get the results and do something with them - if (ccs811_get_results (sensor, &tvoc, &eco2, 0, 0)) - printf("%.3f CCS811 Sensor periodic: TVOC %d ppb, eCO2 %d ppm\n", - (double)sdk_system_get_time()*1e-3, tvoc, eco2); - - // passive waiting until 1 second is over - vTaskDelayUntil(&last_wakeup, 1000 / portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - // init all I2C bus interfaces at which CCS811 sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // longer clock stretching is required for CCS811 - i2c_set_clock_stretch (I2C_BUS, CCS811_I2C_CLOCK_STRETCH); - - // init the sensor with slave address CCS811_I2C_ADDRESS_1 connected I2C_BUS. - sensor = ccs811_init_sensor (I2C_BUS, CCS811_I2C_ADDRESS_1); - - if (sensor) - { - #if !defined (INT_USED) - - // create a periodic task that uses the sensor - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a task that is resumed by interrupt handler to use the sensor - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, &nINT_task); - - // activate the interrupt for nINT_PIN and set the interrupt handler - gpio_enable(nINT_PIN, GPIO_INPUT); - gpio_set_interrupt(nINT_PIN, GPIO_INTTYPE_EDGE_NEG, nINT_handler); - - #ifdef INT_DATA_RDY_USED - // enable the data ready interrupt - ccs811_enable_interrupt (sensor, true); - #else // INT_THRESHOLD_USED - // set threshold parameters and enable threshold interrupt mode - ccs811_set_eco2_thresholds (sensor, 600, 1100, 40); - #endif - - #endif // !defined(INT_USED) - - // start periodic measurement with one measurement per second - ccs811_set_mode (sensor, ccs811_mode_1s); - } - else - printf("Could not initialize CCS811 sensor\n"); -} - -``` - -## Further Examples - -See also the example in the examples directory [examples directory](../../examples/ccs811/README.md). diff --git a/extras/ccs811/ccs811.c b/extras/ccs811/ccs811.c deleted file mode 100644 index 5bf60d8..0000000 --- a/extras/ccs811/ccs811.c +++ /dev/null @@ -1,633 +0,0 @@ -/* - * Driver for AMS CCS811 digital gas sensor connected to I2C. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#include -#include - -#include "ccs811.h" - -#if defined(CCS811_DEBUG_LEVEL_2) -#define debug(s, f, ...) printf("%s %s: " s "\n", "CCS811", f, ## __VA_ARGS__) -#define debug_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "CCS811", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define debug(s, f, ...) -#define debug_dev(s, f, d, ...) -#endif - -#if defined(CCS811_DEBUG_LEVEL_1) || defined(CCS811_DEBUG_LEVEL_2) -#define error(s, f, ...) printf("%s %s: " s "\n", "CCS811", f, ## __VA_ARGS__) -#define error_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "CCS811", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define error(s, f, ...) -#define error_dev(s, f, d, ...) -#endif - -/* CCS811 register addresses */ -#define CCS811_REG_STATUS 0x00 -#define CCS811_REG_MEAS_MODE 0x01 -#define CCS811_REG_ALG_RESULT_DATA 0x02 -#define CCS811_REG_RAW_DATA 0x03 -#define CCS811_REG_ENV_DATA 0x05 -#define CCS811_REG_NTC 0x06 -#define CCS811_REG_THRESHOLDS 0x10 -#define CCS811_REG_BASELINE 0x11 - -#define CCS811_REG_HW_ID 0x20 -#define CCS811_REG_HW_VER 0x21 -#define CCS811_REG_FW_BOOT_VER 0x23 -#define CCS811_REG_FW_APP_VER 0x24 - -#define CCS811_REG_ERROR_ID 0xe0 - -#define CCS811_REG_APP_ERASE 0xf1 -#define CCS811_REG_APP_DATA 0xf2 -#define CCS811_REG_APP_VERIFY 0xf3 -#define CCS811_REG_APP_START 0xf4 -#define CCS811_REG_SW_RESET 0xff - -// status register bits -#define CCS811_STATUS_ERROR 0x01 // error, details in CCS811_REG_ERROR -#define CCS811_STATUS_DATA_RDY 0x08 // new data sample in ALG_RESULT_DATA -#define CCS811_STATUS_APP_VALID 0x10 // valid application firmware loaded -#define CCS811_STATUS_FW_MODE 0x80 // firmware is in application mode - -// error register bits -#define CCS811_ERR_WRITE_REG_INV 0x01 // invalid register address on write -#define CCS811_ERR_READ_REG_INV 0x02 // invalid register address on read -#define CCS811_ERR_MEASMODE_INV 0x04 // invalid requested measurement mode -#define CCS811_ERR_MAX_RESISTANCE 0x08 // maximum sensor resistance exceeded -#define CCS811_ERR_HEATER_FAULT 0x10 // heater current not in range -#define CCS811_ERR_HEATER_SUPPLY 0x20 // heater voltage not applied correctly - -/** - * Type declarations - */ - -typedef struct -{ - uint8_t reserved_1 :2; - uint8_t int_thresh :1; // interrupt if new ALG_RESULT_DAT crosses on of the thresholds - uint8_t int_datardy:1; // interrupt if new sample is ready in ALG_RESULT_DAT - uint8_t drive_mode :3; // mode number binary coded -} ccs811_meas_mode_reg_t; - - -/** - * forward declaration of functions for internal use only - */ - -static bool ccs811_reg_read(ccs811_sensor_t* dev, uint8_t reg, uint8_t *data, uint32_t len); -static bool ccs811_reg_write(ccs811_sensor_t* dev, uint8_t reg, uint8_t *data, uint32_t len); -static bool ccs811_check_error_status (ccs811_sensor_t* dev); -static bool ccs811_enable_threshold (ccs811_sensor_t* dev, bool enabled); -static bool ccs811_is_available (ccs811_sensor_t* dev); - -ccs811_sensor_t* ccs811_init_sensor (uint8_t bus, uint8_t addr) -{ - ccs811_sensor_t* dev; - - if ((dev = malloc (sizeof(ccs811_sensor_t))) == NULL) - return NULL; - - // init sensor data structure - dev->bus = bus; - dev->addr = addr; - dev->mode = ccs811_mode_idle; - dev->error_code = CCS811_OK; - - // check whether sensor is available including the check of the hardware - // id and the error state - if (!ccs811_is_available(dev)) - { - error_dev("Sensor is not available.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - const static uint8_t sw_reset[4] = { 0x11, 0xe5, 0x72, 0x8a }; - - // doing a software reset first - if (!ccs811_reg_write(dev, CCS811_REG_SW_RESET, (uint8_t*)sw_reset, 4)) - { - error_dev("Could not reset the sensor.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - uint8_t status; - - // wait 100 ms after the reset - vTaskDelay(100/portTICK_PERIOD_MS); - - // get the status to check whether sensor is in bootloader mode - if (!ccs811_reg_read(dev, CCS811_REG_STATUS, &status, 1)) - { - error_dev("Could not read status register %02x.", __FUNCTION__, dev, CCS811_REG_STATUS); - free (dev); - return NULL; - } - - // if sensor is in bootloader mode (FW_MODE == 0), it has to switch - // to the application mode first - if (!(status & CCS811_STATUS_FW_MODE)) - { - // check whether valid application firmware is loaded - if (!(status & CCS811_STATUS_APP_VALID)) - { - error_dev("Sensor is in boot mode, but has no valid application.", - __FUNCTION__, dev); - free (dev); - return NULL; - } - - // swtich to application mode - if (!ccs811_reg_write(dev, CCS811_REG_APP_START, 0, 0)) - { - error_dev("Could not start application", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // wait 100 ms after starting the app - vTaskDelay(100/portTICK_PERIOD_MS); - - // get the status to check whether sensor switched to application mode - if (!ccs811_reg_read(dev, CCS811_REG_STATUS, &status, 1) || - !(status & CCS811_STATUS_FW_MODE)) - { - error_dev("Could not start application.", __FUNCTION__, dev); - free (dev); - return NULL; - } - } - - // try to set default measurement mode to *ccs811_mode_1s* - if (!ccs811_set_mode(dev, ccs811_mode_1s)) - { - free (dev); - return NULL; - } - - return dev; -} - - -bool ccs811_set_mode (ccs811_sensor_t* dev, ccs811_mode_t mode) -{ - ccs811_meas_mode_reg_t reg; - - if (!dev) return false; - - dev->error_code = CCS811_OK; - - // read measurement mode register value - if (!ccs811_reg_read(dev, CCS811_REG_MEAS_MODE, (uint8_t*)®, 1)) - return false; - - reg.drive_mode = mode; - - // write back measurement mode register - if (!ccs811_reg_write(dev, CCS811_REG_MEAS_MODE, (uint8_t*)®, 1)) - { - error_dev ("Could not set measurement mode.", __FUNCTION__, dev); - return false; - } - - // check whether setting measurement mode were succesfull - if (!ccs811_reg_read(dev, CCS811_REG_MEAS_MODE, (uint8_t*)®, 1) || - reg.drive_mode != mode) - { - error_dev ("Could not set measurement mode to %d", __FUNCTION__, dev, mode); - return ccs811_check_error_status (dev); - } - - dev->mode = mode; - - return true; -} - -#define CCS811_ALG_DATA_ECO2_HB 0 -#define CCS811_ALG_DATA_ECO2_LB 1 -#define CCS811_ALG_DATA_TVOC_HB 2 -#define CCS811_ALG_DATA_TVOC_LB 3 -#define CCS811_ALG_DATA_STATUS 4 -#define CCS811_ALG_DATA_ERROR_ID 5 -#define CCS811_ALG_DATA_RAW_HB 6 -#define CCS811_ALG_DATA_RAW_LB 7 - -bool ccs811_get_results (ccs811_sensor_t* dev, - uint16_t* iaq_tvoc, - uint16_t* iaq_eco2, - uint8_t* raw_i, - uint16_t* raw_v) -{ - if (!dev) return false; - - dev->error_code = CCS811_OK; - - if (dev->mode == ccs811_mode_idle) - { - error_dev ("Sensor is in idle mode and not performing measurements.", - __FUNCTION__, dev); - dev->error_code = CCS811_DRV_WRONG_MODE; - return false; - } - - if (dev->mode == ccs811_mode_250ms && (iaq_tvoc || iaq_eco2)) - { - error_dev ("Sensor is in constant power mode, only raw data " - "are available every 250ms", - __FUNCTION__, dev); - dev->error_code = CCS811_DRV_NO_IAQ_DATA; - return false; - } - - uint8_t data[8]; - - // read IAQ sensor values and RAW sensor data including status and error id - if (!ccs811_reg_read(dev, CCS811_REG_ALG_RESULT_DATA, data, 8)) - { - error_dev ("Could not read sensor data.", __FUNCTION__, dev); - dev->error_code |= CCS811_DRV_RD_DATA_FAILED; - return false; - } - - // check for errors - if (data[CCS811_ALG_DATA_STATUS] & CCS811_STATUS_ERROR) - { - return ccs811_check_error_status (dev); - } - - // check whether new data are ready, if not, latest values are read from sensor - // and error_code is set - if (!(data[CCS811_ALG_DATA_STATUS] & CCS811_STATUS_DATA_RDY)) - { - debug_dev ("No new data.", __FUNCTION__, dev); - dev->error_code = CCS811_DRV_NO_NEW_DATA; - } - - // if *iaq* is not NULL return IAQ sensor values - if (iaq_tvoc) *iaq_tvoc = data[CCS811_ALG_DATA_TVOC_HB] << 8 | data[CCS811_ALG_DATA_TVOC_LB]; - if (iaq_eco2) *iaq_eco2 = data[CCS811_ALG_DATA_ECO2_HB] << 8 | data[CCS811_ALG_DATA_ECO2_LB]; - - // if *raw* is not NULL return RAW sensor data - if (raw_i) *raw_i = data[CCS811_ALG_DATA_RAW_HB] >> 2; - if (raw_v) *raw_v = (data[CCS811_ALG_DATA_RAW_HB] & 0x03) << 8 | data[CCS811_ALG_DATA_RAW_LB]; - - return true; -} - -uint32_t ccs811_get_ntc_resistance (ccs811_sensor_t* dev, uint32_t r_ref) -{ - if (!dev) return 0; - - uint8_t data[4]; - - // read baseline register - if (!ccs811_reg_read(dev, CCS811_REG_NTC, data, 4)) - return 0; - - // calculation from application note ams AN000372 - uint16_t v_ref = (uint16_t)(data[0]) << 8 | data[1]; - uint16_t v_ntc = (uint16_t)(data[2]) << 8 | data[3]; - - return (v_ntc * r_ref / v_ref); -} - - -bool ccs811_set_environmental_data (ccs811_sensor_t* dev, - float temperature, - float humidity) -{ - if (!dev) return false; - - uint16_t temp = (temperature + 25) * 512; // -25 °C maps to 0 - uint16_t hum = humidity * 512; - - // fill environmental data - uint8_t data[4] = { temp >> 8, temp & 0xff, - hum >> 8, hum & 0xff }; - - // send environmental data to the sensor - if (!ccs811_reg_write(dev, CCS811_REG_ENV_DATA, data, 4)) - { - error_dev ("Could not write environmental data to sensor.", __FUNCTION__, dev); - return false; - } - - return true; -} - -bool ccs811_set_eco2_thresholds (ccs811_sensor_t* dev, - uint16_t low, uint16_t high, uint8_t hysteresis) -{ - if (!dev) return false; - - dev->error_code = CCS811_OK; - - // check whether interrupt has to be disabled - if (!low && !high && !hysteresis) - return ccs811_enable_threshold (dev, false); - - // check parameters - if (low < CCS_ECO2_RANGE_MIN || high > CCS_ECO2_RANGE_MAX || low > high || !hysteresis) - { - error_dev ("Wrong threshold parameters", __FUNCTION__, dev); - dev->error_code = CCS811_DRV_WRONG_PARAMS; - return ccs811_enable_threshold (dev, false); - } - - // fill the threshold data - uint8_t data[5] = { low >> 8, low & 0xff, - high >> 8, high & 0xff, - hysteresis }; - - // write threshold data to the sensor - if (!ccs811_reg_write(dev, CCS811_REG_THRESHOLDS, data, 5)) - { - error_dev ("Could not write threshold interrupt data to sensor.", __FUNCTION__, dev); - return ccs811_enable_threshold (dev, false); - } - - // finally enable the threshold interrupt mode - return ccs811_enable_threshold (dev, true); -} - - -bool ccs811_enable_interrupt (ccs811_sensor_t* dev, bool enabled) -{ - if (!dev) return false; - - ccs811_meas_mode_reg_t reg; - - // read measurement mode register value - if (!ccs811_reg_read(dev, CCS811_REG_MEAS_MODE, (uint8_t*)®, 1)) - return false; - - reg.int_datardy = enabled; - reg.int_thresh = false; // threshold mode must not enabled - - // write back measurement mode register - if (!ccs811_reg_write(dev, CCS811_REG_MEAS_MODE, (uint8_t*)®, 1)) - { - error_dev ("Could not set measurment mode register.", __FUNCTION__, dev); - return false; - } - - return true; -} - -uint16_t ccs811_get_baseline (ccs811_sensor_t* dev) -{ - if (!dev) return 0; - - uint8_t data[2]; - - // read baseline register - if (!ccs811_reg_read(dev, CCS811_REG_BASELINE, data, 2)) - return 0; - - return (uint16_t)(data[0]) << 8 | data[1]; -} - - -bool ccs811_set_baseline (ccs811_sensor_t* dev, uint16_t baseline) -{ - if (!dev) return false; - - uint8_t data[2] = { baseline >> 8, baseline & 0xff }; - - // write baseline register - if (!ccs811_reg_write(dev, CCS811_REG_BASELINE, data, 2)) - return false; - - return true; -} - - -/** - * FUNCTIONS FOR INTERNAL USE ONLY - */ - - -static bool ccs811_enable_threshold (ccs811_sensor_t* dev, bool enabled) -{ - if (!dev) return false; - - ccs811_meas_mode_reg_t reg; - - // first, enable/disable the data ready interrupt - if (!ccs811_enable_interrupt (dev, enabled)) - return false; - - // read measurement mode register value - if (!ccs811_reg_read(dev, CCS811_REG_MEAS_MODE, (uint8_t*)®, 1)) - return false; - - // second, enable/disable the threshold interrupt mode - reg.int_thresh = enabled; - - // write back measurement mode register - if (!ccs811_reg_write(dev, CCS811_REG_MEAS_MODE, (uint8_t*)®, 1)) - { - error_dev ("Could not set measurement mode register.", __FUNCTION__, dev); - return false; - } - - return true; -} - - -static bool ccs811_reg_read(ccs811_sensor_t* dev, uint8_t reg, uint8_t *data, uint32_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Read %d byte from i2c slave starting at reg addr %02x.", __FUNCTION__, dev, len, reg); - - int result = i2c_slave_read(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? CCS811_I2C_BUSY : CCS811_I2C_READ_FAILED; - error_dev ("Error %d on read %d byte from I2C slave reg addr %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef CCS811_DEBUG_LEVEL_2 - printf("CCS811 %s: bus %d, addr %02x - Read following bytes: ", - __FUNCTION__, dev->bus, dev->addr); - printf("%0x: ", reg); - for (int i=0; i < len; i++) - printf("%0x ", data[i]); - printf("\n"); -# endif - - return true; -} - - -static bool ccs811_reg_write(ccs811_sensor_t* dev, uint8_t reg, uint8_t *data, uint32_t len) -{ - if (!dev) return false; - - debug_dev ("Write %d bytes to i2c slave starting at reg addr %02x", __FUNCTION__, dev, len, reg); - -# ifdef CCS811_DEBUG_LEVEL_2 - if (data && len) - { - printf("CCS811 %s: bus %d, addr %02x - Write following bytes: ", - __FUNCTION__, dev->bus, dev->addr); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); - } -# endif - - - int result = i2c_slave_write(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? CCS811_I2C_BUSY : CCS811_I2C_WRITE_FAILED; - error_dev ("Error %d on write %d byte to i2c slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - - return true; -} - - -static bool ccs811_check_error_status (ccs811_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = CCS811_OK; - - uint8_t status; - uint8_t err_reg; - - // check status register - if (!ccs811_reg_read(dev, CCS811_REG_STATUS, &status, 1)) - return false; - - if (!status & CCS811_STATUS_ERROR) - // everything is fine - return true; - - // Check the error register - if (!ccs811_reg_read(dev, CCS811_REG_ERROR_ID, &err_reg, 1)) - return false; - - if (err_reg & CCS811_ERR_WRITE_REG_INV) - { - error_dev ("Received an invalid register for write.", __FUNCTION__, dev); - dev->error_code = CCS811_DRV_WR_REG_INV; - return false; - } - - if (err_reg & CCS811_ERR_READ_REG_INV) - { - error_dev ("Received an invalid register for read.", __FUNCTION__, dev); - dev->error_code = CCS811_DRV_RD_REG_INV; - return false; - } - - if (err_reg & CCS811_ERR_MEASMODE_INV) - { - error_dev ("Received an invalid measurement mode request.", __FUNCTION__, dev); - dev->error_code = CCS811_DRV_MM_INV; - return false; - } - - if (err_reg & CCS811_ERR_MAX_RESISTANCE) - { - error_dev ("Sensor resistance measurement has reached" - " or exceeded the maximum range.", __FUNCTION__, dev); - dev->error_code = CCS811_DRV_MAX_RESIST; - return false; - } - - if (err_reg & CCS811_ERR_HEATER_FAULT) - { - error_dev ("Heater current not in range.", __FUNCTION__, dev); - dev->error_code = CCS811_DRV_HEAT_FAULT; - return false; - } - - if (err_reg & CCS811_ERR_HEATER_SUPPLY) - { - error_dev ("Heater voltage is not being applied correctly.", __FUNCTION__, dev); - dev->error_code = CCS811_DRV_HEAT_SUPPLY; - return false; - } - - return true; -} - - -static bool ccs811_is_available (ccs811_sensor_t* dev) -{ - if (!dev) return false; - - uint8_t reg_data[5]; - - // check hardware id (register 0x20) and hardware version (register 0x21) - if (!ccs811_reg_read(dev, CCS811_REG_HW_ID, reg_data, 5)) - return false; - - if (reg_data[0] != 0x81) - { - error_dev ("Wrong hardware ID %02x, should be 0x81", __FUNCTION__, dev, reg_data[0]); - dev->error_code = CCS811_DRV_HW_ID; - return false; - } - - debug_dev ("hardware version: %02x", __FUNCTION__, dev, reg_data[1]); - debug_dev ("firmware boot version: %02x", __FUNCTION__, dev, reg_data[3]); - debug_dev ("firmware app version: %02x", __FUNCTION__, dev, reg_data[4]); - - return ccs811_check_error_status (dev); -} - - diff --git a/extras/ccs811/ccs811.h b/extras/ccs811/ccs811.h deleted file mode 100644 index d7d3aa5..0000000 --- a/extras/ccs811/ccs811.h +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Driver for AMS CCS811 digital gas sensor connected to I2C. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef CCS811_DRV_H_ -#define CCS811_DRV_H_ - -// Uncomment one of the following defines to enable debug output -// #define CCS811_DEBUG_LEVEL_1 // only error messages -// #define CCS811_DEBUG_LEVEL_2 // debug and error messages - -#include "stdint.h" -#include "stdbool.h" - -#include "ccs811_platform.h" - -// CCS811 I2C addresses -#define CCS811_I2C_ADDRESS_1 0x5A // default -#define CCS811_I2C_ADDRESS_2 0x5B - -// CCS811 clock streching counter -#define CCS811_I2C_CLOCK_STRETCH 200 - -// Definition of error codes -#define CCS811_OK 0 -#define CCS811_NOK -1 - -#define CCS811_INT_ERROR_MASK 0x000f -#define CCS811_DRV_ERROR_MASK 0xfff0 - -// Error codes for the I2C interface ORed with CCS811 driver error codes -#define CCS811_I2C_READ_FAILED 1 -#define CCS811_I2C_WRITE_FAILED 2 -#define CCS811_I2C_BUSY 3 - -// CCS811 driver error codes ORed with error codes for I2C the interface -#define CCS811_DRV_BOOT_MODE (1 << 8) // firmware is in boot mode -#define CCS811_DRV_NO_APP (2 << 8) // no application firmware loaded -#define CCS811_DRV_NO_NEW_DATA (3 << 8) // no new data samples are ready -#define CCS811_DRV_NO_IAQ_DATA (4 << 8) // no new data samples are ready -#define CCS811_DRV_HW_ID (5 << 8) // wrong hardware ID -#define CCS811_DRV_INV_SENS (6 << 8) // invalid sensor ID -#define CCS811_DRV_WR_REG_INV (7 << 8) // invalid register addr on write -#define CCS811_DRV_RD_REG_INV (8 << 8) // invalid register addr on read -#define CCS811_DRV_MM_INV (9 << 8) // invalid measurement mode -#define CCS811_DRV_MAX_RESIST (10 << 8) // max sensor resistance reached -#define CCS811_DRV_HEAT_FAULT (11 << 8) // heater current not in range -#define CCS811_DRV_HEAT_SUPPLY (12 << 8) // heater voltage not correct -#define CCS811_DRV_WRONG_MODE (13 << 8) // wrong measurement mode -#define CCS811_DRV_RD_STAT_FAILED (14 << 8) // read status register failed -#define CCS811_DRV_RD_DATA_FAILED (15 << 8) // read sensor data failed -#define CCS811_DRV_APP_START_FAIL (16 << 8) // sensor app start failure -#define CCS811_DRV_WRONG_PARAMS (17 << 8) // wrong parameters used - -// ranges -#define CCS_ECO2_RANGE_MIN 400 -#define CCS_ECO2_RANGE_MAX 8192 -#define CCS_TVOC_RANGE_MIN 0 -#define CCS_TVOC_RANGE_MAX 1187 - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief CCS811 operation modes - */ -typedef enum { - ccs811_mode_idle = 0, // Idle, low current mode - ccs811_mode_1s = 1, // Constant Power mode, IAQ values every 1 s - ccs811_mode_10s = 2, // Pulse Heating mode, IAQ values every 10 s - ccs811_mode_60s = 3, // Low Power Pulse Heating, IAQ values every 60 s - ccs811_mode_250ms = 4 // Constant Power mode, RAW data every 250 ms -} ccs811_mode_t; - - -/** - * @brief CCS811 sensor device data structure - */ -typedef struct { - - int error_code; // contains the error code of last operation - - uint8_t bus; // I2C bus - uint8_t addr; // I2C slave address - - ccs811_mode_t mode; // operation mode - -} ccs811_sensor_t; - - -/** - * @brief Initialize a CCS811 sensor - * - * The function initializes the CCS811 sensor and checks its availability. - * - * @param bus I2C bus at which CCS811 sensor is connected - * @param addr I2C slave address of the CCS811 sensor - * - * @return pointer to sensor data structure, or NULL on error - */ -ccs811_sensor_t* ccs811_init_sensor (uint8_t bus, uint8_t addr); - - -/** - * @brief Set the operation mode of the sensor - * - * The function sets the operating mode of the sensor. If the parameter - * *mode* is either *ccs811_mode_1s*, *ccs811_mode_10s*, *ccs811_mode_60s* - * or *ccs811_mode_250ms*, the sensor starts a periodic measurement with - * the specified period. Function *ccs811_get_results* can then be used at - * the same rate to get the results. - * - * In *ccs811_mode_1s*, *ccs811_mode_10s* and *ccs811_mode_60s*, raw sensor - * data as well as IAQ values calculated by the sensor values are available. - * In *ccs811_mode_250ms*, only raw data are available. - * - * In case, parameter mode is *ccs811_mode_idle*, the sensor does not perform - * any measurements. - * - * Please note: Mode timings are subject to typical 2% tolerance due - * to accuracy of internal sensor clock. - * - * Please note: After setting the sensor mode, the sensor needs up to - * 20 minutes, before accurate readings are generated. - * - * Please note: When a sensor operating mode is changed to a new mode with - * a lower sample rate, e.g., from *ccs811_mode_60s* to *ccs811_mode_1s, it - * should be placed in *mode_idle* for at least 10 minutes before enabling - * the new mode. - * - * @param sensor pointer to the sensor device data structure - * @param period measurement period in ms (default 1000 ms) - * - * @return true on success, false on error - */ -bool ccs811_set_mode (ccs811_sensor_t* sensor, ccs811_mode_t mode); - - -/** - * @brief Get latest IAQ sensor values and/or RAW sensor data - * - * The function reads the IAQ sensor values (TVOC and eCO2) and/or the raw - * sensor data. If some of the results are not needed, the corresponding - * pointer parameters can be set to NULL. - * - * Please note: If the function is called and no new data are available, - * e.g., due to the sensor mode time tolerance of 2%, the function still - * returns successfully. In this case, the results of the last measurement - * are returned and the error code CCS811_DRV_NO_NEW_DATA is set. - * - * Please note: In *ccs811_mode_250ms*, only RAW data are available. In - * that case, the function fails with error_code CCS811_DRV_NO_IAQ_DATA - * if parameters *iaq_tvoc* and *iaq_eco2* are not NULL. - * @param sensor pointer to the sensor device data structure - * @param iaq_tvoc TVOC total volatile organic compound (0 - 1187 ppb) - * @param iaq_eco2 eCO2 equivalent CO2 (400 - 8192 ppm) - * @param raw_i current through the sensor used for measuring (0 - 63 uA) - * @param raw_v voltage across the sensor measured (0 - 1023 = 1.65 V) - * - * @return true on success, false on error - */ -bool ccs811_get_results (ccs811_sensor_t* sensor, - uint16_t* iaq_tvoc, - uint16_t* iaq_eco2, - uint8_t* raw_i, - uint16_t* raw_v); - - -/** - * brief Get the resistance of connected NTC thermistor - * - * CCS811 supports an external interface for connecting a negative thermal - * coefficient thermistor (R_NTC) to provide a cost effective and power - * efficient means of calculating the local ambient temperature. The sensor - * measures the voltage V_NTC across the R_NTC as well as the voltage V_REF - * across a connected reference resistor (R_REF). - * - * The function returns the current resistance of R_NTC using the equation - * - * R_NTC = R_REF / V_REF * V_NTC - * - * Using the data sheet of the NTC, the ambient temperature can be calculated. - * - * @param sensor pointer to the sensor device data structure - * @param reference resistance of R_REF in Ohm - * @return resistance of R_NTC in Ohm, or 0 on error - */ -uint32_t ccs811_get_ntc_resistance (ccs811_sensor_t* sensor, uint32_t r_ref); - - -/* - * @brief Set environmental data - * - * If information about the environment are available from another sensor, - * they can be used by CCS811 to compensate gas readings due to - * temperature and humidity changes. - * - * @param sensor pointer to the sensor device data structure - * @param temperature measured temperature in degree Celsius - * @param humidity measured relative humidity in percent - * - * @return true on success, false on error - */ -bool ccs811_set_environmental_data (ccs811_sensor_t* sensor, - float temperature, float humidity); - - -/** - * @brief Enable or disable data ready interrupt signal *nINT* - * - * At the end of each measurement cycle (250ms, 1s, 10s, 60s), CCS811 can - * optionally trigger an interrupt. The signal *nINT* is driven low as soon - * as new sensor values are ready to read. It will stop being driven low - * when sensor data are read with function *ccs811_get_results*. - * - * The interrupt is disabled by default. - * - * @param sensor pointer to the sensor device data structure - * @param enabled if true, the interrupt is enabled, or disabled otherwise - * - * @return true on success, false on error - */ -bool ccs811_enable_interrupt (ccs811_sensor_t* sensor, bool enabled); - - -/* - * @brief Set eCO2 threshold mode for data ready interrupts - * - * The user task can choose that the data ready interrupt is not generated - * every time when new sensor values become ready but only if the eCO2 value - * moves from the current range (LOW, MEDIUM, or HIGH) into another range by - * more than a hysteresis value. Hysteresis is used to prevent multiple - * interrupts close to a threshold. - * - * LOW below parameter value *low* - * MEDIUM between parameter values *low* and *high* - * HIGH above parameter value *high* is range HIGH. - * - * If all parameters have valid values, the function sets the thresholds and - * enables the data ready interrupt. Using 0 for all parameters disables the - * interrupt. - * - * The interrupt is disabled by default. - * - * @param sensor pointer to the sensor device data structure - * @param low threshold LOW to MEDIUM (> 400, default 1500) - * @param high threshold MEDIUM to HIGH (< 8192, default 2500) - * @param hysteresis hysteresis value (default 50) - * - * @return true on success, false on error - */ -bool ccs811_set_eco2_thresholds (ccs811_sensor_t* sensor, - uint16_t low, - uint16_t high, - uint8_t hysteresis); - -/* - * @brief Get the current baseline value from sensor - * - * The sensor supports automatic baseline correction over a minimum time of - * 24 hours. Using this function, the current baseline value can be saved - * before the sensor is powered down. This baseline can then be restored after - * sensor is powered up again to continue the automatic baseline process. - * - * @param sensor pointer to the sensor device data structure - * @return current baseline value on success, or 0 on error - */ -uint16_t ccs811_get_baseline (ccs811_sensor_t* sensor); - - -/* - * @brief Write a previously stored baseline value to the sensor - * - * The sensor supports automatic baseline correction over a minimum time of - * 24 hours. Using this function, a previously saved baseline value be - * restored after the sensor is powered up to continue the automatic baseline - * process. - * - * Please note: The baseline must be written after the conditioning period - * of 20 min after power up. - * - * @param sensor pointer to the sensor device data structure - * @param basline baseline to be set - * @return true on success, false on error - */ -bool ccs811_set_baseline (ccs811_sensor_t* sensor, uint16_t baseline); - - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* CCS811_DRV_H_ */ - - diff --git a/extras/ccs811/ccs811_platform.h b/extras/ccs811/ccs811_platform.h deleted file mode 100644 index c8a23ab..0000000 --- a/extras/ccs811/ccs811_platform.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Driver for AMS CCS811 digital gas sensor connected to I2C. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#ifndef __CCS811_PLATFORM_H__ -#define __CCS811_PLATFORM_H__ - -#if !defined(ESP_OPEN_RTOS) -#define ESP_OPEN_RTOS 1 -#endif - -#ifdef ESP_OPEN_RTOS // ESP8266 - -// platform specific includes - -#include "FreeRTOS.h" -#include "task.h" - -#include "espressif/esp_common.h" -#include "espressif/sdk_private.h" - -#include "esp/uart.h" -#include "i2c/i2c.h" - -#endif // ESP_OPEN_RTOS - -#endif // __CCS811_PLATFORM_H__ diff --git a/extras/ccs811/component.mk b/extras/ccs811/component.mk deleted file mode 100644 index 037b122..0000000 --- a/extras/ccs811/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/ccs811 - -# expected anyone using ccs811 driver includes it as 'ccs811/ccs811.h' -INC_DIRS += $(ccs811_ROOT).. -INC_DIRS += $(ccs811_ROOT) - -# args for passing into compile rule generation -ccs811_SRC_DIR = $(ccs811_ROOT) - -$(eval $(call component_compile_rules,ccs811)) diff --git a/extras/cpp_support/include/countdown.hpp b/extras/cpp_support/include/countdown.hpp index 81f3853..87c8f3f 100644 --- a/extras/cpp_support/include/countdown.hpp +++ b/extras/cpp_support/include/countdown.hpp @@ -35,7 +35,7 @@ namespace esp_open_rtos { namespace timer { -#define __millis() (xTaskGetTickCount() * portTICK_PERIOD_MS) +#define __millis() (xTaskGetTickCount() * portTICK_RATE_MS) /****************************************************************************************************************** * countdown_t @@ -93,7 +93,7 @@ public: } private: - TickType_t interval_end_ms; + portTickType interval_end_ms; }; } // namespace timer { diff --git a/extras/cpp_support/include/mutex.hpp b/extras/cpp_support/include/mutex.hpp index 62b490c..aaf29db 100644 --- a/extras/cpp_support/include/mutex.hpp +++ b/extras/cpp_support/include/mutex.hpp @@ -86,7 +86,7 @@ public: */ inline int try_lock(unsigned long ms) { - return (xSemaphoreTake(mutex, ms / portTICK_PERIOD_MS) == pdTRUE) ? 0 : -1; + return (xSemaphoreTake(mutex, ms / portTICK_RATE_MS) == pdTRUE) ? 0 : -1; } /** * @@ -98,7 +98,7 @@ public: } private: - SemaphoreHandle_t mutex; + xSemaphoreHandle mutex; // Disable copy construction and assignment. mutex_t (const mutex_t&); diff --git a/extras/cpp_support/include/queue.hpp b/extras/cpp_support/include/queue.hpp index 38a0493..047ce29 100644 --- a/extras/cpp_support/include/queue.hpp +++ b/extras/cpp_support/include/queue.hpp @@ -83,7 +83,7 @@ public: */ inline int post(const Data& data, unsigned long ms = 0) { - return (xQueueSend(queue, &data, ms / portTICK_PERIOD_MS) == pdTRUE) ? 0 : -1; + return (xQueueSend(queue, &data, ms / portTICK_RATE_MS) == pdTRUE) ? 0 : -1; } /** * @@ -93,7 +93,7 @@ public: */ inline int receive(Data& data, unsigned long ms = 0) { - return (xQueueReceive(queue, &data, ms / portTICK_PERIOD_MS) == pdTRUE) ? 0 : -1; + return (xQueueReceive(queue, &data, ms / portTICK_RATE_MS) == pdTRUE) ? 0 : -1; } /** * @@ -110,7 +110,7 @@ public: } private: - QueueHandle_t queue; + xQueueHandle queue; // Disable copy construction. queue_t (const queue_t&); diff --git a/extras/cpp_support/include/task.hpp b/extras/cpp_support/include/task.hpp index 75a716d..cb1cb45 100644 --- a/extras/cpp_support/include/task.hpp +++ b/extras/cpp_support/include/task.hpp @@ -56,7 +56,7 @@ public: */ int task_create(const char* const pcName, unsigned short usStackDepth = 256, unsigned portBASE_TYPE uxPriority = 2) { - return xTaskCreate(task_t::_task, pcName, usStackDepth, this, uxPriority, NULL); + return xTaskCreate(task_t::_task, (signed char *)pcName, usStackDepth, this, uxPriority, NULL); } protected: @@ -66,7 +66,7 @@ protected: */ void sleep(unsigned long ms) { - vTaskDelay(ms / portTICK_PERIOD_MS); + vTaskDelay(ms / portTICK_RATE_MS); } /** * @@ -74,7 +74,7 @@ protected: */ inline unsigned long millis() { - return xTaskGetTickCount() * portTICK_PERIOD_MS; + return xTaskGetTickCount() * portTICK_RATE_MS; } private: diff --git a/extras/crc_generic/component.mk b/extras/crc_generic/component.mk deleted file mode 100644 index 59efb53..0000000 --- a/extras/crc_generic/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/crc_generic - -# expected anyone using bmp driver includes it as 'crc_generic/crc_generic.h' -INC_DIRS += $(crc_generic_ROOT)crc_lib/ - -# args for passing into compile rule generation -crc_generic_SRC_DIR = $(crc_generic_ROOT)crc_lib/ - -$(eval $(call component_compile_rules,crc_generic)) diff --git a/extras/crc_generic/crc_lib b/extras/crc_generic/crc_lib deleted file mode 160000 index a97013c..0000000 --- a/extras/crc_generic/crc_lib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a97013c72f686735889b7a0908bbbf15a104f7d0 diff --git a/extras/dhcpserver/dhcpserver.c b/extras/dhcpserver/dhcpserver.c index 428ec8e..269b297 100644 --- a/extras/dhcpserver/dhcpserver.c +++ b/extras/dhcpserver/dhcpserver.c @@ -14,28 +14,18 @@ * BSD Licensed as described in the file LICENSE */ #include -#include #include #include #include #include -#include "esplibs/libmain.h" - -#if (DHCP_DEBUG == LWIP_DBG_ON) -#define debug(s, ...) printf("%s: " s "\n", "DHCP", ## __VA_ARGS__) -#else -#define debug(s, ...) -#endif /* Grow the size of the lwip dhcp_msg struct's options field, as LWIP defaults to a 68 octet options field for its DHCP client, and most full-sized clients send us more than this. */ #define DHCP_OPTIONS_LEN 312 -#include -#include -#include +#include _Static_assert(sizeof(struct dhcp_msg) == offsetof(struct dhcp_msg, options) + 312, "dhcp_msg_t should have extended options size"); @@ -45,26 +35,21 @@ _Static_assert(sizeof(struct dhcp_msg) == offsetof(struct dhcp_msg, options) + 3 typedef struct { uint8_t hwaddr[NETIF_MAX_HWADDR_LEN]; - uint8_t active; uint32_t expires; } dhcp_lease_t; typedef struct { struct netconn *nc; uint8_t max_leases; - ip4_addr_t first_client_addr; + ip_addr_t first_client_addr; struct netif *server_if; dhcp_lease_t *leases; /* length max_leases */ - /* Optional router */ - ip4_addr_t router; - /* Optional DNS server */ - ip4_addr_t dns; } server_state_t; /* Only one DHCP server task can run at once, so we have global state for it. */ -static TaskHandle_t dhcpserver_task_handle = NULL; +static xTaskHandle dhcpserver_task_handle; static server_state_t *state; /* Handlers for various kinds of incoming DHCP messages */ @@ -83,60 +68,39 @@ static uint8_t *add_dhcp_option_bytes(uint8_t *opt, uint8_t type, void *value, u static dhcp_lease_t *find_lease_slot(uint8_t *hwaddr); /* Copy IP address as dotted decimal to 'dest', must be at least 16 bytes long */ -inline static void sprintf_ipaddr(const ip4_addr_t *addr, char *dest) +inline static void sprintf_ipaddr(const ip_addr_t *addr, char *dest) { - if (addr == NULL) + if(addr == NULL) sprintf(dest, "NULL"); else sprintf(dest, "%d.%d.%d.%d", ip4_addr1(addr), ip4_addr2(addr), ip4_addr3(addr), ip4_addr4(addr)); } -void dhcpserver_start(const ip4_addr_t *first_client_addr, uint8_t max_leases) +void dhcpserver_start(const ip_addr_t *first_client_addr, uint8_t max_leases) { /* Stop any existing running dhcpserver */ - if (dhcpserver_task_handle) + if(dhcpserver_task_handle) dhcpserver_stop(); state = malloc(sizeof(server_state_t)); - memset(state, 0, sizeof(*state)); state->max_leases = max_leases; state->leases = calloc(max_leases, sizeof(dhcp_lease_t)); - bzero(state->leases, max_leases * sizeof(dhcp_lease_t)); // state->server_if is assigned once the task is running - see comment in dhcpserver_task() - ip4_addr_copy(state->first_client_addr, *first_client_addr); + ip_addr_copy(state->first_client_addr, *first_client_addr); - /* Clear options */ - ip4_addr_set_zero(&state->router); - ip4_addr_set_zero(&state->dns); - - xTaskCreate(dhcpserver_task, "DHCP Server", 448, NULL, 2, &dhcpserver_task_handle); + xTaskCreate(dhcpserver_task, (signed char *)"DHCPServer", 768, NULL, 8, &dhcpserver_task_handle); } void dhcpserver_stop(void) { - if (dhcpserver_task_handle) { + if(dhcpserver_task_handle) { vTaskDelete(dhcpserver_task_handle); - dhcpserver_task_handle = NULL; - - if (state->nc) - netconn_delete(state->nc); - free(state->leases); free(state); - state = NULL; + dhcpserver_task_handle = NULL; } } -void dhcpserver_set_router(const ip4_addr_t *router) -{ - ip4_addr_copy(state->router, *router); -} - -void dhcpserver_set_dns(const ip4_addr_t *dns) -{ - ip4_addr_copy(state->dns, *dns); -} - static void dhcpserver_task(void *pxParameter) { /* netif_list isn't assigned until after user_init completes, which is why we do it inside the task */ @@ -144,12 +108,11 @@ static void dhcpserver_task(void *pxParameter) state->nc = netconn_new (NETCONN_UDP); if(!state->nc) { - debug("DHCP Server Error: Failed to allocate socket."); + printf("OTA TFTP: Failed to allocate socket.\r\n"); return; } - netconn_bind(state->nc, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_SERVER); - netconn_bind_if (state->nc, netif_get_index(state->server_if)); + netconn_bind(state->nc, IP_ADDR_ANY, DHCP_SERVER_PORT); while(1) { @@ -159,32 +122,29 @@ static void dhcpserver_task(void *pxParameter) /* Receive a DHCP packet */ err_t err = netconn_recv(state->nc, &netbuf); if(err != ERR_OK) { - debug("DHCP Server Error: Failed to receive DHCP packet. err=%d", err); + printf("DHCP Server Error: Failed to receive DHCP packet. err=%d\r\n", err); continue; } /* expire any leases that have passed */ uint32_t now = xTaskGetTickCount(); - for (int i = 0; i < state->max_leases; i++) { - if (state->leases[i].active) { - uint32_t expires = state->leases[i].expires - now; - if (expires >= 0x80000000) { - state->leases[i].active = 0; - } - } + for(int i = 0; i < state->max_leases; i++) { + uint32_t expires = state->leases[i].expires; + if(expires && expires < now) + state->leases[i].expires = 0; } ip_addr_t received_ip; u16_t port; netconn_addr(state->nc, &received_ip, &port); - if (netbuf_len(netbuf) < offsetof(struct dhcp_msg, options)) { + if(netbuf_len(netbuf) < offsetof(struct dhcp_msg, options)) { /* too short to be a valid DHCP client message */ netbuf_delete(netbuf); continue; } if(netbuf_len(netbuf) >= sizeof(struct dhcp_msg)) { - debug("DHCP Server Warning: Client sent more options than we know how to parse. len=%d", netbuf_len(netbuf)); + printf("DHCP Server Warning: Client sent more options than we know how to parse. len=%d\r\n", netbuf_len(netbuf)); } netbuf_copy(netbuf, &received, sizeof(struct dhcp_msg)); @@ -193,19 +153,18 @@ static void dhcpserver_task(void *pxParameter) uint8_t *message_type = find_dhcp_option(&received, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN, NULL); if(!message_type) { - debug("DHCP Server Error: No message type field found"); + printf("DHCP Server Error: No message type field found"); continue; } -#if (DHCP_DEBUG == LWIP_DBG_ON) - debug("State dump. Message type %d", *message_type); + + printf("State dump. Message type %d\n", *message_type); for(int i = 0; i < state->max_leases; i++) { dhcp_lease_t *lease = &state->leases[i]; - debug("lease slot %d expiry %d hwaddr %02x:%02x:%02x:%02x:%02x:%02x", i, lease->expires, lease->hwaddr[0], + printf("lease slot %d expiry %d hwaddr %02x:%02x:%02x:%02x:%02x:%02x\r\n", i, lease->expires, lease->hwaddr[0], lease->hwaddr[1], lease->hwaddr[2], lease->hwaddr[3], lease->hwaddr[4], lease->hwaddr[5]); } -#endif switch(*message_type) { case DHCP_DISCOVER: @@ -216,9 +175,8 @@ static void dhcpserver_task(void *pxParameter) break; case DHCP_RELEASE: handle_dhcp_release(&received); - break; default: - debug("DHCP Server Error: Unsupported message type %d", *message_type); + printf("DHCP Server Error: Unsupported message type %d\r\n", *message_type); break; } } @@ -226,14 +184,14 @@ static void dhcpserver_task(void *pxParameter) static void handle_dhcp_discover(struct dhcp_msg *dhcpmsg) { - if (dhcpmsg->htype != LWIP_IANA_HWTYPE_ETHERNET) + if(dhcpmsg->htype != DHCP_HTYPE_ETH) return; - if (dhcpmsg->hlen > NETIF_MAX_HWADDR_LEN) + if(dhcpmsg->hlen > NETIF_MAX_HWADDR_LEN) return; dhcp_lease_t *freelease = find_lease_slot(dhcpmsg->chaddr); if(!freelease) { - debug("DHCP Server: All leases taken."); + printf("DHCP Server: All leases taken.\r\n"); return; /* Nothing available, so do nothing */ } @@ -241,22 +199,13 @@ static void handle_dhcp_discover(struct dhcp_msg *dhcpmsg) dhcpmsg->op = DHCP_BOOTREPLY; bzero(dhcpmsg->options, DHCP_OPTIONS_LEN); - dhcpmsg->yiaddr.addr = lwip_htonl(lwip_ntohl(state->first_client_addr.addr) + (freelease - state->leases)); + ip_addr_copy(dhcpmsg->yiaddr, state->first_client_addr); + ip4_addr4(&(dhcpmsg->yiaddr)) += (freelease - state->leases); uint8_t *opt = (uint8_t *)&dhcpmsg->options; opt = add_dhcp_option_byte(opt, DHCP_OPTION_MESSAGE_TYPE, DHCP_OFFER); opt = add_dhcp_option_bytes(opt, DHCP_OPTION_SERVER_ID, &state->server_if->ip_addr, 4); opt = add_dhcp_option_bytes(opt, DHCP_OPTION_SUBNET_MASK, &state->server_if->netmask, 4); - if (!ip4_addr_isany_val(state->router)) { - opt = add_dhcp_option_bytes(opt, DHCP_OPTION_ROUTER, &state->router, 4); - } - if (!ip4_addr_isany_val(state->dns)) { - opt = add_dhcp_option_bytes(opt, DHCP_OPTION_DNS_SERVER, &state->dns, 4); - } - - uint32_t expiry = htonl(DHCPSERVER_LEASE_TIME); - opt = add_dhcp_option_bytes(opt, DHCP_OPTION_LEASE_TIME, &expiry, 4); - opt = add_dhcp_option_bytes(opt, DHCP_OPTION_END, NULL, 0); struct netbuf *netbuf = netbuf_new(); @@ -269,64 +218,60 @@ static void handle_dhcp_discover(struct dhcp_msg *dhcpmsg) static void handle_dhcp_request(struct dhcp_msg *dhcpmsg) { static char ipbuf[16]; - if (dhcpmsg->htype != LWIP_IANA_HWTYPE_ETHERNET) + if(dhcpmsg->htype != DHCP_HTYPE_ETH) return; - if (dhcpmsg->hlen > NETIF_MAX_HWADDR_LEN) + if(dhcpmsg->hlen > NETIF_MAX_HWADDR_LEN) return; - ip4_addr_t requested_ip; + ip_addr_t requested_ip; uint8_t *requested_ip_opt = find_dhcp_option(dhcpmsg, DHCP_OPTION_REQUESTED_IP, 4, NULL); - if (requested_ip_opt) { - memcpy(&requested_ip.addr, requested_ip_opt, 4); - } else if (ip4_addr_cmp(&requested_ip, IP4_ADDR_ANY4)) { - ip4_addr_copy(requested_ip, dhcpmsg->ciaddr); + if(requested_ip_opt) { + memcpy(&requested_ip.addr, requested_ip_opt, 4); + } else if(ip_addr_cmp(&requested_ip, IP_ADDR_ANY)) { + ip_addr_copy(requested_ip, dhcpmsg->ciaddr); } else { - debug("DHCP Server Error: No requested IP"); + printf("DHCP Server Error: No requested IP\r\n"); send_dhcp_nak(dhcpmsg); return; } /* Test the first 4 octets match */ - if (ip4_addr1(&requested_ip) != ip4_addr1(&state->first_client_addr) + if(ip4_addr1(&requested_ip) != ip4_addr1(&state->first_client_addr) || ip4_addr2(&requested_ip) != ip4_addr2(&state->first_client_addr) || ip4_addr3(&requested_ip) != ip4_addr3(&state->first_client_addr)) { sprintf_ipaddr(&requested_ip, ipbuf); - debug("DHCP Server Error: %s not an allowed IP", ipbuf); + printf("DHCP Server Error: %s not an allowed IP\r\n", ipbuf); send_dhcp_nak(dhcpmsg); return; } /* Test the last octet is in the MAXCLIENTS range */ int16_t octet_offs = ip4_addr4(&requested_ip) - ip4_addr4(&state->first_client_addr); if(octet_offs < 0 || octet_offs >= state->max_leases) { - debug("DHCP Server Error: Address out of range"); + printf("DHCP Server Error: Address out of range\r\n"); send_dhcp_nak(dhcpmsg); return; } dhcp_lease_t *requested_lease = state->leases + octet_offs; - if (requested_lease->active && memcmp(requested_lease->hwaddr, dhcpmsg->chaddr,dhcpmsg->hlen)) + if(requested_lease->expires != 0 && memcmp(requested_lease->hwaddr, dhcpmsg->chaddr,dhcpmsg->hlen)) { - debug("DHCP Server Error: Lease for address already taken"); + printf("DHCP Server Error: Lease for address already taken\r\n"); send_dhcp_nak(dhcpmsg); return; } memcpy(requested_lease->hwaddr, dhcpmsg->chaddr, dhcpmsg->hlen); sprintf_ipaddr(&requested_ip, ipbuf); - debug("DHCP lease addr %s assigned to MAC %02x:%02x:%02x:%02x:%02x:%02x", ipbuf, requested_lease->hwaddr[0], + printf("DHCP lease addr %s assigned to MAC %02x:%02x:%02x:%02x:%02x:%02x\r\n", ipbuf, requested_lease->hwaddr[0], requested_lease->hwaddr[1], requested_lease->hwaddr[2], requested_lease->hwaddr[3], requested_lease->hwaddr[4], requested_lease->hwaddr[5]); - uint32_t now = xTaskGetTickCount(); - requested_lease->expires = now + DHCPSERVER_LEASE_TIME * configTICK_RATE_HZ; - requested_lease->active = 1; - - sdk_wifi_softap_set_station_info(requested_lease->hwaddr, &requested_ip); + requested_lease->expires = DHCPSERVER_LEASE_TIME * configTICK_RATE_HZ; /* Reuse the REQUEST message as the ACK message */ dhcpmsg->op = DHCP_BOOTREPLY; bzero(dhcpmsg->options, DHCP_OPTIONS_LEN); - ip4_addr_copy(dhcpmsg->yiaddr, requested_ip); + ip_addr_copy(dhcpmsg->yiaddr, requested_ip); uint8_t *opt = (uint8_t *)&dhcpmsg->options; opt = add_dhcp_option_byte(opt, DHCP_OPTION_MESSAGE_TYPE, DHCP_ACK); @@ -334,13 +279,6 @@ static void handle_dhcp_request(struct dhcp_msg *dhcpmsg) opt = add_dhcp_option_bytes(opt, DHCP_OPTION_LEASE_TIME, &expiry, 4); opt = add_dhcp_option_bytes(opt, DHCP_OPTION_SERVER_ID, &state->server_if->ip_addr, 4); opt = add_dhcp_option_bytes(opt, DHCP_OPTION_SUBNET_MASK, &state->server_if->netmask, 4); - if (!ip4_addr_isany_val(state->router)) { - opt = add_dhcp_option_bytes(opt, DHCP_OPTION_ROUTER, &state->router, 4); - } - if (!ip4_addr_isany_val(state->dns)) { - opt = add_dhcp_option_bytes(opt, DHCP_OPTION_DNS_SERVER, &state->dns, 4); - } - opt = add_dhcp_option_bytes(opt, DHCP_OPTION_END, NULL, 0); struct netbuf *netbuf = netbuf_new(); @@ -353,8 +291,7 @@ static void handle_dhcp_request(struct dhcp_msg *dhcpmsg) static void handle_dhcp_release(struct dhcp_msg *dhcpmsg) { dhcp_lease_t *lease = find_lease_slot(dhcpmsg->chaddr); - if (lease) { - lease->active = 0; + if(lease) { lease->expires = 0; } } @@ -382,17 +319,17 @@ static uint8_t *find_dhcp_option(struct dhcp_msg *msg, uint8_t option_num, uint8 uint8_t *start = (uint8_t *)&msg->options; uint8_t *msg_end = (uint8_t *)msg + sizeof(struct dhcp_msg); - for (uint8_t *p = start; p < msg_end-2;) { + for(uint8_t *p = start; p < msg_end-2;) { uint8_t type = *p++; uint8_t len = *p++; - if (type == DHCP_OPTION_END) + if(type == DHCP_OPTION_END) return NULL; - if (p+len >= msg_end) + if(p+len >= msg_end) break; /* We've overrun our valid DHCP message size, or this isn't a valid option */ - if (type == option_num) { - if (len < min_length) + if(type == option_num) { + if(len < min_length) break; - if (length) + if(length) *length = len; return p; /* start of actual option data */ } @@ -412,7 +349,7 @@ static uint8_t *add_dhcp_option_byte(uint8_t *opt, uint8_t type, uint8_t value) static uint8_t *add_dhcp_option_bytes(uint8_t *opt, uint8_t type, void *value, uint8_t len) { *opt++ = type; - if (len) { + if(len) { *opt++ = len; memcpy(opt, value, len); } @@ -423,8 +360,8 @@ static uint8_t *add_dhcp_option_bytes(uint8_t *opt, uint8_t type, void *value, u static dhcp_lease_t *find_lease_slot(uint8_t *hwaddr) { dhcp_lease_t *empty_lease = NULL; - for (int i = 0; i < state->max_leases; i++) { - if (!state->leases[i].active && !empty_lease) + for(int i = 0; i < state->max_leases; i++) { + if(state->leases[i].expires == 0 && !empty_lease) empty_lease = &state->leases[i]; else if (memcmp(hwaddr, state->leases[i].hwaddr, 6) == 0) return &state->leases[i]; diff --git a/extras/dhcpserver/include/dhcpserver.h b/extras/dhcpserver/include/dhcpserver.h index 62fa0ac..5548c19 100644 --- a/extras/dhcpserver/include/dhcpserver.h +++ b/extras/dhcpserver/include/dhcpserver.h @@ -14,10 +14,6 @@ #define DHCPSERVER_LEASE_TIME 3600 #endif -#ifdef __cplusplus -extern "C" { -#endif - /* Start DHCP server. Static IP of server should already be set and network interface enabled. @@ -26,22 +22,12 @@ extern "C" { to a client. Subsequent lease addresses are calculated by incrementing the final octet of the IPv4 address, up to max_leases. */ -void dhcpserver_start(const ip4_addr_t *first_client_addr, uint8_t max_leases); +void dhcpserver_start(const ip_addr_t *first_client_addr, uint8_t max_leases); -void dhcpserver_get_lease(const ip4_addr_t *first_client_addr, uint8_t max_leases); +void dhcpserver_get_lease(const ip_addr_t *first_client_addr, uint8_t max_leases); /* Stop DHCP server. */ void dhcpserver_stop(void); -/* Set a router address to send as an option. */ -void dhcpserver_set_router(const ip4_addr_t *router); - -/* Set a DNS address to send as an option. */ -void dhcpserver_set_dns(const ip4_addr_t *dns); - -#ifdef __cplusplus -} -#endif - #endif diff --git a/extras/dht/component.mk b/extras/dht/component.mk index f7ec19e..0948e4d 100644 --- a/extras/dht/component.mk +++ b/extras/dht/component.mk @@ -1,10 +1,10 @@ # Component makefile for extras/dht -# include it as 'dht/dht.h' -INC_DIRS += $(dht_ROOT).. +INC_DIRS += $(ROOT)extras/dht # args for passing into compile rule generation -dht_SRC_DIR = $(dht_ROOT) +extras/dht_INC_DIR = $(ROOT)extras/dht +extras/dht_SRC_DIR = $(ROOT)extras/dht -$(eval $(call component_compile_rules,dht)) +$(eval $(call component_compile_rules,extras/dht)) diff --git a/extras/dht/dht.c b/extras/dht/dht.c index 34e7a07..100763a 100644 --- a/extras/dht/dht.c +++ b/extras/dht/dht.c @@ -6,25 +6,23 @@ */ #include "dht.h" -#include "FreeRTOS.h" #include "string.h" #include "task.h" #include "esp/gpio.h" #include // sdk_os_delay_us -// DHT timer precision in microseconds -#define DHT_TIMER_INTERVAL 2 -#define DHT_DATA_BITS 40 +#ifndef DEBUG_DHT +#define DEBUG_DHT 0 +#endif -// #define DEBUG_DHT -#ifdef DEBUG_DHT +#if DEBUG_DHT #define debug(fmt, ...) printf("%s" fmt "\n", "dht: ", ## __VA_ARGS__); #else #define debug(fmt, ...) /* (do nothing) */ #endif -/* +/* * Note: * A suitable pull-up resistor should be connected to the selected GPIO line * @@ -34,17 +32,17 @@ * * * Initializing communications with the DHT requires four 'phases' as follows: - * + * * Phase A - MCU pulls signal low for at least 18000 us * Phase B - MCU allows signal to float back up and waits 20-40us for DHT to pull it low * Phase C - DHT pulls signal low for ~80us * Phase D - DHT lets signal float back up for ~80us - * + * * After this, the DHT transmits its first bit by holding the signal low for 50us * and then letting it float back high for a period of time that depends on the data bit. * duration_data_high is shorter than 50us for a logic '0' and longer than 50us for logic '1'. * - * There are a total of 40 data bits transmitted sequentially. These bits are read into a byte array + * There are a total of 40 data bits trasnmitted sequentially. These bits are read into a byte array * of length 5. The first and third bytes are humidity (%) and temperature (C), respectively. Bytes 2 and 4 * are zero-filled and the fifth is a checksum such that: * @@ -52,143 +50,95 @@ * */ +/* + * @pin the selected GPIO pin + * @interval how frequently the pin state is checked in microseconds + * @timeout maximum length of time to wait for the expected pin state + * @expected_pin_state high (true) or low (false) pin state + * @counter pointer to external uint8_t for tallying the duration waited for the pin state +*/ -/** - * Wait specified time for pin to go to a specified state. - * If timeout is reached and pin doesn't go to a requested state - * false is returned. - * The elapsed time is returned in pointer 'duration' if it is not NULL. - */ -static bool dht_await_pin_state(uint8_t pin, uint32_t timeout, - bool expected_pin_state, uint32_t *duration) -{ - for (uint32_t i = 0; i < timeout; i += DHT_TIMER_INTERVAL) { - // need to wait at least a single interval to prevent reading a jitter - sdk_os_delay_us(DHT_TIMER_INTERVAL); - if (gpio_read(pin) == expected_pin_state) { - if (duration) { - *duration = i; - } - return true; - } +bool dht_await_pin_state(uint8_t pin, uint8_t interval, uint8_t timeout, bool expected_pin_state, uint8_t * counter) { + + for (*counter = 0; *counter < timeout; *counter+=interval) { + if (gpio_read(pin) == expected_pin_state) return true; + sdk_os_delay_us(interval); } return false; } -/** - * Request data from DHT and read raw bit stream. - * The function call should be protected from task switching. - * Return false if error occurred. - */ -static inline bool dht_fetch_data(dht_sensor_type_t sensor_type, uint8_t pin, bool bits[DHT_DATA_BITS]) -{ - uint32_t low_duration; - uint32_t high_duration; +/* + * + * + * @pin the selected GPIO pin + * @humidity pointer to external int8_t to store resulting humidity value + * @temperature pointer to external int8_t to store resulting temperature value +*/ - // Phase 'A' pulling signal low to initiate read sequence - gpio_write(pin, 0); - sdk_os_delay_us(sensor_type == DHT_TYPE_SI7021 ? 500 : 20000); - gpio_write(pin, 1); +bool dht_fetch_data(int8_t pin, int8_t * humidity, int8_t * temperature) { + int8_t data[40] = {0}; + int8_t result[5] = {0}; + uint8_t i = 0; - // Step through Phase 'B', 40us - if (!dht_await_pin_state(pin, 40, false, NULL)) { - debug("Initialization error, problem in phase 'B'\n"); - return false; - } - - // Step through Phase 'C', 88us - if (!dht_await_pin_state(pin, 88, true, NULL)) { - debug("Initialization error, problem in phase 'C'\n"); - return false; - } - - // Step through Phase 'D', 88us - if (!dht_await_pin_state(pin, 88, false, NULL)) { - debug("Initialization error, problem in phase 'D'\n"); - return false; - } - - // Read in each of the 40 bits of data... - for (int i = 0; i < DHT_DATA_BITS; i++) { - if (!dht_await_pin_state(pin, 65, true, &low_duration)) { - debug("LOW bit timeout\n"); - return false; - } - if (!dht_await_pin_state(pin, 75, false, &high_duration)) { - debug("HIGHT bit timeout\n"); - return false; - } - bits[i] = high_duration > low_duration; - } - return true; -} - -/** - * Pack two data bytes into single value and take into account sign bit. - */ -static inline int16_t dht_convert_data(dht_sensor_type_t sensor_type, uint8_t msb, uint8_t lsb) -{ - int16_t data; - - if (sensor_type == DHT_TYPE_DHT22) { - data = msb & 0x7F; - data <<= 8; - data |= lsb; - if (msb & BIT(7)) { - data = 0 - data; // convert it to negative - } - } - else { - data = msb * 10; - } - - return data; -} - -bool dht_read_data(dht_sensor_type_t sensor_type, uint8_t pin, int16_t *humidity, int16_t *temperature) -{ - bool bits[DHT_DATA_BITS]; - uint8_t data[DHT_DATA_BITS/8] = {0}; - bool result; + uint8_t init_phase_duration = 0; + uint8_t duration_data_low = 0; + uint8_t duration_data_high = 0; gpio_enable(pin, GPIO_OUT_OPEN_DRAIN); taskENTER_CRITICAL(); - result = dht_fetch_data(sensor_type, pin, bits); + + // Phase 'A' pulling signal low to initiate read sequence + gpio_write(pin, 0); + sdk_os_delay_us(20000); + gpio_write(pin, 1); + + // Step through Phase 'B' at 2us intervals, 40us max + if (dht_await_pin_state(pin, 2, 40, false, &init_phase_duration)) { + // Step through Phase 'C ' at 2us intervals, 88us max + if (dht_await_pin_state(pin, 2, 88, true, &init_phase_duration)) { + // Step through Phase 'D' at 2us intervals, 88us max + if (dht_await_pin_state(pin, 2, 88, false, &init_phase_duration)) { + + // Read in each of the 40 bits of data... + for (i = 0; i < 40; i++) { + if (dht_await_pin_state(pin, 2, 60, true, &duration_data_low)) { + if (dht_await_pin_state(pin, 2, 75, false, &duration_data_high)) { + data[i] = duration_data_high > duration_data_low; + } + } + } + + taskEXIT_CRITICAL(); + + for (i = 0; i < 40; i++) { + // Read each bit into 'result' byte array... + result[i/8] <<= 1; + result[i/8] |= data[i]; + } + + if (result[4] == ((result[0] + result[1] + result[2] + result[3]) & 0xFF)) { + // Data valid, checksum succeeded... + *humidity = result[0]; + *temperature = result[2]; + debug("Successfully retrieved sensor data..."); + return true; + } else { + debug("Checksum failed, invalid data received from sensor..."); + } + + } else { + debug("Initialization error, problem in phase 'D'..."); + } + } else { + debug("Initialization error, problem in phase 'C'..."); + } + } else { + debug("Initialization error, problem in phase 'B'..."); + } + taskEXIT_CRITICAL(); - - if (!result) { - return false; - } - - for (uint8_t i = 0; i < DHT_DATA_BITS; i++) { - // Read each bit into 'result' byte array... - data[i/8] <<= 1; - data[i/8] |= bits[i]; - } - - if (data[4] != ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) { - debug("Checksum failed, invalid data received from sensor\n"); - return false; - } - - *humidity = dht_convert_data(sensor_type, data[0], data[1]); - *temperature = dht_convert_data(sensor_type, data[2], data[3]); - - debug("Sensor data: humidity=%d, temp=%d\n", *humidity, *temperature); - - return true; -} - -bool dht_read_float_data(dht_sensor_type_t sensor_type, uint8_t pin, float *humidity, float *temperature) -{ - int16_t i_humidity, i_temp; - - if (dht_read_data(sensor_type, pin, &i_humidity, &i_temp)) { - *humidity = (float)i_humidity / 10; - *temperature = (float)i_temp / 10; - return true; - } return false; } + diff --git a/extras/dht/dht.h b/extras/dht/dht.h index 3236902..c8a5ed9 100644 --- a/extras/dht/dht.h +++ b/extras/dht/dht.h @@ -5,46 +5,13 @@ * */ -#ifndef __DHT_H__ +#ifndef __DTH_H__ #define __DHT_H__ -#include -#include +#include "FreeRTOS.h" + +bool dht_wait_for_pin_state(uint8_t pin, uint8_t interval, uint8_t timeout, bool expected_pin_sate, uint8_t * counter); +bool dht_fetch_data(int8_t pin, int8_t * humidity, int8_t * temperature); -#ifdef __cplusplus -extern "C" { #endif -/** - * Sensor type - */ -typedef enum -{ - DHT_TYPE_DHT11 = 0, //!< DHT11 - DHT_TYPE_DHT22, //!< DHT22 - DHT_TYPE_SI7021 //!< Itead SI7021 -} dht_sensor_type_t; - -/** - * Read data from sensor on specified pin. - * - * Humidity and temperature is returned as integers. - * For example: humidity=625 is 62.5 % - * temperature=24.4 is 24.4 degrees Celsius - * - */ -bool dht_read_data(dht_sensor_type_t sensor_type, uint8_t pin, int16_t *humidity, int16_t *temperature); - - -/** - * Float version of dht_read_data. - * - * Return values as floating point values. - */ -bool dht_read_float_data(dht_sensor_type_t sensor_type, uint8_t pin, float *humidity, float *temperature); - -#ifdef __cplusplus -} -#endif - -#endif // __DHT_H__ diff --git a/extras/ds1302/component.mk b/extras/ds1302/component.mk deleted file mode 100644 index 7e5ea70..0000000 --- a/extras/ds1302/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ds1302 - -# expected anyone using RTC driver includes it as 'ds1302/ds1302.h' -INC_DIRS += $(ds1302_ROOT).. - -# args for passing into compile rule generation -ds1302_SRC_DIR = $(ds1302_ROOT) - -$(eval $(call component_compile_rules,ds1302)) diff --git a/extras/ds1302/ds1302.c b/extras/ds1302/ds1302.c deleted file mode 100644 index 2ff80df..0000000 --- a/extras/ds1302/ds1302.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Driver for DS1302 RTC - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss , - * Pavel Merzlyakov - * BSD Licensed as described in the file LICENSE - */ -#include "ds1302.h" -#include -#include - -#define CH_REG 0x80 -#define WP_REG 0x8e - -#define CH_BIT (1 << 7) -#define WP_BIT (1 << 7) -#define HOUR12_BIT (1 << 7) -#define PM_BIT (1 << 5) - -#define CH_MASK ((uint8_t)(~CH_BIT)) -#define WP_MASK ((uint8_t)(~WP_BIT)) - -#define CLOCK_BURST 0xbe -#define RAM_BURST 0xfe - -#define SECONDS_MASK 0x7f -#define HOUR12_MASK 0x1f -#define HOUR24_MASK 0x3f - -static uint8_t _ce_pin; -static uint8_t _io_pin; -static uint8_t _sclk_pin; -static bool _wp; -static uint8_t _ch; - -static uint8_t bcd2dec(uint8_t val) -{ - return (val >> 4) * 10 + (val & 0x0f); -} - -static uint8_t dec2bcd(uint8_t val) -{ - return ((val / 10) << 4) + (val % 10); -} - -inline static void chip_enable() -{ - gpio_write(_ce_pin, true); - sdk_os_delay_us(4); -} - -inline static void chip_disable() -{ - gpio_write(_ce_pin, false); -} - -inline static void prepare(gpio_direction_t dir) -{ - gpio_enable(_io_pin, dir); - gpio_write(_sclk_pin, false); - chip_enable(); -} - -inline static void toggle_clock() -{ - gpio_write(_sclk_pin, true); - sdk_os_delay_us(1); - gpio_write(_sclk_pin, false); - sdk_os_delay_us(1); -} - -static void write_byte(uint8_t b) -{ - for (uint8_t i = 0; i < 8; i++) - { - gpio_write(_io_pin, (b >> i) & 1); - toggle_clock(); - } -} - -static uint8_t read_byte() -{ - uint8_t b = 0; - for (uint8_t i = 0; i < 8; i++) - { - b |= gpio_read(_io_pin) << i; - toggle_clock(); - } - return b; -} - -static uint8_t read_register(uint8_t reg) -{ - prepare(GPIO_OUTPUT); - write_byte(reg | 0x01); - prepare(GPIO_INPUT); - uint8_t res = read_byte(); - chip_disable(); - return res; -} - -static void write_register(uint8_t reg, uint8_t val) -{ - prepare(GPIO_OUTPUT); - write_byte(reg); - write_byte(val); - chip_disable(); -} - -static void burst_read(uint8_t reg, uint8_t *dst, uint8_t len) -{ - prepare(GPIO_OUTPUT); - write_byte(reg | 0x01); - prepare(GPIO_INPUT); - for (uint8_t i = 0; i < len; i++, dst++) - *dst = read_byte(); - chip_disable(); -} - -static void burst_write(uint8_t reg, uint8_t *src, uint8_t len) -{ - prepare(GPIO_OUTPUT); - write_byte(reg); - for (uint8_t i = 0; i < len; i++, src++) - write_byte(*src); - chip_disable(); -} - -inline static void update_register(uint8_t reg, uint8_t mask, uint8_t val) -{ - write_register(reg, (read_register(reg) & mask) | val); -} - -void ds1302_init(uint8_t ce_pin, uint8_t io_pin, uint8_t sclk_pin) -{ - _ce_pin = ce_pin; - _io_pin = io_pin; - _sclk_pin = sclk_pin; - - gpio_enable(_ce_pin, GPIO_OUTPUT); - gpio_enable(_sclk_pin, GPIO_OUTPUT); - - _wp = ds1302_get_write_protect(); - _ch = read_register(CH_REG) & CH_BIT; -} - -bool ds1302_start(bool start) -{ - if (_wp) return false; - - _ch = start ? 0 : CH_BIT; - update_register(CH_REG, CH_MASK, _ch); - - return true; -} - -bool ds1302_is_running() -{ - return !(read_register(CH_REG) & CH_BIT); -} - -void ds1302_set_write_protect(bool protect) -{ - update_register(WP_REG, WP_MASK, protect ? WP_BIT : 0); - _wp = protect; -} - -bool ds1302_get_write_protect() -{ - return (read_register(WP_REG) & WP_BIT) != 0; -} - -void ds1302_get_time(struct tm *time) -{ - uint8_t buf[7]; - burst_read(CLOCK_BURST, buf, 7); - - time->tm_sec = bcd2dec(buf[0] & SECONDS_MASK); - time->tm_min = bcd2dec(buf[1]); - if (buf[2] & HOUR12_BIT) - { - // RTC in 12-hour mode - time->tm_hour = bcd2dec(buf[2] & HOUR12_MASK) - 1; - if (buf[2] & PM_BIT) - time->tm_hour += 12; - } - else time->tm_hour = bcd2dec(buf[2] & HOUR24_MASK); - time->tm_mday = bcd2dec(buf[3]); - time->tm_mon = bcd2dec(buf[4]) - 1; - time->tm_wday = bcd2dec(buf[5]) - 1; - time->tm_year = bcd2dec(buf[6]) + 2000; -} - -bool ds1302_set_time(const struct tm *time) -{ - if (_wp) return false; - - uint8_t buf[8] = { - dec2bcd(time->tm_sec) | _ch, - dec2bcd(time->tm_min), - dec2bcd(time->tm_hour), - dec2bcd(time->tm_mday), - dec2bcd(time->tm_mon + 1), - dec2bcd(time->tm_wday + 1), - dec2bcd(time->tm_year - 2000), - 0 - }; - burst_write(CLOCK_BURST, buf, 8); - - return true; -} - -bool ds1302_read_sram(uint8_t offset, void *buf, uint8_t len) -{ - if (offset + len > DS1302_RAM_SIZE) - return false; - - burst_read(RAM_BURST, (uint8_t *)buf, len); - - return true; -} - -bool ds1302_write_sram(uint8_t offset, void *buf, uint8_t len) -{ - if (offset + len > DS1302_RAM_SIZE) - return false; - - burst_write(RAM_BURST, (uint8_t *)buf, len); - - return true; -} diff --git a/extras/ds1302/ds1302.h b/extras/ds1302/ds1302.h deleted file mode 100644 index ce49a72..0000000 --- a/extras/ds1302/ds1302.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Driver for DS1302 RTC - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss , - * Pavel Merzlyakov - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_DS1302_H_ -#define EXTRAS_DS1302_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define DS1302_RAM_SIZE 31 - -void ds1302_init(uint8_t ce_pin, uint8_t io_pin, uint8_t sclk_pin); - -/** - * \brief Start/stop clock - * \param start Start clock if true - * \return False if RTC is write-protected - */ -bool ds1302_start(bool start); - -/** - * \brief Get current clock state - * \return true if clock running - */ -bool ds1302_is_running(); - -/** - * \brief Enable/disable write protection - * \param protect Set RTC write-protected if true - */ -void ds1302_set_write_protect(bool protect); - -/** - * \brief Get write protection status - * \return true if RTC write-protected - */ -bool ds1302_get_write_protect(); - -/** - * \brief Get current time - * \param time Pointer to the time struct to fill - */ -void ds1302_get_time(struct tm *time); - -/** - * \brief Set time to RTC - * \param time Pointer to the time struct - * \return False if RTC is write-protected - */ -bool ds1302_set_time(const struct tm *time); - -/** - * \brief Read RAM contents into the buffer - * \param offset Start byte, 0..55 - * \param buf Buffer - * \param len Bytes to read, 1..56 - * \return false if error occured (invalid offset or buffer too big) - */ -bool ds1302_read_sram(uint8_t offset, void *buf, uint8_t len); - -/** - * \brief Write buffer to RTC RAM - * \param offset Start byte, 0..55 - * \param buf Buffer - * \param len Bytes to write, 1..56 - * \return false if error occured (invalid offset or buffer too big) - */ -bool ds1302_write_sram(uint8_t offset, void *buf, uint8_t len); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_DS1302_H_ */ diff --git a/extras/ds1307/component.mk b/extras/ds1307/component.mk deleted file mode 100644 index 217716e..0000000 --- a/extras/ds1307/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ds1307 - -# expected anyone using RTC driver includes it as 'ds1307/ds1307.h' -INC_DIRS += $(ds1307_ROOT).. - -# args for passing into compile rule generation -ds1307_SRC_DIR = $(ds1307_ROOT) - -$(eval $(call component_compile_rules,ds1307)) diff --git a/extras/ds1307/ds1307.c b/extras/ds1307/ds1307.c deleted file mode 100644 index 7b29563..0000000 --- a/extras/ds1307/ds1307.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Driver for DS1307 RTC - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "ds1307.h" -#include - -#define RAM_SIZE 56 - -#define TIME_REG 0 -#define CONTROL_REG 7 -#define RAM_REG 8 - -#define CH_BIT (1 << 7) -#define HOUR12_BIT (1 << 6) -#define PM_BIT (1 << 5) -#define SQWE_BIT (1 << 4) -#define OUT_BIT (1 << 7) - -#define CH_MASK 0x7f -#define SECONDS_MASK 0x7f -#define HOUR12_MASK 0x1f -#define HOUR24_MASK 0x3f -#define SQWEF_MASK 0x03 -#define SQWE_MASK 0xef -#define OUT_MASK 0x7f - -static uint8_t bcd2dec(uint8_t val) -{ - return (val >> 4) * 10 + (val & 0x0f); -} - -static uint8_t dec2bcd(uint8_t val) -{ - return ((val / 10) << 4) + (val % 10); -} - -static uint8_t read_register(i2c_dev_t *dev, uint8_t reg) -{ - uint8_t val; - i2c_slave_read(dev->bus, dev->addr, ®, &val, 1); - return val; -} - -static void update_register(i2c_dev_t *dev, uint8_t reg, uint8_t mask, uint8_t val) -{ - uint8_t buf = (read_register(dev, reg) & mask) | val; - - i2c_slave_write(dev->bus, dev->addr, ®, &buf, 1); -} - -void ds1307_start(i2c_dev_t *dev, bool start) -{ - update_register(dev, TIME_REG, CH_MASK, start ? 0 : CH_BIT); -} - -bool ds1307_is_running(i2c_dev_t *dev) -{ - return !(read_register(dev, TIME_REG) & CH_BIT); -} - -void ds1307_get_time(i2c_dev_t *dev, struct tm *time) -{ - uint8_t buf[7]; - uint8_t reg = TIME_REG; - - i2c_slave_read(dev->bus, dev->addr, ®, buf, 7); - - time->tm_sec = bcd2dec(buf[0] & SECONDS_MASK); - time->tm_min = bcd2dec(buf[1]); - if (buf[2] & HOUR12_BIT) - { - // RTC in 12-hour mode - time->tm_hour = bcd2dec(buf[2] & HOUR12_MASK) - 1; - if (buf[2] & PM_BIT) - time->tm_hour += 12; - } - else - time->tm_hour = bcd2dec(buf[2] & HOUR24_MASK); - time->tm_wday = bcd2dec(buf[3]) - 1; - time->tm_mday = bcd2dec(buf[4]); - time->tm_mon = bcd2dec(buf[5]) - 1; - time->tm_year = bcd2dec(buf[6]) + 2000; -} - -void ds1307_set_time(i2c_dev_t *dev, const struct tm *time) -{ - uint8_t buf[8]; - buf[0] = TIME_REG; - buf[1] = dec2bcd(time->tm_sec); - buf[2] = dec2bcd(time->tm_min); - buf[3] = dec2bcd(time->tm_hour); - buf[4] = dec2bcd(time->tm_wday + 1); - buf[5] = dec2bcd(time->tm_mday); - buf[6] = dec2bcd(time->tm_mon + 1); - buf[7] = dec2bcd(time->tm_year - 2000); - - i2c_slave_write(dev->bus, dev->addr, &buf[0], &buf[1], 7); -} - -void ds1307_enable_squarewave(i2c_dev_t *dev, bool enable) -{ - update_register(dev, CONTROL_REG, SQWE_MASK, enable ? SQWE_BIT : 0); -} - -bool ds1307_is_squarewave_enabled(i2c_dev_t *dev) -{ - return read_register(dev, CONTROL_REG) & SQWE_BIT; -} - -void ds1307_set_squarewave_freq(i2c_dev_t *dev, ds1307_squarewave_freq_t freq) -{ - update_register(dev, CONTROL_REG, SQWEF_MASK, (uint8_t)freq); -} - -ds1307_squarewave_freq_t ds1307_get_squarewave_freq(i2c_dev_t *dev) -{ - return (ds1307_squarewave_freq_t)(read_register(dev, CONTROL_REG) & SQWEF_MASK); -} - -bool ds1307_get_output(i2c_dev_t *dev) -{ - return read_register(dev, CONTROL_REG) & OUT_BIT; -} - -void ds1307_set_output(i2c_dev_t *dev, bool value) -{ - update_register(dev, CONTROL_REG, OUT_MASK, value ? OUT_BIT : 0); -} - -int ds1307_read_ram(i2c_dev_t *dev, uint8_t offset, uint8_t *buf, uint8_t len) -{ - if (offset + len > RAM_SIZE) - return -EINVAL; - - uint8_t reg = RAM_REG + offset; - - return i2c_slave_read(dev->bus, dev->addr, ®, buf, len); -} - -int ds1307_write_ram(i2c_dev_t *dev, uint8_t offset, uint8_t *buf, uint8_t len) -{ - if (offset + len > RAM_SIZE) - return -EINVAL; - - uint8_t reg = RAM_REG + offset; - - return i2c_slave_write(dev->bus, dev->addr, ®, buf, len); -} diff --git a/extras/ds1307/ds1307.h b/extras/ds1307/ds1307.h deleted file mode 100644 index aff8e34..0000000 --- a/extras/ds1307/ds1307.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Driver for DS1307 RTC - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_DS1307_H_ -#define EXTRAS_DS1307_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define DS1307_ADDR 0x68 - -/** - * Squarewave frequency - */ -typedef enum -{ - DS1307_1HZ = 0, //!< 1 Hz - DS1307_4096HZ, //!< 4096 Hz - DS1307_8192HZ, //!< 8192 Hz - DS1307_32768HZ //!< 32768 Hz -} ds1307_squarewave_freq_t; - -/** - * \brief Start/stop clock - * \param start Start clock if true - */ -void ds1307_start(i2c_dev_t *dev, bool start); - -/** - * \brief Get current clock state - * \return true if clock running - */ -bool ds1307_is_running(i2c_dev_t *dev); - -/** - * \brief Get current time - * \param time Pointer to the time struct to fill - */ -void ds1307_get_time(i2c_dev_t *dev, struct tm *time); - -/** - * \brief Set time to RTC - * \param time Pointer to the time struct - */ -void ds1307_set_time(i2c_dev_t *dev, const struct tm *time); - -/** - * \brief Enable or disable square-wave oscillator output - * \param enable Enable oscillator if true - */ -void ds1307_enable_squarewave(i2c_dev_t *dev, bool enable); - -/** - * \brief Get square-wave oscillator output - * \return true if square-wave oscillator enabled - */ -bool ds1307_is_squarewave_enabled(i2c_dev_t *dev); - -/** - * \brief Set square-wave oscillator frequency - * \param freq Frequency - */ -void ds1307_set_squarewave_freq(i2c_dev_t *dev, ds1307_squarewave_freq_t freq); - -/** - * \brief Get current square-wave oscillator frequency - * \return Frequency - */ -ds1307_squarewave_freq_t ds1307_get_squarewave_freq(i2c_dev_t *dev); - -/** - * \brief Get current output level of the SQW/OUT pin - * \return true if high - */ -bool ds1307_get_output(i2c_dev_t *dev); - -/** - * \brief Set output level of the SQW/OUT pin - * Set output level if square-wave output is disabled - * \param value High level if true - */ -void ds1307_set_output(i2c_dev_t *dev, bool value); - -/** - * \brief Read RAM contents into the buffer - * \param offset Start byte, 0..55 - * \param buf Buffer - * \param len Bytes to read, 1..56 - * \return Non-zero if error occured - */ -int ds1307_read_ram(i2c_dev_t *dev, uint8_t offset, uint8_t *buf, uint8_t len); - -/** - * \brief Write buffer to RTC RAM - * \param offset Start byte, 0..55 - * \param buf Buffer - * \param len Bytes to write, 1..56 - * \return Non-zero if error occured - */ -int ds1307_write_ram(i2c_dev_t *dev, uint8_t offset, uint8_t *buf, uint8_t len); - - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_DS1307_H_ */ diff --git a/extras/ds18b20/component.mk b/extras/ds18b20/component.mk index 2bffda5..866371c 100644 --- a/extras/ds18b20/component.mk +++ b/extras/ds18b20/component.mk @@ -6,10 +6,4 @@ INC_DIRS += $(ds18b20_ROOT).. # args for passing into compile rule generation ds18b20_SRC_DIR = $(ds18b20_ROOT) -# users can override this setting and get console debug output -DS18B20_DEBUG ?= 0 -ifeq ($(DS18B20_DEBUG),1) - ds18b20_CFLAGS = $(CFLAGS) -DDS18B20_DEBUG -endif - $(eval $(call component_compile_rules,ds18b20)) diff --git a/extras/ds18b20/ds18b20.c b/extras/ds18b20/ds18b20.c index e62011d..c965b04 100644 --- a/extras/ds18b20/ds18b20.c +++ b/extras/ds18b20/ds18b20.c @@ -16,16 +16,7 @@ #define DS18B20_ALARMSEARCH 0xEC #define DS18B20_CONVERT_T 0x44 -#define os_sleep_ms(x) vTaskDelay(((x) + portTICK_PERIOD_MS - 1) / portTICK_PERIOD_MS) - -#define DS18B20_FAMILY_ID 0x28 -#define DS18S20_FAMILY_ID 0x10 - -#ifdef DS18B20_DEBUG -#define debug(fmt, ...) printf("%s" fmt "\n", "DS18B20: ", ## __VA_ARGS__); -#else -#define debug(fmt, ...) -#endif +#define os_sleep_ms(x) vTaskDelay(((x) + portTICK_RATE_MS - 1) / portTICK_RATE_MS) uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) { onewire_addr_t addr; @@ -33,21 +24,21 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) { uint8_t sensor_id = 0; onewire_search_start(&search); - + while ((addr = onewire_search_next(&search, pin)) != ONEWIRE_NONE) { uint8_t crc = onewire_crc8((uint8_t *)&addr, 7); if (crc != (addr >> 56)){ - debug("CRC check failed: %02X %02X\n", (unsigned)(addr >> 56), crc); + printf("CRC check failed: %02X %02X\n", (unsigned)(addr >> 56), crc); return 0; } onewire_reset(pin); onewire_select(pin, addr); onewire_write(pin, DS18B20_CONVERT_T); - + onewire_power(pin); - vTaskDelay(750 / portTICK_PERIOD_MS); - + vTaskDelay(750 / portTICK_RATE_MS); + onewire_reset(pin); onewire_select(pin, addr); onewire_write(pin, DS18B20_READ_SCRATCHPAD); @@ -57,23 +48,23 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) { for (int k=0;k<9;k++){ get[k]=onewire_read(pin); } - - //debug("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]); + + //printf("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]); crc = onewire_crc8(get, 8); if (crc != get[8]){ - debug("CRC check failed: %02X %02X\n", get[8], crc); + printf("CRC check failed: %02X %02X\n", get[8], crc); return 0; } uint8_t temp_msb = get[1]; // Sign byte + lsbit uint8_t temp_lsb = get[0]; // Temp data plus lsb uint16_t temp = temp_msb << 8 | temp_lsb; - + float temperature; temperature = (temp * 625.0)/10000; - //debug("Got a DS18B20 Reading: %d.%02d\n", (int)temperature, (int)(temperature - (int)temperature) * 100); + //printf("Got a DS18B20 Reading: %d.%02d\n", (int)temperature, (int)(temperature - (int)temperature) * 100); result[sensor_id].id = sensor_id; result[sensor_id].value = temperature; sensor_id++; @@ -82,42 +73,42 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) { } float ds18b20_read_single(uint8_t pin) { - + onewire_reset(pin); onewire_skip_rom(pin); onewire_write(pin, DS18B20_CONVERT_T); onewire_power(pin); - vTaskDelay(750 / portTICK_PERIOD_MS); + vTaskDelay(750 / portTICK_RATE_MS); onewire_reset(pin); onewire_skip_rom(pin); onewire_write(pin, DS18B20_READ_SCRATCHPAD); - + uint8_t get[10]; for (int k=0;k<9;k++){ get[k]=onewire_read(pin); } - - //debug("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]); + + //printf("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]); uint8_t crc = onewire_crc8(get, 8); if (crc != get[8]){ - debug("CRC check failed: %02X %02X", get[8], crc); + printf("CRC check failed: %02X %02X", get[8], crc); return 0; } uint8_t temp_msb = get[1]; // Sign byte + lsbit uint8_t temp_lsb = get[0]; // Temp data plus lsb - + uint16_t temp = temp_msb << 8 | temp_lsb; - + float temperature; temperature = (temp * 625.0)/10000; return temperature; - //debug("Got a DS18B20 Reading: %d.%02d\n", (int)temperature, (int)(temperature - (int)temperature) * 100); + //printf("Got a DS18B20 Reading: %d.%02d\n", (int)temperature, (int)(temperature - (int)temperature) * 100); } bool ds18b20_measure(int pin, ds18b20_addr_t addr, bool wait) { @@ -157,7 +148,7 @@ bool ds18b20_read_scratchpad(int pin, ds18b20_addr_t addr, uint8_t *buffer) { onewire_select(pin, addr); } onewire_write(pin, DS18B20_READ_SCRATCHPAD); - + for (int i = 0; i < 8; i++) { buffer[i] = onewire_read(pin); } @@ -165,7 +156,7 @@ bool ds18b20_read_scratchpad(int pin, ds18b20_addr_t addr, uint8_t *buffer) { expected_crc = onewire_crc8(buffer, 8); if (crc != expected_crc) { - debug("CRC check failed reading scratchpad: %02x %02x %02x %02x %02x %02x %02x %02x : %02x (expected %02x)\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5], buffer[6], buffer[7], crc, expected_crc); + printf("CRC check failed reading scratchpad: %02x %02x %02x %02x %02x %02x %02x %02x : %02x (expected %02x)\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5], buffer[6], buffer[7], crc, expected_crc); return false; } @@ -174,23 +165,15 @@ bool ds18b20_read_scratchpad(int pin, ds18b20_addr_t addr, uint8_t *buffer) { float ds18b20_read_temperature(int pin, ds18b20_addr_t addr) { uint8_t scratchpad[8]; - int16_t temp; + int temp; if (!ds18b20_read_scratchpad(pin, addr, scratchpad)) { return NAN; } temp = scratchpad[1] << 8 | scratchpad[0]; - - float res; - if ((uint8_t)addr == DS18B20_FAMILY_ID) { - res = ((float)temp * 625.0)/10000; - } - else { - temp = ((temp & 0xfffe) << 3) + (16 - scratchpad[6]) - 4; - res = ((float)temp * 625.0)/10000 - 0.25; - } - return res; + + return ((float)temp * 625.0)/10000; } float ds18b20_measure_and_read(int pin, ds18b20_addr_t addr) { @@ -217,13 +200,10 @@ int ds18b20_scan_devices(int pin, ds18b20_addr_t *addr_list, int addr_count) { onewire_search_start(&search); while ((addr = onewire_search_next(&search, pin)) != ONEWIRE_NONE) { - uint8_t family_id = (uint8_t)addr; - if (family_id == DS18B20_FAMILY_ID || family_id == DS18S20_FAMILY_ID) { - if (found < addr_count) { - addr_list[found] = addr; - } - found++; + if (found < addr_count) { + addr_list[found] = addr; } + found++; } return found; } diff --git a/extras/ds18b20/ds18b20.h b/extras/ds18b20/ds18b20.h index c53d97d..04b4a53 100644 --- a/extras/ds18b20/ds18b20.h +++ b/extras/ds18b20/ds18b20.h @@ -3,10 +3,6 @@ #include "onewire/onewire.h" -#ifdef __cplusplus -extern "C" { -#endif - /** @file ds18b20.h * * Communicate with the DS18B20 family of one-wire temperature sensor ICs. @@ -151,8 +147,4 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result); // temperature from single dallas chip. float ds18b20_read_single(uint8_t pin); -#ifdef __cplusplus -} #endif - -#endif /* DRIVER_DS18B20_H_ */ diff --git a/extras/ds3231/LICENSE b/extras/ds3231/LICENSE deleted file mode 100644 index 3e60637..0000000 --- a/extras/ds3231/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Richard A Burton -Copyright (c) 2016 Bhuvanchandra DV - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/extras/ds3231/component.mk b/extras/ds3231/component.mk deleted file mode 100644 index 46d9b12..0000000 --- a/extras/ds3231/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ds3231 - -# expected anyone using bmp driver includes it as 'ds3231/ds3231.h' -INC_DIRS += $(ds3231_ROOT).. - -# args for passing into compile rule generation -ds3231_SRC_DIR = $(ds3231_ROOT) - -$(eval $(call component_compile_rules,ds3231)) diff --git a/extras/ds3231/ds3231.c b/extras/ds3231/ds3231.c deleted file mode 100644 index 4b0e65c..0000000 --- a/extras/ds3231/ds3231.c +++ /dev/null @@ -1,286 +0,0 @@ -/* Driver for DS3231 high precision RTC module - * - * Part of esp-open-rtos - * Copyright (C) 2015 Richard A Burton - * Copyright (C) 2016 Bhuvanchandra DV - * MIT Licensed as described in the file LICENSE -*/ - -#include "ds3231.h" -#include "espressif/esp_common.h" -#include "espressif/sdk_private.h" -#include "esp8266.h" - - -/* Convert normal decimal to binary coded decimal */ -static inline uint8_t decToBcd(uint8_t dec) -{ - return (dec / 10) * 16 + dec % 10; -} - -/* Convert binary coded decimal to normal decimal */ -static inline uint8_t bcdToDec(uint8_t bcd) -{ - return (bcd / 16) * 10 + bcd % 16; -} - -/* Send a number of bytes to the rtc over i2c - * returns true to indicate success - */ -static inline int ds3231_send(i2c_dev_t *dev, uint8_t reg, uint8_t *data, uint8_t len) -{ - return i2c_slave_write(dev->bus, dev->addr, ®, data, len); -} - -/* Read a number of bytes from the rtc over i2c - * returns true to indicate success - */ -static inline int ds3231_recv(i2c_dev_t *dev, uint8_t reg, uint8_t *data, uint8_t len) -{ - return i2c_slave_read(dev->bus, dev->addr, ®, data, len); -} - -int ds3231_setTime(i2c_dev_t *dev, struct tm *time) -{ - uint8_t data[7]; - - /* time/date data */ - data[0] = decToBcd(time->tm_sec); - data[1] = decToBcd(time->tm_min); - data[2] = decToBcd(time->tm_hour); - /* The week data must be in the range 1 to 7, and to keep the start on the - * same day as for tm_wday have it start at 1 on Sunday. */ - data[3] = decToBcd(time->tm_wday + 1); - data[4] = decToBcd(time->tm_mday); - data[5] = decToBcd(time->tm_mon + 1); - data[6] = decToBcd(time->tm_year - 100); - - return ds3231_send(dev, DS3231_ADDR_TIME, data, 7); -} - -int ds3231_setAlarm(i2c_dev_t *dev, uint8_t alarms, struct tm *time1, uint8_t option1, struct tm *time2, uint8_t option2) -{ - int i = 0; - uint8_t data[7]; - - /* alarm 1 data */ - if (alarms != DS3231_ALARM_2) - { - data[i++] = (option1 >= DS3231_ALARM1_MATCH_SEC ? decToBcd(time1->tm_sec) : DS3231_ALARM_NOTSET); - data[i++] = (option1 >= DS3231_ALARM1_MATCH_SECMIN ? decToBcd(time1->tm_min) : DS3231_ALARM_NOTSET); - data[i++] = (option1 >= DS3231_ALARM1_MATCH_SECMINHOUR ? decToBcd(time1->tm_hour) : DS3231_ALARM_NOTSET); - data[i++] = (option1 == DS3231_ALARM1_MATCH_SECMINHOURDAY ? (decToBcd(time1->tm_wday + 1) & DS3231_ALARM_WDAY) : - (option1 == DS3231_ALARM1_MATCH_SECMINHOURDATE ? decToBcd(time1->tm_mday) : DS3231_ALARM_NOTSET)); - } - - /* alarm 2 data */ - if (alarms != DS3231_ALARM_1) - { - data[i++] = (option2 >= DS3231_ALARM2_MATCH_MIN ? decToBcd(time2->tm_min) : DS3231_ALARM_NOTSET); - data[i++] = (option2 >= DS3231_ALARM2_MATCH_MINHOUR ? decToBcd(time2->tm_hour) : DS3231_ALARM_NOTSET); - data[i++] = (option2 == DS3231_ALARM2_MATCH_MINHOURDAY ? (decToBcd(time2->tm_wday + 1) & DS3231_ALARM_WDAY) : - (option2 == DS3231_ALARM2_MATCH_MINHOURDATE ? decToBcd(time2->tm_mday) : DS3231_ALARM_NOTSET)); - } - - return ds3231_send(dev, (alarms == DS3231_ALARM_2 ? DS3231_ADDR_ALARM2 : DS3231_ADDR_ALARM1), data, i); -} - -/* Get a byte containing just the requested bits - * pass the register address to read, a mask to apply to the register and - * an uint* for the output - * you can test this value directly as true/false for specific bit mask - * of use a mask of 0xff to just return the whole register byte - * returns true to indicate success - */ -bool ds3231_getFlag(i2c_dev_t *dev, uint8_t addr, uint8_t mask, uint8_t *flag) -{ - uint8_t data; - - /* get register */ - if (!ds3231_recv(dev, addr, &data, 1)) - { - /* return only requested flag */ - *flag = (data & mask); - return true; - } - - return false; -} - -/* Set/clear bits in a byte register, or replace the byte altogether - * pass the register address to modify, a byte to replace the existing - * value with or containing the bits to set/clear and one of - * DS3231_SET/DS3231_CLEAR/DS3231_REPLACE - * returns true to indicate success - */ -bool ds3231_setFlag(i2c_dev_t *dev, uint8_t addr, uint8_t bits, uint8_t mode) -{ - uint8_t data; - - /* get status register */ - if (!ds3231_recv(dev, addr, &data, 1)) - { - /* clear the flag */ - if (mode == DS3231_REPLACE) - data = bits; - else if (mode == DS3231_SET) - data |= bits; - else - data &= ~bits; - - if (!ds3231_send(dev, addr, &data, 1)) - return true; - } - - return false; -} - -bool ds3231_getOscillatorStopFlag(i2c_dev_t *dev, bool *flag) -{ - uint8_t f; - - if (ds3231_getFlag(dev, DS3231_ADDR_STATUS, DS3231_STAT_OSCILLATOR, &f)) - { - *flag = (f ? true : false); - return true; - } - - return false; -} - -inline bool ds3231_clearOscillatorStopFlag(i2c_dev_t *dev) -{ - return ds3231_setFlag(dev, DS3231_ADDR_STATUS, DS3231_STAT_OSCILLATOR, DS3231_CLEAR); -} - -inline bool ds3231_getAlarmFlags(i2c_dev_t *dev, uint8_t *alarms) -{ - return ds3231_getFlag(dev, DS3231_ADDR_STATUS, DS3231_ALARM_BOTH, alarms); -} - -inline bool ds3231_clearAlarmFlags(i2c_dev_t *dev, uint8_t alarms) -{ - return ds3231_setFlag(dev, DS3231_ADDR_STATUS, alarms, DS3231_CLEAR); -} - -inline bool ds3231_enableAlarmInts(i2c_dev_t *dev, uint8_t alarms) -{ - return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS | alarms, DS3231_SET); -} - -inline bool ds3231_disableAlarmInts(i2c_dev_t *dev, uint8_t alarms) -{ - /* Just disable specific alarm(s) requested - * does not disable alarm interrupts generally (which would enable the squarewave) - */ - return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, alarms, DS3231_CLEAR); -} - -inline bool ds3231_enable32khz(i2c_dev_t *dev) -{ - return ds3231_setFlag(dev, DS3231_ADDR_STATUS, DS3231_STAT_32KHZ, DS3231_SET); -} - -inline bool ds3231_disable32khz(i2c_dev_t *dev) -{ - return ds3231_setFlag(dev, DS3231_ADDR_STATUS, DS3231_STAT_32KHZ, DS3231_CLEAR); -} - -inline bool ds3231_enableSquarewave(i2c_dev_t *dev) -{ - return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS, DS3231_CLEAR); -} - -inline bool ds3231_disableSquarewave(i2c_dev_t *dev) -{ - return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, DS3231_CTRL_ALARM_INTS, DS3231_SET); -} - -bool ds3231_setSquarewaveFreq(i2c_dev_t *dev, uint8_t freq) -{ - uint8_t flag = 0; - - if (ds3231_getFlag(dev, DS3231_ADDR_CONTROL, 0xff, &flag)) - { - /* clear current rate */ - flag &= ~DS3231_CTRL_SQWAVE_8192HZ; - /* set new rate */ - flag |= freq; - - return ds3231_setFlag(dev, DS3231_ADDR_CONTROL, flag, DS3231_REPLACE); - } - return false; -} - -bool ds3231_getRawTemp(i2c_dev_t *dev, int16_t *temp) -{ - uint8_t data[2]; - - data[0] = DS3231_ADDR_TEMP; - if (!ds3231_recv(dev, DS3231_ADDR_TEMP,data, 2)) - { - *temp = (int16_t)(int8_t)data[0] << 2 | data[1] >> 6; - return true; - } - - return false; -} - -bool ds3231_getTempInteger(i2c_dev_t *dev, int8_t *temp) -{ - int16_t tInt; - - if (ds3231_getRawTemp(dev, &tInt)) { - *temp = tInt >> 2; - return true; - } - - return false; -} - -bool ds3231_getTempFloat(i2c_dev_t *dev, float *temp) -{ - int16_t tInt; - - if (ds3231_getRawTemp(dev, &tInt)) { - *temp = tInt * 0.25; - return true; - } - - return false; -} - -bool ds3231_getTime(i2c_dev_t *dev, struct tm *time) -{ - uint8_t data[7]; - - /* read time */ - if (ds3231_recv(dev, DS3231_ADDR_TIME, data, 7)) - { - return false; - } - - /* convert to unix time structure */ - time->tm_sec = bcdToDec(data[0]); - time->tm_min = bcdToDec(data[1]); - if (data[2] & DS3231_12HOUR_FLAG) { - /* 12H */ - time->tm_hour = bcdToDec(data[2] & DS3231_12HOUR_MASK) - 1; - /* AM/PM? */ - if (data[2] & DS3231_PM_FLAG) time->tm_hour += 12; - } else { - /* 24H */ - time->tm_hour = bcdToDec(data[2]); - } - time->tm_wday = bcdToDec(data[3]) - 1; - time->tm_mday = bcdToDec(data[4]); - time->tm_mon = bcdToDec(data[5] & DS3231_MONTH_MASK) - 1; - time->tm_year = bcdToDec(data[6]) + 100; - time->tm_isdst = 0; - - // apply a time zone (if you are not using localtime on the rtc or you want to check/apply DST) - //applyTZ(time); - - return true; - -} diff --git a/extras/ds3231/ds3231.h b/extras/ds3231/ds3231.h deleted file mode 100644 index 6ef9ff7..0000000 --- a/extras/ds3231/ds3231.h +++ /dev/null @@ -1,196 +0,0 @@ -/* Driver for DS3231 high precision RTC module - * - * Part of esp-open-rtos - * Copyright (C) 2015 Richard A Burton - * Copyright (C) 2016 Bhuvanchandra DV - * MIT Licensed as described in the file LICENSE -*/ - -#ifndef __DS3231_H__ -#define __DS3231_H__ - -#include -#include -#include -#include "i2c/i2c.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -#define DS3231_ADDR 0x68 - -#define DS3231_STAT_OSCILLATOR 0x80 -#define DS3231_STAT_32KHZ 0x08 -#define DS3231_STAT_BUSY 0x04 -#define DS3231_STAT_ALARM_2 0x02 -#define DS3231_STAT_ALARM_1 0x01 - -#define DS3231_CTRL_OSCILLATOR 0x80 -#define DS3231_CTRL_SQUAREWAVE_BB 0x40 -#define DS3231_CTRL_TEMPCONV 0x20 -#define DS3231_CTRL_SQWAVE_4096HZ 0x10 -#define DS3231_CTRL_SQWAVE_1024HZ 0x08 -#define DS3231_CTRL_SQWAVE_8192HZ 0x18 -#define DS3231_CTRL_SQWAVE_1HZ 0x00 -#define DS3231_CTRL_ALARM_INTS 0x04 -#define DS3231_CTRL_ALARM2_INT 0x02 -#define DS3231_CTRL_ALARM1_INT 0x01 - -#define DS3231_ALARM_WDAY 0x40 -#define DS3231_ALARM_NOTSET 0x80 - -#define DS3231_ADDR_TIME 0x00 -#define DS3231_ADDR_ALARM1 0x07 -#define DS3231_ADDR_ALARM2 0x0b -#define DS3231_ADDR_CONTROL 0x0e -#define DS3231_ADDR_STATUS 0x0f -#define DS3231_ADDR_AGING 0x10 -#define DS3231_ADDR_TEMP 0x11 - -#define DS3231_12HOUR_FLAG 0x40 -#define DS3231_12HOUR_MASK 0x1f -#define DS3231_PM_FLAG 0x20 -#define DS3231_MONTH_MASK 0x1f - -enum { - DS3231_SET = 0, - DS3231_CLEAR, - DS3231_REPLACE -}; - -enum { - DS3231_ALARM_NONE = 0, - DS3231_ALARM_1, - DS3231_ALARM_2, - DS3231_ALARM_BOTH -}; - -enum { - DS3231_ALARM1_EVERY_SECOND = 0, - DS3231_ALARM1_MATCH_SEC, - DS3231_ALARM1_MATCH_SECMIN, - DS3231_ALARM1_MATCH_SECMINHOUR, - DS3231_ALARM1_MATCH_SECMINHOURDAY, - DS3231_ALARM1_MATCH_SECMINHOURDATE -}; - -enum { - DS3231_ALARM2_EVERY_MIN = 0, - DS3231_ALARM2_MATCH_MIN, - DS3231_ALARM2_MATCH_MINHOUR, - DS3231_ALARM2_MATCH_MINHOURDAY, - DS3231_ALARM2_MATCH_MINHOURDATE -}; - -/* Set the time on the rtc - * timezone agnostic, pass whatever you like - * I suggest using GMT and applying timezone and DST when read back - * returns true to indicate success - */ -int ds3231_setTime(i2c_dev_t *dev, struct tm *time); - -/* Set alarms - * alarm1 works with seconds, minutes, hours and day of week/month, or fires every second - * alarm2 works with minutes, hours and day of week/month, or fires every minute - * not all combinations are supported, see DS3231_ALARM1_* and DS3231_ALARM2_* defines - * for valid options you only need to populate the fields you are using in the tm struct, - * and you can set both alarms at the same time (pass DS3231_ALARM_1/DS3231_ALARM_2/DS3231_ALARM_BOTH) - * if only setting one alarm just pass 0 for tm struct and option field for the other alarm - * if using DS3231_ALARM1_EVERY_SECOND/DS3231_ALARM2_EVERY_MIN you can pass 0 for tm stuct - * if you want to enable interrupts for the alarms you need to do that separately - * returns true to indicate success - */ -int ds3231_setAlarm(i2c_dev_t *dev, uint8_t alarms, struct tm *time1, uint8_t option1, struct tm *time2, uint8_t option2); - -/* Check if oscillator has previously stopped, e.g. no power/battery or disabled - * sets flag to true if there has been a stop - * returns true to indicate success - */ -bool ds3231_getOscillatorStopFlag(i2c_dev_t *dev, bool *flag); - -/* Clear the oscillator stopped flag - * returns true to indicate success - */ -bool ds3231_clearOscillatorStopFlag(i2c_dev_t *dev); - -/* Check which alarm(s) have past - * sets alarms to DS3231_ALARM_NONE/DS3231_ALARM_1/DS3231_ALARM_2/DS3231_ALARM_BOTH - * returns true to indicate success - */ -bool ds3231_getAlarmFlags(i2c_dev_t *dev, uint8_t *alarms); - -/* Clear alarm past flag(s) - * pass DS3231_ALARM_1/DS3231_ALARM_2/DS3231_ALARM_BOTH - * returns true to indicate success - */ -bool ds3231_clearAlarmFlags(i2c_dev_t *dev, uint8_t alarm); - -/* enable alarm interrupts (and disables squarewave) - * pass DS3231_ALARM_1/DS3231_ALARM_2/DS3231_ALARM_BOTH - * if you set only one alarm the status of the other is not changed - * you must also clear any alarm past flag(s) for alarms with - * interrupt enabled, else it will trigger immediately - * returns true to indicate success - */ -bool ds3231_enableAlarmInts(i2c_dev_t *dev, uint8_t alarms); - -/* Disable alarm interrupts (does not (re-)enable squarewave) - * pass DS3231_ALARM_1/DS3231_ALARM_2/DS3231_ALARM_BOTH - * returns true to indicate success - */ -bool ds3231_disableAlarmInts(i2c_dev_t *dev, uint8_t alarms); - -/* Enable the output of 32khz signal - * returns true to indicate success - */ -bool ds3231_enable32khz(i2c_dev_t *dev); - -/* Disable the output of 32khz signal - * returns true to indicate success - */ -bool ds3231_disable32khz(i2c_dev_t *dev); - -/* Enable the squarewave output (disables alarm interrupt functionality) - * returns true to indicate success - */ -bool ds3231_enableSquarewave(i2c_dev_t *dev); - -/* Disable the squarewave output (which re-enables alarm interrupts, but individual - * alarm interrupts also need to be enabled, if not already, before they will trigger) - * returns true to indicate success - */ -bool ds3231_disableSquarewave(i2c_dev_t *dev); - -/* Set the frequency of the squarewave output (but does not enable it) - * pass DS3231_SQUAREWAVE_RATE_1HZ/DS3231_SQUAREWAVE_RATE_1024HZ/DS3231_SQUAREWAVE_RATE_4096HZ/DS3231_SQUAREWAVE_RATE_8192HZ - * returns true to indicate success - */ -bool ds3231_setSquarewaveFreq(i2c_dev_t *dev, uint8_t freq); - -/* Get the raw value - * returns true to indicate success - */ -bool ds3231_getRawTemp(i2c_dev_t *dev, int16_t *temp); - -/* Get the temperature as an integer - * returns true to indicate success - */ -bool ds3231_getTempInteger(i2c_dev_t *dev, int8_t *temp); - -/* Get the temerapture as a float (in quarter degree increments) - * returns true to indicate success - */ -bool ds3231_getTempFloat(i2c_dev_t *dev, float *temp); - -/* Get the time from the rtc, populates a supplied tm struct - * returns true to indicate success - */ -bool ds3231_getTime(i2c_dev_t *dev, struct tm *time); - -#ifdef __cplusplus -} -#endif - -#endif /* __DS3231_H__ */ diff --git a/extras/dsm/component.mk b/extras/dsm/component.mk deleted file mode 100644 index 06e56b1..0000000 --- a/extras/dsm/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/dsm - -INC_DIRS += $(ROOT)extras/dsm - -# args for passing into compile rule generation -extras/dsm_INC_DIR = $(ROOT)extras/dsm -extras/dsm_SRC_DIR = $(ROOT)extras/dsm - -$(eval $(call component_compile_rules,extras/dsm)) diff --git a/extras/dsm/dsm.c b/extras/dsm/dsm.c deleted file mode 100644 index dd54fc4..0000000 --- a/extras/dsm/dsm.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Implementation of Delta-Sigma modulator support. - * - * Part of esp-open-rtos - * Copyright (C) 2018 ourairquality (https://github.com/ourairquality) - * Copyright (C) 2018 Zaltora (https://github.com/Zaltora) - * BSD Licensed as described in the file LICENSE - */ -#include "dsm.h" - -#include -#include - - -#if (DSM_DEBUG) -#define debug(fmt, ...) printf("%s: " fmt "\n", "DSM", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -typedef struct dsmInfoDefinition -{ - uint8_t running; - uint8_t preScale; - uint8_t target; - bool output; - - /* private */ - uint8_t usedPins; - uint8_t pins[8]; -} DSMInfo; - -static DSMInfo dsmInfo; - -void dsm_init(uint8_t npins, const uint8_t* pins) -{ - /* Assert number of pins is correct */ - if (npins > MAX_DSM_PINS) - { - debug("Incorrect number of DSM pins (%d)\n", npins); - return; - } - - /* Save pins information */ - dsmInfo.usedPins = npins; - - for (uint8_t i = 0 ; i < npins; ++i) - { - dsmInfo.pins[i] = pins[i]; - /* configure GPIOs */ - gpio_enable(pins[i], GPIO_OUTPUT); - } - - /* Set output to LOW */ - dsm_stop(); - - /* Flag not running */ - dsmInfo.running = 0; -} - -void dsm_set_prescale(uint8_t prescale) -{ - //TODO: Add a freq/prescale converter - dsmInfo.preScale = prescale; - debug("Set Prescale: %u",dsmInfo.preScale); -} - -void dsm_set_target(uint8_t target) -{ - dsmInfo.target = target; - if (target == 0 || target == UINT8_MAX) - { - dsmInfo.output = (target == UINT8_MAX); - } - debug("Duty set at %u",dsmInfo.target); - if (dsmInfo.running) - { - dsm_start(); - } -} - -void dsm_start() -{ - if (dsmInfo.target > 0 && dsmInfo.target < UINT8_MAX) - { - for (uint8_t i = 0; i < dsmInfo.usedPins; ++i) - { - SET_MASK_BITS(GPIO.CONF[dsmInfo.pins[i]], GPIO_CONF_SOURCE_DSM); - } - GPIO.DSM = GPIO_DSM_ENABLE | (dsmInfo.preScale << 8) | dsmInfo.target; - } - else - { - for (uint8_t i = 0; i < dsmInfo.usedPins; ++i) - { - gpio_write(dsmInfo.pins[i], dsmInfo.output ); - } - } - debug("start"); - dsmInfo.running = 1; -} - -void dsm_stop() -{ - for (uint8_t i = 0; i < dsmInfo.usedPins; ++i) - { - CLEAR_MASK_BITS(GPIO.CONF[dsmInfo.pins[i]], GPIO_CONF_SOURCE_DSM); - gpio_write(dsmInfo.pins[i], false); - } - debug("stop"); - dsmInfo.running = 0; -} diff --git a/extras/dsm/dsm.h b/extras/dsm/dsm.h deleted file mode 100644 index 8190f7e..0000000 --- a/extras/dsm/dsm.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Implementation of Delta-Sigma modulator support. - * - * Part of esp-open-rtos - * Copyright (C) 2018 ourairquality (https://github.com/ourairquality) - * Copyright (C) 2018 Zaltora (https://github.com/Zaltora) - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_DSM_H_ -#define EXTRAS_DSM_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define MAX_DSM_PINS (8) -#define DSM_DEBUG (0) - -/* - * Freq = (80,000,000/prescale) * (target / 256) HZ (0 < target < 128) - * Freq = (80,000,000/prescale) * ((256 - target) / 256) HZ (128 < target < 256) - */ - -void dsm_init(uint8_t npins, const uint8_t* pins); -void dsm_set_prescale(uint8_t prescale); -void dsm_set_target(uint8_t target); - -void dsm_start(); -void dsm_stop(); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_DSM_H_ */ diff --git a/extras/fatfs/README.md b/extras/fatfs/README.md deleted file mode 100644 index e135b22..0000000 --- a/extras/fatfs/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# FatFs - Generic FAT File System Module - -Current version: R0.13a - -## How to use - -Connect your SD card to ESP module - - SD pin | ESP8266 ---------|------------ -1. DAT2 | - -2. /CS | Any accessible GPIO (15, 5, 4, 0, 2, 16) -3. DI | HMOSI (GPIO13) -4. VDD | +3V3 -5. CLK | HCLK (GPIO14) -6. VSS | GND -7. DO | HMISO (GPIO12) -8. RSV | - - -Add `extras/sdio` and `extras/fatfs` to `EXTRA_COMPONENTS` parameter of your -makefile, e.g. - -```Makefile -EXTRA_COMPONENTS = extras/sdio extras/fatfs -``` - -Use `const char *f_gpio_to_volume(uint8_t gpio)` to get the FatFs volume ID -based on GPIO which is used for CS pin. - -## FatFs configuration - -Almost all of the FatFs parameters are configurable in the Makefile of your -project. See default values and their meaning in `defaults.mk`. - -## Original documentation - -http://elm-chan.org/fsw/ff/00index_e.html - -## License - -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. - - diff --git a/extras/fatfs/component.mk b/extras/fatfs/component.mk deleted file mode 100644 index 09db3c0..0000000 --- a/extras/fatfs/component.mk +++ /dev/null @@ -1,37 +0,0 @@ -# Component makefile for extras/fatfs -INC_DIRS += $(fatfs_ROOT).. - -# args for passing into compile rule generation -fatfs_SRC_DIR = $(fatfs_ROOT) - -FATFS_DIR := $(dir $(lastword $(MAKEFILE_LIST))) - -# FatFs default parameters -include $(FATFS_DIR)defaults.mk - -fatfs_CFLAGS = $(CFLAGS) \ - -DFF_FS_READONLY=$(FATFS_FS_READONLY) \ - -DFF_USE_STRFUNC=$(FATFS_USE_STRFUNC) \ - -DFF_CODE_PAGE=$(FATFS_CODE_PAGE) \ - -DFF_USE_FIND=$(FATFS_USE_FIND) \ - -DFF_USE_MKFS=$(FATFS_USE_MKFS) \ - -DFF_USE_FASTSEEK=$(FATFS_USE_FASTSEEK) \ - -DFF_USE_EXPAND=$(FATFS_USE_EXPAND) \ - -DFF_USE_CHMOD=$(FATFS_USE_CHMOD) \ - -DFF_USE_LABEL=$(FATFS_USE_LABEL) \ - -DFF_USE_FORWARD=$(FATFS_USE_FORWARD) \ - -DFF_CODE_PAGE=$(FATFS_CODE_PAGE) \ - -DFF_USE_LFN=$(FATFS_USE_LFN) \ - -DFF_MAX_LFN=$(FATFS_MAX_LFN) \ - -DFF_LFN_UNICODE=$(FATFS_LFN_UNICODE) \ - -DFF_STRF_ENCODE=$(FATFS_STRF_ENCODE) \ - -DFF_FS_RPATH=$(FATFS_FS_RPATH) \ - -DFF_FS_EXFAT=$(FATFS_FS_EXFAT) \ - -DFF_FS_NORTC=$(FATFS_FS_NORTC) \ - -DFF_NORTC_MON=$(FATFS_NORTC_MON) \ - -DFF_NORTC_MDAY=$(FATFS_NORTC_MDAY) \ - -DFF_NORTC_YEAR=$(FATFS_NORTC_YEAR) \ - -DFF_FS_LOCK=$(FATFS_FS_LOCK) \ - -DFF_FS_TIMEOUT=$(FATFS_FS_TIMEOUT) - -$(eval $(call component_compile_rules,fatfs)) diff --git a/extras/fatfs/defaults.mk b/extras/fatfs/defaults.mk deleted file mode 100644 index 047abd1..0000000 --- a/extras/fatfs/defaults.mk +++ /dev/null @@ -1,128 +0,0 @@ -######################################### -# Default FatFs parameters -######################################### - -# 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. -FATFS_FS_READONLY ?= 0 - -# This option switches string functions, f_gets(), f_putc(), f_puts() and -# f_printf(). -# 0: Disable string functions. -# 1: Enable without LF-CRLF conversion. -# 2: Enable with LF-CRLF conversion. -FATFS_USE_STRFUNC ?= 1 - -# This option switches filtered directory read functions, f_findfirst() and -# f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) -FATFS_USE_FIND ?= 2 - -# This option switches f_mkfs() function. (0:Disable or 1:Enable) -FATFS_USE_MKFS ?= 1 - -# This option switches fast seek function. (0:Disable or 1:Enable) -FATFS_USE_FASTSEEK ?= 1 - -# This option switches f_expand function. (0:Disable or 1:Enable) -FATFS_USE_EXPAND ?= 1 - -# This option switches attribute manipulation functions, f_chmod() and f_utime(). -# (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. -FATFS_USE_CHMOD ?= 1 - -# This option switches volume label functions, f_getlabel() and f_setlabel(). -# (0:Disable or 1:Enable) -FATFS_USE_LABEL ?= 1 - -# This option switches f_forward() function. (0:Disable or 1:Enable) -FATFS_USE_FORWARD ?= 1 - -# This option specifies the OEM code page to be used on the target system. -# Incorrect setting of the code page 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() -FATFS_CODE_PAGE ?= 437 - -# The FATFS_USE_LFN switches the support of long file name (LFN). -# 0: Disable support of LFN. FATFS_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. -# The working buffer occupies (FATFS_MAX_LFN + 1) * 2 bytes and -# additional 608 bytes at exFAT enabled. FATFS_MAX_LFN can be in range from 12 to 255. -# It should be set 255 to support full featured LFN operations. -# When use stack for the working buffer, take care on stack overflow. -FATFS_USE_LFN ?= 3 -FATFS_MAX_LFN ?= 255 - -# This option switches character encoding on the API. (0:ANSI/OEM or 1:UTF-16) -# To use Unicode string for the path name, enable LFN and set FATFS_LFN_UNICODE = 1. -# This option also affects behavior of string I/O functions. -FATFS_LFN_UNICODE ?= 0 - -# When FATFS_LFN_UNICODE == 1, this option selects the character encoding ON THE FILE to -# be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf(). -# 0: ANSI/OEM -# 1: UTF-16LE -# 2: UTF-16BE -# 3: UTF-8 -# This option has no effect when FATFS_LFN_UNICODE == 0. -FATFS_STRF_ENCODE ?= 3 - -# This option configures support of 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. -FATFS_FS_RPATH ?= 2 - -# This option switches support of exFAT file system. (0:Disable or 1:Enable) -# When enable exFAT, also LFN needs to be enabled. (FATFS_USE_LFN >= 1) -FATFS_FS_EXFAT ?= 1 - -# The option FATFS_FS_NORTC switches timestamp functiton. If the system does not have -# any RTC function or valid timestamp is not needed, set FATFS_FS_NORTC = 1 to disable -# the timestamp function. All objects modified by FatFs will have a fixed timestamp -# defined by FATFS_NORTC_MON, FATFS_NORTC_MDAY and _NORTC_YEAR in local time. -# To enable timestamp function (FATFS_FS_NORTC = 0), get_fattime() function need to be -# added to the project to get current time form real-time clock. FATFS_NORTC_MON, -# FATFS_NORTC_MDAY and FATFS_NORTC_YEAR have no effect. -# These options have no effect at read-only configuration (FATFS_FS_READONLY = 1). -FATFS_FS_NORTC ?= 1 -FATFS_NORTC_MON ?= 1 -FATFS_NORTC_MDAY ?= 1 -FATFS_NORTC_YEAR ?= 2017 - -# The option FATFS_FS_LOCK switches file lock function to control duplicated file open -# and illegal operation to open objects. This option must be 0 when FATFS_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. */ -FATFS_FS_LOCK ?= 64 - -# Timeout (system ticks) when requesting grant to access the volume -FATFS_FS_TIMEOUT ?= 1000 diff --git a/extras/fatfs/diskio.c b/extras/fatfs/diskio.c deleted file mode 100644 index 71f5025..0000000 --- a/extras/fatfs/diskio.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * FatFs integration to esp-open-rtos - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "diskio.h" -#include -#include -#include -#include -#include -#include "ffconf.h" -#include "volumes.h" - -static sdio_card_t *devices[FF_VOLUMES] = { 0 }; - -static const uint8_t card_types[] = { - [SDIO_TYPE_UNKNOWN] = 0, - [SDIO_TYPE_MMC] = (1 << 0), - [SDIO_TYPE_SD1] = (1 << 1), - [SDIO_TYPE_SD2] = (1 << 2), - [SDIO_TYPE_SDHC] = (1 << 3) | (1 << 2), -}; - -DSTATUS disk_status(BYTE pdrv) -{ - if (pdrv >= FF_VOLUMES || !devices[pdrv] || devices[pdrv]->type == SDIO_TYPE_UNKNOWN) - return STA_NOINIT; - return 0; -} - -DSTATUS disk_initialize(BYTE pdrv) -{ - if (pdrv >= FF_VOLUMES) - return STA_NOINIT; - - // allocate descriptior - if (!devices[pdrv]) - { - devices[pdrv] = malloc(sizeof(sdio_card_t)); - if (!devices[pdrv]) - return STA_NOINIT; - } - - // Init card - if (sdio_init(devices[pdrv], f_drv_to_gpio(pdrv), _FF_HIGH_SPEED_SPI_FREQ_DIV) != SDIO_ERR_NONE) - return STA_NOINIT; - - return 0; -} - -DRESULT disk_read(BYTE pdrv, BYTE *buff, DWORD sector, UINT count) -{ - if (pdrv >= FF_VOLUMES || !devices[pdrv]) - return RES_PARERR; - if (sdio_read_sectors(devices[pdrv], sector, buff, count) != SDIO_ERR_NONE) - return RES_ERROR; - return RES_OK; -} - -DRESULT disk_write(BYTE pdrv, const BYTE *buff, DWORD sector, UINT count) -{ - if (pdrv >= FF_VOLUMES || !devices[pdrv]) - return RES_PARERR; - if (sdio_write_sectors(devices[pdrv], sector, (uint8_t *)buff, count) != SDIO_ERR_NONE) - return RES_ERROR; - return RES_OK; -} - -DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff) -{ - if (pdrv >= FF_VOLUMES || !devices[pdrv]) - return RES_PARERR; - - uint8_t *buf8 = (uint8_t *)buff; - uint32_t *buf32 = (uint32_t *)buff; - - switch (cmd) - { - case CTRL_SYNC: - return RES_OK; - case GET_SECTOR_COUNT: - buf32[0] = devices[pdrv]->sectors; - return RES_OK; - case GET_BLOCK_SIZE: - buf32[0] = 512; - return RES_OK; - case CTRL_TRIM: - return sdio_erase_sectors(devices[pdrv], buf32[0], buf32[1]) != SDIO_ERR_NONE - ? RES_ERROR - : RES_OK; - case MMC_GET_TYPE: - buf8[0] = card_types[devices[pdrv]->type]; - return buf8[0] ? RES_OK : RES_ERROR; - case MMC_GET_CSD: - memcpy(buff, devices[pdrv]->csd.data, 16); - return RES_OK; - case MMC_GET_CID: - memcpy(buff, devices[pdrv]->cid.data, 16); - return RES_OK; - case MMC_GET_OCR: - buf32[0] = devices[pdrv]->ocr.data; - return RES_OK; - } - return RES_ERROR; -} diff --git a/extras/fatfs/diskio.h b/extras/fatfs/diskio.h deleted file mode 100644 index 03e8b7c..0000000 --- a/extras/fatfs/diskio.h +++ /dev/null @@ -1,80 +0,0 @@ -/*-----------------------------------------------------------------------/ -/ Low level disk interface modlue include file (C)ChaN, 2014 / -/-----------------------------------------------------------------------*/ - -#ifndef _DISKIO_DEFINED -#define _DISKIO_DEFINED - -#ifdef __cplusplus -extern "C" { -#endif - -#include "integer.h" - - -/* 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, DWORD sector, UINT count); -DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD 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 _FS_READONLY == 0) */ -#define GET_SECTOR_COUNT 1 /* Get media size (needed at _USE_MKFS == 1) */ -#define GET_SECTOR_SIZE 2 /* Get sector size (needed at _MAX_SS != _MIN_SS) */ -#define GET_BLOCK_SIZE 3 /* Get erase block size (needed at _USE_MKFS == 1) */ -#define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at _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/extras/fatfs/ff.c b/extras/fatfs/ff.c deleted file mode 100644 index a0388b4..0000000 --- a/extras/fatfs/ff.c +++ /dev/null @@ -1,6555 +0,0 @@ -/*----------------------------------------------------------------------------/ -/ FatFs - Generic FAT Filesystem Module R0.13a / -/-----------------------------------------------------------------------------/ -/ -/ Copyright (C) 2017, 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" /* Declarations of FatFs API */ -#include "diskio.h" /* Declarations of device I/O functions */ - - -/*-------------------------------------------------------------------------- - - Module Private Definitions - ----------------------------------------------------------------------------*/ - -#if FF_DEFINED != 89352 /* Revision ID */ -#error Wrong include file (ff.h). -#endif - - -/* 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 IsSurrogate(c) ((c) >= 0xD800 && (c) <= 0xDFFF) -#define IsSurrogateH(c) ((c) >= 0xD800 && (c) <= 0xDBFF) -#define IsSurrogateL(c) ((c) >= 0xDC00 && (c) <= 0xDFFF) - - -/* 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 */ - - -/* 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 */ - - -/* 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 */ - - -/* 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) */ - - -/* 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 */ - - -/* 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 at 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 volume - 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 index */ -#else -#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */ -#define LD2PT(vol) 0 /* Find first valid partition or in SFD */ -#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; /* File system mount ID */ - -#if FF_FS_RPATH != 0 && FF_VOLUMES >= 2 -static BYTE CurrVol; /* Current drive */ -#endif - -#if FF_FS_LOCK != 0 -static FILESEM Files[FF_FS_LOCK]; /* Open object lock semaphores */ -#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 < 12 || FF_SFN_BUF < 12 || FF_LFN_BUF < FF_SFN_BUF -#error Wrong setting of FF_LFN_BUF or FF_SFN_BUF -#endif -#if FF_LFN_UNICODE < 0 || FF_LFN_UNICODE > 2 -#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 - -#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 */ -/*-----------------------------------------------------------------------*/ - -/* Copy memory to memory */ -static -void mem_cpy (void* dst, const void* src, UINT cnt) -{ - BYTE *d = (BYTE*)dst; - const BYTE *s = (const BYTE*)src; - - if (cnt != 0) { - do { - *d++ = *s++; - } while (--cnt); - } -} - - -/* Fill memory block */ -static -void mem_set (void* dst, int val, UINT cnt) -{ - BYTE *d = (BYTE*)dst; - - do { - *d++ = (BYTE)val; - } while (--cnt); -} - - -/* Compare memory block */ -static -int mem_cmp (const void* dst, const void* src, UINT cnt) /* ZR:same, NZ:different */ -{ - const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; - int r = 0; - - do { - r = *d++ - *s++; - } while (--cnt && r == 0); - - return r; -} - - -/* Check if chr is contained in the string */ -static -int chk_chr (const char* str, int chr) /* NZ:contained, ZR:not contained */ -{ - while (*str && *str != chr) str++; - return *str; -} - - -/* Test if the character 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 character 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 character from TCHAR string in defined API encodeing */ -static -DWORD tchar2uni ( /* Returns character in UTF-16 encoding (>=0x10000 on double encoding unit, 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++; - 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 a byte */ - 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 >= 0x10000) 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; -} - - -/* Output a TCHAR string in defined API encoding */ -static -BYTE put_utf ( /* Returns number of encoding units written (0:buffer overflow or wrong encoding) */ - DWORD chr, /* UTF-16 encoded character (Double encoding unit char 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; - -#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 back the window */ - 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 */ - DWORD sector /* Sector number to make appearance in the fs->win[] */ -) -{ - FRESULT res = FR_OK; - - - if (sector != fs->winsect) { /* Window offset changed? */ -#if !FF_FS_READONLY - res = sync_window(fs); /* Write-back changes */ -#endif - if (res == FR_OK) { /* Fill sector window with new data */ - if (disk_read(fs->pdrv, fs->win, sector, 1) != RES_OK) { - sector = 0xFFFFFFFF; /* Invalidate window if read data is not valid */ - res = FR_DISK_ERR; - } - fs->winsect = sector; - } - } - 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 */ - mem_set(fs->win, 0, SS(fs)); - st_word(fs->win + BS_55AA, 0xAA55); - st_dword(fs->win + FSI_LeadSig, 0x41615252); - st_dword(fs->win + FSI_StrucSig, 0x61417272); - st_dword(fs->win + FSI_Free_Count, fs->free_clst); - st_dword(fs->win + FSI_Nxt_Free, fs->last_clst); - /* Write it into the FSInfo sector */ - fs->winsect = fs->volbase + 1; - 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 -DWORD 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 + fs->csize * clst; /* Start sector number of the cluster */ -} - - - - -/*-----------------------------------------------------------------------*/ -/* FAT access - Read value of a 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) { - DWORD cofs = clst - obj->sclust; /* Offset from start cluster */ - DWORD clen = (DWORD)((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; - } - } - /* go to default */ -#endif - default: - val = 1; /* Internal error */ - } - } - - return val; -} - - - - -#if !FF_FS_READONLY -/*-----------------------------------------------------------------------*/ -/* FAT access - Change value of a 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; /* Put 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)); /* Put 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->database + val / 8 / SS(fs)) != FR_OK) return 0xFFFFFFFF; /* (assuming bitmap is located top of the cluster heap) */ - 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; - DWORD sect; - - - clst -= 2; /* The first bit corresponds to cluster #2 */ - sect = fs->database + clst / 8 / SS(fs); /* Sector address (assuming bitmap is located top of the cluster heap) */ - 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: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 - DWORD 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 freed */ - rt[1] = clst2sect(fs, ecl) + fs->csize - 1; /* End of data area freed */ - disk_ioctl(fs->pdrv, CTRL_TRIM, rt); /* Inform device the data in the block is no longer needed */ -#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 */ -) -{ - DWORD 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 */ - mem_set(fs->win, 0, SS(fs)); /* 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); szb > SS(fs) && !(ibuf = ff_memalloc(szb)); szb /= 2) ; - if (szb > SS(fs)) { /* Buffer allocated? */ - mem_set(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 (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 = 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 (dp->sect == 0 || ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR)) return FR_NO_FILE; /* Report EOT when offset has reached max value */ - - 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 nent /* 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)) { -#else - if (dp->dir[DIR_Name] == DDEM || dp->dir[DIR_Name] == 0) { -#endif - if (++n == nent) break; /* A block of contiguous free entries is found */ - } else { - n = 0; /* Not a blank entry. Restart to search */ - } - res = dir_next(dp, 1); - } while (res == FR_OK); /* Next entry with table stretch enabled */ - } - - 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 || 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) return 0; /* Buffer overflow? */ - lfnbuf[i++] = wc = uc; /* Store it */ - } else { - if (uc != 0xFFFF) return 0; /* Check filler */ - } - } - - if (dir[LDIR_Ord] & LLEF) { /* Put terminator if it is the last LFN part */ - if (i >= FF_MAX_LFN) 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 left locations */ - } 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 */ - const WCHAR* lfn, /* Pointer to LFN */ - UINT seq /* Sequence number */ -) -{ - BYTE ns[8], c; - UINT i, j; - WCHAR wc; - DWORD sr; - - - mem_cpy(dst, src, 11); - - if (seq > 5) { /* In case of many collisions, generate a hash number instead of sequential number */ - sr = seq; - while (*lfn) { /* Create a CRC */ - wc = *lfn++; - for (i = 0; i < 16; i++) { - sr = (sr << 1) + (wc & 1); - wc >>= 1; - if (sr & 0x10000) sr ^= 0x11021; - } - } - seq = (UINT)sr; - } - - /* itoa (hexdecimal) */ - i = 7; - do { - c = (BYTE)((seq % 16) + '0'); - if (c > '9') c += 7; - ns[i--] = c; - seq /= 16; - } while (seq); - ns[i] = '~'; - - /* Append the number to the SFN body */ - for (j = 0; j < i && dst[j] != ' '; j++) { - if (dbc_1st(dst[j])) { - if (j == i - 1) break; - j++; - } - } - do { - 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; - for (i = sum = 0; i < szblk; i++) { - if (i == XDIR_SetSum) { /* Skip 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 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 upper-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 ( - BYTE dat, /* Byte to be calculated */ - DWORD sum /* Previous sum */ -) -{ - sum = ((sum & 1) ? 0x80000000 : 0) + (sum >> 1) + dat; - return sum; -} -#endif - - -#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 -/*------------------------------------------------------*/ -/* exFAT: Get object information from a directory block */ -/*------------------------------------------------------*/ - -static -void get_xfileinfo ( - BYTE* dirb, /* Pointer to the direcotry entry block 85+C0+C1s */ - FILINFO* fno /* Buffer to store the extracted file information */ -) -{ - WCHAR wc, hs; - UINT di, si, nc; - - /* Get file name from the entry block */ - si = SZDIRE * 2; /* 1st C1 entry */ - nc = hs = di = 0; - while (nc < dirb[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(dirb + si); si += 2; nc++; /* Get a character */ - if (hs == 0 && IsSurrogate(wc)) { /* Is it a surrogate? */ - hs = wc; continue; /* Get low surrogate */ - } - wc = put_utf((DWORD)hs << 16 | wc, &fno->fname[di], FF_LFN_BUF - di); /* Store it in UTF-16 or UTF-8 encoding */ - if (wc == 0) { di = 0; break; } /* Buffer overflow or wrong encoding? */ - di += wc; - 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 have SFN */ - - fno->fattrib = dirb[XDIR_Attr]; /* Attribute */ - fno->fsize = (fno->fattrib & AM_DIR) ? 0 : ld_qword(dirb + XDIR_FileSize); /* Size */ - fno->ftime = ld_word(dirb + XDIR_ModTime + 0); /* Time */ - fno->fdate = ld_word(dirb + XDIR_ModTime + 2); /* Date */ -} - -#endif /* FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 */ - - -/*-----------------------------------*/ -/* 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 85 entry */ - res = move_window(dp->obj.fs, dp->sect); - if (res != FR_OK) return res; - if (dp->dir[XDIR_Type] != 0x85) return FR_INT_ERR; /* Invalid order */ - mem_cpy(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 C0 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] != 0xC0) return FR_INT_ERR; /* Invalid order */ - mem_cpy(dirb + 1 * SZDIRE, dp->dir, SZDIRE); - if (MAXDIRB(dirb[XDIR_NumName]) > sz_ent) return FR_INT_ERR; - - /* Load C1 entries */ - i = 2 * SZDIRE; /* C1 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] != 0xC1) return FR_INT_ERR; /* Invalid order */ - if (i < MAXDIRB(FF_MAX_LFN)) mem_cpy(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; - mem_cpy(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 85,C0 entry */ - mem_set(dirb, 0, 2 * SZDIRE); - dirb[0 * SZDIRE + XDIR_Type] = 0x85; /* 85 entry */ - dirb[1 * SZDIRE + XDIR_Type] = 0xC0; /* C0 entry */ - - /* Create C1 entries */ - i = SZDIRE * 2; /* Top of C1 entries */ - nlen = nc1 = 0; wc = 1; - do { - dirb[i++] = 0xC1; dirb[i++] = 0; /* Entry type C1 */ - 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 a, c; -#if FF_USE_LFN - BYTE ord = 0xFF, sum = 0xFF; -#endif - - while (dp->sect) { - res = move_window(fs, dp->sect); - if (res != FR_OK) break; - c = dp->dir[DIR_Name]; /* Test for the entry type */ - if (c == 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 (c == 0x83) break; /* Volume label entry? */ - } else { - if (c == 0x85) { /* 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 = a = dp->dir[DIR_Attr] & AM_MASK; /* Get attribute */ -#if FF_USE_LFN /* LFN configuration */ - if (c == DDEM || c == '.' || (int)((a & ~AM_ARC) == AM_VOL) != vol) { /* An entry without valid data */ - ord = 0xFF; - } else { - if (a == AM_LFN) { /* An LFN entry is found */ - if (c & LLEF) { /* Is it start of an LFN sequence? */ - sum = dp->dir[LDIR_Chksum]; - c &= (BYTE)~LLEF; ord = c; - dp->blk_ofs = dp->dptr; - } - /* Check LFN validity and capture it */ - ord = (c == 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 (c != DDEM && c != '.' && a != AM_LFN && (int)((a & ~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) && !mem_cmp(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) && !mem_cmp(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, nlen, nent; - BYTE sn[12], sum; - - - if (dp->fn[NSFLAG] & (NS_DOT | NS_NONAME)) return FR_INVALID_NAME; /* Check name validity */ - for (nlen = 0; fs->lfnbuf[nlen]; nlen++) ; /* Get lfn length */ - -#if FF_FS_EXFAT - if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ - nent = (nlen + 14) / 15 + 2; /* Number of entries to allocate (85+C0+C1s) */ - res = dir_alloc(dp, nent); /* Allocate entries */ - if (res != FR_OK) return res; - dp->blk_ofs = dp->dptr - SZDIRE * (nent - 1); /* Set the allocated entry block offset */ - - if (dp->obj.stat & 4) { /* Has the directory been stretched? */ - 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); /* Update the allocation status */ - st_qword(fs->dirbuf + XDIR_ValidFileSize, dp->obj.objsize); - fs->dirbuf[XDIR_GenFlags] = dp->obj.stat | 1; - 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 */ - mem_cpy(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. */ - nent = (sn[NSFLAG] & NS_LFN) ? (nlen + 12) / 13 + 1 : 1; /* Number of entries to allocate */ - res = dir_alloc(dp, nent); /* Allocate entries */ - if (res == FR_OK && --nent) { /* Set LFN entry if needed */ - res = dir_sdi(dp, dp->dptr - nent * 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)nent, sum); - fs->wflag = 1; - res = dir_next(dp, 0); /* Next entry */ - } while (res == FR_OK && --nent); - } - } - -#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) { - mem_set(dp->dir, 0, SZDIRE); /* Clean the entry */ - mem_cpy(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 - WCHAR wc, hs; - FATFS *fs = dp->obj.fs; -#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) { /* On the exFAT volume */ - get_xfileinfo(fs->dirbuf, fno); - return; - } else -#endif - { /* On the FAT/FAT32 volume */ - if (dp->blk_ofs != 0xFFFFFFFF) { /* Get LFN if available */ - si = di = 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 */ - } - wc = put_utf((DWORD)hs << 16 | wc, &fno->fname[di], FF_LFN_BUF - di); /* Store it in UTF-16 or UTF-8 encoding */ - if (wc == 0) { di = 0; break; } /* Invalid char or buffer overflow? */ - di += wc; - 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? */ - wc = put_utf(wc, &fno->altname[di], FF_SFN_BUF - di); /* Store it in UTF-16 or UTF-8 */ - if (wc == 0) { di = 0; break; } /* Buffer overflow? */ - di += wc; -#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; fno->altname[si]; si++, di++) { /* Copy altname[] to fname[] with case information */ - wc = (WCHAR)fno->altname[si]; - if (IsUpper(wc) && (dp->dir[DIR_NTres] & ((si >= 9) ? NS_EXT : NS_BODY))) 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; -#endif - - fno->fattrib = dp->dir[DIR_Attr]; /* 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 */ -/*-----------------------------------------------------------------------*/ - -static -DWORD get_achar ( /* Get a character and advances 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_matching ( /* 0:not matched, 1:matched */ - const TCHAR* pat, /* Matching pattern */ - const TCHAR* nam, /* String to be tested */ - int skip, /* Number of pre-skip chars (number of ?s) */ - int inf /* Infinite search (* specified) */ -) -{ - const TCHAR *pp, *np; - DWORD pc, nc; - int nm, nx; - - - while (skip--) { /* Pre-skip name chars */ - if (!get_achar(&nam)) return 0; /* Branch mismatched if less name chars */ - } - if (*pat == 0 && inf) return 1; /* (short circuit) */ - - do { - pp = pat; np = nam; /* Top of pattern and name to match */ - for (;;) { - if (*pp == '?' || *pp == '*') { /* Wildcard? */ - nm = nx = 0; - do { /* Analyze the wildcard block */ - if (*pp++ == '?') nm++; else nx = 1; - } while (*pp == '?' || *pp == '*'); - if (pattern_matching(pp, np, nm, nx)) return 1; /* Test new branch (recurs upto number of wildcard blocks in the pattern) */ - nc = *np; break; /* Branch mismatched */ - } - pc = get_achar(&pp); /* Get a pattern char */ - nc = get_achar(&np); /* Get a name char */ - if (pc != nc) break; /* Branch mismatched? */ - if (pc == 0) return 1; /* Branch matched? (matched at end of both strings) */ - } - get_achar(&nam); /* nam++ */ - } while (inf && nc); /* 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 < ' ' || wc == '/' || wc == '\\') break; /* Break if end of the path or a separator is found */ - if (wc < 0x80 && chk_chr("\"*:<>\?|\x7F", 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 */ - } - while (*p == '/' || *p == '\\') p++; /* Skip duplicated separators if exist */ - *path = p; /* Return pointer to the next segment */ - cf = (wc < ' ') ? NS_LAST : 0; /* Set last segment flag if end of the path */ - -#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) */ - - mem_set(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 a non-ASCII character? */ - cf |= NS_LFN; /* LFN entry needs to be created */ -#if FF_CODE_PAGE == 0 - if (ExCvt) { /* At SBCS */ - wc = ff_uni2oem(wc, CODEPAGE); /* Unicode ==> ANSI/OEM code */ - if (wc & 0x80) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */ - } else { /* At DBCS */ - wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Upper convert ==> ANSI/OEM code */ - } -#elif FF_CODE_PAGE < 900 /* 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 /* DBCS cfg */ - wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Upper 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 || chk_chr("+,;=[]", wc)) { /* Replace illegal characters for SFN if needed */ - 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; - mem_set(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 (c != '/' && 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 (c == '/' || c == '\\') { /* Break if a separator is found */ - while (p[si] == '/' || 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 (chk_chr("\"*+,:;<=>\?[]|\x7F", 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 <= ' ') ? 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 (*path != '/' && *path != '\\') { /* Without heading separator */ - dp->obj.sclust = fs->cdir; /* Start from current directory */ - } else -#endif - { /* With heading separator */ - while (*path == '/' || *path == '\\') path++; /* Strip heading separator */ - dp->obj.sclust = 0; /* Start from 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) */ - const TCHAR** path /* Pointer to pointer to the path name */ -) -{ - const TCHAR *tp, *tt; - UINT i; - int vol = -1; -#if FF_STR_VOLUME_ID /* Find string drive id */ - static const char* const volid[] = {FF_VOLUME_STRS}; - const char *sp; - char c; - TCHAR tc; -#endif - - - if (*path != 0) { /* If the pointer is not a null */ - for (tt = *path; (UINT)*tt >= (FF_USE_LFN ? ' ' : '!') && *tt != ':'; tt++) ; /* Find a colon in the path */ - if (*tt == ':') { /* If a colon is exist in the path name */ - tp = *path; - i = *tp++; - if (IsDigit(i) && tp == tt) { /* Is there a numeric drive id + colon? */ - if ((i -= '0') < FF_VOLUMES) { /* If drive id is found, get the value and strip it */ - vol = (int)i; - *path = ++tt; - } - } -#if FF_STR_VOLUME_ID - else { /* No numeric drive number, find string drive id */ - i = 0; tt++; - do { - sp = volid[i]; tp = *path; - do { /* Compare a string drive id with path name */ - c = *sp++; tc = *tp++; - if (IsLower(tc)) tc -= 0x20; - } while (c && (TCHAR)c == tc); - } while ((c || tp != tt) && ++i < FF_VOLUMES); /* Repeat for each id until pattern match */ - if (i < FF_VOLUMES) { /* If a drive id is found, get the value and strip it */ - vol = (int)i; - *path = tt; - } - } -#endif - } else { /* No volume id and use default drive */ -#if FF_FS_RPATH != 0 && FF_VOLUMES >= 2 - vol = CurrVol; /* Current drive */ -#else - vol = 0; /* Drive 0 */ -#endif - } - } - return vol; -} - - - - -/*-----------------------------------------------------------------------*/ -/* Load a sector and check if it is an FAT VBR */ -/*-----------------------------------------------------------------------*/ - -static -BYTE check_fs ( /* 0:FAT, 1:exFAT, 2:Valid BS but not FAT, 3:Not a BS, 4:Disk error */ - FATFS* fs, /* Filesystem object */ - DWORD sect /* Sector# (lba) to load and check if it is an FAT-VBR or not */ -) -{ - fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */ - if (move_window(fs, sect) != FR_OK) return 4; /* Load boot record */ - - if (ld_word(fs->win + BS_55AA) != 0xAA55) return 3; /* Check boot record signature (always placed here even if the sector size is >512) */ - -#if FF_FS_EXFAT - if (!mem_cmp(fs->win + BS_JmpBoot, "\xEB\x76\x90" "EXFAT ", 11)) return 1; /* Check if exFAT VBR */ -#endif - if (fs->win[BS_JmpBoot] == 0xE9 || fs->win[BS_JmpBoot] == 0xEB || fs->win[BS_JmpBoot] == 0xE8) { /* Valid JumpBoot code? */ - if (!mem_cmp(fs->win + BS_FilSysType, "FAT", 3)) return 0; /* Is it an FAT VBR? */ - if (!mem_cmp(fs->win + BS_FilSysType32, "FAT32", 5)) return 0; /* Is it an FAT32 VBR? */ - } - return 2; /* Valid BS but not FAT */ -} - - - - -/*-----------------------------------------------------------------------*/ -/* Determine logical drive number and mount the volume if needed */ -/*-----------------------------------------------------------------------*/ - -static -FRESULT find_volume ( /* FR_OK(0): successful, !=0: any 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 */ -) -{ - BYTE fmt, *pt; - int vol; - DSTATUS stat; - DWORD bsect, fasize, tsect, sysect, nclst, szbfat, br[4]; - WORD nrsv; - FATFS *fs; - UINT i; - - - /* 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 valid */ - } - } - - /* The filesystem object is not valid. */ - /* Following code attempts to mount the volume. (analyze BPB and initialize the filesystem object) */ - - fs->fs_type = 0; /* Clear the filesystem object */ - fs->pdrv = LD2PD(vol); /* Bind the logical drive and a 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 partition on the drive. Supports only generic partitioning rules, FDISK and SFD. */ - bsect = 0; - fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT-VBR as SFD */ - if (fmt == 2 || (fmt < 2 && LD2PT(vol) != 0)) { /* Not an FAT-VBR or forced partition number */ - for (i = 0; i < 4; i++) { /* Get partition offset */ - pt = fs->win + (MBR_Table + i * SZ_PTE); - br[i] = pt[PTE_System] ? ld_dword(pt + PTE_StLba) : 0; - } - i = LD2PT(vol); /* Partition number: 0:auto, 1-4:forced */ - if (i != 0) i--; - do { /* Find an FAT volume */ - bsect = br[i]; - fmt = bsect ? check_fs(fs, bsect) : 3; /* Check the partition */ - } while (LD2PT(vol) == 0 && fmt >= 2 && ++i < 4); - } - 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 */ - - /* An FAT volume is found (bsect). Following code initializes the filesystem object */ - -#if FF_FS_EXFAT - if (fmt == 1) { - QWORD maxlba; - - 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 + 1 of the volume */ - if (maxlba >= 0x100000000) return FR_NO_FILESYSTEM; /* (It cannot be handled 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) */ - - 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); - - /* Check if bitmap location is in assumption (at the first cluster) */ - if (move_window(fs, clst2sect(fs, fs->dirbase)) != FR_OK) return FR_DISK_ERR; - for (i = 0; i < SS(fs); i += SZDIRE) { - if (fs->win[i] == 0x81 && ld_dword(fs->win + i + 20) == 2) break; /* 81 entry with cluster #2? */ - } - if (i == SS(fs)) return FR_NO_FILESYSTEM; -#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 = 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 (NULL:unmount)*/ - const TCHAR* path, /* Logical drive number to be mounted/unmounted */ - BYTE opt /* Mode 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 = find_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 file open mode flags */ -) -{ - FRESULT res; - DIR dj; - FATFS *fs; -#if !FF_FS_READONLY - DWORD dw, cl, bcs, clst, sc; - FSIZE_t ofs; -#endif - DEF_NAMBUF - - - if (!fp) return FR_INVALID_OBJECT; - - /* Get logical drive */ - mode &= FF_FS_READONLY ? FA_READ : FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_CREATE_NEW | FA_OPEN_ALWAYS | FA_OPEN_APPEND; - res = find_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 */ - mem_set(fs->dirbuf + 2, 0, 30); /* Clear 85 entry except for NumSec */ - mem_set(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 */ - cl = ld_clust(fs, dj.dir); /* Get current cluster chain */ - st_dword(dj.dir + DIR_CrtTime, GET_FATTIME()); /* Set created time */ - 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 */ - dw = fs->winsect; - res = remove_chain(&dj.obj, cl, 0); - if (res == FR_OK) { - res = move_window(fs, dw); - 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 - mem_set(fp->buf, 0, FF_MAX_SS); /* 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 */ - if ((sc = clst2sect(fs, clst)) == 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 - } - } - } -#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, /* Pointer to the file object */ - void* buff, /* Pointer to data buffer */ - UINT btr, /* Number of bytes to read */ - UINT* br /* Pointer to number of bytes read */ -) -{ - FRESULT res; - FATFS *fs; - DWORD clst, 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; /* Repeat until all data read */ - btr -= rcnt, *br += rcnt, rbuff += rcnt, fp->fptr += rcnt) { - 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) { - mem_cpy(rbuff + ((fs->winsect - sect) * SS(fs)), fs->win, SS(fs)); - } -#else - if ((fp->flag & FA_DIRTY) && fp->sect - sect < cc) { - mem_cpy(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 left 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 */ - mem_cpy(rbuff, fs->win + fp->fptr % SS(fs), rcnt); /* Extract partial sector */ -#else - mem_cpy(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, /* Pointer to the file object */ - const void* buff, /* Pointer to the data to be written */ - UINT btw, /* Number of bytes to write */ - UINT* bw /* Pointer to number of bytes written */ -) -{ - FRESULT res; - FATFS *fs; - DWORD clst, 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; /* Repeat until all data written */ - btw -= wcnt, *bw += wcnt, wbuff += wcnt, fp->fptr += wcnt, fp->obj.objsize = (fp->fptr > fp->obj.objsize) ? fp->fptr : fp->obj.objsize) { - 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 */ - mem_cpy(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 */ - mem_cpy(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 left 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 */ - mem_cpy(fs->win + fp->fptr % SS(fs), wbuff, wcnt); /* Fit data to the sector */ - fs->wflag = 1; -#else - mem_cpy(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 /* Pointer to the file object */ -) -{ - 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); - st_qword(fs->dirbuf + XDIR_FileSize, fp->obj.objsize); - st_qword(fs->dirbuf + XDIR_ValidFileSize, fp->obj.objsize); - 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 /* Pointer to the file object 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 */ -/*-----------------------------------------------------------------------*/ - -#if FF_VOLUMES >= 2 -FRESULT f_chdrive ( - const TCHAR* path /* Drive number */ -) -{ - 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; -} -#endif - - -FRESULT f_chdir ( - const TCHAR* path /* Pointer to the directory path */ -) -{ - FRESULT res; - DIR dj; - FATFS *fs; - DEF_NAMBUF - - /* Get logical drive */ - res = find_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) { - fs->cdir = dj.obj.sclust; /* It is the start directory itself */ -#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; - } - - LEAVE_FF(fs, res); -} - - -#if FF_FS_RPATH >= 2 -FRESULT f_getcwd ( - TCHAR* buff, /* Pointer to the directory path */ - UINT len /* Size of path */ -) -{ - FRESULT res; - DIR dj; - FATFS *fs; - UINT i, n; - DWORD ccl; - TCHAR *tp; - FILINFO fno; - DEF_NAMBUF - - - *buff = 0; - /* Get logical drive */ - res = find_volume((const TCHAR**)&buff, &fs, 0); /* Get current volume */ - if (res == FR_OK) { - dj.obj.fs = fs; - INIT_NAMBUF(fs); - 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++) ; - if (i < n + 3) { - res = FR_NOT_ENOUGH_CORE; break; - } - while (n) buff[--i] = fno.fname[--n]; - buff[--i] = '/'; - } - } - tp = buff; - if (res == FR_OK) { -#if FF_VOLUMES >= 2 - *tp++ = '0' + CurrVol; /* Put drive number */ - *tp++ = ':'; -#endif - if (i == len) { /* Root-directory */ - *tp++ = '/'; - } else { /* Sub-directroy */ - do /* Add stacked path str */ - *tp++ = buff[i++]; - while (i < len); - } - } - *tp = 0; - FREE_NAMBUF(); - } - - 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, nsect; - FSIZE_t ifptr; -#if FF_USE_FASTSEEK - DWORD cl, pcl, ncl, tcl, dsc, tlen, ulen, *tbl; -#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 = find_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_matching(dp->pat, fno->fname, 0, 0)) break; /* Test for the file name */ -#if FF_USE_LFN && FF_USE_FIND == 2 - if (pattern_matching(dp->pat, fno->altname, 0, 0)) 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 = find_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, sect, stat; - UINT i; - FFOBJID obj; - - - /* Get logical drive */ - res = find_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->database; /* Assuming bitmap starts at cluster 2 */ - 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); - } - } - *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 = find_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; - FATFS *fs; - BYTE *dir; - DWORD dcl, pcl, tm; - DEF_NAMBUF - - - /* Get logical drive */ - res = find_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 (res == FR_OK) res = FR_EXIST; /* Any object with same name is already existing */ - if (FF_FS_RPATH && res == FR_NO_FILE && (dj.fn[NSFLAG] & NS_DOT)) { - res = FR_INVALID_NAME; - } - if (res == FR_NO_FILE) { /* Can create a new directory */ - dcl = create_chain(&dj.obj, 0); /* Allocate a cluster for the new directory table */ - dj.obj.objsize = (DWORD)fs->csize * SS(fs); - res = FR_OK; - if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster */ - if (dcl == 1) res = FR_INT_ERR; - if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; - if (res == FR_OK) res = sync_window(fs); /* Flush FAT */ - tm = GET_FATTIME(); - if (res == FR_OK) { /* Initialize the new directory table */ - res = dir_clear(fs, dcl); /* Clean up the new table */ - if (res == FR_OK && (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT)) { /* Create dot entries (FAT only) */ - dir = fs->win; - mem_set(dir + DIR_Name, ' ', 11); /* Create "." entry */ - dir[DIR_Name] = '.'; - dir[DIR_Attr] = AM_DIR; - st_dword(dir + DIR_ModTime, tm); - st_clust(fs, dir, dcl); - mem_cpy(dir + SZDIRE, dir, SZDIRE); /* Create ".." entry */ - dir[SZDIRE + 1] = '.'; pcl = dj.obj.sclust; - st_clust(fs, dir + SZDIRE, pcl); - fs->wflag = 1; - } - } - if (res == FR_OK) { - res = dir_register(&dj); /* Register the object to the 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)dj.obj.objsize); /* File size needs to be valid */ - st_dword(fs->dirbuf + XDIR_ValidFileSize, (DWORD)dj.obj.objsize); - fs->dirbuf[XDIR_GenFlags] = 3; /* Initialize the object flag */ - fs->dirbuf[XDIR_Attr] = AM_DIR; /* Attribute */ - res = store_xdir(&dj); - } else -#endif - { - dir = dj.dir; - st_dword(dir + DIR_ModTime, tm); /* Created time */ - st_clust(fs, dir, dcl); /* Table start cluster */ - dir[DIR_Attr] = AM_DIR; /* Attribute */ - fs->wflag = 1; - } - if (res == FR_OK) { - res = sync_fs(fs); - } - } else { - remove_chain(&dj.obj, dcl, 0); /* Could not register, remove cluster chain */ - } - } - 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; - DWORD dw; - DEF_NAMBUF - - - get_ldnumber(&path_new); /* Snip the drive number of new name off */ - res = find_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; - - mem_cpy(buf, fs->dirbuf, SZDIRE * 2); /* Save 85+C0 entry of old object */ - mem_cpy(&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); - mem_cpy(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 */ - mem_cpy(buf, djo.dir, SZDIRE); /* Save directory entry of the object */ - mem_cpy(&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 */ - mem_cpy(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 */ - dw = clst2sect(fs, ld_clust(fs, dir)); - if (dw == 0) { - res = FR_INT_ERR; - } else { -/* Start of critical section where an interruption can cause a cross-link */ - res = move_window(fs, dw); - 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 = find_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 = find_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 = find_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; - - 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; - } - wc = put_utf((DWORD)hs << 16 | wc, &label[di], 4); - if (wc == 0) { di = 0; break; } - di += wc; - 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); - if (wc != 0) wc = put_utf(wc, &label[di], 4); - if (wc == 0) { di = 0; break; } - di += wc; -#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[] = "+.,;=[]\"*:<>\?|\x7F"; /* [0..] for FAT, [7..] for exFAT */ -#if FF_USE_LFN - DWORD dc; -#endif - - /* Get logical drive */ - res = find_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 */ - mem_set(dirvn, 0, 22); - di = 0; - while (*label) { /* Create volume label in directory form */ - 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 || chk_chr(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 */ - mem_set(dirvn, ' ', 11); - di = 0; - while (*label) { /* Create volume label in directory form */ -#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 || chk_chr(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 */ - mem_cpy(dj.dir + XDIR_Label, dirvn, 22); - } else { - if (di != 0) { - mem_cpy(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) { - mem_set(dj.dir, 0, SZDIRE); /* Clean the entry */ - if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) { - dj.dir[XDIR_Type] = 0x83; /* Create 83 entry */ - dj.dir[XDIR_NumLabel] = (BYTE)di; - mem_cpy(dj.dir + XDIR_Label, dirvn, 22); - } else { - dj.dir[DIR_Attr] = AM_VOL; /* Create volume label entry */ - mem_cpy(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, 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 && (*func)(0, 0); /* Repeat until all data transferred or stream goes busy */ - fp->fptr += rcnt, *bf += rcnt, btf -= rcnt) { - 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 left 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_USE_MKFS && !FF_FS_READONLY -/*-----------------------------------------------------------------------*/ -/* Create an FAT/exFAT volume */ -/*-----------------------------------------------------------------------*/ - -FRESULT f_mkfs ( - const TCHAR* path, /* Logical drive number */ - BYTE opt, /* Format option */ - DWORD au, /* Size of allocation unit (cluster) [byte] */ - void* work, /* Pointer to working buffer (null: use heap memory) */ - UINT len /* Size of working buffer [byte] */ -) -{ - const UINT n_fats = 1; /* Number of FATs for FAT/FAT32 volume (1 or 2) */ - const UINT n_rootdir = 512; /* Number of root directory entries for FAT volume */ - 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) */ - BYTE fmt, sys, *buf, *pte, pdrv, part; - WORD ss; /* Sector size */ - DWORD szb_buf, sz_buf, sz_blk, n_clst, pau, sect, nsect, n; - DWORD b_vol, b_fat, b_data; /* Base LBA for volume, fat, data */ - DWORD sz_vol, sz_rsv, sz_fat, sz_dir; /* Size for volume, fat, dir, data */ - UINT i; - int vol; - DSTATUS stat; -#if FF_USE_TRIM || FF_FS_EXFAT - DWORD tbl[3]; -#endif - - - /* 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 volume if mounted */ - pdrv = LD2PD(vol); /* Physical drive */ - part = LD2PT(vol); /* Partition (0:create as new, 1-4:get from partition table) */ - - /* Check physical drive status */ - stat = disk_initialize(pdrv); - if (stat & STA_NOINIT) return FR_NOT_READY; - if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; - if (disk_ioctl(pdrv, GET_BLOCK_SIZE, &sz_blk) != RES_OK || !sz_blk || sz_blk > 32768 || (sz_blk & (sz_blk - 1))) sz_blk = 1; /* Erase block to align data area */ -#if FF_MAX_SS != FF_MIN_SS /* Get sector size of the medium if variable sector size cfg. */ - 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 - if ((au != 0 && au < ss) || au > 0x1000000 || (au & (au - 1))) return FR_INVALID_PARAMETER; /* Check if au is valid */ - au /= ss; /* Cluster size in unit of sector */ - - /* Get working buffer */ -#if FF_USE_LFN == 3 - if (!work) { /* Use heap memory for working buffer */ - for (szb_buf = MAX_MALLOC, buf = 0; szb_buf >= ss && !(buf = ff_memalloc(szb_buf)); szb_buf /= 2) ; - sz_buf = szb_buf / ss; /* Size of working buffer (sector) */ - } else -#endif - { - buf = (BYTE*)work; /* Working buffer */ - sz_buf = len / ss; /* Size of working buffer (sector) */ - szb_buf = sz_buf * ss; /* Size of working buffer (byte) */ - } - if (!buf || sz_buf == 0) return FR_NOT_ENOUGH_CORE; - - /* Determine where the volume to be located (b_vol, sz_vol) */ - if (FF_MULTI_PARTITION && part != 0) { - /* Get partition information from partition table in the MBR */ - 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 */ - pte = buf + (MBR_Table + (part - 1) * SZ_PTE); - if (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 { - /* Create a single-partition in this function */ - if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); - b_vol = (opt & FM_SFD) ? 0 : 63; /* Volume start sector */ - if (sz_vol < b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); - sz_vol -= b_vol; /* Volume size */ - } - if (sz_vol < 128) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if volume size is >=128s */ - - /* Pre-determine the FAT type */ - do { - if (FF_FS_EXFAT && (opt & FM_EXFAT)) { /* exFAT possible? */ - if ((opt & FM_ANY) == FM_EXFAT || sz_vol >= 0x4000000 || au > 128) { /* exFAT only, vol >= 64Ms or au > 128s ? */ - fmt = FS_EXFAT; break; - } - } - if (au > 128) LEAVE_MKFS(FR_INVALID_PARAMETER); /* Too large au for FAT/FAT32 */ - if (opt & FM_FAT32) { /* FAT32 possible? */ - if ((opt & FM_ANY) == FM_FAT32 || !(opt & FM_FAT)) { /* FAT32 only or no-FAT? */ - fmt = FS_FAT32; break; - } - } - if (!(opt & FM_FAT)) LEAVE_MKFS(FR_INVALID_PARAMETER); /* no-FAT? */ - fmt = FS_FAT16; - } while (0); - -#if FF_FS_EXFAT - if (fmt == FS_EXFAT) { /* Create an exFAT volume */ - DWORD szb_bit, szb_case, sum, nb, cl; - WCHAR ch, si; - UINT j, st; - BYTE b; - - if (sz_vol < 0x1000) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */ -#if FF_USE_TRIM - tbl[0] = b_vol; tbl[1] = b_vol + sz_vol - 1; /* Inform the device the volume area may be erased */ - disk_ioctl(pdrv, CTRL_TRIM, tbl); -#endif - /* Determine FAT location, data location and number of clusters */ - if (au == 0) { /* au auto-selection */ - au = 8; - if (sz_vol >= 0x80000) au = 64; /* >= 512Ks */ - if (sz_vol >= 0x4000000) au = 256; /* >= 64Ms */ - } - b_fat = b_vol + 32; /* FAT start at offset 32 */ - sz_fat = ((sz_vol / au + 2) * 4 + ss - 1) / ss; /* Number of FAT sectors */ - b_data = (b_fat + sz_fat + sz_blk - 1) & ~(sz_blk - 1); /* Align data area to the erase block boundary */ - if (b_data >= sz_vol / 2) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */ - n_clst = (sz_vol - (b_data - b_vol)) / 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 */ - tbl[0] = (szb_bit + au * ss - 1) / (au * ss); /* Number of allocation bitmap clusters */ - - /* Create a compressed up-case table */ - sect = b_data + au * tbl[0]; /* Table start sector */ - sum = 0; /* Table checksum to be stored in the 82 entry */ - st = si = i = j = 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 */ - } - st = 1; /* Do not compress short run */ - /* go to next case */ - case 1: - ch = si++; /* Fill the short run */ - if (--j == 0) st = 0; - break; - - default: - ch = (WCHAR)j; si += 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 == szb_buf) { /* 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); - tbl[1] = (szb_case + au * ss - 1) / (au * ss); /* Number of up-case table clusters */ - tbl[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 sectors */ - nb = tbl[0] + tbl[1] + tbl[2]; /* Number of clusters in-use by system */ - do { - mem_set(buf, 0, szb_buf); - for (i = 0; nb >= 8 && i < szb_buf; buf[i++] = 0xFF, nb -= 8) ; - for (b = 1; nb != 0 && i < szb_buf; buf[i] |= b, b <<= 1, nb--) ; - 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 = nb = cl = 0; - do { - mem_set(buf, 0, szb_buf); i = 0; /* Clear work area and reset write index */ - if (cl == 0) { /* Set entry 0 and 1 */ - st_dword(buf + i, 0xFFFFFFF8); i += 4; cl++; - st_dword(buf + i, 0xFFFFFFFF); i += 4; cl++; - } - do { /* Create chains of bitmap, up-case and root dir */ - while (nb != 0 && i < szb_buf) { /* Create a chain */ - st_dword(buf + i, (nb > 1) ? cl + 1 : 0xFFFFFFFF); - i += 4; cl++; nb--; - } - if (nb == 0 && j < 3) nb = tbl[j++]; /* Next chain */ - } while (nb != 0 && i < szb_buf); - 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 */ - mem_set(buf, 0, szb_buf); - buf[SZDIRE * 0 + 0] = 0x83; /* 83 entry (volume label) */ - buf[SZDIRE * 1 + 0] = 0x81; /* 81 entry (allocation bitmap) */ - st_dword(buf + SZDIRE * 1 + 20, 2); - st_dword(buf + SZDIRE * 1 + 24, szb_bit); - buf[SZDIRE * 2 + 0] = 0x82; /* 82 entry (up-case table) */ - st_dword(buf + SZDIRE * 2 + 4, sum); - st_dword(buf + SZDIRE * 2 + 20, 2 + tbl[0]); - st_dword(buf + SZDIRE * 2 + 24, szb_case); - sect = b_data + au * (tbl[0] + tbl[1]); nsect = 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); - mem_set(buf, 0, ss); - 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) */ - mem_set(buf, 0, ss); - mem_cpy(buf + BS_JmpBoot, "\xEB\x76\x90" "EXFAT ", 11); /* Boot jump code (x86), OEM name */ - st_dword(buf + BPB_VolOfsEx, b_vol); /* Volume offset in the physical drive [sector] */ - st_dword(buf + BPB_TotSecEx, sz_vol); /* Volume size [sector] */ - st_dword(buf + BPB_FatOfsEx, b_fat - b_vol); /* FAT offset [sector] */ - st_dword(buf + BPB_FatSzEx, sz_fat); /* FAT size [sector] */ - st_dword(buf + BPB_DataOfsEx, b_data - b_vol); /* Data offset [sector] */ - st_dword(buf + BPB_NumClusEx, n_clst); /* Number of clusters */ - st_dword(buf + BPB_RootClusEx, 2 + tbl[0] + tbl[1]); /* Root dir cluster # */ - st_dword(buf + BPB_VolIDEx, GET_FATTIME()); /* 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 = 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) */ - mem_set(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) */ - mem_set(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 = au; - /* Pre-determine number of clusters and FAT sub-type */ - if (fmt == FS_FAT32) { /* FAT32 volume */ - if (pau == 0) { /* au auto-selection */ - n = 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 = 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 = 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 = sz_vol / pau; - if (n_clst > MAX_FAT12) { - n = n_clst * 2 + 4; /* FAT size [byte] */ - } else { - fmt = 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_rootdir * SZDIRE / ss; /* Rootdir size [sector] */ - } - b_fat = b_vol + sz_rsv; /* FAT base */ - b_data = b_fat + sz_fat * n_fats + sz_dir; /* Data base */ - - /* Align data base to erase block boundary (for flash memory media) */ - n = ((b_data + sz_blk - 1) & ~(sz_blk - 1)) - b_data; /* Next nearest erase block from current data base */ - if (fmt == FS_FAT32) { /* FAT32: Move FAT base */ - sz_rsv += n; b_fat += n; - } else { /* FAT: Expand FAT size */ - sz_fat += n / n_fats; - } - - /* 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 = (sz_vol - sz_rsv - sz_fat * n_fats - sz_dir) / pau; - if (fmt == FS_FAT32) { - if (n_clst <= MAX_FAT16) { /* Too few clusters for FAT32 */ - if (au == 0 && (au = pau / 2) != 0) continue; /* Adjust cluster size and retry */ - LEAVE_MKFS(FR_MKFS_ABORTED); - } - } - if (fmt == FS_FAT16) { - if (n_clst > MAX_FAT16) { /* Too many clusters for FAT16 */ - if (au == 0 && (pau * 2) <= 64) { - au = pau * 2; continue; /* Adjust cluster size and retry */ - } - if ((opt & FM_FAT32)) { - fmt = FS_FAT32; continue; /* Switch type to FAT32 and retry */ - } - if (au == 0 && (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 (au == 0 && (au = pau * 2) <= 128) continue; /* Adjust cluster size and retry */ - LEAVE_MKFS(FR_MKFS_ABORTED); - } - } - if (fmt == 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 - tbl[0] = b_vol; tbl[1] = b_vol + sz_vol - 1; /* Inform the device the volume area can be erased */ - disk_ioctl(pdrv, CTRL_TRIM, tbl); -#endif - /* Create FAT VBR */ - mem_set(buf, 0, ss); - mem_cpy(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_fats; /* Number of FATs */ - st_word(buf + BPB_RootEntCnt, (WORD)((fmt == FS_FAT32) ? 0 : n_rootdir)); /* 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, 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, b_vol); /* Volume offset in the physical drive [sector] */ - if (fmt == FS_FAT32) { - st_dword(buf + BS_VolID32, GET_FATTIME()); /* 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 */ - mem_cpy(buf + BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */ - } else { - st_dword(buf + BS_VolID, GET_FATTIME()); /* 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 */ - mem_cpy(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 (fmt == FS_FAT32) { - disk_write(pdrv, buf, b_vol + 6, 1); /* Write backup VBR (VBR + 6) */ - mem_set(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 */ - mem_set(buf, 0, (UINT)szb_buf); - sect = b_fat; /* FAT start sector */ - for (i = 0; i < n_fats; i++) { /* Initialize FATs each */ - if (fmt == FS_FAT32) { - st_dword(buf + 0, 0xFFFFFFF8); /* Entry 0 */ - st_dword(buf + 4, 0xFFFFFFFF); /* Entry 1 */ - st_dword(buf + 8, 0x0FFFFFFF); /* Entry 2 (root directory) */ - } else { - st_dword(buf + 0, (fmt == FS_FAT12) ? 0xFFFFF8 : 0xFFFFFFF8); /* Entry 0 and 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); - mem_set(buf, 0, ss); - sect += n; nsect -= n; - } while (nsect); - } - - /* Initialize root directory (fill with zero) */ - nsect = (fmt == 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); - } - - /* Determine system ID in the partition table */ - if (FF_FS_EXFAT && fmt == FS_EXFAT) { - sys = 0x07; /* HPFS/NTFS/exFAT */ - } else { - if (fmt == FS_FAT32) { - sys = 0x0C; /* FAT32X */ - } else { - if (sz_vol >= 0x10000) { - sys = 0x06; /* FAT12/16 (large) */ - } else { - sys = (fmt == FS_FAT16) ? 0x04 : 0x01; /* FAT16 : FAT12 */ - } - } - } - - /* Update partition information */ - if (FF_MULTI_PARTITION && part != 0) { /* Created in the existing partition */ - /* 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 + (part - 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 { /* Created as a new single partition */ - if (!(opt & FM_SFD)) { /* Create partition table if in FDISK format */ - mem_set(buf, 0, ss); - st_word(buf + BS_55AA, 0xAA55); /* MBR signature */ - pte = buf + MBR_Table; /* Create partition table for single partition in the drive */ - pte[PTE_Boot] = 0; /* Boot indicator */ - pte[PTE_StHead] = 1; /* Start head */ - pte[PTE_StSec] = 1; /* Start sector */ - pte[PTE_StCyl] = 0; /* Start cylinder */ - pte[PTE_System] = sys; /* System type */ - n = (b_vol + sz_vol) / (63 * 255); /* (End CHS may be invalid) */ - pte[PTE_EdHead] = 254; /* End head */ - pte[PTE_EdSec] = (BYTE)(((n >> 2) & 0xC0) | 63); /* End sector */ - pte[PTE_EdCyl] = (BYTE)n; /* End cylinder */ - st_dword(pte + PTE_StLba, b_vol); /* Start offset in LBA */ - st_dword(pte + PTE_SizLba, sz_vol); /* Size in sectors */ - if (disk_write(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the MBR */ - } - } - - 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 DWORD* szt, /* Pointer to the size table for each partitions */ - void* work /* Pointer to the working buffer (null: use heap memory) */ -) -{ - UINT i, n, sz_cyl, tot_cyl, b_cyl, e_cyl, p_cyl; - BYTE s_hd, e_hd, *p, *buf; = (BYTE*)work; - DSTATUS stat; - DWORD sz_disk, sz_part, s_part; - FRESULT res; - - - stat = disk_initialize(pdrv); - if (stat & STA_NOINIT) return FR_NOT_READY; - if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; - if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_disk)) return FR_DISK_ERR; - - buf = (BYTE*)work; -#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; - - /* Determine the CHS without any consideration of the drive geometry */ - for (n = 16; n < 256 && sz_disk / n / 63 > 1024; n *= 2) ; - if (n == 256) n--; - e_hd = n - 1; - sz_cyl = 63 * n; - tot_cyl = sz_disk / sz_cyl; - - /* Create partition table */ - mem_set(buf, 0, FF_MAX_SS); - p = buf + MBR_Table; b_cyl = 0; - for (i = 0; i < 4; i++, p += SZ_PTE) { - p_cyl = (szt[i] <= 100U) ? (DWORD)tot_cyl * szt[i] / 100 : szt[i] / sz_cyl; /* Number of cylinders */ - if (p_cyl == 0) continue; - s_part = (DWORD)sz_cyl * b_cyl; - sz_part = (DWORD)sz_cyl * p_cyl; - if (i == 0) { /* Exclude first track of cylinder 0 */ - s_hd = 1; - s_part += 63; sz_part -= 63; - } else { - s_hd = 0; - } - e_cyl = b_cyl + p_cyl - 1; /* End cylinder */ - if (e_cyl >= tot_cyl) LEAVE_MKFS(FR_INVALID_PARAMETER); - - /* Set partition table */ - p[1] = s_hd; /* Start head */ - p[2] = (BYTE)(((b_cyl >> 2) & 0xC0) | 1); /* Start sector */ - p[3] = (BYTE)b_cyl; /* Start cylinder */ - p[4] = 0x07; /* System type (temporary setting) */ - p[5] = e_hd; /* End head */ - p[6] = (BYTE)(((e_cyl >> 2) & 0xC0) | 63); /* End sector */ - p[7] = (BYTE)e_cyl; /* End cylinder */ - st_dword(p + 8, s_part); /* Start sector in LBA */ - st_dword(p + 12, sz_part); /* Number of sectors */ - - /* Next partition */ - b_cyl += p_cyl; - } - st_word(p, 0xAA55); /* MBR signature (always at offset 510) */ - - /* Write it to the MBR */ - res = (disk_write(pdrv, buf, 0, 1) == RES_OK && disk_ioctl(pdrv, CTRL_SYNC, 0) == RES_OK) ? FR_OK : FR_DISK_ERR; - LEAVE_MKFS(res); -} - -#endif /* FF_MULTI_PARTITION */ -#endif /* FF_USE_MKFS && !FF_FS_READONLY */ - - - - -#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 string buffer to read */ - int len, /* Size of string buffer (items) */ - FIL* fp /* Pointer to the file object */ -) -{ - int nc = 0; - TCHAR *p = buff; - BYTE s[2]; - UINT rc; - WCHAR wc; -#if FF_USE_LFN && ((FF_LFN_UNICODE == 1 && FF_STRF_ENCODE == 3) || (FF_LFN_UNICODE == 2 && FF_STRF_ENCODE != 3)) - DWORD dc; -#endif -#if FF_USE_LFN && FF_LFN_UNICODE == 1 && FF_STRF_ENCODE == 3 - UINT ct; -#endif - -#if FF_USE_LFN && FF_LFN_UNICODE == 1 /* UTF-16 output */ -#if FF_STRF_ENCODE == 0 /* Read a character in ANSI/OEM */ - while (nc < len - 1) { - f_read(fp, s, 1, &rc); - if (rc != 1) break; - wc = s[0]; - if (dbc_1st((BYTE)wc)) { - f_read(fp, s, 1, &rc); - if (rc != 1 || !dbc_2nd(s[0])) continue; - wc = wc << 8 | s[0]; - } - wc = ff_oem2uni(wc, CODEPAGE); - if (wc == 0) continue; -#elif FF_STRF_ENCODE == 1 || FF_STRF_ENCODE == 2 /* Read a character in UTF-16LE/BE */ - while (nc < len - 1) { - f_read(fp, s, 2, &rc); - if (rc != 2) break; - wc = (FF_STRF_ENCODE == 1) ? s[1] << 8 | s[0] : s[0] << 8 | s[1]; -#elif FF_STRF_ENCODE == 3 /* Read a character in UTF-8 */ - while (nc < len - 2) { - f_read(fp, s, 1, &rc); - if (rc != 1) break; - dc = s[0]; - if (dc >= 0x80) { - ct = 0; - if ((dc & 0xE0) == 0xC0) { dc &= 0x1F; ct = 1; } - if ((dc & 0xF0) == 0xE0) { dc &= 0x0F; ct = 2; } - if ((dc & 0xF8) == 0xF0) { dc &= 0x07; ct = 3; } - if (ct == 0) continue; - do { - f_read(fp, s, 1, &rc); - if (rc != 1 || (s[0] & 0xC0) != 0x80) break; - dc = dc << 6 | (s[0] & 0x3F); - } while (--ct); - if (ct || dc < 0x80 || dc >= 0x110000) continue; - } - if (dc >= 0x10000) { - wc = (WCHAR)(0xD800 | ((dc >> 10) - 0x40)); - *p++ = wc; nc++; - wc = (WCHAR)(0xDC00 | (dc & 0x3FF)); - } else { - wc = (WCHAR)dc; - } -#endif - /* Output it in UTF-16 encoding */ - if (FF_USE_STRFUNC == 2 && wc == '\r') continue; - *p++ = wc; nc++; - if (wc == '\n') break; - } - -#elif FF_USE_LFN && FF_LFN_UNICODE == 2 && FF_STRF_ENCODE != 3 /* UTF-8 output */ - while (nc < len - 4) { -#if FF_STRF_ENCODE == 0 /* Read a character in ANSI/OEM */ - f_read(fp, s, 1, &rc); - if (rc != 1) break; - wc = s[0]; - if (dbc_1st((BYTE)wc)) { - f_read(fp, s, 1, &rc); - if (rc != 1 || !dbc_2nd(s[0])) continue; - wc = wc << 8 | s[0]; - } - dc = ff_oem2uni(wc, CODEPAGE); - if (dc == 0) continue; -#else /* Read a character in UTF-16LE/BE */ - f_read(fp, s, 2, &rc); - if (rc != 2) break; - dc = (FF_STRF_ENCODE == 1) ? s[1] << 8 | s[0] : s[0] << 8 | s[1]; - if (IsSurrogate(dc)) { - f_read(fp, s, 2, &rc); - if (rc != 2) break; - wc = (FF_STRF_ENCODE == 1) ? s[1] << 8 | s[0] : s[0] << 8 | s[1]; - if (!IsSurrogateH(dc) || !IsSurrogateL(wc)) continue; - dc = ((dc & 0x3FF) + 0x40) << 10 | (wc & 0x3FF); - } -#endif - /* Output it in UTF-8 encoding */ - if (FF_USE_STRFUNC == 2 && dc == '\r') continue; - if (dc < 0x80) { /* 1-byte */ - *p++ = (TCHAR)dc; - nc++; - if (dc == '\n') break; - } else { - if (dc < 0x800) { /* 2-byte */ - *p++ = (TCHAR)(0xC0 | (dc >> 6 & 0x1F)); - *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F)); - nc += 2; - } else { - if (dc < 0x10000) { /* 3-byte */ - *p++ = (TCHAR)(0xE0 | (dc >> 12 & 0x0F)); - *p++ = (TCHAR)(0x80 | (dc >> 6 & 0x3F)); - *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F)); - nc += 3; - } else { /* 4-byte */ - *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; - } - } - } - } - -#else /* Byte-by-byte without any conversion (ANSI/OEM API or UTF-8 to UTF-8) */ - while (nc < len - 1) { - f_read(fp, s, 1, &rc); - if (rc != 1) break; - wc = s[0]; - if (FF_USE_STRFUNC == 2 && wc == '\r') continue; - *p++ = (TCHAR)wc; nc++; - if (wc == '\n') break; - } -#endif - - *p = 0; - return nc ? buff : 0; /* When no data read (EOF or error), return with error. */ -} - - - - -#if !FF_FS_READONLY -#include -/*-----------------------------------------------------------------------*/ -/* Put a Character to the File */ -/*-----------------------------------------------------------------------*/ - -typedef struct { /* Putchar output buffer and work area */ - 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[64]; /* Write buffer */ -} putbuff; - - -static -void putc_bfd ( /* Buffered write with code conversion */ - putbuff* pb, - TCHAR c -) -{ - UINT n; - int i, nc; -#if FF_USE_LFN && (FF_LFN_UNICODE == 1 || (FF_LFN_UNICODE == 2 && (FF_STRF_ENCODE != 3))) - WCHAR hs, wc; -#endif -#if FF_USE_LFN && FF_LFN_UNICODE == 2 && FF_STRF_ENCODE != 3 - DWORD dc; - TCHAR *tp; -#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; - nc = pb->nchr; /* Write unit count */ - -#if FF_USE_LFN && FF_LFN_UNICODE >= 1 -#if FF_USE_LFN && FF_LFN_UNICODE == 1 /* UTF-16 input */ - if (IsSurrogateH(c)) { - pb->hs = c; return; - } - wc = c; hs = pb->hs; pb->hs = 0; - if (hs != 0) { - if (!IsSurrogateL(wc)) hs = 0; - } else { - if (IsSurrogateL(wc)) return; - } -#if FF_STRF_ENCODE == 3 /* Write it in UTF-8 */ - if (hs != 0) { /* 4-byte */ - nc += 4; - 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) { /* 1-byte */ - nc++; - pb->buf[i++] = (BYTE)wc; - } else { - if (wc < 0x800) { /* 2-byte */ - nc += 2; - pb->buf[i++] = (BYTE)(0xC0 | wc >> 6); - } else { /* 3-byte */ - nc += 3; - pb->buf[i++] = (BYTE)(0xE0 | wc >> 12); - pb->buf[i++] = (BYTE)(0x80 | (wc >> 6 & 0x3F)); - } - pb->buf[i++] = (BYTE)(0x80 | (wc & 0x3F)); - } - } -#endif -#else /* 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; /* 1-byte? */ - if (((BYTE)c & 0xE0) == 0xC0) pb->ct = 1; /* 2-byte? */ - if (((BYTE)c & 0xF0) == 0xE0) pb->ct = 2; /* 3-byte? */ - if (((BYTE)c & 0xF1) == 0xF0) pb->ct = 3; /* 4-byte? */ - 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 sequence? */ - return; - } - } -#if FF_STRF_ENCODE == 3 /* Write it in UTF-8 */ - pb->buf[i++] = pb->bs[0]; nc++; - if (pb->bs[0] >= 0xC0) { - pb->buf[i++] = pb->bs[1]; nc++; - } - if (pb->bs[0] >= 0xE0) { - pb->buf[i++] = pb->bs[2]; nc++; - } - if (pb->bs[0] >= 0xF0) { - pb->buf[i++] = pb->bs[3]; nc++; - } -#else /* Write it in UTF-16 or ANSI/OEM */ - tp = (TCHAR*)pb->bs; - dc = tchar2uni(&tp); /* UTF-8 ==> UTF-16 */ - if (dc == 0xFFFFFFFF) return; - wc = (WCHAR)dc; - hs = (WCHAR)(dc >> 16); -#endif -#endif -#if FF_USE_LFN && FF_LFN_UNICODE >= 1 && FF_STRF_ENCODE != 3 -#if FF_STRF_ENCODE == 2 /* Write a character in UTF-16BE */ - if (hs != 0) { - pb->buf[i++] = (BYTE)(hs >> 8); - pb->buf[i++] = (BYTE)hs; - nc++; - } - pb->buf[i++] = (BYTE)(wc >> 8); - pb->buf[i++] = (BYTE)wc; - nc++; -#elif FF_STRF_ENCODE == 1 /* Write a character in UTF-16LE */ - if (hs != 0) { - pb->buf[i++] = (BYTE)hs; - pb->buf[i++] = (BYTE)(hs >> 8); - nc++; - } - pb->buf[i++] = (BYTE)wc; - pb->buf[i++] = (BYTE)(wc >> 8); - nc++; -#else /* Write a character 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; nc++; -#endif -#endif - -#else /* ANSI/OEM input */ - pb->buf[i++] = (BYTE)c; - nc++; -#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; -} - - -static -int putc_flush ( /* Flush left characters in the buffer */ - 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 EOF; -} - - -static -void putc_init ( /* Initialize write buffer */ - putbuff* pb, - FIL* fp -) -{ - mem_set(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 */ -/*-----------------------------------------------------------------------*/ - -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; - BYTE f, r; - UINT i, j, w; - DWORD v; - TCHAR c, d, str[32], *p; - - - putc_init(&pb, fp); - - va_start(arp, fmt); - - for (;;) { - c = *fmt++; - if (c == 0) break; /* End of string */ - if (c != '%') { /* Non escape character */ - putc_bfd(&pb, c); - continue; - } - w = f = 0; - c = *fmt++; - if (c == '0') { /* Flag: '0' padding */ - f = 1; c = *fmt++; - } else { - if (c == '-') { /* Flag: left justified */ - f = 2; c = *fmt++; - } - } - if (c == '*') { /* Minimum width by argument */ - w = va_arg(arp, int); - c = *fmt++; - } else { - while (IsDigit(c)) { /* Minimum width */ - w = w * 10 + c - '0'; - c = *fmt++; - } - } - if (c == 'l' || c == 'L') { /* Type prefix: Size is long int */ - f |= 4; c = *fmt++; - } - if (c == 0) break; - d = c; - if (IsLower(d)) d -= 0x20; - switch (d) { /* Atgument type is... */ - case 'S' : /* String */ - p = va_arg(arp, TCHAR*); - for (j = 0; p[j]; j++) ; - if (!(f & 2)) { /* Right padded */ - while (j++ < w) putc_bfd(&pb, ' ') ; - } - while (*p) putc_bfd(&pb, *p++) ; /* String body */ - while (j++ < w) putc_bfd(&pb, ' ') ; /* Left padded */ - continue; - - case 'C' : /* Character */ - putc_bfd(&pb, (TCHAR)va_arg(arp, int)); continue; - - 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 */ - r = 16; break; - - default: /* Unknown type (pass-through) */ - putc_bfd(&pb, c); continue; - } - - /* Get an argument and put it in numeral */ - v = (f & 4) ? (DWORD)va_arg(arp, long) : ((d == 'D') ? (DWORD)(long)va_arg(arp, int) : (DWORD)va_arg(arp, unsigned int)); - if (d == 'D' && (v & 0x80000000)) { - v = 0 - v; - f |= 8; - } - i = 0; - do { - d = (TCHAR)(v % r); v /= r; - if (d > 9) d += (c == 'x') ? 0x27 : 0x07; - str[i++] = d + '0'; - } while (v && i < sizeof str / sizeof *str); - if (f & 8) str[i++] = '-'; - j = i; d = (f & 1) ? '0' : ' '; - if (!(f & 2)) { - while (j++ < w) putc_bfd(&pb, d); /* Right pad */ - } - do { - putc_bfd(&pb, str[--i]); /* Number body */ - } while (i); - while (j++ < w) putc_bfd(&pb, d); /* Left pad */ - } - - 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[] = { 437, 720, 737, 771, 775, 850, 852, 857, 860, 861, 862, 863, 864, 865, 866, 869, 932, 936, 949, 950, 0}; - static const BYTE *const tables[] = {Ct437, Ct720, Ct737, Ct771, Ct775, Ct850, Ct852, 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/extras/fatfs/ff.h b/extras/fatfs/ff.h deleted file mode 100644 index 7b148b1..0000000 --- a/extras/fatfs/ff.h +++ /dev/null @@ -1,366 +0,0 @@ -/*----------------------------------------------------------------------------/ -/ FatFs - Generic FAT Filesystem module R0.13a / -/-----------------------------------------------------------------------------/ -/ -/ Copyright (C) 2017, 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 89352 /* Revision ID */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "integer.h" /* Basic integer types */ -#include "ffconf.h" /* FatFs configuration options */ - -#if FF_DEFINED != FFCONF_DEF -#error Wrong configuration file (ffconf.h). -#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 resolution table */ -#endif - - - -/* Type of path name strings on FatFs API */ - -#ifndef _INC_TCHAR -#define _INC_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 < 0 || FF_LFN_UNICODE > 2) -#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 - -#endif - - - -/* Type of file size variables */ - -#if FF_FS_EXFAT -typedef QWORD FSIZE_t; -#else -typedef DWORD FSIZE_t; -#endif - - - -/* Filesystem object structure (FATFS) */ - -typedef struct { - BYTE fs_type; /* Filesystem type (0:N/A) */ - BYTE pdrv; /* Physical drive number */ - 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] */ - DWORD volbase; /* Volume base sector */ - DWORD fatbase; /* FAT base sector */ - DWORD dirbase; /* Root directory base sector/cluster */ - DWORD database; /* Data base sector */ - DWORD 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:flagmented 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) */ - DWORD sect; /* Sector number appearing in buf[] (0:invalid) */ -#if !FF_FS_READONLY - DWORD 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 */ - DWORD 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; - - - -/* 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 szf, 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, BYTE opt, DWORD au, void* work, UINT len); /* Create a FAT volume */ -FRESULT f_fdisk (BYTE pdrv, const DWORD* szt, 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) - -#ifndef EOF -#define EOF (-1) -#endif - - - - -/*--------------------------------------------------------------*/ -/* 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/extras/fatfs/ffconf.h b/extras/fatfs/ffconf.h deleted file mode 100644 index 0e6bb04..0000000 --- a/extras/fatfs/ffconf.h +++ /dev/null @@ -1,330 +0,0 @@ -/*---------------------------------------------------------------------------/ -/ FatFs - Configuration file -/---------------------------------------------------------------------------*/ - -#define FFCONF_DEF 89352 /* Revision ID */ - -/*---------------------------------------------------------------------------/ -/ Function Configurations -/---------------------------------------------------------------------------*/ - -#ifndef FF_FS_READONLY -#define FF_FS_READONLY 0 -#endif -/* 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. */ - - -#ifndef FF_USE_STRFUNC -#define FF_USE_STRFUNC 1 -#endif -/* This option switches string functions, f_gets(), f_putc(), f_puts() and f_printf(). -/ -/ 0: Disable string functions. -/ 1: Enable without LF-CRLF conversion. -/ 2: Enable with LF-CRLF conversion. */ - - -#ifndef FF_USE_FIND -#define FF_USE_FIND 2 -#endif -/* This option switches filtered directory read functions, f_findfirst() and -/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */ - - -#ifndef FF_USE_MKFS -#define FF_USE_MKFS 1 -#endif -/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */ - - -#ifndef FF_USE_FASTSEEK -#define FF_USE_FASTSEEK 1 -#endif -/* This option switches fast seek function. (0:Disable or 1:Enable) */ - - -#ifndef FF_USE_EXPAND -#define FF_USE_EXPAND 1 -#endif -/* This option switches f_expand function. (0:Disable or 1:Enable) */ - - -#ifndef FF_USE_CHMOD -#define FF_USE_CHMOD 1 -#endif -/* 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. */ - - -#ifndef FF_USE_LABEL -#define FF_USE_LABEL 1 -#endif -/* This option switches volume label functions, f_getlabel() and f_setlabel(). -/ (0:Disable or 1:Enable) */ - - -#ifndef FF_USE_FORWARD -#define FF_USE_FORWARD 1 -#endif -/* This option switches f_forward() function. (0:Disable or 1:Enable) */ - - -/*---------------------------------------------------------------------------/ -/ Locale and Namespace Configurations -/---------------------------------------------------------------------------*/ - -#ifndef FF_CODE_PAGE -#define FF_CODE_PAGE 0 -#endif -/* 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() -*/ - - -#ifndef FF_USE_LFN -#define FF_USE_LFN 2 -#endif -#ifndef FF_MAX_LFN -#define FF_MAX_LFN 255 -#endif -/* 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 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() in ffsystem.c, need to be added to the project. */ - - -#ifndef FF_LFN_UNICODE -#define FF_LFN_UNICODE 0 -#endif -/* 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) -/ -/ 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. */ - - -#ifndef FF_STRF_ENCODE -#define FF_STRF_ENCODE 3 -#endif -/* When FF_LFN_UNICODE >= 1 with LFN enabled, string I/O functions, f_gets(), -/ f_putc(), f_puts and f_printf() convert the character encoding in it. -/ This option 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 -*/ - - -#ifndef FF_FS_RPATH -#define FF_FS_RPATH 2 -#endif -/* 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 7 -/* 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 string support for volume ID. -/ When FF_STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive -/ number in the path name. FF_VOLUME_STRS defines the drive ID strings for each -/ logical drives. Number of items must be equal to FF_VOLUMES. Valid characters for -/ the drive ID strings are: A-Z and 0-9. */ - - -#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_USE_TRIM 1 -/* 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. */ - - -#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. -*/ - - - -/*---------------------------------------------------------------------------/ -/ 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. */ - - -#ifndef FF_FS_EXFAT -#define FF_FS_EXFAT 1 -#endif -/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable) -/ When enable exFAT, also LFN needs to be enabled. -/ Note that enabling exFAT discards ANSI C (C89) compatibility. */ - - -#ifndef FF_FS_NORTC -#define FF_FS_NORTC 1 -#define FF_NORTC_MON 1 -#define FF_NORTC_MDAY 1 -#define FF_NORTC_YEAR 2017 -#endif -/* 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. All objects 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 at read-only configuration (FF_FS_READONLY = 1). */ - - -#ifndef FF_FS_LOCK -#define FF_FS_LOCK 64 -#endif -/* 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. */ - - -#define FF_FS_REENTRANT 1 -#ifndef FF_FS_TIMEOUT -#define FF_FS_TIMEOUT 1000 -#endif -#define FF_SYNC_t SemaphoreHandle_t -/* 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. */ - -/* #include // O/S definitions */ - -/*---------------------------------------------------------------------------*/ -/* ESP Open RTOS specific settings */ -/*---------------------------------------------------------------------------*/ -#include -#include -#include "volumes.h" - -#ifndef _FF_HIGH_SPEED_SPI_FREQ_DIV -#define _FF_HIGH_SPEED_SPI_FREQ_DIV SPI_FREQ_DIV_20M -#endif - -/*--- End of configuration options ---*/ diff --git a/extras/fatfs/ffsystem.c b/extras/fatfs/ffsystem.c deleted file mode 100644 index fda64cc..0000000 --- a/extras/fatfs/ffsystem.c +++ /dev/null @@ -1,114 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Sample Code of OS Dependent Functions for FatFs */ -/* (C)ChaN, 2017 */ -/*------------------------------------------------------------------------*/ - - -#include "ff.h" - - -#if FF_USE_LFN == 3 /* Dynamic memory allocation */ - -#include - -/*------------------------------------------------------------------------*/ -/* Allocate a memory block */ -/*------------------------------------------------------------------------*/ - -void* ff_memalloc ( /* Returns pointer to the allocated memory block (null on 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 for 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]; /* CMSIS-RTOS */ - - -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 */ -) -{ - /* FreeRTOS */ - *sobj = xSemaphoreCreateMutex(); - 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 */ -) -{ - /* FreeRTOS */ - vSemaphoreDelete(sobj); - return 1; -} - - -/*------------------------------------------------------------------------*/ -/* 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 */ -) -{ - /* FreeRTOS */ - return (int)(xSemaphoreTake(sobj, FF_FS_TIMEOUT) == pdTRUE); -} - - -/*------------------------------------------------------------------------*/ -/* 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 */ -) -{ - /* FreeRTOS */ - xSemaphoreGive(sobj); -} - -#endif - diff --git a/extras/fatfs/ffunicode.c b/extras/fatfs/ffunicode.c deleted file mode 100644 index 23da42a..0000000 --- a/extras/fatfs/ffunicode.c +++ /dev/null @@ -1,15586 +0,0 @@ -/*------------------------------------------------------------------------*/ -/* Unicode handling functions for FatFs R0.13a */ -/*------------------------------------------------------------------------*/ -/* 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) 2017, 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 is blanked when non-LFN configuration */ - -#if FF_DEFINED != 89352 /* Revision ID */ -#error Wrong include file (ff.h). -#endif - -#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 a valid code? */ - for (c = 0; c < 0x80 && uni != p[c]; c++) ; - c = (c + 0x80) & 0xFF; - } - } - - return c; -} - -WCHAR ff_oem2uni ( /* Returns Unicode character, 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, n, li, hi; - - - if (uni < 0x80) { /* ASCII? */ - c = (WCHAR)uni; - - } else { /* Non-ASCII */ - if (uni < 0x10000) { /* Is it in BMP? */ - if (cp == FF_CODE_PAGE) { /* Is it a valid code? */ - 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, 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, n, li, hi; - - - if (oem < 0x80) { /* ASCII? */ - c = oem; - - } else { /* Extended char */ - if (cp == FF_CODE_PAGE) { /* Is it a 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 table */ - p = cp_table[i]; - if (p) { /* Is it a valid CP ? */ - for (c = 0; c < 0x80 && uc != p[c]; c++) ; /* Find OEM code in the table */ - c = (c + 0x80) & 0xFF; - } - } else { /* DBCS */ - switch (cp) { - 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 a 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, 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 */ -) -{ - /* Compressed upper conversion table */ - static const WORD cvt1[] = { /* 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 - }; - static const WORD cvt2[] = { /* 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 - }; - const WORD *p; - WORD uc, bc, nc, cmd; - - - if (uni < 0x10000) { /* Is it in BMP? */ - uc = (WORD)uni; - p = uc < 0x1000 ? cvt1 : cvt2; - for (;;) { - bc = *p++; /* Get block base */ - if (!bc || uc < bc) break; - 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) p += nc; - } - uni = uc; - } - - return uni; -} - - -#endif /* #if FF_USE_LFN */ diff --git a/extras/fatfs/integer.h b/extras/fatfs/integer.h deleted file mode 100644 index 850dbf1..0000000 --- a/extras/fatfs/integer.h +++ /dev/null @@ -1,38 +0,0 @@ -/*-------------------------------------------*/ -/* Integer type definitions for FatFs module */ -/*-------------------------------------------*/ - -#ifndef FF_INTEGER -#define FF_INTEGER - -#ifdef _WIN32 /* FatFs development platform */ - -#include -#include -typedef unsigned __int64 QWORD; - - -#else /* Embedded platform */ - -/* These types MUST be 16-bit or 32-bit */ -typedef int INT; -typedef unsigned int UINT; - -/* This type MUST be 8-bit */ -typedef unsigned char BYTE; - -/* These types MUST be 16-bit */ -typedef short SHORT; -typedef unsigned short WORD; -typedef unsigned short WCHAR; - -/* These types MUST be 32-bit */ -typedef long LONG; -typedef unsigned long DWORD; - -/* This type MUST be 64-bit (Remove this for ANSI C (C89) compatibility) */ -typedef unsigned long long QWORD; - -#endif - -#endif diff --git a/extras/fatfs/volumes.c b/extras/fatfs/volumes.c deleted file mode 100644 index f5895c9..0000000 --- a/extras/fatfs/volumes.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * FatFs integration to esp-open-rtos - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "volumes.h" -#include - -const char *volumes[] = { - [0] = "3:", - [1] = NULL, - [2] = "4:", - [3] = NULL, - [4] = "2:", - [5] = "1:", - [6] = NULL, - [7] = NULL, - [8] = NULL, - [9] = NULL, - [10] = NULL, - [11] = NULL, - [12] = NULL, - [13] = NULL, - [14] = NULL, - [15] = "0:", - [16] = "5:" -}; - -const uint8_t pins[] = { - 15, 5, 4, 0, 2, 16 -}; - -const char *f_gpio_to_volume(uint8_t gpio) -{ - return gpio > 16 ? NULL : volumes[gpio]; -} - -uint8_t f_drv_to_gpio(uint8_t drv) -{ - return pins[drv]; -} diff --git a/extras/fatfs/volumes.h b/extras/fatfs/volumes.h deleted file mode 100644 index bf39117..0000000 --- a/extras/fatfs/volumes.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * FatFs integration to esp-open-rtos - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_FATFS_VOLUMES_H_ -#define _EXTRAS_FATFS_VOLUMES_H_ - -#include - -const char *f_gpio_to_volume(uint8_t gpio); -uint8_t f_drv_to_gpio(uint8_t drv); - -#endif /* _EXTRAS_FATFS_VOLUMES_H_ */ diff --git a/extras/fonts/LICENSE b/extras/fonts/LICENSE deleted file mode 100644 index 5f9ee7d..0000000 --- a/extras/fonts/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/extras/fonts/OFL.txt b/extras/fonts/OFL.txt deleted file mode 100644 index f1a20ac..0000000 --- a/extras/fonts/OFL.txt +++ /dev/null @@ -1,97 +0,0 @@ -Copyright (c) , (), -with Reserved Font Name . -Copyright (c) , (), -with Reserved Font Name . -Copyright (c) , (). - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/extras/fonts/component.mk b/extras/fonts/component.mk deleted file mode 100644 index b9d7ec4..0000000 --- a/extras/fonts/component.mk +++ /dev/null @@ -1,42 +0,0 @@ -# Component makefile for extras/fonts - -# expected anyone using this component includes it as 'fonts/fonts.h' -INC_DIRS += $(fonts_ROOT).. - -# args for passing into compile rule generation -fonts_SRC_DIR = $(fonts_ROOT) - -FONTS_DIR := $(dir $(lastword $(MAKEFILE_LIST))) - -# default builtin fonts -include $(FONTS_DIR)defaults.mk - -fonts_CFLAGS = $(CFLAGS) \ - -DFONTS_GLCD_5X7=$(FONTS_GLCD_5X7) \ - -DFONTS_ROBOTO_8PT=$(FONTS_ROBOTO_8PT) \ - -DFONTS_ROBOTO_10PT=$(FONTS_ROBOTO_10PT) \ - -DFONTS_BITOCRA_4X7=$(FONTS_BITOCRA_4X7) \ - -DFONTS_BITOCRA_6X11=$(FONTS_BITOCRA_6X11) \ - -DFONTS_BITOCRA_7X13=$(FONTS_BITOCRA_7X13) \ - -DFONTS_TERMINUS_6X12_ISO8859_1=$(FONTS_TERMINUS_6X12_ISO8859_1) \ - -DFONTS_TERMINUS_8X14_ISO8859_1=$(FONTS_TERMINUS_8X14_ISO8859_1) \ - -DFONTS_TERMINUS_BOLD_8X14_ISO8859_1=$(FONTS_TERMINUS_BOLD_8X14_ISO8859_1) \ - -DFONTS_TERMINUS_10X18_ISO8859_1=$(FONTS_TERMINUS_10X18_ISO8859_1) \ - -DFONTS_TERMINUS_BOLD_10X18_ISO8859_1=$(FONTS_TERMINUS_BOLD_10X18_ISO8859_1) \ - -DFONTS_TERMINUS_11X22_ISO8859_1=$(FONTS_TERMINUS_11X22_ISO8859_1) \ - -DFONTS_TERMINUS_BOLD_11X22_ISO8859_1=$(FONTS_TERMINUS_BOLD_11X22_ISO8859_1) \ - -DFONTS_TERMINUS_12X24_ISO8859_1=$(FONTS_TERMINUS_12X24_ISO8859_1) \ - -DFONTS_TERMINUS_BOLD_12X24_ISO8859_1=$(FONTS_TERMINUS_BOLD_12X24_ISO8859_1) \ - -DFONTS_TERMINUS_14X28_ISO8859_1=$(FONTS_TERMINUS_14X28_ISO8859_1) \ - -DFONTS_TERMINUS_BOLD_14X28_ISO8859_1=$(FONTS_TERMINUS_BOLD_14X28_ISO8859_1) \ - -DFONTS_TERMINUS_16X32_ISO8859_1=$(FONTS_TERMINUS_16X32_ISO8859_1) \ - -DFONTS_TERMINUS_BOLD_16X32_ISO8859_1=$(FONTS_TERMINUS_BOLD_16X32_ISO8859_1) \ - -DFONTS_TERMINUS_6X12_KOI8_R=$(FONTS_TERMINUS_6X12_KOI8_R) \ - -DFONTS_TERMINUS_8X14_KOI8_R=$(FONTS_TERMINUS_8X14_KOI8_R) \ - -DFONTS_TERMINUS_BOLD_8X14_KOI8_R=$(FONTS_TERMINUS_BOLD_8X14_KOI8_R) \ - -DFONTS_TERMINUS_14X28_KOI8_R=$(FONTS_TERMINUS_14X28_KOI8_R) \ - -DFONTS_TERMINUS_BOLD_14X28_KOI8_R=$(FONTS_TERMINUS_BOLD_14X28_KOI8_R) \ - -DFONTS_TERMINUS_16X32_KOI8_R=$(FONTS_TERMINUS_16X32_KOI8_R) \ - -DFONTS_TERMINUS_BOLD_16X32_KOI8_R=$(FONTS_TERMINUS_BOLD_16X32_KOI8_R) - -$(eval $(call component_compile_rules,fonts)) diff --git a/extras/fonts/data/font_bitocra_4x7_ascii.h b/extras/fonts/data/font_bitocra_4x7_ascii.h deleted file mode 100644 index 52e577b..0000000 --- a/extras/fonts/data/font_bitocra_4x7_ascii.h +++ /dev/null @@ -1,993 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: BitOCRA - * Size: 4x7 - * Charset: ASCII - * 96 characters (32..127) - * - * Copyright (c) 2011, Aaron Christianson (https://github.com/ninjaaron) - * Licensed under the OFL v1.1 - * - * Generated: Mon Dec 12 00:46:53 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_BITOCRA_4X7_ASCII_H_ -#define _EXTRAS_FONTS_FONT_BITOCRA_4X7_ASCII_H_ - -static const uint8_t _fonts_bitocra_4x7_ascii_bitmaps[] = { - - /* Index: 0x00, char: \x20, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x21, offset: 0x0007 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x02, char: \x22, offset: 0x000e */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x23, offset: 0x0015 */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x24, offset: 0x001c */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0xe0, /* ###..... */ - 0xc0, /* ##...... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x40, /* .#...... */ - - /* Index: 0x05, char: \x25, offset: 0x0023 */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x26, offset: 0x002a */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x80, /* #....... */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x27, offset: 0x0031 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x28, offset: 0x0038 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - - /* Index: 0x09, char: \x29, offset: 0x003f */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - - /* Index: 0x0a, char: \x2a, offset: 0x0046 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0xe0, /* ###..... */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x2b, offset: 0x004d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0xe0, /* ###..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0c, char: \x2c, offset: 0x0054 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - - /* Index: 0x0d, char: \x2d, offset: 0x005b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x2e, offset: 0x0062 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x0f, char: \x2f, offset: 0x0069 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0x10, char: \x30, offset: 0x0070 */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x31, offset: 0x0077 */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x32, offset: 0x007e */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x33, offset: 0x0085 */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x34, offset: 0x008c */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x15, char: \x35, offset: 0x0093 */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x16, char: \x36, offset: 0x009a */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x37, offset: 0x00a1 */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x18, char: \x38, offset: 0x00a8 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x19, char: \x39, offset: 0x00af */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x3a, offset: 0x00b6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x3b, offset: 0x00bd */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - - /* Index: 0x1c, char: \x3c, offset: 0x00c4 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x3d, offset: 0x00cb */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x3e, offset: 0x00d2 */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x3f, offset: 0x00d9 */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - - /* Index: 0x20, char: \x40, offset: 0x00e0 */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x50, /* .#.#.... */ - 0xd0, /* ##.#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x41, offset: 0x00e7 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x42, offset: 0x00ee */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x43, offset: 0x00f5 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x24, char: \x44, offset: 0x00fc */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x45, offset: 0x0103 */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x46, offset: 0x010a */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x47, offset: 0x0111 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x80, /* #....... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x48, offset: 0x0118 */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x49, offset: 0x011f */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x4a, offset: 0x0126 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x4b, offset: 0x012d */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x4c, offset: 0x0134 */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x4d, offset: 0x013b */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x4e, offset: 0x0142 */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x4f, offset: 0x0149 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x50, offset: 0x0150 */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x51, offset: 0x0157 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0x60, /* .##..... */ - - /* Index: 0x32, char: \x52, offset: 0x015e */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x53, offset: 0x0165 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x54, offset: 0x016c */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x55, offset: 0x0173 */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x56, offset: 0x017a */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x57, offset: 0x0181 */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x58, offset: 0x0188 */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x59, offset: 0x018f */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x5a, offset: 0x0196 */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x5b, offset: 0x019d */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xe0, /* ###..... */ - - /* Index: 0x3c, char: \x5c, offset: 0x01a4 */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x3d, char: \x5d, offset: 0x01ab */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0xe0, /* ###..... */ - - /* Index: 0x3e, char: \x5e, offset: 0x01b2 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x5f, offset: 0x01b9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - - /* Index: 0x40, char: \x60, offset: 0x01c0 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x61, offset: 0x01c7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x62, offset: 0x01ce */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x63, offset: 0x01d5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x64, offset: 0x01dc */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x65, offset: 0x01e3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x66, offset: 0x01ea */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x67, offset: 0x01f1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - - /* Index: 0x48, char: \x68, offset: 0x01f8 */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x69, offset: 0x01ff */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x6a, offset: 0x0206 */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - - /* Index: 0x4b, char: \x6b, offset: 0x020d */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x6c, offset: 0x0214 */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x6d, offset: 0x021b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x6e, offset: 0x0222 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x6f, offset: 0x0229 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x70, offset: 0x0230 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0x51, char: \x71, offset: 0x0237 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x52, char: \x72, offset: 0x023e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x73, offset: 0x0245 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x60, /* .##..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x74, offset: 0x024c */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x75, offset: 0x0253 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x76, offset: 0x025a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x77, offset: 0x0261 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x78, offset: 0x0268 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x79, offset: 0x026f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - - /* Index: 0x5a, char: \x7a, offset: 0x0276 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x7b, offset: 0x027d */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x60, /* .##..... */ - - /* Index: 0x5c, char: \x7c, offset: 0x0284 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x7d, offset: 0x028b */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - - /* Index: 0x5e, char: \x7e, offset: 0x0292 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x7f, offset: 0x0299 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ -}; - -const font_char_desc_t _fonts_bitocra_4x7_ascii_descriptors[] = { - { 0x04, 0x0000 }, /* Index: 0x00, char: \x20 */ - { 0x04, 0x0007 }, /* Index: 0x01, char: \x21 */ - { 0x04, 0x000e }, /* Index: 0x02, char: \x22 */ - { 0x04, 0x0015 }, /* Index: 0x03, char: \x23 */ - { 0x04, 0x001c }, /* Index: 0x04, char: \x24 */ - { 0x04, 0x0023 }, /* Index: 0x05, char: \x25 */ - { 0x04, 0x002a }, /* Index: 0x06, char: \x26 */ - { 0x04, 0x0031 }, /* Index: 0x07, char: \x27 */ - { 0x04, 0x0038 }, /* Index: 0x08, char: \x28 */ - { 0x04, 0x003f }, /* Index: 0x09, char: \x29 */ - { 0x04, 0x0046 }, /* Index: 0x0a, char: \x2a */ - { 0x04, 0x004d }, /* Index: 0x0b, char: \x2b */ - { 0x04, 0x0054 }, /* Index: 0x0c, char: \x2c */ - { 0x04, 0x005b }, /* Index: 0x0d, char: \x2d */ - { 0x04, 0x0062 }, /* Index: 0x0e, char: \x2e */ - { 0x04, 0x0069 }, /* Index: 0x0f, char: \x2f */ - { 0x04, 0x0070 }, /* Index: 0x10, char: \x30 */ - { 0x04, 0x0077 }, /* Index: 0x11, char: \x31 */ - { 0x04, 0x007e }, /* Index: 0x12, char: \x32 */ - { 0x04, 0x0085 }, /* Index: 0x13, char: \x33 */ - { 0x04, 0x008c }, /* Index: 0x14, char: \x34 */ - { 0x04, 0x0093 }, /* Index: 0x15, char: \x35 */ - { 0x04, 0x009a }, /* Index: 0x16, char: \x36 */ - { 0x04, 0x00a1 }, /* Index: 0x17, char: \x37 */ - { 0x04, 0x00a8 }, /* Index: 0x18, char: \x38 */ - { 0x04, 0x00af }, /* Index: 0x19, char: \x39 */ - { 0x04, 0x00b6 }, /* Index: 0x1a, char: \x3a */ - { 0x04, 0x00bd }, /* Index: 0x1b, char: \x3b */ - { 0x04, 0x00c4 }, /* Index: 0x1c, char: \x3c */ - { 0x04, 0x00cb }, /* Index: 0x1d, char: \x3d */ - { 0x04, 0x00d2 }, /* Index: 0x1e, char: \x3e */ - { 0x04, 0x00d9 }, /* Index: 0x1f, char: \x3f */ - { 0x04, 0x00e0 }, /* Index: 0x20, char: \x40 */ - { 0x04, 0x00e7 }, /* Index: 0x21, char: \x41 */ - { 0x04, 0x00ee }, /* Index: 0x22, char: \x42 */ - { 0x04, 0x00f5 }, /* Index: 0x23, char: \x43 */ - { 0x04, 0x00fc }, /* Index: 0x24, char: \x44 */ - { 0x04, 0x0103 }, /* Index: 0x25, char: \x45 */ - { 0x04, 0x010a }, /* Index: 0x26, char: \x46 */ - { 0x04, 0x0111 }, /* Index: 0x27, char: \x47 */ - { 0x04, 0x0118 }, /* Index: 0x28, char: \x48 */ - { 0x04, 0x011f }, /* Index: 0x29, char: \x49 */ - { 0x04, 0x0126 }, /* Index: 0x2a, char: \x4a */ - { 0x04, 0x012d }, /* Index: 0x2b, char: \x4b */ - { 0x04, 0x0134 }, /* Index: 0x2c, char: \x4c */ - { 0x04, 0x013b }, /* Index: 0x2d, char: \x4d */ - { 0x04, 0x0142 }, /* Index: 0x2e, char: \x4e */ - { 0x04, 0x0149 }, /* Index: 0x2f, char: \x4f */ - { 0x04, 0x0150 }, /* Index: 0x30, char: \x50 */ - { 0x04, 0x0157 }, /* Index: 0x31, char: \x51 */ - { 0x04, 0x015e }, /* Index: 0x32, char: \x52 */ - { 0x04, 0x0165 }, /* Index: 0x33, char: \x53 */ - { 0x04, 0x016c }, /* Index: 0x34, char: \x54 */ - { 0x04, 0x0173 }, /* Index: 0x35, char: \x55 */ - { 0x04, 0x017a }, /* Index: 0x36, char: \x56 */ - { 0x04, 0x0181 }, /* Index: 0x37, char: \x57 */ - { 0x04, 0x0188 }, /* Index: 0x38, char: \x58 */ - { 0x04, 0x018f }, /* Index: 0x39, char: \x59 */ - { 0x04, 0x0196 }, /* Index: 0x3a, char: \x5a */ - { 0x04, 0x019d }, /* Index: 0x3b, char: \x5b */ - { 0x04, 0x01a4 }, /* Index: 0x3c, char: \x5c */ - { 0x04, 0x01ab }, /* Index: 0x3d, char: \x5d */ - { 0x04, 0x01b2 }, /* Index: 0x3e, char: \x5e */ - { 0x04, 0x01b9 }, /* Index: 0x3f, char: \x5f */ - { 0x04, 0x01c0 }, /* Index: 0x40, char: \x60 */ - { 0x04, 0x01c7 }, /* Index: 0x41, char: \x61 */ - { 0x04, 0x01ce }, /* Index: 0x42, char: \x62 */ - { 0x04, 0x01d5 }, /* Index: 0x43, char: \x63 */ - { 0x04, 0x01dc }, /* Index: 0x44, char: \x64 */ - { 0x04, 0x01e3 }, /* Index: 0x45, char: \x65 */ - { 0x04, 0x01ea }, /* Index: 0x46, char: \x66 */ - { 0x04, 0x01f1 }, /* Index: 0x47, char: \x67 */ - { 0x04, 0x01f8 }, /* Index: 0x48, char: \x68 */ - { 0x04, 0x01ff }, /* Index: 0x49, char: \x69 */ - { 0x04, 0x0206 }, /* Index: 0x4a, char: \x6a */ - { 0x04, 0x020d }, /* Index: 0x4b, char: \x6b */ - { 0x04, 0x0214 }, /* Index: 0x4c, char: \x6c */ - { 0x04, 0x021b }, /* Index: 0x4d, char: \x6d */ - { 0x04, 0x0222 }, /* Index: 0x4e, char: \x6e */ - { 0x04, 0x0229 }, /* Index: 0x4f, char: \x6f */ - { 0x04, 0x0230 }, /* Index: 0x50, char: \x70 */ - { 0x04, 0x0237 }, /* Index: 0x51, char: \x71 */ - { 0x04, 0x023e }, /* Index: 0x52, char: \x72 */ - { 0x04, 0x0245 }, /* Index: 0x53, char: \x73 */ - { 0x04, 0x024c }, /* Index: 0x54, char: \x74 */ - { 0x04, 0x0253 }, /* Index: 0x55, char: \x75 */ - { 0x04, 0x025a }, /* Index: 0x56, char: \x76 */ - { 0x04, 0x0261 }, /* Index: 0x57, char: \x77 */ - { 0x04, 0x0268 }, /* Index: 0x58, char: \x78 */ - { 0x04, 0x026f }, /* Index: 0x59, char: \x79 */ - { 0x04, 0x0276 }, /* Index: 0x5a, char: \x7a */ - { 0x04, 0x027d }, /* Index: 0x5b, char: \x7b */ - { 0x04, 0x0284 }, /* Index: 0x5c, char: \x7c */ - { 0x04, 0x028b }, /* Index: 0x5d, char: \x7d */ - { 0x04, 0x0292 }, /* Index: 0x5e, char: \x7e */ - { 0x04, 0x0299 }, /* Index: 0x5f, char: \x7f */ -}; - -const font_info_t _fonts_bitocra_4x7_ascii_info = -{ - .height = 7, /* Character height */ - .c = 0, /* C */ - .char_start = 32, /* Start character */ - .char_end = 127, /* End character */ - .char_descriptors = _fonts_bitocra_4x7_ascii_descriptors, /* Character descriptor array */ - .bitmap = _fonts_bitocra_4x7_ascii_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_BITOCRA_4X7_ASCII_H_ */ diff --git a/extras/fonts/data/font_bitocra_6x11_iso8859_1.h b/extras/fonts/data/font_bitocra_6x11_iso8859_1.h deleted file mode 100644 index 7b9a790..0000000 --- a/extras/fonts/data/font_bitocra_6x11_iso8859_1.h +++ /dev/null @@ -1,3169 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: BitOCRA - * Size: 6x11 - * Charset: ISO8859-1 - * 224 characters (32..255) - * - * Copyright (c) 2011, Aaron Christianson (https://github.com/ninjaaron) - * Licensed under the OFL v1.1 - * - * Generated: Mon Dec 12 00:44:35 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_BITOCRA_6X11_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_BITOCRA_6X11_ISO8859_1_H_ - -static const uint8_t _fonts_bitocra_6x11_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x20, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x21, offset: 0x000b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x02, char: \x22, offset: 0x0016 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x23, offset: 0x0021 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x24, offset: 0x002c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0xa0, /* #.#..... */ - 0xf8, /* #####... */ - 0x28, /* ..#.#... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x05, char: \x25, offset: 0x0037 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xd8, /* ##.##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xd8, /* ##.##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x26, offset: 0x0042 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x40, /* .#...... */ - 0xe8, /* ###.#... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xe8, /* ###.#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x27, offset: 0x004d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x28, offset: 0x0058 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x09, char: \x29, offset: 0x0063 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x0a, char: \x2a, offset: 0x006e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x2b, offset: 0x0079 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0c, char: \x2c, offset: 0x0084 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x0d, char: \x2d, offset: 0x008f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x2e, offset: 0x009a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0f, char: \x2f, offset: 0x00a5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x10, char: \x30, offset: 0x00b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xb0, /* #.##.... */ - 0xd0, /* ##.#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x31, offset: 0x00bb */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x32, offset: 0x00c6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x33, offset: 0x00d1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x34, offset: 0x00dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xf0, /* ####.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x15, char: \x35, offset: 0x00e7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x16, char: \x36, offset: 0x00f2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x37, offset: 0x00fd */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x18, char: \x38, offset: 0x0108 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x50, /* .#.#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x19, char: \x39, offset: 0x0113 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x3a, offset: 0x011e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x3b, offset: 0x0129 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x1c, char: \x3c, offset: 0x0134 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x3d, offset: 0x013f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x3e, offset: 0x014a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x3f, offset: 0x0155 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x20, char: \x40, offset: 0x0160 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xe8, /* ###.#... */ - 0xa8, /* #.#.#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x41, offset: 0x016b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x42, offset: 0x0176 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x43, offset: 0x0181 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x24, char: \x44, offset: 0x018c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x45, offset: 0x0197 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x46, offset: 0x01a2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x47, offset: 0x01ad */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xb0, /* #.##.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x48, offset: 0x01b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x49, offset: 0x01c3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x4a, offset: 0x01ce */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x4b, offset: 0x01d9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xe0, /* ###..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x4c, offset: 0x01e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x4d, offset: 0x01ef */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0xf8, /* #####... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x4e, offset: 0x01fa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xd0, /* ##.#.... */ - 0xf0, /* ####.... */ - 0xb0, /* #.##.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x4f, offset: 0x0205 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x50, offset: 0x0210 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x51, offset: 0x021b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xe0, /* ###..... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x32, char: \x52, offset: 0x0226 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xe0, /* ###..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x53, offset: 0x0231 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x54, offset: 0x023c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xa8, /* #.#.#... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x55, offset: 0x0247 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x56, offset: 0x0252 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xb0, /* #.##.... */ - 0xe0, /* ###..... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x57, offset: 0x025d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xf8, /* #####... */ - 0xd8, /* ##.##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x58, offset: 0x0268 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x59, offset: 0x0273 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x5a, offset: 0x027e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x30, /* ..##.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x5b, offset: 0x0289 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - - /* Index: 0x3c, char: \x5c, offset: 0x0294 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x3d, char: \x5d, offset: 0x029f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - - /* Index: 0x3e, char: \x5e, offset: 0x02aa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xd8, /* ##.##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x5f, offset: 0x02b5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - - /* Index: 0x40, char: \x60, offset: 0x02c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x61, offset: 0x02cb */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x62, offset: 0x02d6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x63, offset: 0x02e1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x64, offset: 0x02ec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x65, offset: 0x02f7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x66, offset: 0x0302 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x67, offset: 0x030d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - - /* Index: 0x48, char: \x68, offset: 0x0318 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x69, offset: 0x0323 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x6a, offset: 0x032e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x4b, char: \x6b, offset: 0x0339 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xe0, /* ###..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x6c, offset: 0x0344 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x6d, offset: 0x034f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x6e, offset: 0x035a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x6f, offset: 0x0365 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x70, offset: 0x0370 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x51, char: \x71, offset: 0x037b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x52, char: \x72, offset: 0x0386 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x73, offset: 0x0391 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x74, offset: 0x039c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x75, offset: 0x03a7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x76, offset: 0x03b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x77, offset: 0x03bd */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x78, offset: 0x03c8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x79, offset: 0x03d3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - - /* Index: 0x5a, char: \x7a, offset: 0x03de */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x60, /* .##..... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x7b, offset: 0x03e9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x5c, char: \x7c, offset: 0x03f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x7d, offset: 0x03ff */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - - /* Index: 0x5e, char: \x7e, offset: 0x040a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe8, /* ###.#... */ - 0xb8, /* #.###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x7f, offset: 0x0415 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x60, char: \x80, offset: 0x0420 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x61, char: \x81, offset: 0x042b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x62, char: \x82, offset: 0x0436 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x63, char: \x83, offset: 0x0441 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x64, char: \x84, offset: 0x044c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x65, char: \x85, offset: 0x0457 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x66, char: \x86, offset: 0x0462 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x67, char: \x87, offset: 0x046d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x68, char: \x88, offset: 0x0478 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x69, char: \x89, offset: 0x0483 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6a, char: \x8a, offset: 0x048e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6b, char: \x8b, offset: 0x0499 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6c, char: \x8c, offset: 0x04a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6d, char: \x8d, offset: 0x04af */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6e, char: \x8e, offset: 0x04ba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6f, char: \x8f, offset: 0x04c5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x70, char: \x90, offset: 0x04d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x71, char: \x91, offset: 0x04db */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x72, char: \x92, offset: 0x04e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x73, char: \x93, offset: 0x04f1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x74, char: \x94, offset: 0x04fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x75, char: \x95, offset: 0x0507 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x76, char: \x96, offset: 0x0512 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x77, char: \x97, offset: 0x051d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x78, char: \x98, offset: 0x0528 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x79, char: \x99, offset: 0x0533 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7a, char: \x9a, offset: 0x053e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7b, char: \x9b, offset: 0x0549 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7c, char: \x9c, offset: 0x0554 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7d, char: \x9d, offset: 0x055f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7e, char: \x9e, offset: 0x056a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7f, char: \x9f, offset: 0x0575 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x80, char: \xa0, offset: 0x0580 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x81, char: \xa1, offset: 0x058b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x82, char: \xa2, offset: 0x0596 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0xa0, /* #.#..... */ - 0xc8, /* ##..#... */ - 0x70, /* .###.... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x83, char: \xa3, offset: 0x05a1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x40, /* .#...... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x84, char: \xa4, offset: 0x05ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x84, /* #....#.. */ - 0x78, /* .####... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x78, /* .####... */ - 0x84, /* #....#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x85, char: \xa5, offset: 0x05b7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x86, char: \xa6, offset: 0x05c2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x87, char: \xa7, offset: 0x05cd */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - - /* Index: 0x88, char: \xa8, offset: 0x05d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x89, char: \xa9, offset: 0x05e3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0xb4, /* #.##.#.. */ - 0xc4, /* ##...#.. */ - 0xb4, /* #.##.#.. */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8a, char: \xaa, offset: 0x05ee */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8b, char: \xab, offset: 0x05f9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0x90, /* #..#.... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8c, char: \xac, offset: 0x0604 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8d, char: \xad, offset: 0x060f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8e, char: \xae, offset: 0x061a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0xbc, /* #.####.. */ - 0xb4, /* #.##.#.. */ - 0xac, /* #.#.##.. */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8f, char: \xaf, offset: 0x0625 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x90, char: \xb0, offset: 0x0630 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x91, char: \xb1, offset: 0x063b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x92, char: \xb2, offset: 0x0646 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x93, char: \xb3, offset: 0x0651 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x94, char: \xb4, offset: 0x065c */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x95, char: \xb5, offset: 0x0667 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xb0, /* #.##.... */ - 0xd0, /* ##.#.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0x96, char: \xb6, offset: 0x0672 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0xe8, /* ###.#... */ - 0xe8, /* ###.#... */ - 0x68, /* .##.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x00, /* ........ */ - - /* Index: 0x97, char: \xb7, offset: 0x067d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x98, char: \xb8, offset: 0x0688 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x99, char: \xb9, offset: 0x0693 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x60, /* .##..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9a, char: \xba, offset: 0x069e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9b, char: \xbb, offset: 0x06a9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x48, /* .#..#... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9c, char: \xbc, offset: 0x06b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x48, /* .#..#... */ - 0x18, /* ...##... */ - 0x28, /* ..#.#... */ - 0x3c, /* ..####.. */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - - /* Index: 0x9d, char: \xbd, offset: 0x06bf */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x5c, /* .#.###.. */ - 0x0c, /* ....##.. */ - 0x10, /* ...#.... */ - 0x1c, /* ...###.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9e, char: \xbe, offset: 0x06ca */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x28, /* ..#.#... */ - 0xd8, /* ##.##... */ - 0x28, /* ..#.#... */ - 0x3c, /* ..####.. */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - - /* Index: 0x9f, char: \xbf, offset: 0x06d5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - - /* Index: 0xa0, char: \xc0, offset: 0x06e0 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa1, char: \xc1, offset: 0x06eb */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa2, char: \xc2, offset: 0x06f6 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa3, char: \xc3, offset: 0x0701 */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa4, char: \xc4, offset: 0x070c */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa5, char: \xc5, offset: 0x0717 */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa6, char: \xc6, offset: 0x0722 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0xa0, /* #.#..... */ - 0xb0, /* #.##.... */ - 0xa0, /* #.#..... */ - 0xe0, /* ###..... */ - 0xb8, /* #.###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa7, char: \xc7, offset: 0x072d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - - /* Index: 0xa8, char: \xc8, offset: 0x0738 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa9, char: \xc9, offset: 0x0743 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaa, char: \xca, offset: 0x074e */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xab, char: \xcb, offset: 0x0759 */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xac, char: \xcc, offset: 0x0764 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xad, char: \xcd, offset: 0x076f */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xae, char: \xce, offset: 0x077a */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaf, char: \xcf, offset: 0x0785 */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb0, char: \xd0, offset: 0x0790 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x48, /* .#..#... */ - 0xe8, /* ###.#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb1, char: \xd1, offset: 0x079b */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xd0, /* ##.#.... */ - 0xf0, /* ####.... */ - 0xb0, /* #.##.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb2, char: \xd2, offset: 0x07a6 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb3, char: \xd3, offset: 0x07b1 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb4, char: \xd4, offset: 0x07bc */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb5, char: \xd5, offset: 0x07c7 */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb6, char: \xd6, offset: 0x07d2 */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb7, char: \xd7, offset: 0x07dd */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb8, char: \xd8, offset: 0x07e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0xb0, /* #.##.... */ - 0xb0, /* #.##.... */ - 0xd0, /* ##.#.... */ - 0xd0, /* ##.#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0xb9, char: \xd9, offset: 0x07f3 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xba, char: \xda, offset: 0x07fe */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbb, char: \xdb, offset: 0x0809 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbc, char: \xdc, offset: 0x0814 */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbd, char: \xdd, offset: 0x081f */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbe, char: \xde, offset: 0x082a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0xbf, char: \xdf, offset: 0x0835 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xb0, /* #.##.... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0xc0, char: \xe0, offset: 0x0840 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc1, char: \xe1, offset: 0x084b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc2, char: \xe2, offset: 0x0856 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc3, char: \xe3, offset: 0x0861 */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc4, char: \xe4, offset: 0x086c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc5, char: \xe5, offset: 0x0877 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc6, char: \xe6, offset: 0x0882 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x28, /* ..#.#... */ - 0xf8, /* #####... */ - 0xa0, /* #.#..... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc7, char: \xe7, offset: 0x088d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - - /* Index: 0xc8, char: \xe8, offset: 0x0898 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc9, char: \xe9, offset: 0x08a3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xca, char: \xea, offset: 0x08ae */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcb, char: \xeb, offset: 0x08b9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcc, char: \xec, offset: 0x08c4 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcd, char: \xed, offset: 0x08cf */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xce, char: \xee, offset: 0x08da */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcf, char: \xef, offset: 0x08e5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd0, char: \xf0, offset: 0x08f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd1, char: \xf1, offset: 0x08fb */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd2, char: \xf2, offset: 0x0906 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd3, char: \xf3, offset: 0x0911 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd4, char: \xf4, offset: 0x091c */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd5, char: \xf5, offset: 0x0927 */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd6, char: \xf6, offset: 0x0932 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd7, char: \xf7, offset: 0x093d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd8, char: \xf8, offset: 0x0948 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0xb0, /* #.##.... */ - 0x90, /* #..#.... */ - 0xd0, /* ##.#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0xd9, char: \xf9, offset: 0x0953 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xda, char: \xfa, offset: 0x095e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdb, char: \xfb, offset: 0x0969 */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdc, char: \xfc, offset: 0x0974 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdd, char: \xfd, offset: 0x097f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - - /* Index: 0xde, char: \xfe, offset: 0x098a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0xdf, char: \xff, offset: 0x0995 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ -}; - -const font_char_desc_t _fonts_bitocra_6x11_iso8859_1_descriptors[] = { - { 0x06, 0x0000 }, /* Index: 0x00, char: \x20 */ - { 0x06, 0x000b }, /* Index: 0x01, char: \x21 */ - { 0x06, 0x0016 }, /* Index: 0x02, char: \x22 */ - { 0x06, 0x0021 }, /* Index: 0x03, char: \x23 */ - { 0x06, 0x002c }, /* Index: 0x04, char: \x24 */ - { 0x06, 0x0037 }, /* Index: 0x05, char: \x25 */ - { 0x06, 0x0042 }, /* Index: 0x06, char: \x26 */ - { 0x06, 0x004d }, /* Index: 0x07, char: \x27 */ - { 0x06, 0x0058 }, /* Index: 0x08, char: \x28 */ - { 0x06, 0x0063 }, /* Index: 0x09, char: \x29 */ - { 0x06, 0x006e }, /* Index: 0x0a, char: \x2a */ - { 0x06, 0x0079 }, /* Index: 0x0b, char: \x2b */ - { 0x06, 0x0084 }, /* Index: 0x0c, char: \x2c */ - { 0x06, 0x008f }, /* Index: 0x0d, char: \x2d */ - { 0x06, 0x009a }, /* Index: 0x0e, char: \x2e */ - { 0x06, 0x00a5 }, /* Index: 0x0f, char: \x2f */ - { 0x06, 0x00b0 }, /* Index: 0x10, char: \x30 */ - { 0x06, 0x00bb }, /* Index: 0x11, char: \x31 */ - { 0x06, 0x00c6 }, /* Index: 0x12, char: \x32 */ - { 0x06, 0x00d1 }, /* Index: 0x13, char: \x33 */ - { 0x06, 0x00dc }, /* Index: 0x14, char: \x34 */ - { 0x06, 0x00e7 }, /* Index: 0x15, char: \x35 */ - { 0x06, 0x00f2 }, /* Index: 0x16, char: \x36 */ - { 0x06, 0x00fd }, /* Index: 0x17, char: \x37 */ - { 0x06, 0x0108 }, /* Index: 0x18, char: \x38 */ - { 0x06, 0x0113 }, /* Index: 0x19, char: \x39 */ - { 0x06, 0x011e }, /* Index: 0x1a, char: \x3a */ - { 0x06, 0x0129 }, /* Index: 0x1b, char: \x3b */ - { 0x06, 0x0134 }, /* Index: 0x1c, char: \x3c */ - { 0x06, 0x013f }, /* Index: 0x1d, char: \x3d */ - { 0x06, 0x014a }, /* Index: 0x1e, char: \x3e */ - { 0x06, 0x0155 }, /* Index: 0x1f, char: \x3f */ - { 0x06, 0x0160 }, /* Index: 0x20, char: \x40 */ - { 0x06, 0x016b }, /* Index: 0x21, char: \x41 */ - { 0x06, 0x0176 }, /* Index: 0x22, char: \x42 */ - { 0x06, 0x0181 }, /* Index: 0x23, char: \x43 */ - { 0x06, 0x018c }, /* Index: 0x24, char: \x44 */ - { 0x06, 0x0197 }, /* Index: 0x25, char: \x45 */ - { 0x06, 0x01a2 }, /* Index: 0x26, char: \x46 */ - { 0x06, 0x01ad }, /* Index: 0x27, char: \x47 */ - { 0x06, 0x01b8 }, /* Index: 0x28, char: \x48 */ - { 0x06, 0x01c3 }, /* Index: 0x29, char: \x49 */ - { 0x06, 0x01ce }, /* Index: 0x2a, char: \x4a */ - { 0x06, 0x01d9 }, /* Index: 0x2b, char: \x4b */ - { 0x06, 0x01e4 }, /* Index: 0x2c, char: \x4c */ - { 0x06, 0x01ef }, /* Index: 0x2d, char: \x4d */ - { 0x06, 0x01fa }, /* Index: 0x2e, char: \x4e */ - { 0x06, 0x0205 }, /* Index: 0x2f, char: \x4f */ - { 0x06, 0x0210 }, /* Index: 0x30, char: \x50 */ - { 0x06, 0x021b }, /* Index: 0x31, char: \x51 */ - { 0x06, 0x0226 }, /* Index: 0x32, char: \x52 */ - { 0x06, 0x0231 }, /* Index: 0x33, char: \x53 */ - { 0x06, 0x023c }, /* Index: 0x34, char: \x54 */ - { 0x06, 0x0247 }, /* Index: 0x35, char: \x55 */ - { 0x06, 0x0252 }, /* Index: 0x36, char: \x56 */ - { 0x06, 0x025d }, /* Index: 0x37, char: \x57 */ - { 0x06, 0x0268 }, /* Index: 0x38, char: \x58 */ - { 0x06, 0x0273 }, /* Index: 0x39, char: \x59 */ - { 0x06, 0x027e }, /* Index: 0x3a, char: \x5a */ - { 0x06, 0x0289 }, /* Index: 0x3b, char: \x5b */ - { 0x06, 0x0294 }, /* Index: 0x3c, char: \x5c */ - { 0x06, 0x029f }, /* Index: 0x3d, char: \x5d */ - { 0x06, 0x02aa }, /* Index: 0x3e, char: \x5e */ - { 0x06, 0x02b5 }, /* Index: 0x3f, char: \x5f */ - { 0x06, 0x02c0 }, /* Index: 0x40, char: \x60 */ - { 0x06, 0x02cb }, /* Index: 0x41, char: \x61 */ - { 0x06, 0x02d6 }, /* Index: 0x42, char: \x62 */ - { 0x06, 0x02e1 }, /* Index: 0x43, char: \x63 */ - { 0x06, 0x02ec }, /* Index: 0x44, char: \x64 */ - { 0x06, 0x02f7 }, /* Index: 0x45, char: \x65 */ - { 0x06, 0x0302 }, /* Index: 0x46, char: \x66 */ - { 0x06, 0x030d }, /* Index: 0x47, char: \x67 */ - { 0x06, 0x0318 }, /* Index: 0x48, char: \x68 */ - { 0x06, 0x0323 }, /* Index: 0x49, char: \x69 */ - { 0x06, 0x032e }, /* Index: 0x4a, char: \x6a */ - { 0x06, 0x0339 }, /* Index: 0x4b, char: \x6b */ - { 0x06, 0x0344 }, /* Index: 0x4c, char: \x6c */ - { 0x06, 0x034f }, /* Index: 0x4d, char: \x6d */ - { 0x06, 0x035a }, /* Index: 0x4e, char: \x6e */ - { 0x06, 0x0365 }, /* Index: 0x4f, char: \x6f */ - { 0x06, 0x0370 }, /* Index: 0x50, char: \x70 */ - { 0x06, 0x037b }, /* Index: 0x51, char: \x71 */ - { 0x06, 0x0386 }, /* Index: 0x52, char: \x72 */ - { 0x06, 0x0391 }, /* Index: 0x53, char: \x73 */ - { 0x06, 0x039c }, /* Index: 0x54, char: \x74 */ - { 0x06, 0x03a7 }, /* Index: 0x55, char: \x75 */ - { 0x06, 0x03b2 }, /* Index: 0x56, char: \x76 */ - { 0x06, 0x03bd }, /* Index: 0x57, char: \x77 */ - { 0x06, 0x03c8 }, /* Index: 0x58, char: \x78 */ - { 0x06, 0x03d3 }, /* Index: 0x59, char: \x79 */ - { 0x06, 0x03de }, /* Index: 0x5a, char: \x7a */ - { 0x06, 0x03e9 }, /* Index: 0x5b, char: \x7b */ - { 0x06, 0x03f4 }, /* Index: 0x5c, char: \x7c */ - { 0x06, 0x03ff }, /* Index: 0x5d, char: \x7d */ - { 0x06, 0x040a }, /* Index: 0x5e, char: \x7e */ - { 0x06, 0x0415 }, /* Index: 0x5f, char: \x7f */ - { 0x06, 0x0420 }, /* Index: 0x60, char: \x80 */ - { 0x06, 0x042b }, /* Index: 0x61, char: \x81 */ - { 0x06, 0x0436 }, /* Index: 0x62, char: \x82 */ - { 0x06, 0x0441 }, /* Index: 0x63, char: \x83 */ - { 0x06, 0x044c }, /* Index: 0x64, char: \x84 */ - { 0x06, 0x0457 }, /* Index: 0x65, char: \x85 */ - { 0x06, 0x0462 }, /* Index: 0x66, char: \x86 */ - { 0x06, 0x046d }, /* Index: 0x67, char: \x87 */ - { 0x06, 0x0478 }, /* Index: 0x68, char: \x88 */ - { 0x06, 0x0483 }, /* Index: 0x69, char: \x89 */ - { 0x06, 0x048e }, /* Index: 0x6a, char: \x8a */ - { 0x06, 0x0499 }, /* Index: 0x6b, char: \x8b */ - { 0x06, 0x04a4 }, /* Index: 0x6c, char: \x8c */ - { 0x06, 0x04af }, /* Index: 0x6d, char: \x8d */ - { 0x06, 0x04ba }, /* Index: 0x6e, char: \x8e */ - { 0x06, 0x04c5 }, /* Index: 0x6f, char: \x8f */ - { 0x06, 0x04d0 }, /* Index: 0x70, char: \x90 */ - { 0x06, 0x04db }, /* Index: 0x71, char: \x91 */ - { 0x06, 0x04e6 }, /* Index: 0x72, char: \x92 */ - { 0x06, 0x04f1 }, /* Index: 0x73, char: \x93 */ - { 0x06, 0x04fc }, /* Index: 0x74, char: \x94 */ - { 0x06, 0x0507 }, /* Index: 0x75, char: \x95 */ - { 0x06, 0x0512 }, /* Index: 0x76, char: \x96 */ - { 0x06, 0x051d }, /* Index: 0x77, char: \x97 */ - { 0x06, 0x0528 }, /* Index: 0x78, char: \x98 */ - { 0x06, 0x0533 }, /* Index: 0x79, char: \x99 */ - { 0x06, 0x053e }, /* Index: 0x7a, char: \x9a */ - { 0x06, 0x0549 }, /* Index: 0x7b, char: \x9b */ - { 0x06, 0x0554 }, /* Index: 0x7c, char: \x9c */ - { 0x06, 0x055f }, /* Index: 0x7d, char: \x9d */ - { 0x06, 0x056a }, /* Index: 0x7e, char: \x9e */ - { 0x06, 0x0575 }, /* Index: 0x7f, char: \x9f */ - { 0x06, 0x0580 }, /* Index: 0x80, char: \xa0 */ - { 0x06, 0x058b }, /* Index: 0x81, char: \xa1 */ - { 0x06, 0x0596 }, /* Index: 0x82, char: \xa2 */ - { 0x06, 0x05a1 }, /* Index: 0x83, char: \xa3 */ - { 0x06, 0x05ac }, /* Index: 0x84, char: \xa4 */ - { 0x06, 0x05b7 }, /* Index: 0x85, char: \xa5 */ - { 0x06, 0x05c2 }, /* Index: 0x86, char: \xa6 */ - { 0x06, 0x05cd }, /* Index: 0x87, char: \xa7 */ - { 0x06, 0x05d8 }, /* Index: 0x88, char: \xa8 */ - { 0x06, 0x05e3 }, /* Index: 0x89, char: \xa9 */ - { 0x06, 0x05ee }, /* Index: 0x8a, char: \xaa */ - { 0x06, 0x05f9 }, /* Index: 0x8b, char: \xab */ - { 0x06, 0x0604 }, /* Index: 0x8c, char: \xac */ - { 0x06, 0x060f }, /* Index: 0x8d, char: \xad */ - { 0x06, 0x061a }, /* Index: 0x8e, char: \xae */ - { 0x06, 0x0625 }, /* Index: 0x8f, char: \xaf */ - { 0x06, 0x0630 }, /* Index: 0x90, char: \xb0 */ - { 0x06, 0x063b }, /* Index: 0x91, char: \xb1 */ - { 0x06, 0x0646 }, /* Index: 0x92, char: \xb2 */ - { 0x06, 0x0651 }, /* Index: 0x93, char: \xb3 */ - { 0x06, 0x065c }, /* Index: 0x94, char: \xb4 */ - { 0x06, 0x0667 }, /* Index: 0x95, char: \xb5 */ - { 0x06, 0x0672 }, /* Index: 0x96, char: \xb6 */ - { 0x06, 0x067d }, /* Index: 0x97, char: \xb7 */ - { 0x06, 0x0688 }, /* Index: 0x98, char: \xb8 */ - { 0x06, 0x0693 }, /* Index: 0x99, char: \xb9 */ - { 0x06, 0x069e }, /* Index: 0x9a, char: \xba */ - { 0x06, 0x06a9 }, /* Index: 0x9b, char: \xbb */ - { 0x06, 0x06b4 }, /* Index: 0x9c, char: \xbc */ - { 0x06, 0x06bf }, /* Index: 0x9d, char: \xbd */ - { 0x06, 0x06ca }, /* Index: 0x9e, char: \xbe */ - { 0x06, 0x06d5 }, /* Index: 0x9f, char: \xbf */ - { 0x06, 0x06e0 }, /* Index: 0xa0, char: \xc0 */ - { 0x06, 0x06eb }, /* Index: 0xa1, char: \xc1 */ - { 0x06, 0x06f6 }, /* Index: 0xa2, char: \xc2 */ - { 0x06, 0x0701 }, /* Index: 0xa3, char: \xc3 */ - { 0x06, 0x070c }, /* Index: 0xa4, char: \xc4 */ - { 0x06, 0x0717 }, /* Index: 0xa5, char: \xc5 */ - { 0x06, 0x0722 }, /* Index: 0xa6, char: \xc6 */ - { 0x06, 0x072d }, /* Index: 0xa7, char: \xc7 */ - { 0x06, 0x0738 }, /* Index: 0xa8, char: \xc8 */ - { 0x06, 0x0743 }, /* Index: 0xa9, char: \xc9 */ - { 0x06, 0x074e }, /* Index: 0xaa, char: \xca */ - { 0x06, 0x0759 }, /* Index: 0xab, char: \xcb */ - { 0x06, 0x0764 }, /* Index: 0xac, char: \xcc */ - { 0x06, 0x076f }, /* Index: 0xad, char: \xcd */ - { 0x06, 0x077a }, /* Index: 0xae, char: \xce */ - { 0x06, 0x0785 }, /* Index: 0xaf, char: \xcf */ - { 0x06, 0x0790 }, /* Index: 0xb0, char: \xd0 */ - { 0x06, 0x079b }, /* Index: 0xb1, char: \xd1 */ - { 0x06, 0x07a6 }, /* Index: 0xb2, char: \xd2 */ - { 0x06, 0x07b1 }, /* Index: 0xb3, char: \xd3 */ - { 0x06, 0x07bc }, /* Index: 0xb4, char: \xd4 */ - { 0x06, 0x07c7 }, /* Index: 0xb5, char: \xd5 */ - { 0x06, 0x07d2 }, /* Index: 0xb6, char: \xd6 */ - { 0x06, 0x07dd }, /* Index: 0xb7, char: \xd7 */ - { 0x06, 0x07e8 }, /* Index: 0xb8, char: \xd8 */ - { 0x06, 0x07f3 }, /* Index: 0xb9, char: \xd9 */ - { 0x06, 0x07fe }, /* Index: 0xba, char: \xda */ - { 0x06, 0x0809 }, /* Index: 0xbb, char: \xdb */ - { 0x06, 0x0814 }, /* Index: 0xbc, char: \xdc */ - { 0x06, 0x081f }, /* Index: 0xbd, char: \xdd */ - { 0x06, 0x082a }, /* Index: 0xbe, char: \xde */ - { 0x06, 0x0835 }, /* Index: 0xbf, char: \xdf */ - { 0x06, 0x0840 }, /* Index: 0xc0, char: \xe0 */ - { 0x06, 0x084b }, /* Index: 0xc1, char: \xe1 */ - { 0x06, 0x0856 }, /* Index: 0xc2, char: \xe2 */ - { 0x06, 0x0861 }, /* Index: 0xc3, char: \xe3 */ - { 0x06, 0x086c }, /* Index: 0xc4, char: \xe4 */ - { 0x06, 0x0877 }, /* Index: 0xc5, char: \xe5 */ - { 0x06, 0x0882 }, /* Index: 0xc6, char: \xe6 */ - { 0x06, 0x088d }, /* Index: 0xc7, char: \xe7 */ - { 0x06, 0x0898 }, /* Index: 0xc8, char: \xe8 */ - { 0x06, 0x08a3 }, /* Index: 0xc9, char: \xe9 */ - { 0x06, 0x08ae }, /* Index: 0xca, char: \xea */ - { 0x06, 0x08b9 }, /* Index: 0xcb, char: \xeb */ - { 0x06, 0x08c4 }, /* Index: 0xcc, char: \xec */ - { 0x06, 0x08cf }, /* Index: 0xcd, char: \xed */ - { 0x06, 0x08da }, /* Index: 0xce, char: \xee */ - { 0x06, 0x08e5 }, /* Index: 0xcf, char: \xef */ - { 0x06, 0x08f0 }, /* Index: 0xd0, char: \xf0 */ - { 0x06, 0x08fb }, /* Index: 0xd1, char: \xf1 */ - { 0x06, 0x0906 }, /* Index: 0xd2, char: \xf2 */ - { 0x06, 0x0911 }, /* Index: 0xd3, char: \xf3 */ - { 0x06, 0x091c }, /* Index: 0xd4, char: \xf4 */ - { 0x06, 0x0927 }, /* Index: 0xd5, char: \xf5 */ - { 0x06, 0x0932 }, /* Index: 0xd6, char: \xf6 */ - { 0x06, 0x093d }, /* Index: 0xd7, char: \xf7 */ - { 0x06, 0x0948 }, /* Index: 0xd8, char: \xf8 */ - { 0x06, 0x0953 }, /* Index: 0xd9, char: \xf9 */ - { 0x06, 0x095e }, /* Index: 0xda, char: \xfa */ - { 0x06, 0x0969 }, /* Index: 0xdb, char: \xfb */ - { 0x06, 0x0974 }, /* Index: 0xdc, char: \xfc */ - { 0x06, 0x097f }, /* Index: 0xdd, char: \xfd */ - { 0x06, 0x098a }, /* Index: 0xde, char: \xfe */ - { 0x06, 0x0995 }, /* Index: 0xdf, char: \xff */ -}; - -const font_info_t _fonts_bitocra_6x11_iso8859_1_info = -{ - .height = 11, /* Character height */ - .c = 0, /* C */ - .char_start = 32, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_bitocra_6x11_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_bitocra_6x11_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_BITOCRA_6X11_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_bitocra_7x13_iso8859_1.h b/extras/fonts/data/font_bitocra_7x13_iso8859_1.h deleted file mode 100644 index 9281a35..0000000 --- a/extras/fonts/data/font_bitocra_7x13_iso8859_1.h +++ /dev/null @@ -1,3617 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: BitOCRA - * Size: 7x13 - * Charset: ISO8859-1 - * 224 characters (32..255) - * - * Copyright (c) 2011, Aaron Christianson (https://github.com/ninjaaron) - * Licensed under the OFL v1.1 - * - * Generated: Mon Dec 12 00:45:26 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_BITOCRA_7X13_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_BITOCRA_7X13_ISO8859_1_H_ - -static const uint8_t _fonts_bitocra_7x13_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x20, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x21, offset: 0x000d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x02, char: \x22, offset: 0x001a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x23, offset: 0x0027 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x24, offset: 0x0034 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0xa0, /* #.#..... */ - 0xf8, /* #####... */ - 0x28, /* ..#.#... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x05, char: \x25, offset: 0x0041 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc8, /* ##..#... */ - 0xd8, /* ##.##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xd8, /* ##.##... */ - 0x98, /* #..##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x26, offset: 0x004e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0x94, /* #..#.#.. */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x74, /* .###.#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x27, offset: 0x005b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x30, /* ..##.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x28, offset: 0x0068 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x09, char: \x29, offset: 0x0075 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x0a, char: \x2a, offset: 0x0082 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x2b, offset: 0x008f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0c, char: \x2c, offset: 0x009c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x0d, char: \x2d, offset: 0x00a9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x2e, offset: 0x00b6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0f, char: \x2f, offset: 0x00c3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0x10, char: \x30, offset: 0x00d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x31, offset: 0x00dd */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x32, offset: 0x00ea */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x33, offset: 0x00f7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x34, offset: 0x0104 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf8, /* #####... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x15, char: \x35, offset: 0x0111 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x16, char: \x36, offset: 0x011e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x37, offset: 0x012b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x18, char: \x38, offset: 0x0138 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x19, char: \x39, offset: 0x0145 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x3a, offset: 0x0152 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x3b, offset: 0x015f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x1c, char: \x3c, offset: 0x016c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x3d, offset: 0x0179 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x3e, offset: 0x0186 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x3f, offset: 0x0193 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x08, /* ....#... */ - 0x38, /* ..###... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x20, char: \x40, offset: 0x01a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x84, /* #....#.. */ - 0x84, /* #....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0xf4, /* ####.#.. */ - 0x94, /* #..#.#.. */ - 0x94, /* #..#.#.. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x41, offset: 0x01ad */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x42, offset: 0x01ba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x43, offset: 0x01c7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x24, char: \x44, offset: 0x01d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x45, offset: 0x01e1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x46, offset: 0x01ee */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x47, offset: 0x01fb */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x98, /* #..##... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x48, offset: 0x0208 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x49, offset: 0x0215 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x4a, offset: 0x0222 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x4b, offset: 0x022f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x4c, offset: 0x023c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x4d, offset: 0x0249 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0xf8, /* #####... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x4e, offset: 0x0256 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xe8, /* ###.#... */ - 0xb8, /* #.###... */ - 0x98, /* #..##... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x4f, offset: 0x0263 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x50, offset: 0x0270 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x51, offset: 0x027d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xa8, /* #.#.#... */ - 0xf0, /* ####.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - - /* Index: 0x32, char: \x52, offset: 0x028a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x78, /* .####... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x53, offset: 0x0297 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x54, offset: 0x02a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xa8, /* #.#.#... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x55, offset: 0x02b1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x56, offset: 0x02be */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xb0, /* #.##.... */ - 0xe0, /* ###..... */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x57, offset: 0x02cb */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xf8, /* #####... */ - 0xd8, /* ##.##... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x58, offset: 0x02d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x59, offset: 0x02e5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x5a, offset: 0x02f2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x5b, offset: 0x02ff */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - - /* Index: 0x3c, char: \x5c, offset: 0x030c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - - /* Index: 0x3d, char: \x5d, offset: 0x0319 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - - /* Index: 0x3e, char: \x5e, offset: 0x0326 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xd8, /* ##.##... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x5f, offset: 0x0333 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x40, char: \x60, offset: 0x0340 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x61, offset: 0x034d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x62, offset: 0x035a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x63, offset: 0x0367 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x64, offset: 0x0374 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x65, offset: 0x0381 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x66, offset: 0x038e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x67, offset: 0x039b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - - /* Index: 0x48, char: \x68, offset: 0x03a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x69, offset: 0x03b5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x6a, offset: 0x03c2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - - /* Index: 0x4b, char: \x6b, offset: 0x03cf */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x6c, offset: 0x03dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x6d, offset: 0x03e9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x6e, offset: 0x03f6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x6f, offset: 0x0403 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x70, offset: 0x0410 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0x51, char: \x71, offset: 0x041d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - - /* Index: 0x52, char: \x72, offset: 0x042a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x73, offset: 0x0437 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x74, offset: 0x0444 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x48, /* .#..#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x75, offset: 0x0451 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x76, offset: 0x045e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x77, offset: 0x046b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x78, offset: 0x0478 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x79, offset: 0x0485 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - - /* Index: 0x5a, char: \x7a, offset: 0x0492 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x7b, offset: 0x049f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x5c, char: \x7c, offset: 0x04ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x7d, offset: 0x04b9 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x30, /* ..##.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - - /* Index: 0x5e, char: \x7e, offset: 0x04c6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe8, /* ###.#... */ - 0xa8, /* #.#.#... */ - 0xb8, /* #.###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x7f, offset: 0x04d3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x60, char: \x80, offset: 0x04e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x61, char: \x81, offset: 0x04ed */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x62, char: \x82, offset: 0x04fa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x63, char: \x83, offset: 0x0507 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x64, char: \x84, offset: 0x0514 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x65, char: \x85, offset: 0x0521 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x66, char: \x86, offset: 0x052e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x67, char: \x87, offset: 0x053b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x68, char: \x88, offset: 0x0548 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x69, char: \x89, offset: 0x0555 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6a, char: \x8a, offset: 0x0562 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6b, char: \x8b, offset: 0x056f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6c, char: \x8c, offset: 0x057c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6d, char: \x8d, offset: 0x0589 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6e, char: \x8e, offset: 0x0596 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6f, char: \x8f, offset: 0x05a3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x70, char: \x90, offset: 0x05b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x71, char: \x91, offset: 0x05bd */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x72, char: \x92, offset: 0x05ca */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x73, char: \x93, offset: 0x05d7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x74, char: \x94, offset: 0x05e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x75, char: \x95, offset: 0x05f1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x76, char: \x96, offset: 0x05fe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x77, char: \x97, offset: 0x060b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x78, char: \x98, offset: 0x0618 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x79, char: \x99, offset: 0x0625 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7a, char: \x9a, offset: 0x0632 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7b, char: \x9b, offset: 0x063f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7c, char: \x9c, offset: 0x064c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7d, char: \x9d, offset: 0x0659 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7e, char: \x9e, offset: 0x0666 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7f, char: \x9f, offset: 0x0673 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x80, char: \xa0, offset: 0x0680 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x81, char: \xa1, offset: 0x068d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x82, char: \xa2, offset: 0x069a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x78, /* .####... */ - 0x90, /* #..#.... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x83, char: \xa3, offset: 0x06a7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x84, char: \xa4, offset: 0x06b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x84, /* #....#.. */ - 0x78, /* .####... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x78, /* .####... */ - 0x84, /* #....#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x85, char: \xa5, offset: 0x06c1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x86, char: \xa6, offset: 0x06ce */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x87, char: \xa7, offset: 0x06db */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x08, /* ....#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x88, char: \xa8, offset: 0x06e8 */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x89, char: \xa9, offset: 0x06f5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x44, /* .#...#.. */ - 0x9a, /* #..##.#. */ - 0xa2, /* #.#...#. */ - 0x9a, /* #..##.#. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8a, char: \xaa, offset: 0x0702 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8b, char: \xab, offset: 0x070f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0x90, /* #..#.... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8c, char: \xac, offset: 0x071c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8d, char: \xad, offset: 0x0729 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8e, char: \xae, offset: 0x0736 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x44, /* .#...#.. */ - 0xba, /* #.###.#. */ - 0xb2, /* #.##..#. */ - 0xaa, /* #.#.#.#. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8f, char: \xaf, offset: 0x0743 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x90, char: \xb0, offset: 0x0750 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x91, char: \xb1, offset: 0x075d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x92, char: \xb2, offset: 0x076a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x93, char: \xb3, offset: 0x0777 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x94, char: \xb4, offset: 0x0784 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x95, char: \xb5, offset: 0x0791 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0xf8, /* #####... */ - 0xa8, /* #.#.#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0x96, char: \xb6, offset: 0x079e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0xe8, /* ###.#... */ - 0xe8, /* ###.#... */ - 0xe8, /* ###.#... */ - 0x68, /* .##.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x00, /* ........ */ - - /* Index: 0x97, char: \xb7, offset: 0x07ab */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x98, char: \xb8, offset: 0x07b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x99, char: \xb9, offset: 0x07c5 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9a, char: \xba, offset: 0x07d2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9b, char: \xbb, offset: 0x07df */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x48, /* .#..#... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9c, char: \xbc, offset: 0x07ec */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xe4, /* ###..#.. */ - 0x14, /* ...#.#.. */ - 0x14, /* ...#.#.. */ - 0x1c, /* ...###.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9d, char: \xbd, offset: 0x07f9 */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0xe0, /* ###..... */ - 0x1e, /* ...####. */ - 0x02, /* ......#. */ - 0x1e, /* ...####. */ - 0x10, /* ...#.... */ - 0x1e, /* ...####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9e, char: \xbe, offset: 0x0806 */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0xf4, /* ####.#.. */ - 0x14, /* ...#.#.. */ - 0x14, /* ...#.#.. */ - 0x1c, /* ...###.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9f, char: \xbf, offset: 0x0813 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - - /* Index: 0xa0, char: \xc0, offset: 0x0820 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa1, char: \xc1, offset: 0x082d */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa2, char: \xc2, offset: 0x083a */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa3, char: \xc3, offset: 0x0847 */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa4, char: \xc4, offset: 0x0854 */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa5, char: \xc5, offset: 0x0861 */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa6, char: \xc6, offset: 0x086e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x9c, /* #..###.. */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x9e, /* #..####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa7, char: \xc7, offset: 0x087b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x10, /* ...#.... */ - 0x30, /* ..##.... */ - - /* Index: 0xa8, char: \xc8, offset: 0x0888 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa9, char: \xc9, offset: 0x0895 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaa, char: \xca, offset: 0x08a2 */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xab, char: \xcb, offset: 0x08af */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xac, char: \xcc, offset: 0x08bc */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xad, char: \xcd, offset: 0x08c9 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xae, char: \xce, offset: 0x08d6 */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaf, char: \xcf, offset: 0x08e3 */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb0, char: \xd0, offset: 0x08f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0xf4, /* ####.#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb1, char: \xd1, offset: 0x08fd */ - 0x00, /* ........ */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xe8, /* ###.#... */ - 0xb8, /* #.###... */ - 0x98, /* #..##... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb2, char: \xd2, offset: 0x090a */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb3, char: \xd3, offset: 0x0917 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb4, char: \xd4, offset: 0x0924 */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb5, char: \xd5, offset: 0x0931 */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb6, char: \xd6, offset: 0x093e */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb7, char: \xd7, offset: 0x094b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb8, char: \xd8, offset: 0x0958 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x98, /* #..##... */ - 0x98, /* #..##... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xc8, /* ##..#... */ - 0xc8, /* ##..#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0xb9, char: \xd9, offset: 0x0965 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xba, char: \xda, offset: 0x0972 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbb, char: \xdb, offset: 0x097f */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbc, char: \xdc, offset: 0x098c */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbd, char: \xdd, offset: 0x0999 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbe, char: \xde, offset: 0x09a6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbf, char: \xdf, offset: 0x09b3 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0xc0, char: \xe0, offset: 0x09c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc1, char: \xe1, offset: 0x09cd */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc2, char: \xe2, offset: 0x09da */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc3, char: \xe3, offset: 0x09e7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc4, char: \xe4, offset: 0x09f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc5, char: \xe5, offset: 0x0a01 */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc6, char: \xe6, offset: 0x0a0e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x12, /* ...#..#. */ - 0xf2, /* ####..#. */ - 0x9e, /* #..####. */ - 0x90, /* #..#.... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc7, char: \xe7, offset: 0x0a1b */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x10, /* ...#.... */ - 0x30, /* ..##.... */ - - /* Index: 0xc8, char: \xe8, offset: 0x0a28 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc9, char: \xe9, offset: 0x0a35 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xca, char: \xea, offset: 0x0a42 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcb, char: \xeb, offset: 0x0a4f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcc, char: \xec, offset: 0x0a5c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcd, char: \xed, offset: 0x0a69 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xce, char: \xee, offset: 0x0a76 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcf, char: \xef, offset: 0x0a83 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd0, char: \xf0, offset: 0x0a90 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd1, char: \xf1, offset: 0x0a9d */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd2, char: \xf2, offset: 0x0aaa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd3, char: \xf3, offset: 0x0ab7 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd4, char: \xf4, offset: 0x0ac4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd5, char: \xf5, offset: 0x0ad1 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd6, char: \xf6, offset: 0x0ade */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd7, char: \xf7, offset: 0x0aeb */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd8, char: \xf8, offset: 0x0af8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x98, /* #..##... */ - 0xb8, /* #.###... */ - 0xe8, /* ###.#... */ - 0xc8, /* ##..#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - - /* Index: 0xd9, char: \xf9, offset: 0x0b05 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xda, char: \xfa, offset: 0x0b12 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdb, char: \xfb, offset: 0x0b1f */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdc, char: \xfc, offset: 0x0b2c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdd, char: \xfd, offset: 0x0b39 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - - /* Index: 0xde, char: \xfe, offset: 0x0b46 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0xdf, char: \xff, offset: 0x0b53 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ -}; - -const font_char_desc_t _fonts_bitocra_7x13_iso8859_1_descriptors[] = { - { 0x07, 0x0000 }, /* Index: 0x00, char: \x20 */ - { 0x07, 0x000d }, /* Index: 0x01, char: \x21 */ - { 0x07, 0x001a }, /* Index: 0x02, char: \x22 */ - { 0x07, 0x0027 }, /* Index: 0x03, char: \x23 */ - { 0x07, 0x0034 }, /* Index: 0x04, char: \x24 */ - { 0x07, 0x0041 }, /* Index: 0x05, char: \x25 */ - { 0x07, 0x004e }, /* Index: 0x06, char: \x26 */ - { 0x07, 0x005b }, /* Index: 0x07, char: \x27 */ - { 0x07, 0x0068 }, /* Index: 0x08, char: \x28 */ - { 0x07, 0x0075 }, /* Index: 0x09, char: \x29 */ - { 0x07, 0x0082 }, /* Index: 0x0a, char: \x2a */ - { 0x07, 0x008f }, /* Index: 0x0b, char: \x2b */ - { 0x07, 0x009c }, /* Index: 0x0c, char: \x2c */ - { 0x07, 0x00a9 }, /* Index: 0x0d, char: \x2d */ - { 0x07, 0x00b6 }, /* Index: 0x0e, char: \x2e */ - { 0x07, 0x00c3 }, /* Index: 0x0f, char: \x2f */ - { 0x07, 0x00d0 }, /* Index: 0x10, char: \x30 */ - { 0x07, 0x00dd }, /* Index: 0x11, char: \x31 */ - { 0x07, 0x00ea }, /* Index: 0x12, char: \x32 */ - { 0x07, 0x00f7 }, /* Index: 0x13, char: \x33 */ - { 0x07, 0x0104 }, /* Index: 0x14, char: \x34 */ - { 0x07, 0x0111 }, /* Index: 0x15, char: \x35 */ - { 0x07, 0x011e }, /* Index: 0x16, char: \x36 */ - { 0x07, 0x012b }, /* Index: 0x17, char: \x37 */ - { 0x07, 0x0138 }, /* Index: 0x18, char: \x38 */ - { 0x07, 0x0145 }, /* Index: 0x19, char: \x39 */ - { 0x07, 0x0152 }, /* Index: 0x1a, char: \x3a */ - { 0x07, 0x015f }, /* Index: 0x1b, char: \x3b */ - { 0x07, 0x016c }, /* Index: 0x1c, char: \x3c */ - { 0x07, 0x0179 }, /* Index: 0x1d, char: \x3d */ - { 0x07, 0x0186 }, /* Index: 0x1e, char: \x3e */ - { 0x07, 0x0193 }, /* Index: 0x1f, char: \x3f */ - { 0x07, 0x01a0 }, /* Index: 0x20, char: \x40 */ - { 0x07, 0x01ad }, /* Index: 0x21, char: \x41 */ - { 0x07, 0x01ba }, /* Index: 0x22, char: \x42 */ - { 0x07, 0x01c7 }, /* Index: 0x23, char: \x43 */ - { 0x07, 0x01d4 }, /* Index: 0x24, char: \x44 */ - { 0x07, 0x01e1 }, /* Index: 0x25, char: \x45 */ - { 0x07, 0x01ee }, /* Index: 0x26, char: \x46 */ - { 0x07, 0x01fb }, /* Index: 0x27, char: \x47 */ - { 0x07, 0x0208 }, /* Index: 0x28, char: \x48 */ - { 0x07, 0x0215 }, /* Index: 0x29, char: \x49 */ - { 0x07, 0x0222 }, /* Index: 0x2a, char: \x4a */ - { 0x07, 0x022f }, /* Index: 0x2b, char: \x4b */ - { 0x07, 0x023c }, /* Index: 0x2c, char: \x4c */ - { 0x07, 0x0249 }, /* Index: 0x2d, char: \x4d */ - { 0x07, 0x0256 }, /* Index: 0x2e, char: \x4e */ - { 0x07, 0x0263 }, /* Index: 0x2f, char: \x4f */ - { 0x07, 0x0270 }, /* Index: 0x30, char: \x50 */ - { 0x07, 0x027d }, /* Index: 0x31, char: \x51 */ - { 0x07, 0x028a }, /* Index: 0x32, char: \x52 */ - { 0x07, 0x0297 }, /* Index: 0x33, char: \x53 */ - { 0x07, 0x02a4 }, /* Index: 0x34, char: \x54 */ - { 0x07, 0x02b1 }, /* Index: 0x35, char: \x55 */ - { 0x07, 0x02be }, /* Index: 0x36, char: \x56 */ - { 0x07, 0x02cb }, /* Index: 0x37, char: \x57 */ - { 0x07, 0x02d8 }, /* Index: 0x38, char: \x58 */ - { 0x07, 0x02e5 }, /* Index: 0x39, char: \x59 */ - { 0x07, 0x02f2 }, /* Index: 0x3a, char: \x5a */ - { 0x07, 0x02ff }, /* Index: 0x3b, char: \x5b */ - { 0x07, 0x030c }, /* Index: 0x3c, char: \x5c */ - { 0x07, 0x0319 }, /* Index: 0x3d, char: \x5d */ - { 0x07, 0x0326 }, /* Index: 0x3e, char: \x5e */ - { 0x07, 0x0333 }, /* Index: 0x3f, char: \x5f */ - { 0x07, 0x0340 }, /* Index: 0x40, char: \x60 */ - { 0x07, 0x034d }, /* Index: 0x41, char: \x61 */ - { 0x07, 0x035a }, /* Index: 0x42, char: \x62 */ - { 0x07, 0x0367 }, /* Index: 0x43, char: \x63 */ - { 0x07, 0x0374 }, /* Index: 0x44, char: \x64 */ - { 0x07, 0x0381 }, /* Index: 0x45, char: \x65 */ - { 0x07, 0x038e }, /* Index: 0x46, char: \x66 */ - { 0x07, 0x039b }, /* Index: 0x47, char: \x67 */ - { 0x07, 0x03a8 }, /* Index: 0x48, char: \x68 */ - { 0x07, 0x03b5 }, /* Index: 0x49, char: \x69 */ - { 0x07, 0x03c2 }, /* Index: 0x4a, char: \x6a */ - { 0x07, 0x03cf }, /* Index: 0x4b, char: \x6b */ - { 0x07, 0x03dc }, /* Index: 0x4c, char: \x6c */ - { 0x07, 0x03e9 }, /* Index: 0x4d, char: \x6d */ - { 0x07, 0x03f6 }, /* Index: 0x4e, char: \x6e */ - { 0x07, 0x0403 }, /* Index: 0x4f, char: \x6f */ - { 0x07, 0x0410 }, /* Index: 0x50, char: \x70 */ - { 0x07, 0x041d }, /* Index: 0x51, char: \x71 */ - { 0x07, 0x042a }, /* Index: 0x52, char: \x72 */ - { 0x07, 0x0437 }, /* Index: 0x53, char: \x73 */ - { 0x07, 0x0444 }, /* Index: 0x54, char: \x74 */ - { 0x07, 0x0451 }, /* Index: 0x55, char: \x75 */ - { 0x07, 0x045e }, /* Index: 0x56, char: \x76 */ - { 0x07, 0x046b }, /* Index: 0x57, char: \x77 */ - { 0x07, 0x0478 }, /* Index: 0x58, char: \x78 */ - { 0x07, 0x0485 }, /* Index: 0x59, char: \x79 */ - { 0x07, 0x0492 }, /* Index: 0x5a, char: \x7a */ - { 0x07, 0x049f }, /* Index: 0x5b, char: \x7b */ - { 0x07, 0x04ac }, /* Index: 0x5c, char: \x7c */ - { 0x07, 0x04b9 }, /* Index: 0x5d, char: \x7d */ - { 0x07, 0x04c6 }, /* Index: 0x5e, char: \x7e */ - { 0x07, 0x04d3 }, /* Index: 0x5f, char: \x7f */ - { 0x07, 0x04e0 }, /* Index: 0x60, char: \x80 */ - { 0x07, 0x04ed }, /* Index: 0x61, char: \x81 */ - { 0x07, 0x04fa }, /* Index: 0x62, char: \x82 */ - { 0x07, 0x0507 }, /* Index: 0x63, char: \x83 */ - { 0x07, 0x0514 }, /* Index: 0x64, char: \x84 */ - { 0x07, 0x0521 }, /* Index: 0x65, char: \x85 */ - { 0x07, 0x052e }, /* Index: 0x66, char: \x86 */ - { 0x07, 0x053b }, /* Index: 0x67, char: \x87 */ - { 0x07, 0x0548 }, /* Index: 0x68, char: \x88 */ - { 0x07, 0x0555 }, /* Index: 0x69, char: \x89 */ - { 0x07, 0x0562 }, /* Index: 0x6a, char: \x8a */ - { 0x07, 0x056f }, /* Index: 0x6b, char: \x8b */ - { 0x07, 0x057c }, /* Index: 0x6c, char: \x8c */ - { 0x07, 0x0589 }, /* Index: 0x6d, char: \x8d */ - { 0x07, 0x0596 }, /* Index: 0x6e, char: \x8e */ - { 0x07, 0x05a3 }, /* Index: 0x6f, char: \x8f */ - { 0x07, 0x05b0 }, /* Index: 0x70, char: \x90 */ - { 0x07, 0x05bd }, /* Index: 0x71, char: \x91 */ - { 0x07, 0x05ca }, /* Index: 0x72, char: \x92 */ - { 0x07, 0x05d7 }, /* Index: 0x73, char: \x93 */ - { 0x07, 0x05e4 }, /* Index: 0x74, char: \x94 */ - { 0x07, 0x05f1 }, /* Index: 0x75, char: \x95 */ - { 0x07, 0x05fe }, /* Index: 0x76, char: \x96 */ - { 0x07, 0x060b }, /* Index: 0x77, char: \x97 */ - { 0x07, 0x0618 }, /* Index: 0x78, char: \x98 */ - { 0x07, 0x0625 }, /* Index: 0x79, char: \x99 */ - { 0x07, 0x0632 }, /* Index: 0x7a, char: \x9a */ - { 0x07, 0x063f }, /* Index: 0x7b, char: \x9b */ - { 0x07, 0x064c }, /* Index: 0x7c, char: \x9c */ - { 0x07, 0x0659 }, /* Index: 0x7d, char: \x9d */ - { 0x07, 0x0666 }, /* Index: 0x7e, char: \x9e */ - { 0x07, 0x0673 }, /* Index: 0x7f, char: \x9f */ - { 0x07, 0x0680 }, /* Index: 0x80, char: \xa0 */ - { 0x07, 0x068d }, /* Index: 0x81, char: \xa1 */ - { 0x07, 0x069a }, /* Index: 0x82, char: \xa2 */ - { 0x07, 0x06a7 }, /* Index: 0x83, char: \xa3 */ - { 0x07, 0x06b4 }, /* Index: 0x84, char: \xa4 */ - { 0x07, 0x06c1 }, /* Index: 0x85, char: \xa5 */ - { 0x07, 0x06ce }, /* Index: 0x86, char: \xa6 */ - { 0x07, 0x06db }, /* Index: 0x87, char: \xa7 */ - { 0x07, 0x06e8 }, /* Index: 0x88, char: \xa8 */ - { 0x07, 0x06f5 }, /* Index: 0x89, char: \xa9 */ - { 0x07, 0x0702 }, /* Index: 0x8a, char: \xaa */ - { 0x07, 0x070f }, /* Index: 0x8b, char: \xab */ - { 0x07, 0x071c }, /* Index: 0x8c, char: \xac */ - { 0x07, 0x0729 }, /* Index: 0x8d, char: \xad */ - { 0x07, 0x0736 }, /* Index: 0x8e, char: \xae */ - { 0x07, 0x0743 }, /* Index: 0x8f, char: \xaf */ - { 0x07, 0x0750 }, /* Index: 0x90, char: \xb0 */ - { 0x07, 0x075d }, /* Index: 0x91, char: \xb1 */ - { 0x07, 0x076a }, /* Index: 0x92, char: \xb2 */ - { 0x07, 0x0777 }, /* Index: 0x93, char: \xb3 */ - { 0x07, 0x0784 }, /* Index: 0x94, char: \xb4 */ - { 0x07, 0x0791 }, /* Index: 0x95, char: \xb5 */ - { 0x07, 0x079e }, /* Index: 0x96, char: \xb6 */ - { 0x07, 0x07ab }, /* Index: 0x97, char: \xb7 */ - { 0x07, 0x07b8 }, /* Index: 0x98, char: \xb8 */ - { 0x07, 0x07c5 }, /* Index: 0x99, char: \xb9 */ - { 0x07, 0x07d2 }, /* Index: 0x9a, char: \xba */ - { 0x07, 0x07df }, /* Index: 0x9b, char: \xbb */ - { 0x07, 0x07ec }, /* Index: 0x9c, char: \xbc */ - { 0x07, 0x07f9 }, /* Index: 0x9d, char: \xbd */ - { 0x07, 0x0806 }, /* Index: 0x9e, char: \xbe */ - { 0x07, 0x0813 }, /* Index: 0x9f, char: \xbf */ - { 0x07, 0x0820 }, /* Index: 0xa0, char: \xc0 */ - { 0x07, 0x082d }, /* Index: 0xa1, char: \xc1 */ - { 0x07, 0x083a }, /* Index: 0xa2, char: \xc2 */ - { 0x07, 0x0847 }, /* Index: 0xa3, char: \xc3 */ - { 0x07, 0x0854 }, /* Index: 0xa4, char: \xc4 */ - { 0x07, 0x0861 }, /* Index: 0xa5, char: \xc5 */ - { 0x07, 0x086e }, /* Index: 0xa6, char: \xc6 */ - { 0x07, 0x087b }, /* Index: 0xa7, char: \xc7 */ - { 0x07, 0x0888 }, /* Index: 0xa8, char: \xc8 */ - { 0x07, 0x0895 }, /* Index: 0xa9, char: \xc9 */ - { 0x07, 0x08a2 }, /* Index: 0xaa, char: \xca */ - { 0x07, 0x08af }, /* Index: 0xab, char: \xcb */ - { 0x07, 0x08bc }, /* Index: 0xac, char: \xcc */ - { 0x07, 0x08c9 }, /* Index: 0xad, char: \xcd */ - { 0x07, 0x08d6 }, /* Index: 0xae, char: \xce */ - { 0x07, 0x08e3 }, /* Index: 0xaf, char: \xcf */ - { 0x07, 0x08f0 }, /* Index: 0xb0, char: \xd0 */ - { 0x07, 0x08fd }, /* Index: 0xb1, char: \xd1 */ - { 0x07, 0x090a }, /* Index: 0xb2, char: \xd2 */ - { 0x07, 0x0917 }, /* Index: 0xb3, char: \xd3 */ - { 0x07, 0x0924 }, /* Index: 0xb4, char: \xd4 */ - { 0x07, 0x0931 }, /* Index: 0xb5, char: \xd5 */ - { 0x07, 0x093e }, /* Index: 0xb6, char: \xd6 */ - { 0x07, 0x094b }, /* Index: 0xb7, char: \xd7 */ - { 0x07, 0x0958 }, /* Index: 0xb8, char: \xd8 */ - { 0x07, 0x0965 }, /* Index: 0xb9, char: \xd9 */ - { 0x07, 0x0972 }, /* Index: 0xba, char: \xda */ - { 0x07, 0x097f }, /* Index: 0xbb, char: \xdb */ - { 0x07, 0x098c }, /* Index: 0xbc, char: \xdc */ - { 0x07, 0x0999 }, /* Index: 0xbd, char: \xdd */ - { 0x07, 0x09a6 }, /* Index: 0xbe, char: \xde */ - { 0x07, 0x09b3 }, /* Index: 0xbf, char: \xdf */ - { 0x07, 0x09c0 }, /* Index: 0xc0, char: \xe0 */ - { 0x07, 0x09cd }, /* Index: 0xc1, char: \xe1 */ - { 0x07, 0x09da }, /* Index: 0xc2, char: \xe2 */ - { 0x07, 0x09e7 }, /* Index: 0xc3, char: \xe3 */ - { 0x07, 0x09f4 }, /* Index: 0xc4, char: \xe4 */ - { 0x07, 0x0a01 }, /* Index: 0xc5, char: \xe5 */ - { 0x07, 0x0a0e }, /* Index: 0xc6, char: \xe6 */ - { 0x07, 0x0a1b }, /* Index: 0xc7, char: \xe7 */ - { 0x07, 0x0a28 }, /* Index: 0xc8, char: \xe8 */ - { 0x07, 0x0a35 }, /* Index: 0xc9, char: \xe9 */ - { 0x07, 0x0a42 }, /* Index: 0xca, char: \xea */ - { 0x07, 0x0a4f }, /* Index: 0xcb, char: \xeb */ - { 0x07, 0x0a5c }, /* Index: 0xcc, char: \xec */ - { 0x07, 0x0a69 }, /* Index: 0xcd, char: \xed */ - { 0x07, 0x0a76 }, /* Index: 0xce, char: \xee */ - { 0x07, 0x0a83 }, /* Index: 0xcf, char: \xef */ - { 0x07, 0x0a90 }, /* Index: 0xd0, char: \xf0 */ - { 0x07, 0x0a9d }, /* Index: 0xd1, char: \xf1 */ - { 0x07, 0x0aaa }, /* Index: 0xd2, char: \xf2 */ - { 0x07, 0x0ab7 }, /* Index: 0xd3, char: \xf3 */ - { 0x07, 0x0ac4 }, /* Index: 0xd4, char: \xf4 */ - { 0x07, 0x0ad1 }, /* Index: 0xd5, char: \xf5 */ - { 0x07, 0x0ade }, /* Index: 0xd6, char: \xf6 */ - { 0x07, 0x0aeb }, /* Index: 0xd7, char: \xf7 */ - { 0x07, 0x0af8 }, /* Index: 0xd8, char: \xf8 */ - { 0x07, 0x0b05 }, /* Index: 0xd9, char: \xf9 */ - { 0x07, 0x0b12 }, /* Index: 0xda, char: \xfa */ - { 0x07, 0x0b1f }, /* Index: 0xdb, char: \xfb */ - { 0x07, 0x0b2c }, /* Index: 0xdc, char: \xfc */ - { 0x07, 0x0b39 }, /* Index: 0xdd, char: \xfd */ - { 0x07, 0x0b46 }, /* Index: 0xde, char: \xfe */ - { 0x07, 0x0b53 }, /* Index: 0xdf, char: \xff */ -}; - -const font_info_t _fonts_bitocra_7x13_iso8859_1_info = -{ - .height = 13, /* Character height */ - .c = 0, /* C */ - .char_start = 32, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_bitocra_7x13_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_bitocra_7x13_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_BITOCRA_7X13_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_glcd_5x7.h b/extras/fonts/data/font_glcd_5x7.h deleted file mode 100644 index cab21c5..0000000 --- a/extras/fonts/data/font_glcd_5x7.h +++ /dev/null @@ -1,2624 +0,0 @@ -/* - * font_glcd_5x7.c - * - * Standard ASCII 5x7 font - * - * FIXME: Add license information - * - * Created on: 8 dec. 2016 - * Author: zaltora - */ -/******************************************************************************** - * Copyright (c) 2012, Majenko Technologies - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. 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. - * - * 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 OWNER 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. - * - * The views and conclusions contained in the software and documentation are those - * of the authors and should not be interpreted as representing official policies, - * either expressed or implied, of the FreeBSD Project. - ********************************************************************************/ -#ifndef _EXTRAS_FONTS_FONT_GLCD_5X7_H_ -#define _EXTRAS_FONTS_FONT_GLCD_5X7_H_ - -static const uint8_t _fonts_glcd_5x7_bitmaps[] = -{ - /* @0 '\x0' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - /* @7 '\x1' (5 pixels wide) */ - 0x70, // ### - 0xF8, // ##### - 0xA8, // # # # - 0xF8, // ##### - 0xD8, // ## ## - 0x88, // # # - 0x70, // ### - - /* @14 '\x2' (5 pixels wide) */ - 0x70, // ### - 0xF8, // ##### - 0xA8, // # # # - 0xF8, // ##### - 0x88, // # # - 0xD8, // ## ## - 0x70, // ### - - /* @21 '\x3' (5 pixels wide) */ - 0x00, // - 0x50, // # # - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - 0x70, // ### - 0x20, // # - - /* @28 '\x4' (5 pixels wide) */ - 0x00, // - 0x20, // # - 0x70, // ### - 0xF8, // ##### - 0xF8, // ##### - 0x70, // ### - 0x20, // # - - /* @35 '\x5' (5 pixels wide) */ - 0x70, // ### - 0x50, // # # - 0xF8, // ##### - 0xA8, // # # # - 0xF8, // ##### - 0x20, // # - 0x70, // ### - - /* @42 '\x6' (5 pixels wide) */ - 0x20, // # - 0x70, // ### - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - 0x20, // # - 0x70, // ### - - /* @49 '\x7' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x20, // # - 0x70, // ### - 0x70, // ### - 0x20, // # - 0x00, // - - /* @56 '\x8' (5 pixels wide) */ - 0xF8, // ##### - 0xF8, // ##### - 0xD8, // ## ## - 0x88, // # # - 0x88, // # # - 0xD8, // ## ## - 0xF8, // ##### - - /* @63 '\x9' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x20, // # - 0x50, // # # - 0x50, // # # - 0x20, // # - 0x00, // - - /* @70 '\xA' (5 pixels wide) */ - 0xF8, // ##### - 0xF8, // ##### - 0xD8, // ## ## - 0xA8, // # # # - 0xA8, // # # # - 0xD8, // ## ## - 0xF8, // ##### - - /* @77 '\xB' (5 pixels wide) */ - 0x00, // - 0x38, // ### - 0x18, // ## - 0x68, // ## # - 0xA0, // # # - 0xA0, // # # - 0x40, // # - - /* @84 '\xC' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - 0x20, // # - 0xF8, // ##### - 0x20, // # - - /* @91 '\xD' (5 pixels wide) */ - 0x78, // #### - 0x48, // # # - 0x78, // #### - 0x40, // # - 0x40, // # - 0x40, // # - 0xC0, // ## - - /* @98 '\xE' (5 pixels wide) */ - 0x78, // #### - 0x48, // # # - 0x78, // #### - 0x48, // # # - 0x48, // # # - 0x58, // # ## - 0xC0, // ## - - /* @105 '\xF' (5 pixels wide) */ - 0x20, // # - 0xA8, // # # # - 0x70, // ### - 0xD8, // ## ## - 0xD8, // ## ## - 0x70, // ### - 0xA8, // # # # - - /* @112 '\x10' (5 pixels wide) */ - 0x80, // # - 0xC0, // ## - 0xF0, // #### - 0xF8, // ##### - 0xF0, // #### - 0xC0, // ## - 0x80, // # - - /* @119 '\x11' (5 pixels wide) */ - 0x08, // # - 0x18, // ## - 0x78, // #### - 0xF8, // ##### - 0x78, // #### - 0x18, // ## - 0x08, // # - - /* @126 '\x12' (5 pixels wide) */ - 0x20, // # - 0x70, // ### - 0xA8, // # # # - 0x20, // # - 0xA8, // # # # - 0x70, // ### - 0x20, // # - - /* @133 '\x13' (5 pixels wide) */ - 0xD8, // ## ## - 0xD8, // ## ## - 0xD8, // ## ## - 0xD8, // ## ## - 0xD8, // ## ## - 0x00, // - 0xD8, // ## ## - - /* @140 '\x14' (5 pixels wide) */ - 0x78, // #### - 0xA8, // # # # - 0xA8, // # # # - 0x68, // ## # - 0x28, // # # - 0x28, // # # - 0x28, // # # - - /* @147 '\x15' (5 pixels wide) */ - 0x30, // ## - 0x48, // # # - 0x50, // # # - 0x28, // # # - 0x10, // # - 0x48, // # # - 0x48, // # # - - /* @154 '\x16' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0xF8, // ##### - - /* @161 '\x17' (5 pixels wide) */ - 0x20, // # - 0x70, // ### - 0xA8, // # # # - 0x20, // # - 0xA8, // # # # - 0x70, // ### - 0x20, // # - - /* @168 '\x18' (5 pixels wide) */ - 0x00, // - 0x20, // # - 0x70, // ### - 0xA8, // # # # - 0x20, // # - 0x20, // # - 0x20, // # - - /* @175 '\x19' (5 pixels wide) */ - 0x00, // - 0x20, // # - 0x20, // # - 0x20, // # - 0xA8, // # # # - 0x70, // ### - 0x20, // # - - /* @182 '\x1A' (5 pixels wide) */ - 0x00, // - 0x20, // # - 0x10, // # - 0xF8, // ##### - 0x10, // # - 0x20, // # - 0x00, // - - /* @189 '\x1B' (5 pixels wide) */ - 0x00, // - 0x20, // # - 0x40, // # - 0xF8, // ##### - 0x40, // # - 0x20, // # - 0x00, // - - /* @196 '\x1C' (5 pixels wide) */ - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @203 '\x1D' (5 pixels wide) */ - 0x00, // - 0x50, // # # - 0xF8, // ##### - 0xF8, // ##### - 0x50, // # # - 0x00, // - 0x00, // - - /* @210 '\x1E' (5 pixels wide) */ - 0x00, // - 0x20, // # - 0x20, // # - 0x70, // ### - 0xF8, // ##### - 0xF8, // ##### - 0x00, // - - /* @217 '\x1F' (5 pixels wide) */ - 0x00, // - 0xF8, // ##### - 0xF8, // ##### - 0x70, // ### - 0x20, // # - 0x20, // # - 0x00, // - - /* @224 ' ' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - /* @231 '!' (5 pixels wide) */ - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x00, // - 0x20, // # - - /* @238 '"' (5 pixels wide) */ - 0x50, // # # - 0x50, // # # - 0x50, // # # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - /* @245 '#' (5 pixels wide) */ - 0x50, // # # - 0x50, // # # - 0xF8, // ##### - 0x50, // # # - 0xF8, // ##### - 0x50, // # # - 0x50, // # # - - /* @252 '$' (5 pixels wide) */ - 0x20, // # - 0x78, // #### - 0xA0, // # # - 0x70, // ### - 0x28, // # # - 0xF0, // #### - 0x20, // # - - /* @259 '%' (5 pixels wide) */ - 0xC0, // ## - 0xC8, // ## # - 0x10, // # - 0x20, // # - 0x40, // # - 0x98, // # ## - 0x18, // ## - - /* @266 '&' (5 pixels wide) */ - 0x40, // # - 0xA0, // # # - 0xA0, // # # - 0x40, // # - 0xA8, // # # # - 0x90, // # # - 0x68, // ## # - - /* @273 ''' (5 pixels wide) */ - 0x30, // ## - 0x30, // ## - 0x20, // # - 0x40, // # - 0x00, // - 0x00, // - 0x00, // - - /* @280 '(' (5 pixels wide) */ - 0x10, // # - 0x20, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x20, // # - 0x10, // # - - /* @287 ')' (5 pixels wide) */ - 0x40, // # - 0x20, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x20, // # - 0x40, // # - - /* @294 '*' (5 pixels wide) */ - 0x20, // # - 0xA8, // # # # - 0x70, // ### - 0xF8, // ##### - 0x70, // ### - 0xA8, // # # # - 0x20, // # - - /* @301 '+' (5 pixels wide) */ - 0x00, // - 0x20, // # - 0x20, // # - 0xF8, // ##### - 0x20, // # - 0x20, // # - 0x00, // - - /* @308 ',' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x30, // ## - 0x30, // ## - 0x20, // # - - /* @315 '-' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x00, // - 0x00, // - 0x00, // - - /* @322 '.' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x30, // ## - 0x30, // ## - - /* @329 '/' (5 pixels wide) */ - 0x00, // - 0x08, // # - 0x10, // # - 0x20, // # - 0x40, // # - 0x80, // # - 0x00, // - - /* @336 '0' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x98, // # ## - 0xA8, // # # # - 0xC8, // ## # - 0x88, // # # - 0x70, // ### - - /* @343 '1' (5 pixels wide) */ - 0x20, // # - 0x60, // ## - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x70, // ### - - /* @350 '2' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x08, // # - 0x70, // ### - 0x80, // # - 0x80, // # - 0xF8, // ##### - - /* @357 '3' (5 pixels wide) */ - 0xF8, // ##### - 0x08, // # - 0x10, // # - 0x30, // ## - 0x08, // # - 0x88, // # # - 0x70, // ### - - /* @364 '4' (5 pixels wide) */ - 0x10, // # - 0x30, // ## - 0x50, // # # - 0x90, // # # - 0xF8, // ##### - 0x10, // # - 0x10, // # - - /* @371 '5' (5 pixels wide) */ - 0xF8, // ##### - 0x80, // # - 0xF0, // #### - 0x08, // # - 0x08, // # - 0x88, // # # - 0x70, // ### - - /* @378 '6' (5 pixels wide) */ - 0x38, // ### - 0x40, // # - 0x80, // # - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @385 '7' (5 pixels wide) */ - 0xF8, // ##### - 0x08, // # - 0x08, // # - 0x10, // # - 0x20, // # - 0x40, // # - 0x80, // # - - /* @392 '8' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @399 '9' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x78, // #### - 0x08, // # - 0x10, // # - 0xE0, // ### - - /* @406 ':' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x20, // # - 0x00, // - 0x20, // # - 0x00, // - 0x00, // - - /* @413 ';' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x20, // # - 0x00, // - 0x20, // # - 0x20, // # - 0x40, // # - - /* @420 '<' (5 pixels wide) */ - 0x08, // # - 0x10, // # - 0x20, // # - 0x40, // # - 0x20, // # - 0x10, // # - 0x08, // # - - /* @427 '=' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xF8, // ##### - 0x00, // - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @434 '>' (5 pixels wide) */ - 0x40, // # - 0x20, // # - 0x10, // # - 0x08, // # - 0x10, // # - 0x20, // # - 0x40, // # - - /* @441 '?' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x08, // # - 0x30, // ## - 0x20, // # - 0x00, // - 0x20, // # - - /* @448 '@' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0xA8, // # # # - 0xB8, // # ### - 0xB0, // # ## - 0x80, // # - 0x78, // #### - - /* @455 'A' (5 pixels wide) */ - 0x20, // # - 0x50, // # # - 0x88, // # # - 0x88, // # # - 0xF8, // ##### - 0x88, // # # - 0x88, // # # - - /* @462 'B' (5 pixels wide) */ - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0xF0, // #### - - /* @469 'C' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x80, // # - 0x80, // # - 0x80, // # - 0x88, // # # - 0x70, // ### - - /* @476 'D' (5 pixels wide) */ - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0xF0, // #### - - /* @483 'E' (5 pixels wide) */ - 0xF8, // ##### - 0x80, // # - 0x80, // # - 0xF0, // #### - 0x80, // # - 0x80, // # - 0xF8, // ##### - - /* @490 'F' (5 pixels wide) */ - 0xF8, // ##### - 0x80, // # - 0x80, // # - 0xF0, // #### - 0x80, // # - 0x80, // # - 0x80, // # - - /* @497 'G' (5 pixels wide) */ - 0x78, // #### - 0x88, // # # - 0x80, // # - 0x80, // # - 0x98, // # ## - 0x88, // # # - 0x78, // #### - - /* @504 'H' (5 pixels wide) */ - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0xF8, // ##### - 0x88, // # # - 0x88, // # # - 0x88, // # # - - /* @511 'I' (5 pixels wide) */ - 0x70, // ### - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x70, // ### - - /* @518 'J' (5 pixels wide) */ - 0x38, // ### - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x90, // # # - 0x60, // ## - - /* @525 'K' (5 pixels wide) */ - 0x88, // # # - 0x90, // # # - 0xA0, // # # - 0xC0, // ## - 0xA0, // # # - 0x90, // # # - 0x88, // # # - - /* @532 'L' (5 pixels wide) */ - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0xF8, // ##### - - /* @539 'M' (5 pixels wide) */ - 0x88, // # # - 0xD8, // ## ## - 0xA8, // # # # - 0xA8, // # # # - 0xA8, // # # # - 0x88, // # # - 0x88, // # # - - /* @546 'N' (5 pixels wide) */ - 0x88, // # # - 0x88, // # # - 0xC8, // ## # - 0xA8, // # # # - 0x98, // # ## - 0x88, // # # - 0x88, // # # - - /* @553 'O' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @560 'P' (5 pixels wide) */ - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0xF0, // #### - 0x80, // # - 0x80, // # - 0x80, // # - - /* @567 'Q' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0xA8, // # # # - 0x90, // # # - 0x68, // ## # - - /* @574 'R' (5 pixels wide) */ - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0xF0, // #### - 0xA0, // # # - 0x90, // # # - 0x88, // # # - - /* @581 'S' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x80, // # - 0x70, // ### - 0x08, // # - 0x88, // # # - 0x70, // ### - - /* @588 'T' (5 pixels wide) */ - 0xF8, // ##### - 0xA8, // # # # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - - /* @595 'U' (5 pixels wide) */ - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @602 'V' (5 pixels wide) */ - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x50, // # # - 0x20, // # - - /* @609 'W' (5 pixels wide) */ - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0xA8, // # # # - 0xA8, // # # # - 0xA8, // # # # - 0x50, // # # - - /* @616 'X' (5 pixels wide) */ - 0x88, // # # - 0x88, // # # - 0x50, // # # - 0x20, // # - 0x50, // # # - 0x88, // # # - 0x88, // # # - - /* @623 'Y' (5 pixels wide) */ - 0x88, // # # - 0x88, // # # - 0x50, // # # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - - /* @630 'Z' (5 pixels wide) */ - 0xF8, // ##### - 0x08, // # - 0x10, // # - 0x70, // ### - 0x40, // # - 0x80, // # - 0xF8, // ##### - - /* @637 '[' (5 pixels wide) */ - 0x78, // #### - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x78, // #### - - /* @644 '\' (5 pixels wide) */ - 0x00, // - 0x80, // # - 0x40, // # - 0x20, // # - 0x10, // # - 0x08, // # - 0x00, // - - /* @651 ']' (5 pixels wide) */ - 0x78, // #### - 0x08, // # - 0x08, // # - 0x08, // # - 0x08, // # - 0x08, // # - 0x78, // #### - - /* @658 '^' (5 pixels wide) */ - 0x20, // # - 0x50, // # # - 0x88, // # # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - /* @665 '_' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - - /* @672 '`' (5 pixels wide) */ - 0x60, // ## - 0x60, // ## - 0x20, // # - 0x10, // # - 0x00, // - 0x00, // - 0x00, // - - /* @679 'a' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x60, // ## - 0x10, // # - 0x70, // ### - 0x90, // # # - 0x78, // #### - - /* @686 'b' (5 pixels wide) */ - 0x80, // # - 0x80, // # - 0xB0, // # ## - 0xC8, // ## # - 0x88, // # # - 0xC8, // ## # - 0xB0, // # ## - - /* @693 'c' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x80, // # - 0x88, // # # - 0x70, // ### - - /* @700 'd' (5 pixels wide) */ - 0x08, // # - 0x08, // # - 0x68, // ## # - 0x98, // # ## - 0x88, // # # - 0x98, // # ## - 0x68, // ## # - - /* @707 'e' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0xF8, // ##### - 0x80, // # - 0x70, // ### - - /* @714 'f' (5 pixels wide) */ - 0x10, // # - 0x28, // # # - 0x20, // # - 0x70, // ### - 0x20, // # - 0x20, // # - 0x20, // # - - /* @721 'g' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x70, // ### - 0x98, // # ## - 0x98, // # ## - 0x68, // ## # - 0x08, // # - - /* @728 'h' (5 pixels wide) */ - 0x80, // # - 0x80, // # - 0xB0, // # ## - 0xC8, // ## # - 0x88, // # # - 0x88, // # # - 0x88, // # # - - /* @735 'i' (5 pixels wide) */ - 0x20, // # - 0x00, // - 0x60, // ## - 0x20, // # - 0x20, // # - 0x20, // # - 0x70, // ### - - /* @742 'j' (5 pixels wide) */ - 0x10, // # - 0x00, // - 0x10, // # - 0x10, // # - 0x10, // # - 0x90, // # # - 0x60, // ## - - /* @749 'k' (5 pixels wide) */ - 0x80, // # - 0x80, // # - 0x90, // # # - 0xA0, // # # - 0xC0, // ## - 0xA0, // # # - 0x90, // # # - - /* @756 'l' (5 pixels wide) */ - 0x60, // ## - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x70, // ### - - /* @763 'm' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xD0, // ## # - 0xA8, // # # # - 0xA8, // # # # - 0xA8, // # # # - 0xA8, // # # # - - /* @770 'n' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xB0, // # ## - 0xC8, // ## # - 0x88, // # # - 0x88, // # # - 0x88, // # # - - /* @777 'o' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @784 'p' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xB0, // # ## - 0xC8, // ## # - 0xC8, // ## # - 0xB0, // # ## - 0x80, // # - - /* @791 'q' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x68, // ## # - 0x98, // # ## - 0x98, // # ## - 0x68, // ## # - 0x08, // # - - /* @798 'r' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xB0, // # ## - 0xC8, // ## # - 0x80, // # - 0x80, // # - 0x80, // # - - /* @805 's' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x78, // #### - 0x80, // # - 0x70, // ### - 0x08, // # - 0xF0, // #### - - /* @812 't' (5 pixels wide) */ - 0x20, // # - 0x20, // # - 0xF8, // ##### - 0x20, // # - 0x20, // # - 0x28, // # # - 0x10, // # - - /* @819 'u' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x98, // # ## - 0x68, // ## # - - /* @826 'v' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x50, // # # - 0x20, // # - - /* @833 'w' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x88, // # # - 0x88, // # # - 0xA8, // # # # - 0xA8, // # # # - 0x50, // # # - - /* @840 'x' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x88, // # # - 0x50, // # # - 0x20, // # - 0x50, // # # - 0x88, // # # - - /* @847 'y' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x88, // # # - 0x88, // # # - 0x78, // #### - 0x08, // # - 0x88, // # # - - /* @854 'z' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xF8, // ##### - 0x10, // # - 0x20, // # - 0x40, // # - 0xF8, // ##### - - /* @861 '{' (5 pixels wide) */ - 0x10, // # - 0x20, // # - 0x20, // # - 0x40, // # - 0x20, // # - 0x20, // # - 0x10, // # - - /* @868 '|' (5 pixels wide) */ - 0x20, // # - 0x20, // # - 0x20, // # - 0x00, // - 0x20, // # - 0x20, // # - 0x20, // # - - /* @875 '}' (5 pixels wide) */ - 0x40, // # - 0x20, // # - 0x20, // # - 0x10, // # - 0x20, // # - 0x20, // # - 0x40, // # - - /* @882 '~' (5 pixels wide) */ - 0x40, // # - 0xA8, // # # # - 0x10, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - /* @889 '\x7F' (5 pixels wide) */ - 0x20, // # - 0x70, // ### - 0xD8, // ## ## - 0x88, // # # - 0x88, // # # - 0xF8, // ##### - 0x00, // - - /* @896 '\x80' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x80, // # - 0x80, // # - 0x88, // # # - 0x70, // ### - 0x10, // # - - /* @903 '\x81' (5 pixels wide) */ - 0x00, // - 0x88, // # # - 0x00, // - 0x88, // # # - 0x88, // # # - 0x98, // # ## - 0x68, // ## # - - /* @910 '\x82' (5 pixels wide) */ - 0x18, // ## - 0x00, // - 0x70, // ### - 0x88, // # # - 0xF8, // ##### - 0x80, // # - 0x78, // #### - - /* @917 '\x83' (5 pixels wide) */ - 0xF8, // ##### - 0x00, // - 0x60, // ## - 0x10, // # - 0x70, // ### - 0x90, // # # - 0x78, // #### - - /* @924 '\x84' (5 pixels wide) */ - 0x00, // - 0x88, // # # - 0x60, // ## - 0x10, // # - 0x70, // ### - 0x90, // # # - 0x78, // #### - - /* @931 '\x85' (5 pixels wide) */ - 0xC0, // ## - 0x00, // - 0x60, // ## - 0x10, // # - 0x70, // ### - 0x90, // # # - 0x78, // #### - - /* @938 '\x86' (5 pixels wide) */ - 0x30, // ## - 0x00, // - 0x60, // ## - 0x10, // # - 0x70, // ### - 0x90, // # # - 0x78, // #### - - /* @945 '\x87' (5 pixels wide) */ - 0x00, // - 0x78, // #### - 0xC0, // ## - 0xC0, // ## - 0x78, // #### - 0x10, // # - 0x30, // ## - - /* @952 '\x88' (5 pixels wide) */ - 0xF8, // ##### - 0x00, // - 0x70, // ### - 0x88, // # # - 0xF8, // ##### - 0x80, // # - 0x78, // #### - - /* @959 '\x89' (5 pixels wide) */ - 0x88, // # # - 0x00, // - 0x70, // ### - 0x88, // # # - 0xF8, // ##### - 0x80, // # - 0x78, // #### - - /* @966 '\x8A' (5 pixels wide) */ - 0xC0, // ## - 0x00, // - 0x70, // ### - 0x88, // # # - 0xF8, // ##### - 0x80, // # - 0x78, // #### - - /* @973 '\x8B' (5 pixels wide) */ - 0x28, // # # - 0x00, // - 0x30, // ## - 0x10, // # - 0x10, // # - 0x10, // # - 0x38, // ### - - /* @980 '\x8C' (5 pixels wide) */ - 0x30, // ## - 0x48, // # # - 0x30, // ## - 0x10, // # - 0x10, // # - 0x10, // # - 0x38, // ### - - /* @987 '\x8D' (5 pixels wide) */ - 0x60, // ## - 0x00, // - 0x30, // ## - 0x10, // # - 0x10, // # - 0x10, // # - 0x38, // ### - - /* @994 '\x8E' (5 pixels wide) */ - 0xA8, // # # # - 0x50, // # # - 0x88, // # # - 0x88, // # # - 0xF8, // ##### - 0x88, // # # - 0x88, // # # - - /* @1001 '\x8F' (5 pixels wide) */ - 0x20, // # - 0x00, // - 0x20, // # - 0x50, // # # - 0x88, // # # - 0xF8, // ##### - 0x88, // # # - - /* @1008 '\x90' (5 pixels wide) */ - 0x30, // ## - 0x00, // - 0xF0, // #### - 0x80, // # - 0xE0, // ### - 0x80, // # - 0xF0, // #### - - /* @1015 '\x91' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x78, // #### - 0x10, // # - 0x78, // #### - 0x90, // # # - 0x78, // #### - - /* @1022 '\x92' (5 pixels wide) */ - 0x38, // ### - 0x50, // # # - 0x90, // # # - 0xF8, // ##### - 0x90, // # # - 0x90, // # # - 0x98, // # ## - - /* @1029 '\x93' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x00, // - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @1036 '\x94' (5 pixels wide) */ - 0x00, // - 0x88, // # # - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @1043 '\x95' (5 pixels wide) */ - 0x00, // - 0xC0, // ## - 0x00, // - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @1050 '\x96' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x00, // - 0x88, // # # - 0x88, // # # - 0x98, // # ## - 0x68, // ## # - - /* @1057 '\x97' (5 pixels wide) */ - 0x00, // - 0xC0, // ## - 0x00, // - 0x88, // # # - 0x88, // # # - 0x98, // # ## - 0x68, // ## # - - /* @1064 '\x98' (5 pixels wide) */ - 0x48, // # # - 0x00, // - 0x48, // # # - 0x48, // # # - 0x48, // # # - 0x38, // ### - 0x08, // # - - /* @1071 '\x99' (5 pixels wide) */ - 0x88, // # # - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @1078 '\x9A' (5 pixels wide) */ - 0x88, // # # - 0x00, // - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @1085 '\x9B' (5 pixels wide) */ - 0x20, // # - 0x20, // # - 0xF8, // ##### - 0xA0, // # # - 0xA0, // # # - 0xF8, // ##### - 0x20, // # - - /* @1092 '\x9C' (5 pixels wide) */ - 0x30, // ## - 0x58, // # ## - 0x48, // # # - 0xE0, // ### - 0x40, // # - 0x48, // # # - 0xF8, // ##### - - /* @1099 '\x9D' (5 pixels wide) */ - 0xD8, // ## ## - 0xD8, // ## ## - 0x70, // ### - 0xF8, // ##### - 0x20, // # - 0xF8, // ##### - 0x20, // # - - /* @1106 '\x9E' (5 pixels wide) */ - 0xE0, // ### - 0x90, // # # - 0x90, // # # - 0xE0, // ### - 0x90, // # # - 0xB8, // # ### - 0x90, // # # - - /* @1113 '\x9F' (5 pixels wide) */ - 0x18, // ## - 0x28, // # # - 0x20, // # - 0x70, // ### - 0x20, // # - 0x20, // # - 0xA0, // # # - - /* @1120 '\xA0' (5 pixels wide) */ - 0x18, // ## - 0x00, // - 0x60, // ## - 0x10, // # - 0x70, // ### - 0x90, // # # - 0x78, // #### - - /* @1127 '\xA1' (5 pixels wide) */ - 0x18, // ## - 0x00, // - 0x30, // ## - 0x10, // # - 0x10, // # - 0x10, // # - 0x38, // ### - - /* @1134 '\xA2' (5 pixels wide) */ - 0x00, // - 0x18, // ## - 0x00, // - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @1141 '\xA3' (5 pixels wide) */ - 0x00, // - 0x18, // ## - 0x00, // - 0x88, // # # - 0x88, // # # - 0x98, // # ## - 0x68, // ## # - - /* @1148 '\xA4' (5 pixels wide) */ - 0x00, // - 0x78, // #### - 0x00, // - 0x70, // ### - 0x48, // # # - 0x48, // # # - 0x48, // # # - - /* @1155 '\xA5' (5 pixels wide) */ - 0xF8, // ##### - 0x00, // - 0xC8, // ## # - 0xE8, // ### # - 0xB8, // # ### - 0x98, // # ## - 0x88, // # # - - /* @1162 '\xA6' (5 pixels wide) */ - 0x70, // ### - 0x90, // # # - 0x90, // # # - 0x78, // #### - 0x00, // - 0xF8, // ##### - 0x00, // - - /* @1169 '\xA7' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - 0x00, // - 0xF8, // ##### - 0x00, // - - /* @1176 '\xA8' (5 pixels wide) */ - 0x20, // # - 0x00, // - 0x20, // # - 0x60, // ## - 0x80, // # - 0x88, // # # - 0x70, // ### - - /* @1183 '\xA9' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x80, // # - 0x80, // # - 0x00, // - - /* @1190 '\xAA' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x08, // # - 0x08, // # - 0x00, // - - /* @1197 '\xAB' (5 pixels wide) */ - 0x80, // # - 0x88, // # # - 0x90, // # # - 0xB8, // # ### - 0x48, // # # - 0x98, // # ## - 0x20, // # - - /* @1204 '\xAC' (5 pixels wide) */ - 0x80, // # - 0x88, // # # - 0x90, // # # - 0xA8, // # # # - 0x58, // # ## - 0xB8, // # ### - 0x08, // # - - /* @1211 '\xAD' (5 pixels wide) */ - 0x20, // # - 0x20, // # - 0x00, // - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - - /* @1218 '\xAE' (5 pixels wide) */ - 0x00, // - 0x28, // # # - 0x50, // # # - 0xA0, // # # - 0x50, // # # - 0x28, // # # - 0x00, // - - /* @1225 '\xAF' (5 pixels wide) */ - 0x00, // - 0xA0, // # # - 0x50, // # # - 0x28, // # # - 0x50, // # # - 0xA0, // # # - 0x00, // - - /* @1232 '\xB0' (5 pixels wide) */ - 0x20, // # - 0x88, // # # - 0x20, // # - 0x88, // # # - 0x20, // # - 0x88, // # # - 0x20, // # - - /* @1239 '\xB1' (5 pixels wide) */ - 0x50, // # # - 0xA8, // # # # - 0x50, // # # - 0xA8, // # # # - 0x50, // # # - 0xA8, // # # # - 0x50, // # # - - /* @1246 '\xB2' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - - /* @1253 '\xB3' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0xF0, // #### - 0x10, // # - 0x10, // # - - /* @1260 '\xB4' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0xF0, // #### - 0x10, // # - 0xF0, // #### - 0x10, // # - 0x10, // # - - /* @1267 '\xB5' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0xE8, // ### # - 0x28, // # # - 0x28, // # # - - /* @1274 '\xB6' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x28, // # # - 0x28, // # # - - /* @1281 '\xB7' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xF0, // #### - 0x10, // # - 0xF0, // #### - 0x10, // # - 0x10, // # - - /* @1288 '\xB8' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0xE8, // ### # - 0x08, // # - 0xE8, // ### # - 0x28, // # # - 0x28, // # # - - /* @1295 '\xB9' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - - /* @1302 '\xBA' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xF8, // ##### - 0x08, // # - 0xE8, // ### # - 0x28, // # # - 0x28, // # # - - /* @1309 '\xBB' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0xE8, // ### # - 0x08, // # - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @1316 '\xBC' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @1323 '\xBD' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0xF0, // #### - 0x10, // # - 0xF0, // #### - 0x00, // - 0x00, // - - /* @1330 '\xBE' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF0, // #### - 0x10, // # - 0x10, // # - - /* @1337 '\xBF' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x18, // ## - 0x00, // - 0x00, // - - /* @1344 '\xC0' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @1351 '\xC1' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x10, // # - 0x10, // # - - /* @1358 '\xC2' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x18, // ## - 0x10, // # - 0x10, // # - - /* @1365 '\xC3' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @1372 '\xC4' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0xF8, // ##### - 0x10, // # - 0x10, // # - - /* @1379 '\xC5' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x18, // ## - 0x10, // # - 0x18, // ## - 0x10, // # - 0x10, // # - - /* @1386 '\xC6' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - - /* @1393 '\xC7' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x20, // # - 0x38, // ### - 0x00, // - 0x00, // - - /* @1400 '\xC8' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x38, // ### - 0x20, // # - 0x28, // # # - 0x28, // # # - 0x28, // # # - - /* @1407 '\xC9' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0xE8, // ### # - 0x00, // - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @1414 '\xCA' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xF8, // ##### - 0x00, // - 0xE8, // ### # - 0x28, // # # - 0x28, // # # - - /* @1421 '\xCB' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x20, // # - 0x28, // # # - 0x28, // # # - 0x28, // # # - - /* @1428 '\xCC' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xF8, // ##### - 0x00, // - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @1435 '\xCD' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0xE8, // ### # - 0x00, // - 0xE8, // ### # - 0x28, // # # - 0x28, // # # - - /* @1442 '\xCE' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0xF8, // ##### - 0x00, // - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @1449 '\xCF' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0xF8, // ##### - 0x00, // - 0x00, // - - /* @1456 '\xD0' (5 pixels wide) */ - 0x00, // - 0x00, // - 0xF8, // ##### - 0x00, // - 0xF8, // ##### - 0x10, // # - 0x10, // # - - /* @1463 '\xD1' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x28, // # # - 0x28, // # # - - /* @1470 '\xD2' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x38, // ### - 0x00, // - 0x00, // - - /* @1477 '\xD3' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x18, // ## - 0x10, // # - 0x18, // ## - 0x00, // - 0x00, // - - /* @1484 '\xD4' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x18, // ## - 0x10, // # - 0x18, // ## - 0x10, // # - 0x10, // # - - /* @1491 '\xD5' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x38, // ### - 0x28, // # # - 0x28, // # # - - /* @1498 '\xD6' (5 pixels wide) */ - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0x28, // # # - 0xF8, // ##### - 0x28, // # # - 0x28, // # # - - /* @1505 '\xD7' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0xF8, // ##### - 0x10, // # - 0xF8, // ##### - 0x10, // # - 0x10, // # - - /* @1512 '\xD8' (5 pixels wide) */ - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0xF0, // #### - 0x00, // - 0x00, // - - /* @1519 '\xD9' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x18, // ## - 0x10, // # - 0x10, // # - - /* @1526 '\xDA' (5 pixels wide) */ - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - - /* @1533 '\xDB' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - - /* @1540 '\xDC' (5 pixels wide) */ - 0xE0, // ### - 0xE0, // ### - 0xE0, // ### - 0xE0, // ### - 0xE0, // ### - 0xE0, // ### - 0xE0, // ### - - /* @1547 '\xDD' (5 pixels wide) */ - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - - /* @1554 '\xDE' (5 pixels wide) */ - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - 0xF8, // ##### - 0x00, // - 0x00, // - 0x00, // - - /* @1561 '\xDF' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x68, // ## # - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x68, // ## # - - /* @1568 '\xE0' (5 pixels wide) */ - 0x00, // - 0x70, // ### - 0x88, // # # - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0xF0, // #### - - /* @1575 '\xE1' (5 pixels wide) */ - 0x00, // - 0xF8, // ##### - 0x98, // # ## - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - - /* @1582 '\xE2' (5 pixels wide) */ - 0x00, // - 0xF8, // ##### - 0x50, // # # - 0x50, // # # - 0x50, // # # - 0x50, // # # - 0x50, // # # - - /* @1589 '\xE3' (5 pixels wide) */ - 0xF8, // ##### - 0x88, // # # - 0x40, // # - 0x20, // # - 0x40, // # - 0x88, // # # - 0xF8, // ##### - - /* @1596 '\xE4' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x78, // #### - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x60, // ## - - /* @1603 '\xE5' (5 pixels wide) */ - 0x00, // - 0x50, // # # - 0x50, // # # - 0x50, // # # - 0x50, // # # - 0x68, // ## # - 0xC0, // ## - - /* @1610 '\xE6' (5 pixels wide) */ - 0x00, // - 0xF8, // ##### - 0xA0, // # # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - - /* @1617 '\xE7' (5 pixels wide) */ - 0xF8, // ##### - 0x20, // # - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - 0x20, // # - - /* @1624 '\xE8' (5 pixels wide) */ - 0x20, // # - 0x50, // # # - 0x88, // # # - 0xF8, // ##### - 0x88, // # # - 0x50, // # # - 0x20, // # - - /* @1631 '\xE9' (5 pixels wide) */ - 0x20, // # - 0x50, // # # - 0x88, // # # - 0x88, // # # - 0x50, // # # - 0x50, // # # - 0xD8, // ## ## - - /* @1638 '\xEA' (5 pixels wide) */ - 0x30, // ## - 0x40, // # - 0x30, // ## - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x70, // ### - - /* @1645 '\xEB' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0xA8, // # # # - 0xA8, // # # # - 0x70, // ### - - /* @1652 '\xEC' (5 pixels wide) */ - 0x08, // # - 0x70, // ### - 0x98, // # ## - 0xA8, // # # # - 0xA8, // # # # - 0xC8, // ## # - 0x70, // ### - - /* @1659 '\xED' (5 pixels wide) */ - 0x70, // ### - 0x80, // # - 0x80, // # - 0xF0, // #### - 0x80, // # - 0x80, // # - 0x70, // ### - - /* @1666 '\xEE' (5 pixels wide) */ - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - - /* @1673 '\xEF' (5 pixels wide) */ - 0x00, // - 0xF8, // ##### - 0x00, // - 0xF8, // ##### - 0x00, // - 0xF8, // ##### - 0x00, // - - /* @1680 '\xF0' (5 pixels wide) */ - 0x20, // # - 0x20, // # - 0xF8, // ##### - 0x20, // # - 0x20, // # - 0x00, // - 0xF8, // ##### - - /* @1687 '\xF1' (5 pixels wide) */ - 0x40, // # - 0x20, // # - 0x10, // # - 0x20, // # - 0x40, // # - 0x00, // - 0xF8, // ##### - - /* @1694 '\xF2' (5 pixels wide) */ - 0x10, // # - 0x20, // # - 0x40, // # - 0x20, // # - 0x10, // # - 0x00, // - 0xF8, // ##### - - /* @1701 '\xF3' (5 pixels wide) */ - 0x38, // ### - 0x28, // # # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - - /* @1708 '\xF4' (5 pixels wide) */ - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0xA0, // # # - 0xA0, // # # - - /* @1715 '\xF5' (5 pixels wide) */ - 0x30, // ## - 0x30, // ## - 0x00, // - 0xF8, // ##### - 0x00, // - 0x30, // ## - 0x30, // ## - - /* @1722 '\xF6' (5 pixels wide) */ - 0x00, // - 0xE8, // ### # - 0xB8, // # ### - 0x00, // - 0xE8, // ### # - 0xB8, // # ### - 0x00, // - - /* @1729 '\xF7' (5 pixels wide) */ - 0x70, // ### - 0xD8, // ## ## - 0xD8, // ## ## - 0x70, // ### - 0x00, // - 0x00, // - 0x00, // - - /* @1736 '\xF8' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x30, // ## - 0x30, // ## - 0x00, // - 0x00, // - - /* @1743 '\xF9' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x30, // ## - 0x00, // - 0x00, // - - /* @1750 '\xFA' (5 pixels wide) */ - 0x38, // ### - 0x20, // # - 0x20, // # - 0x20, // # - 0xA0, // # # - 0xA0, // # # - 0x60, // ## - - /* @1757 '\xFB' (5 pixels wide) */ - 0x70, // ### - 0x48, // # # - 0x48, // # # - 0x48, // # # - 0x48, // # # - 0x00, // - 0x00, // - - /* @1764 '\xFC' (5 pixels wide) */ - 0x70, // ### - 0x18, // ## - 0x30, // ## - 0x60, // ## - 0x78, // #### - 0x00, // - 0x00, // - - /* @1771 '\xFD' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x78, // #### - 0x78, // #### - 0x78, // #### - 0x78, // #### - 0x00, // - - /* @1778 '\xFE' (5 pixels wide) */ - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - /* @1785 '\xFF' (5 pixels wide) */ - 0x08, // # - 0x28, // # # - 0x08, // # - 0x28, // # # - 0x00, // - 0x78, // #### - 0x08, // # - -}; - -/* Character descriptors for glcd 5x7 */ -/* { [Char width in bits], [Offset into glcd_5x7_bitmaps in bytes] } */ -const font_char_desc_t _fonts_glcd_5x7_descriptors[] = -{ - {5, 0}, /* \x00 */ - {5, 7}, /* \x01 */ - {5, 14}, /* \x02 */ - {5, 21}, /* \x03 */ - {5, 28}, /* \x04 */ - {5, 35}, /* \x05 */ - {5, 42}, /* \x06 */ - {5, 49}, /* \x07 */ - {5, 56}, /* \x08 */ - {5, 63}, /* \x09 */ - {5, 70}, /* \x0A */ - {5, 77}, /* \x0B */ - {5, 84}, /* \x0C */ - {5, 91}, /* \x0D */ - {5, 98}, /* \x0E */ - {5, 105}, /* \x0F */ - {5, 112}, /* \x10 */ - {5, 119}, /* \x11 */ - {5, 126}, /* \x12 */ - {5, 133}, /* \x13 */ - {5, 140}, /* \x14 */ - {5, 147}, /* \x15 */ - {5, 154}, /* \x16 */ - {5, 161}, /* \x17 */ - {5, 168}, /* \x18 */ - {5, 175}, /* \x19 */ - {5, 182}, /* \x1A */ - {5, 189}, /* \x1B */ - {5, 196}, /* \x1C */ - {5, 203}, /* \x1D */ - {5, 210}, /* \x1E */ - {5, 217}, /* \x1F */ - {5, 224}, /* */ - {5, 231}, /* ! */ - {5, 238}, /* " */ - {5, 245}, /* # */ - {5, 252}, /* $ */ - {5, 259}, /* % */ - {5, 266}, /* & */ - {5, 273}, /* ' */ - {5, 280}, /* ( */ - {5, 287}, /* ) */ - {5, 294}, /* * */ - {5, 301}, /* + */ - {5, 308}, /* , */ - {5, 315}, /* - */ - {5, 322}, /* . */ - {5, 329}, /* / */ - {5, 336}, /* 0 */ - {5, 343}, /* 1 */ - {5, 350}, /* 2 */ - {5, 357}, /* 3 */ - {5, 364}, /* 4 */ - {5, 371}, /* 5 */ - {5, 378}, /* 6 */ - {5, 385}, /* 7 */ - {5, 392}, /* 8 */ - {5, 399}, /* 9 */ - {5, 406}, /* : */ - {5, 413}, /* ; */ - {5, 420}, /* < */ - {5, 427}, /* = */ - {5, 434}, /* > */ - {5, 441}, /* ? */ - {5, 448}, /* @ */ - {5, 455}, /* A */ - {5, 462}, /* B */ - {5, 469}, /* C */ - {5, 476}, /* D */ - {5, 483}, /* E */ - {5, 490}, /* F */ - {5, 497}, /* G */ - {5, 504}, /* H */ - {5, 511}, /* I */ - {5, 518}, /* J */ - {5, 525}, /* K */ - {5, 532}, /* L */ - {5, 539}, /* M */ - {5, 546}, /* N */ - {5, 553}, /* O */ - {5, 560}, /* P */ - {5, 567}, /* Q */ - {5, 574}, /* R */ - {5, 581}, /* S */ - {5, 588}, /* T */ - {5, 595}, /* U */ - {5, 602}, /* V */ - {5, 609}, /* W */ - {5, 616}, /* X */ - {5, 623}, /* Y */ - {5, 630}, /* Z */ - {5, 637}, /* [ */ - {5, 644}, /* \ */ - {5, 651}, /* ] */ - {5, 658}, /* ^ */ - {5, 665}, /* _ */ - {5, 672}, /* ` */ - {5, 679}, /* a */ - {5, 686}, /* b */ - {5, 693}, /* c */ - {5, 700}, /* d */ - {5, 707}, /* e */ - {5, 714}, /* f */ - {5, 721}, /* g */ - {5, 728}, /* h */ - {5, 735}, /* i */ - {5, 742}, /* j */ - {5, 749}, /* k */ - {5, 756}, /* l */ - {5, 763}, /* m */ - {5, 770}, /* n */ - {5, 777}, /* o */ - {5, 784}, /* p */ - {5, 791}, /* q */ - {5, 798}, /* r */ - {5, 805}, /* s */ - {5, 812}, /* t */ - {5, 819}, /* u */ - {5, 826}, /* v */ - {5, 833}, /* w */ - {5, 840}, /* x */ - {5, 847}, /* y */ - {5, 854}, /* z */ - {5, 861}, /* { */ - {5, 868}, /* | */ - {5, 875}, /* } */ - {5, 882}, /* ~ */ - {5, 889}, /* \x7F */ - {5, 896}, /* \x80 */ - {5, 903}, /* \x81 */ - {5, 910}, /* \x82 */ - {5, 917}, /* \x83 */ - {5, 924}, /* \x84 */ - {5, 931}, /* \x85 */ - {5, 938}, /* \x86 */ - {5, 945}, /* \x87 */ - {5, 952}, /* \x88 */ - {5, 959}, /* \x89 */ - {5, 966}, /* \x8A */ - {5, 973}, /* \x8B */ - {5, 980}, /* \x8C */ - {5, 987}, /* \x8D */ - {5, 994}, /* \x8E */ - {5, 1001}, /* \x8F */ - {5, 1008}, /* \x90 */ - {5, 1015}, /* \x91 */ - {5, 1022}, /* \x92 */ - {5, 1029}, /* \x93 */ - {5, 1036}, /* \x94 */ - {5, 1043}, /* \x95 */ - {5, 1050}, /* \x96 */ - {5, 1057}, /* \x97 */ - {5, 1064}, /* \x98 */ - {5, 1071}, /* \x99 */ - {5, 1078}, /* \x9A */ - {5, 1085}, /* \x9B */ - {5, 1092}, /* \x9C */ - {5, 1099}, /* \x9D */ - {5, 1106}, /* \x9E */ - {5, 1113}, /* \x9F */ - {5, 1120}, /* \xA0 */ - {5, 1127}, /* \xA1 */ - {5, 1134}, /* \xA2 */ - {5, 1141}, /* \xA3 */ - {5, 1148}, /* \xA4 */ - {5, 1155}, /* \xA5 */ - {5, 1162}, /* \xA6 */ - {5, 1169}, /* \xA7 */ - {5, 1176}, /* \xA8 */ - {5, 1183}, /* \xA9 */ - {5, 1190}, /* \xAA */ - {5, 1197}, /* \xAB */ - {5, 1204}, /* \xAC */ - {5, 1211}, /* \xAD */ - {5, 1218}, /* \xAE */ - {5, 1225}, /* \xAF */ - {5, 1232}, /* \xB0 */ - {5, 1239}, /* \xB1 */ - {5, 1246}, /* \xB2 */ - {5, 1253}, /* \xB3 */ - {5, 1260}, /* \xB4 */ - {5, 1267}, /* \xB5 */ - {5, 1274}, /* \xB6 */ - {5, 1281}, /* \xB7 */ - {5, 1288}, /* \xB8 */ - {5, 1295}, /* \xB9 */ - {5, 1302}, /* \xBA */ - {5, 1309}, /* \xBB */ - {5, 1316}, /* \xBC */ - {5, 1323}, /* \xBD */ - {5, 1330}, /* \xBE */ - {5, 1337}, /* \xBF */ - {5, 1344}, /* \xC0 */ - {5, 1351}, /* \xC1 */ - {5, 1358}, /* \xC2 */ - {5, 1365}, /* \xC3 */ - {5, 1372}, /* \xC4 */ - {5, 1379}, /* \xC5 */ - {5, 1386}, /* \xC6 */ - {5, 1393}, /* \xC7 */ - {5, 1400}, /* \xC8 */ - {5, 1407}, /* \xC9 */ - {5, 1414}, /* \xCA */ - {5, 1421}, /* \xCB */ - {5, 1428}, /* \xCC */ - {5, 1435}, /* \xCD */ - {5, 1442}, /* \xCE */ - {5, 1449}, /* \xCF */ - {5, 1456}, /* \xD0 */ - {5, 1463}, /* \xD1 */ - {5, 1470}, /* \xD2 */ - {5, 1477}, /* \xD3 */ - {5, 1484}, /* \xD4 */ - {5, 1491}, /* \xD5 */ - {5, 1498}, /* \xD6 */ - {5, 1505}, /* \xD7 */ - {5, 1512}, /* \xD8 */ - {5, 1519}, /* \xD9 */ - {5, 1526}, /* \xDA */ - {5, 1533}, /* \xDB */ - {5, 1540}, /* \xDC */ - {5, 1547}, /* \xDD */ - {5, 1554}, /* \xDE */ - {5, 1561}, /* \xDF */ - {5, 1568}, /* \xE0 */ - {5, 1575}, /* \xE1 */ - {5, 1582}, /* \xE2 */ - {5, 1589}, /* \xE3 */ - {5, 1596}, /* \xE4 */ - {5, 1603}, /* \xE5 */ - {5, 1610}, /* \xE6 */ - {5, 1617}, /* \xE7 */ - {5, 1624}, /* \xE8 */ - {5, 1631}, /* \xE9 */ - {5, 1638}, /* \xEA */ - {5, 1645}, /* \xEB */ - {5, 1652}, /* \xEC */ - {5, 1659}, /* \xED */ - {5, 1666}, /* \xEE */ - {5, 1673}, /* \xEF */ - {5, 1680}, /* \xF0 */ - {5, 1687}, /* \xF1 */ - {5, 1694}, /* \xF2 */ - {5, 1701}, /* \xF3 */ - {5, 1708}, /* \xF4 */ - {5, 1715}, /* \xF5 */ - {5, 1722}, /* \xF6 */ - {5, 1729}, /* \xF7 */ - {5, 1736}, /* \xF8 */ - {5, 1743}, /* \xF9 */ - {5, 1750}, /* \xFA */ - {5, 1757}, /* \xFB */ - {5, 1764}, /* \xFC */ - {5, 1771}, /* \xFD */ - {5, 1778}, /* \xFE */ - {5, 1785}, /* \xFF */ -}; - -/* Font information for glcd 5x7 */ - -const font_info_t _fonts_glcd_5x7_info = -{ - .height = 7, /* Character height */ - .c = 1, /* C */ - .char_start = 0, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_glcd_5x7_descriptors, /* Character descriptor array */ - .bitmap = _fonts_glcd_5x7_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_GLCD_5X7_H_ */ diff --git a/extras/fonts/data/font_roboto_10pt.h b/extras/fonts/data/font_roboto_10pt.h deleted file mode 100644 index 685d86f..0000000 --- a/extras/fonts/data/font_roboto_10pt.h +++ /dev/null @@ -1,1630 +0,0 @@ -/* - * Font data for Roboto 10pt - * - * FIXME: Add license information - * - * Author: zaltora - */ -#ifndef _EXTRAS_FONTS_FONT_ROBOTO_10PT_H_ -#define _EXTRAS_FONTS_FONT_ROBOTO_10PT_H_ - -// Character bitmaps for Roboto 10pt -const uint8_t _fonts_roboto_10pt_bitmaps[] = -{ - // @0 '!' (1 pixels wide) - 0x00, // - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @14 '"' (3 pixels wide) - 0x00, // - 0x00, // - 0xA0, // # # - 0xA0, // # # - 0xA0, // # # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @28 '#' (8 pixels wide) - 0x00, // - 0x00, // - 0x12, // # # - 0x14, // # # - 0x7F, // ####### - 0x24, // # # - 0x24, // # # - 0xFE, // ####### - 0x28, // # # - 0x28, // # # - 0x08, // # - 0x00, // - 0x00, // - 0x00, // - - // @42 '$' (6 pixels wide) - 0x20, // # - 0x30, // ## - 0x58, // # ## - 0x8C, // # ## - 0xC0, // ## - 0x60, // ## - 0x38, // ### - 0x0C, // ## - 0x8C, // # ## - 0xCC, // ## ## - 0x70, // ### - 0x20, // # - 0x00, // - 0x00, // - - // @56 '%' (8 pixels wide) - 0x00, // - 0x00, // - 0xE0, // ### - 0xA4, // # # # - 0x84, // # # - 0xA8, // # # # - 0x10, // # - 0x19, // ## # - 0x29, // # # # - 0x49, // # # # - 0x06, // ## - 0x00, // - 0x00, // - 0x00, // - - // @70 '&' (8 pixels wide) - 0x00, // - 0x00, // - 0x38, // ### - 0x64, // ## # - 0x64, // ## # - 0x38, // ### - 0x30, // ## - 0x5B, // # ## ## - 0xCE, // ## ### - 0x46, // # ## - 0x7A, // #### # - 0x00, // - 0x00, // - 0x00, // - - // @84 ''' (1 pixels wide) - 0x00, // - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @98 '(' (3 pixels wide) - 0x00, // - 0x20, // # - 0x40, // # - 0x40, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0xC0, // ## - 0x40, // # - 0x60, // ## - 0x20, // # - - // @112 ')' (3 pixels wide) - 0x00, // - 0x80, // # - 0x40, // # - 0x60, // ## - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x40, // # - 0x40, // # - 0x80, // # - - // @126 '*' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x40, // # - 0xD0, // ## # - 0x60, // ## - 0xA0, // # # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @140 '+' (7 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x10, // # - 0x10, // # - 0x10, // # - 0xFE, // ####### - 0x10, // # - 0x10, // # - 0x10, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @154 ',' (2 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x40, // # - 0x40, // # - 0x80, // # - 0x00, // - - // @168 '-' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF0, // #### - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @182 '.' (1 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @196 '/' (5 pixels wide) - 0x00, // - 0x00, // - 0x08, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x20, // # - 0x20, // # - 0x60, // ## - 0x40, // # - 0x40, // # - 0x80, // # - 0x00, // - 0x00, // - - // @210 '0' (6 pixels wide) - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x8C, // # ## - 0x8C, // # ## - 0x8C, // # ## - 0x8C, // # ## - 0x8C, // # ## - 0x88, // # # - 0x70, // ### - 0x00, // - 0x00, // - 0x00, // - - // @224 '1' (4 pixels wide) - 0x00, // - 0x00, // - 0xF0, // #### - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x00, // - 0x00, // - 0x00, // - - // @238 '2' (6 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0x88, // # # - 0x88, // # # - 0x08, // # - 0x10, // # - 0x30, // ## - 0x60, // ## - 0x40, // # - 0xFC, // ###### - 0x00, // - 0x00, // - 0x00, // - - // @252 '3' (6 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0x88, // # # - 0x88, // # # - 0x08, // # - 0x38, // ### - 0x08, // # - 0x8C, // # ## - 0x88, // # # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @266 '4' (7 pixels wide) - 0x00, // - 0x00, // - 0x0C, // ## - 0x1C, // ### - 0x1C, // ### - 0x2C, // # ## - 0x2C, // # ## - 0x4C, // # ## - 0xFE, // ####### - 0x0C, // ## - 0x0C, // ## - 0x00, // - 0x00, // - 0x00, // - - // @280 '5' (6 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0xC0, // ## - 0xC0, // ## - 0xF8, // ##### - 0x88, // # # - 0x0C, // ## - 0x8C, // # ## - 0x88, // # # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @294 '6' (6 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0xC0, // ## - 0x80, // # - 0xB0, // # ## - 0x88, // # # - 0x8C, // # ## - 0x8C, // # ## - 0xC8, // ## # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @308 '7' (6 pixels wide) - 0x00, // - 0x00, // - 0xFC, // ###### - 0x08, // # - 0x18, // ## - 0x10, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x00, // - 0x00, // - 0x00, // - - // @322 '8' (6 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x70, // ### - 0x88, // # # - 0x8C, // # ## - 0x88, // # # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @336 '9' (5 pixels wide) - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x78, // #### - 0x08, // # - 0x08, // # - 0xF0, // #### - 0x00, // - 0x00, // - 0x00, // - - // @350 ':' (1 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @364 ';' (2 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x40, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x40, // # - 0x40, // # - 0x80, // # - 0x00, // - - // @378 '<' (6 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x0C, // ## - 0x70, // ### - 0xC0, // ## - 0x30, // ## - 0x0C, // ## - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @392 '=' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x00, // - 0xF8, // ##### - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @406 '>' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xC0, // ## - 0x70, // ### - 0x08, // # - 0x30, // ## - 0xC0, // ## - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @420 '?' (6 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0xC8, // ## # - 0x0C, // ## - 0x08, // # - 0x18, // ## - 0x30, // ## - 0x30, // ## - 0x00, // - 0x30, // ## - 0x00, // - 0x00, // - 0x00, // - - // @434 '@' (10 pixels wide) - 0x00, 0x00, // - 0x00, 0x00, // - 0x1F, 0x00, // ##### - 0x61, 0x80, // ## ## - 0x4C, 0x80, // # ## # - 0x9A, 0x40, // # ## # # - 0x92, 0x40, // # # # # - 0x92, 0x40, // # # # # - 0xB2, 0x40, // # ## # # - 0x92, 0x40, // # # # # - 0x9B, 0x80, // # ## ### - 0x80, 0x00, // # - 0x60, 0x00, // ## - 0x3E, 0x00, // ##### - - // @462 'A' (8 pixels wide) - 0x00, // - 0x00, // - 0x18, // ## - 0x18, // ## - 0x1C, // ### - 0x24, // # # - 0x24, // # # - 0x26, // # ## - 0x7E, // ###### - 0x42, // # # - 0xC1, // ## # - 0x00, // - 0x00, // - 0x00, // - - // @476 'B' (7 pixels wide) - 0x00, // - 0x00, // - 0xF8, // ##### - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0xFC, // ###### - 0x86, // # ## - 0x82, // # # - 0x86, // # ## - 0xFC, // ###### - 0x00, // - 0x00, // - 0x00, // - - // @490 'C' (7 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0xC4, // ## # - 0x86, // # ## - 0x80, // # - 0x80, // # - 0x80, // # - 0x86, // # ## - 0xC4, // ## # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @504 'D' (7 pixels wide) - 0x00, // - 0x00, // - 0xF8, // ##### - 0x84, // # # - 0x86, // # ## - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x86, // # ## - 0x84, // # # - 0xF8, // ##### - 0x00, // - 0x00, // - 0x00, // - - // @518 'E' (6 pixels wide) - 0x00, // - 0x00, // - 0xFC, // ###### - 0x80, // # - 0x80, // # - 0x80, // # - 0xF8, // ##### - 0x80, // # - 0x80, // # - 0x80, // # - 0xFC, // ###### - 0x00, // - 0x00, // - 0x00, // - - // @532 'F' (6 pixels wide) - 0x00, // - 0x00, // - 0xFC, // ###### - 0x80, // # - 0x80, // # - 0x80, // # - 0xF8, // ##### - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @546 'G' (7 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0xC4, // ## # - 0x86, // # ## - 0x80, // # - 0x9E, // # #### - 0x86, // # ## - 0x86, // # ## - 0xC6, // ## ## - 0x7C, // ##### - 0x00, // - 0x00, // - 0x00, // - - // @560 'H' (7 pixels wide) - 0x00, // - 0x00, // - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0xFE, // ####### - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x00, // - 0x00, // - 0x00, // - - // @574 'I' (1 pixels wide) - 0x00, // - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @588 'J' (6 pixels wide) - 0x00, // - 0x00, // - 0x04, // # - 0x04, // # - 0x04, // # - 0x04, // # - 0x04, // # - 0x04, // # - 0xC4, // ## # - 0x4C, // # ## - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @602 'K' (7 pixels wide) - 0x00, // - 0x00, // - 0x84, // # # - 0x8C, // # ## - 0x98, // # ## - 0x90, // # # - 0xE0, // ### - 0x90, // # # - 0x88, // # # - 0x8C, // # ## - 0x86, // # ## - 0x00, // - 0x00, // - 0x00, // - - // @616 'L' (6 pixels wide) - 0x00, // - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0xFC, // ###### - 0x00, // - 0x00, // - 0x00, // - - // @630 'M' (9 pixels wide) - 0x00, 0x00, // - 0x00, 0x00, // - 0xC1, 0x80, // ## ## - 0xC1, 0x80, // ## ## - 0xA1, 0x80, // # # ## - 0xA2, 0x80, // # # # # - 0xB2, 0x80, // # ## # # - 0x96, 0x80, // # # ## # - 0x94, 0x80, // # # # # - 0x8C, 0x80, // # ## # - 0x88, 0x80, // # # # - 0x00, 0x00, // - 0x00, 0x00, // - 0x00, 0x00, // - - // @658 'N' (7 pixels wide) - 0x00, // - 0x00, // - 0xC2, // ## # - 0xC2, // ## # - 0xA2, // # # # - 0xB2, // # ## # - 0x92, // # # # - 0x8A, // # # # - 0x8E, // # ### - 0x86, // # ## - 0x86, // # ## - 0x00, // - 0x00, // - 0x00, // - - // @672 'O' (7 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0xC4, // ## # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0xC4, // ## # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @686 'P' (7 pixels wide) - 0x00, // - 0x00, // - 0xFC, // ###### - 0x84, // # # - 0x86, // # ## - 0x86, // # ## - 0x8C, // # ## - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @700 'Q' (7 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0xC4, // ## # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0xC4, // ## # - 0x7E, // ###### - 0x00, // - 0x00, // - 0x00, // - - // @714 'R' (6 pixels wide) - 0x00, // - 0x00, // - 0xF8, // ##### - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0xF8, // ##### - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x00, // - 0x00, // - 0x00, // - - // @728 'S' (6 pixels wide) - 0x00, // - 0x00, // - 0x78, // #### - 0xCC, // ## ## - 0x84, // # # - 0xC0, // ## - 0x38, // ### - 0x0C, // ## - 0x84, // # # - 0x84, // # # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @742 'T' (8 pixels wide) - 0x00, // - 0x00, // - 0xFF, // ######## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x18, // ## - 0x00, // - 0x00, // - 0x00, // - - // @756 'U' (7 pixels wide) - 0x00, // - 0x00, // - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0x82, // # # - 0xC4, // ## # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @770 'V' (8 pixels wide) - 0x00, // - 0x00, // - 0xC1, // ## # - 0x43, // # ## - 0x42, // # # - 0x66, // ## ## - 0x24, // # # - 0x24, // # # - 0x1C, // ### - 0x18, // ## - 0x18, // ## - 0x00, // - 0x00, // - 0x00, // - - // @784 'W' (11 pixels wide) - 0x00, 0x00, // - 0x00, 0x00, // - 0xC4, 0x60, // ## # ## - 0x46, 0x60, // # ## ## - 0x4A, 0x40, // # # # # - 0x4A, 0x40, // # # # # - 0x6A, 0x40, // ## # # # - 0x39, 0xC0, // ### ### - 0x31, 0x80, // ## ## - 0x31, 0x80, // ## ## - 0x31, 0x80, // ## ## - 0x00, 0x00, // - 0x00, 0x00, // - 0x00, 0x00, // - - // @812 'X' (7 pixels wide) - 0x00, // - 0x00, // - 0x84, // # # - 0xCC, // ## ## - 0x48, // # # - 0x38, // ### - 0x30, // ## - 0x38, // ### - 0x48, // # # - 0xCC, // ## ## - 0x86, // # ## - 0x00, // - 0x00, // - 0x00, // - - // @826 'Y' (7 pixels wide) - 0x00, // - 0x00, // - 0x86, // # ## - 0x84, // # # - 0x4C, // # ## - 0x68, // ## # - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x30, // ## - 0x00, // - 0x00, // - 0x00, // - - // @840 'Z' (6 pixels wide) - 0x00, // - 0x00, // - 0xFC, // ###### - 0x0C, // ## - 0x18, // ## - 0x10, // # - 0x20, // # - 0x60, // ## - 0x40, // # - 0x80, // # - 0xFC, // ###### - 0x00, // - 0x00, // - 0x00, // - - // @854 '[' (2 pixels wide) - 0xC0, // ## - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0xC0, // ## - 0x00, // - - // @868 '\' (5 pixels wide) - 0x00, // - 0x00, // - 0xC0, // ## - 0x40, // # - 0x40, // # - 0x20, // # - 0x20, // # - 0x30, // ## - 0x10, // # - 0x10, // # - 0x08, // # - 0x08, // # - 0x00, // - 0x00, // - - // @882 ']' (3 pixels wide) - 0xE0, // ### - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0xE0, // ### - 0x00, // - - // @896 '^' (5 pixels wide) - 0x00, // - 0x00, // - 0x20, // # - 0x30, // ## - 0x50, // # # - 0x58, // # ## - 0xC8, // ## # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @910 '_' (6 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xFC, // ###### - 0x00, // - 0x00, // - - // @924 '`' (2 pixels wide) - 0x00, // - 0x80, // # - 0x40, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @938 'a' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x08, // # - 0xF8, // ##### - 0x88, // # # - 0x88, // # # - 0xE8, // ### # - 0x00, // - 0x00, // - 0x00, // - - // @952 'b' (6 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0xB8, // # ### - 0xC8, // ## # - 0x8C, // # ## - 0x84, // # # - 0x8C, // # ## - 0xC8, // ## # - 0xB8, // # ### - 0x00, // - 0x00, // - 0x00, // - - // @966 'c' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x80, // # - 0x80, // # - 0x80, // # - 0x88, // # # - 0x70, // ### - 0x00, // - 0x00, // - 0x00, // - - // @980 'd' (5 pixels wide) - 0x00, // - 0x08, // # - 0x08, // # - 0x08, // # - 0x78, // #### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @994 'e' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x88, // # # - 0xF8, // ##### - 0x80, // # - 0x88, // # # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @1008 'f' (4 pixels wide) - 0x00, // - 0x30, // ## - 0x60, // ## - 0x60, // ## - 0xF0, // #### - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x00, // - 0x00, // - 0x00, // - - // @1022 'g' (6 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x7C, // ##### - 0xCC, // ## ## - 0x8C, // # ## - 0x8C, // # ## - 0x8C, // # ## - 0x8C, // # ## - 0x7C, // ##### - 0x08, // # - 0x08, // # - 0xF0, // #### - - // @1036 'h' (6 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0xB8, // # ### - 0x88, // # # - 0x88, // # # - 0x8C, // # ## - 0x8C, // # ## - 0x8C, // # ## - 0x8C, // # ## - 0x00, // - 0x00, // - 0x00, // - - // @1050 'i' (1 pixels wide) - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @1064 'j' (2 pixels wide) - 0x00, // - 0x40, // # - 0x00, // - 0x00, // - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0xC0, // ## - - // @1078 'k' (5 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x98, // # ## - 0x90, // # # - 0xA0, // # # - 0xE0, // ### - 0xB0, // # ## - 0x90, // # # - 0x88, // # # - 0x00, // - 0x00, // - 0x00, // - - // @1092 'l' (1 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @1106 'm' (9 pixels wide) - 0x00, 0x00, // - 0x00, 0x00, // - 0x00, 0x00, // - 0x00, 0x00, // - 0xBB, 0x80, // # ### ### - 0x8C, 0x80, // # ## # - 0x88, 0x80, // # # # - 0x88, 0x80, // # # # - 0x88, 0x80, // # # # - 0x88, 0x80, // # # # - 0x88, 0x80, // # # # - 0x00, 0x00, // - 0x00, 0x00, // - 0x00, 0x00, // - - // @1134 'n' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xB8, // # ### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x00, // - 0x00, // - 0x00, // - - // @1148 'o' (6 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x8C, // # ## - 0x84, // # # - 0x8C, // # ## - 0x88, // # # - 0x70, // ### - 0x00, // - 0x00, // - 0x00, // - - // @1162 'p' (6 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xB8, // # ### - 0x88, // # # - 0x8C, // # ## - 0x84, // # # - 0x8C, // # ## - 0x88, // # # - 0xB8, // # ### - 0x80, // # - 0x80, // # - 0x80, // # - - // @1176 'q' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x78, // #### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x78, // #### - 0x08, // # - 0x08, // # - 0x08, // # - - // @1190 'r' (3 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xA0, // # # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - - // @1204 's' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x88, // # # - 0x80, // # - 0x70, // ### - 0x08, // # - 0x88, // # # - 0x70, // ### - 0x00, // - 0x00, // - 0x00, // - - // @1218 't' (4 pixels wide) - 0x00, // - 0x00, // - 0x60, // ## - 0x60, // ## - 0xF0, // #### - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x30, // ## - 0x00, // - 0x00, // - 0x00, // - - // @1232 'u' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x78, // #### - 0x00, // - 0x00, // - 0x00, // - - // @1246 'v' (6 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xC4, // ## # - 0x44, // # # - 0x48, // # # - 0x28, // # # - 0x28, // # # - 0x30, // ## - 0x10, // # - 0x00, // - 0x00, // - 0x00, // - - // @1260 'w' (9 pixels wide) - 0x00, 0x00, // - 0x00, 0x00, // - 0x00, 0x00, // - 0x00, 0x00, // - 0xCC, 0x80, // ## ## # - 0x4C, 0x80, // # ## # - 0x4C, 0x80, // # ## # - 0x57, 0x80, // # # #### - 0x33, 0x00, // ## ## - 0x33, 0x00, // ## ## - 0x23, 0x00, // # ## - 0x00, 0x00, // - 0x00, 0x00, // - 0x00, 0x00, // - - // @1288 'x' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x98, // # ## - 0xD0, // ## # - 0x70, // ### - 0x20, // # - 0x70, // ### - 0xD0, // ## # - 0x98, // # ## - 0x00, // - 0x00, // - 0x00, // - - // @1302 'y' (6 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xC4, // ## # - 0x4C, // # ## - 0x48, // # # - 0x68, // ## # - 0x28, // # # - 0x30, // ## - 0x10, // # - 0x10, // # - 0x20, // # - 0x60, // ## - - // @1316 'z' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x10, // # - 0x30, // ## - 0x60, // ## - 0x40, // # - 0x80, // # - 0xF8, // ##### - 0x00, // - 0x00, // - 0x00, // - - // @1330 '{' (4 pixels wide) - 0x00, // - 0x10, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x60, // ## - 0xC0, // ## - 0x60, // ## - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x10, // # - - // @1344 '|' (1 pixels wide) - 0x00, // - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - - // @1358 '}' (4 pixels wide) - 0x00, // - 0x80, // # - 0x40, // # - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x20, // # - 0x10, // # - 0x20, // # - 0x60, // ## - 0x60, // ## - 0x60, // ## - 0x40, // # - 0x80, // # - - // @1372 '~' (7 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF2, // #### # - 0x8C, // # ## - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // -}; - -// Character descriptors for Roboto 10pt -// { [Char width in bits], [Offset into roboto_10ptCharBitmaps in bytes] } -const font_char_desc_t _fonts_roboto_10pt_descriptors[] = -{ - {1, 0}, // ! - {3, 14}, // " - {8, 28}, // # - {6, 42}, // $ - {8, 56}, // % - {8, 70}, // & - {1, 84}, // ' - {3, 98}, // ( - {3, 112}, // ) - {4, 126}, // * - {7, 140}, // + - {2, 154}, // , - {4, 168}, // - - {1, 182}, // . - {5, 196}, // / - {6, 210}, // 0 - {4, 224}, // 1 - {6, 238}, // 2 - {6, 252}, // 3 - {7, 266}, // 4 - {6, 280}, // 5 - {6, 294}, // 6 - {6, 308}, // 7 - {6, 322}, // 8 - {5, 336}, // 9 - {1, 350}, // : - {2, 364}, // ; - {6, 378}, // < - {5, 392}, // = - {5, 406}, // > - {6, 420}, // ? - {10, 434}, // @ - {8, 462}, // A - {7, 476}, // B - {7, 490}, // C - {7, 504}, // D - {6, 518}, // E - {6, 532}, // F - {7, 546}, // G - {7, 560}, // H - {1, 574}, // I - {6, 588}, // J - {7, 602}, // K - {6, 616}, // L - {9, 630}, // M - {7, 658}, // N - {7, 672}, // O - {7, 686}, // P - {7, 700}, // Q - {6, 714}, // R - {6, 728}, // S - {8, 742}, // T - {7, 756}, // U - {8, 770}, // V - {11, 784}, // W - {7, 812}, // X - {7, 826}, // Y - {6, 840}, // Z - {2, 854}, // [ - {5, 868}, /* \ */ - {3, 882}, // ] - {5, 896}, // ^ - {6, 910}, // _ - {2, 924}, // ` - {5, 938}, // a - {6, 952}, // b - {5, 966}, // c - {5, 980}, // d - {5, 994}, // e - {4, 1008}, // f - {6, 1022}, // g - {6, 1036}, // h - {1, 1050}, // i - {2, 1064}, // j - {5, 1078}, // k - {1, 1092}, // l - {9, 1106}, // m - {5, 1134}, // n - {6, 1148}, // o - {6, 1162}, // p - {5, 1176}, // q - {3, 1190}, // r - {5, 1204}, // s - {4, 1218}, // t - {5, 1232}, // u - {6, 1246}, // v - {9, 1260}, // w - {5, 1288}, // x - {6, 1302}, // y - {5, 1316}, // z - {4, 1330}, // { - {1, 1344}, // | - {4, 1358}, // } - {7, 1372}, // ~ -}; - -// Font information for Roboto 10pt -const font_info_t _fonts_roboto_10pt_info = -{ - .height = 14, // Character height - .char_start = '!', // Start character - .char_end = '~', // End character - .c = 2, // Width, in pixels, of space character - .char_descriptors = _fonts_roboto_10pt_descriptors, // Character descriptor array - .bitmap = _fonts_roboto_10pt_bitmaps, // Character bitmap array -}; - -#endif /* _EXTRAS_FONTS_FONT_ROBOTO_10PT_H_ */ diff --git a/extras/fonts/data/font_roboto_8pt.h b/extras/fonts/data/font_roboto_8pt.h deleted file mode 100644 index 7204f0e..0000000 --- a/extras/fonts/data/font_roboto_8pt.h +++ /dev/null @@ -1,1348 +0,0 @@ -/* - * Font data for Roboto 8pt - * - * FIXME: Add license information - * - * Author: zaltora - */ -#ifndef _EXTRAS_FONTS_FONT_ROBOTO_8PT_H_ -#define _EXTRAS_FONTS_FONT_ROBOTO_8PT_H_ - -// Character bitmaps for Roboto 8pt -const uint8_t _fonts_roboto_8pt_bitmaps[] = -{ - // @0 '!' (1 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - - // @11 '"' (2 pixels wide) - 0x00, // - 0xC0, // ## - 0xC0, // ## - 0x40, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @22 '#' (6 pixels wide) - 0x00, // - 0x04, // # - 0x20, // # - 0x7C, // ##### - 0x28, // # # - 0x28, // # # - 0xFC, // ###### - 0x40, // # - 0x50, // # # - 0x00, // - 0x00, // - - // @33 '$' (5 pixels wide) - 0x20, // # - 0x70, // ### - 0x98, // # ## - 0x80, // # - 0xC0, // ## - 0x30, // ## - 0x08, // # - 0x98, // # ## - 0x70, // ### - 0x20, // # - 0x00, // - - // @44 '%' (7 pixels wide) - 0x00, // - 0xC0, // ## - 0x28, // # # - 0x28, // # # - 0xD0, // ## # - 0x2C, // # ## - 0x32, // ## # - 0x52, // # # # - 0x0C, // ## - 0x00, // - 0x00, // - - // @55 '&' (6 pixels wide) - 0x00, // - 0x30, // ## - 0x48, // # # - 0x58, // # ## - 0x20, // # - 0x54, // # # # - 0x8C, // # ## - 0xCC, // ## ## - 0x7C, // ##### - 0x00, // - 0x00, // - - // @66 ''' (1 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @77 '(' (3 pixels wide) - 0x40, // # - 0x40, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x40, // # - 0x20, // # - - // @88 ')' (3 pixels wide) - 0x80, // # - 0x40, // # - 0x40, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x40, // # - 0x40, // # - 0x80, // # - - // @99 '*' (3 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x40, // # - 0xE0, // ### - 0xC0, // ## - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @110 '+' (6 pixels wide) - 0x00, // - 0x00, // - 0x10, // # - 0x10, // # - 0xFC, // ###### - 0x10, // # - 0x10, // # - 0x10, // # - 0x00, // - 0x00, // - 0x00, // - - // @121 ',' (2 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x40, // # - 0x40, // # - 0x80, // # - 0x00, // - - // @132 '-' (3 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xE0, // ### - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @143 '.' (1 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - - // @154 '/' (4 pixels wide) - 0x00, // - 0x10, // # - 0x10, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x40, // # - 0x40, // # - 0x80, // # - 0x80, // # - 0x00, // - - // @165 '0' (5 pixels wide) - 0x00, // - 0x70, // ### - 0x90, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x90, // # # - 0x70, // ### - 0x00, // - 0x00, // - - // @176 '1' (3 pixels wide) - 0x00, // - 0xE0, // ### - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x00, // - 0x00, // - - // @187 '2' (5 pixels wide) - 0x00, // - 0x70, // ### - 0x90, // # # - 0x10, // # - 0x10, // # - 0x20, // # - 0x40, // # - 0xC0, // ## - 0xF8, // ##### - 0x00, // - 0x00, // - - // @198 '3' (5 pixels wide) - 0x00, // - 0x70, // ### - 0x90, // # # - 0x10, // # - 0x70, // ### - 0x10, // # - 0x08, // # - 0x90, // # # - 0x70, // ### - 0x00, // - 0x00, // - - // @209 '4' (6 pixels wide) - 0x00, // - 0x18, // ## - 0x18, // ## - 0x28, // # # - 0x28, // # # - 0x48, // # # - 0xFC, // ###### - 0x08, // # - 0x08, // # - 0x00, // - 0x00, // - - // @220 '5' (5 pixels wide) - 0x00, // - 0xF0, // #### - 0x80, // # - 0x80, // # - 0xF0, // #### - 0x18, // ## - 0x08, // # - 0x90, // # # - 0x70, // ### - 0x00, // - 0x00, // - - // @231 '6' (5 pixels wide) - 0x00, // - 0x70, // ### - 0x80, // # - 0x80, // # - 0xF0, // #### - 0x98, // # ## - 0x88, // # # - 0x98, // # ## - 0x70, // ### - 0x00, // - 0x00, // - - // @242 '7' (5 pixels wide) - 0x00, // - 0xF8, // ##### - 0x10, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x00, // - 0x00, // - - // @253 '8' (5 pixels wide) - 0x00, // - 0xF0, // #### - 0x90, // # # - 0x90, // # # - 0xF0, // #### - 0x90, // # # - 0x88, // # # - 0x98, // # ## - 0xF0, // #### - 0x00, // - 0x00, // - - // @264 '9' (4 pixels wide) - 0x00, // - 0xE0, // ### - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0xF0, // #### - 0x10, // # - 0x10, // # - 0xE0, // ### - 0x00, // - 0x00, // - - // @275 ':' (1 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x80, // # - 0x00, // - 0x00, // - - // @286 ';' (2 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x40, // # - 0x00, // - 0x00, // - 0x00, // - 0x40, // # - 0x40, // # - 0x80, // # - 0x00, // - - // @297 '<' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x30, // ## - 0xC0, // ## - 0xC0, // ## - 0x30, // ## - 0x00, // - 0x00, // - 0x00, // - - // @308 '=' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF0, // #### - 0x00, // - 0xF0, // #### - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @319 '>' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xC0, // ## - 0x30, // ## - 0x30, // ## - 0xC0, // ## - 0x00, // - 0x00, // - 0x00, // - - // @330 '?' (5 pixels wide) - 0x00, // - 0x70, // ### - 0x88, // # # - 0x08, // # - 0x10, // # - 0x30, // ## - 0x20, // # - 0x00, // - 0x20, // # - 0x00, // - 0x00, // - - // @341 '@' (8 pixels wide) - 0x00, // - 0x3C, // #### - 0x42, // # # - 0x89, // # # # - 0xB4, // # ## # - 0x24, // # # - 0x24, // # # - 0x25, // # # # - 0xBE, // # ##### - 0x40, // # - 0x3C, // #### - - // @352 'A' (7 pixels wide) - 0x00, // - 0x10, // # - 0x10, // # - 0x28, // # # - 0x28, // # # - 0x6C, // ## ## - 0x7C, // ##### - 0x44, // # # - 0x86, // # ## - 0x00, // - 0x00, // - - // @363 'B' (6 pixels wide) - 0x00, // - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0xF0, // #### - 0x88, // # # - 0x84, // # # - 0x88, // # # - 0xF8, // ##### - 0x00, // - 0x00, // - - // @374 'C' (6 pixels wide) - 0x00, // - 0x70, // ### - 0x88, // # # - 0x8C, // # ## - 0x80, // # - 0x80, // # - 0x8C, // # ## - 0x88, // # # - 0x70, // ### - 0x00, // - 0x00, // - - // @385 'D' (6 pixels wide) - 0x00, // - 0xF0, // #### - 0x88, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x88, // # # - 0xF0, // #### - 0x00, // - 0x00, // - - // @396 'E' (5 pixels wide) - 0x00, // - 0xF8, // ##### - 0x80, // # - 0x80, // # - 0xF0, // #### - 0x80, // # - 0x80, // # - 0x80, // # - 0xF8, // ##### - 0x00, // - 0x00, // - - // @407 'F' (5 pixels wide) - 0x00, // - 0xF8, // ##### - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - - // @418 'G' (6 pixels wide) - 0x00, // - 0x78, // #### - 0x88, // # # - 0x80, // # - 0x80, // # - 0x9C, // # ### - 0x8C, // # ## - 0x8C, // # ## - 0x78, // #### - 0x00, // - 0x00, // - - // @429 'H' (6 pixels wide) - 0x00, // - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0xFC, // ###### - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x00, // - 0x00, // - - // @440 'I' (1 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - - // @451 'J' (5 pixels wide) - 0x00, // - 0x08, // # - 0x08, // # - 0x08, // # - 0x08, // # - 0x08, // # - 0x08, // # - 0xC8, // ## # - 0x70, // ### - 0x00, // - 0x00, // - - // @462 'K' (5 pixels wide) - 0x00, // - 0x88, // # # - 0x90, // # # - 0xB0, // # ## - 0xE0, // ### - 0xA0, // # # - 0x90, // # # - 0x98, // # ## - 0x88, // # # - 0x00, // - 0x00, // - - // @473 'L' (5 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0xF8, // ##### - 0x00, // - 0x00, // - - // @484 'M' (8 pixels wide) - 0x00, // - 0x83, // # ## - 0xC3, // ## ## - 0xC5, // ## # # - 0xA5, // # # # # - 0xA5, // # # # # - 0xA9, // # # # # - 0x99, // # ## # - 0x91, // # # # - 0x00, // - 0x00, // - - // @495 'N' (6 pixels wide) - 0x00, // - 0x84, // # # - 0xC4, // ## # - 0xE4, // ### # - 0xA4, // # # # - 0x94, // # # # - 0x94, // # # # - 0x8C, // # ## - 0x8C, // # ## - 0x00, // - 0x00, // - - // @506 'O' (6 pixels wide) - 0x00, // - 0x70, // ### - 0x88, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x88, // # # - 0x70, // ### - 0x00, // - 0x00, // - - // @517 'P' (6 pixels wide) - 0x00, // - 0xF8, // ##### - 0x88, // # # - 0x8C, // # ## - 0x88, // # # - 0xF0, // #### - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - - // @528 'Q' (6 pixels wide) - 0x00, // - 0x70, // ### - 0x88, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x88, // # # - 0x7C, // ##### - 0x04, // # - 0x00, // - - // @539 'R' (5 pixels wide) - 0x00, // - 0xF0, // #### - 0x88, // # # - 0x88, // # # - 0x98, // # ## - 0xF8, // ##### - 0x88, // # # - 0x88, // # # - 0x88, // # # - 0x00, // - 0x00, // - - // @550 'S' (5 pixels wide) - 0x00, // - 0x70, // ### - 0x88, // # # - 0x80, // # - 0xE0, // ### - 0x18, // ## - 0x08, // # - 0x88, // # # - 0x70, // ### - 0x00, // - 0x00, // - - // @561 'T' (6 pixels wide) - 0x00, // - 0xFC, // ###### - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x00, // - 0x00, // - - // @572 'U' (6 pixels wide) - 0x00, // - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x84, // # # - 0x88, // # # - 0x78, // #### - 0x00, // - 0x00, // - - // @583 'V' (7 pixels wide) - 0x00, // - 0x82, // # # - 0x44, // # # - 0x44, // # # - 0x4C, // # ## - 0x28, // # # - 0x28, // # # - 0x20, // # - 0x10, // # - 0x00, // - 0x00, // - - // @594 'W' (9 pixels wide) - 0x00, 0x00, // - 0x88, 0x80, // # # # - 0x4C, 0x80, // # ## # - 0x4C, 0x80, // # ## # - 0x55, 0x00, // # # # # - 0x55, 0x00, // # # # # - 0x73, 0x00, // ### ## - 0x23, 0x00, // # ## - 0x23, 0x00, // # ## - 0x00, 0x00, // - 0x00, 0x00, // - - // @616 'X' (5 pixels wide) - 0x00, // - 0x88, // # # - 0xD8, // ## ## - 0x50, // # # - 0x20, // # - 0x20, // # - 0x50, // # # - 0xD8, // ## ## - 0x88, // # # - 0x00, // - 0x00, // - - // @627 'Y' (6 pixels wide) - 0x00, // - 0xC4, // ## # - 0x44, // # # - 0x28, // # # - 0x28, // # # - 0x10, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x00, // - 0x00, // - - // @638 'Z' (5 pixels wide) - 0x00, // - 0xF8, // ##### - 0x10, // # - 0x10, // # - 0x20, // # - 0x40, // # - 0x40, // # - 0x80, // # - 0xF8, // ##### - 0x00, // - 0x00, // - - // @649 '[' (2 pixels wide) - 0xC0, // ## - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0xC0, // ## - - // @660 '\' (4 pixels wide) - 0x00, // - 0x80, // # - 0x40, // # - 0x40, // # - 0x20, // # - 0x20, // # - 0x20, // # - 0x10, // # - 0x10, // # - 0x10, // # - 0x00, // - - // @671 ']' (2 pixels wide) - 0xC0, // ## - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0xC0, // ## - - // @682 '^' (3 pixels wide) - 0x00, // - 0x40, // # - 0xC0, // ## - 0xA0, // # # - 0xA0, // # # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @693 '_' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xF8, // ##### - 0x00, // - - // @704 '`' (2 pixels wide) - 0x00, // - 0x80, // # - 0x40, // # - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - - // @715 'a' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x90, // # # - 0x30, // ## - 0x90, // # # - 0x90, // # # - 0xF0, // #### - 0x00, // - 0x00, // - - // @726 'b' (5 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0xF0, // #### - 0x90, // # # - 0x88, // # # - 0x88, // # # - 0x98, // # ## - 0xF0, // #### - 0x00, // - 0x00, // - - // @737 'c' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x90, // # # - 0x80, // # - 0x80, // # - 0x90, // # # - 0x70, // ### - 0x00, // - 0x00, // - - // @748 'd' (4 pixels wide) - 0x00, // - 0x10, // # - 0x10, // # - 0xF0, // #### - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0xE0, // ### - 0x00, // - 0x00, // - - // @759 'e' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x90, // # # - 0xF0, // #### - 0x80, // # - 0x80, // # - 0x70, // ### - 0x00, // - 0x00, // - - // @770 'f' (4 pixels wide) - 0x00, // - 0x30, // ## - 0x40, // # - 0xE0, // ### - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x00, // - 0x00, // - - // @781 'g' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0xE8, // ### # - 0x98, // # ## - 0x98, // # ## - 0x98, // # ## - 0x98, // # ## - 0xF8, // ##### - 0x10, // # - 0xF0, // #### - - // @792 'h' (5 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0xF0, // #### - 0x90, // # # - 0x98, // # ## - 0x98, // # ## - 0x98, // # ## - 0x98, // # ## - 0x00, // - 0x00, // - - // @803 'i' (1 pixels wide) - 0x00, // - 0x80, // # - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - - // @814 'j' (2 pixels wide) - 0x00, // - 0x40, // # - 0x00, // - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0xC0, // ## - - // @825 'k' (4 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x90, // # # - 0xA0, // # # - 0xC0, // ## - 0xA0, // # # - 0xA0, // # # - 0x90, // # # - 0x00, // - 0x00, // - - // @836 'l' (1 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - - // @847 'm' (8 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0xF6, // #### ## - 0x99, // # ## # - 0x91, // # # # - 0x91, // # # # - 0x91, // # # # - 0x91, // # # # - 0x00, // - 0x00, // - - // @858 'n' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0xF0, // #### - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x00, // - 0x00, // - - // @869 'o' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x70, // ### - 0x90, // # # - 0x88, // # # - 0x88, // # # - 0x90, // # # - 0x70, // ### - 0x00, // - 0x00, // - - // @880 'p' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0xF0, // #### - 0x90, // # # - 0x88, // # # - 0x88, // # # - 0x98, // # ## - 0xF0, // #### - 0x80, // # - 0x80, // # - - // @891 'q' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0xF0, // #### - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0xF0, // #### - 0x10, // # - 0x10, // # - - // @902 'r' (3 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0xE0, // ### - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - 0x00, // - - // @913 's' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0xE0, // ### - 0x90, // # # - 0xC0, // ## - 0x30, // ## - 0x90, // # # - 0xF0, // #### - 0x00, // - 0x00, // - - // @924 't' (3 pixels wide) - 0x00, // - 0x40, // # - 0x40, // # - 0xE0, // ### - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x60, // ## - 0x00, // - 0x00, // - - // @935 'u' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0x90, // # # - 0xF0, // #### - 0x00, // - 0x00, // - - // @946 'v' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x88, // # # - 0x48, // # # - 0x50, // # # - 0x10, // # - 0x30, // ## - 0x20, // # - 0x00, // - 0x00, // - - // @957 'w' (8 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x89, // # # # - 0x59, // # ## # - 0x5A, // # ## # - 0x56, // # # ## - 0x66, // ## ## - 0x26, // # ## - 0x00, // - 0x00, // - - // @968 'x' (4 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x90, // # # - 0xA0, // # # - 0x60, // ## - 0x60, // ## - 0xA0, // # # - 0x90, // # # - 0x00, // - 0x00, // - - // @979 'y' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x88, // # # - 0x48, // # # - 0x50, // # # - 0x70, // ### - 0x30, // ## - 0x20, // # - 0x20, // # - 0x40, // # - - // @990 'z' (5 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x78, // #### - 0x10, // # - 0x30, // ## - 0x20, // # - 0x40, // # - 0xF8, // ##### - 0x00, // - 0x00, // - - // @1001 '{' (3 pixels wide) - 0x00, // - 0x20, // # - 0x60, // ## - 0x60, // ## - 0x40, // # - 0xC0, // ## - 0x40, // # - 0x60, // ## - 0x60, // ## - 0x20, // # - 0x00, // - - // @1012 '|' (1 pixels wide) - 0x00, // - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x80, // # - 0x00, // - - // @1023 '}' (3 pixels wide) - 0x80, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x20, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x40, // # - 0x80, // # - - // @1034 '~' (6 pixels wide) - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0x00, // - 0xE4, // ### # - 0x18, // ## - 0x00, // - 0x00, // - 0x00, // - 0x00, // -}; - -// Character descriptors for Roboto 8pt -// { [Char width in bits], [Offset into roboto_8ptCharBitmaps in bytes] } -const font_char_desc_t _fonts_roboto_8pt_descriptors[] = -{ - {1, 0}, // ! - {2, 11}, // " - {6, 22}, // # - {5, 33}, // $ - {7, 44}, // % - {6, 55}, // & - {1, 66}, // ' - {3, 77}, // ( - {3, 88}, // ) - {3, 99}, // * - {6, 110}, // + - {2, 121}, // , - {3, 132}, // - - {1, 143}, // . - {4, 154}, // / - {5, 165}, // 0 - {3, 176}, // 1 - {5, 187}, // 2 - {5, 198}, // 3 - {6, 209}, // 4 - {5, 220}, // 5 - {5, 231}, // 6 - {5, 242}, // 7 - {5, 253}, // 8 - {4, 264}, // 9 - {1, 275}, // : - {2, 286}, // ; - {4, 297}, // < - {4, 308}, // = - {4, 319}, // > - {5, 330}, // ? - {8, 341}, // @ - {7, 352}, // A - {6, 363}, // B - {6, 374}, // C - {6, 385}, // D - {5, 396}, // E - {5, 407}, // F - {6, 418}, // G - {6, 429}, // H - {1, 440}, // I - {5, 451}, // J - {5, 462}, // K - {5, 473}, // L - {8, 484}, // M - {6, 495}, // N - {6, 506}, // O - {6, 517}, // P - {6, 528}, // Q - {5, 539}, // R - {5, 550}, // S - {6, 561}, // T - {6, 572}, // U - {7, 583}, // V - {9, 594}, // W - {5, 616}, // X - {6, 627}, // Y - {5, 638}, // Z - {2, 649}, // [ - {4, 660}, /* \ */ - {2, 671}, // ] - {3, 682}, // ^ - {5, 693}, // _ - {2, 704}, // ` - {4, 715}, // a - {5, 726}, // b - {4, 737}, // c - {4, 748}, // d - {4, 759}, // e - {4, 770}, // f - {5, 781}, // g - {5, 792}, // h - {1, 803}, // i - {2, 814}, // j - {4, 825}, // k - {1, 836}, // l - {8, 847}, // m - {4, 858}, // n - {5, 869}, // o - {5, 880}, // p - {4, 891}, // q - {3, 902}, // r - {4, 913}, // s - {3, 924}, // t - {4, 935}, // u - {5, 946}, // v - {8, 957}, // w - {4, 968}, // x - {5, 979}, // y - {5, 990}, // z - {3, 1001}, // { - {1, 1012}, // | - {3, 1023}, // } - {6, 1034}, // ~ -}; - -// Font information for Roboto 8pt -const font_info_t _fonts_roboto_8pt_info = -{ - .height = 11, // Character height - .char_start = '!', // Start character - .char_end = '~', // End character - .c = 2, // Width, in pixels, of space character - .char_descriptors = _fonts_roboto_8pt_descriptors, // Character descriptor array - .bitmap = _fonts_roboto_8pt_bitmaps, // Character bitmap array -}; - -#endif /* _EXTRAS_FONTS_FONT_ROBOTO_8PT_H_ */ diff --git a/extras/fonts/data/font_terminus_10x18_iso8859_1.h b/extras/fonts/data/font_terminus_10x18_iso8859_1.h deleted file mode 100644 index e8b829a..0000000 --- a/extras/fonts/data/font_terminus_10x18_iso8859_1.h +++ /dev/null @@ -1,5389 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 10x18 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 01:50:14 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_10X18_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_10X18_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_10x18_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x7f, 0x00, /* .#######........ */ - 0xff, 0x80, /* #########....... */ - 0x7f, 0x00, /* .#######........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0024 */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - - /* Index: 0x02, char: \x03, offset: 0x0048 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x006c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x70, 0x00, /* .###............ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x08, 0x00, /* ....#........... */ - 0x0e, 0x00, /* ....###......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x0090 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x44, 0x00, /* .#...#.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x08, 0x80, /* ....#...#....... */ - 0x0f, 0x00, /* ....####........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x00b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x08, 0x00, /* ....#........... */ - 0x0e, 0x00, /* ....###......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x00d8 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x00fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x7f, 0x00, /* .#######........ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0120 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x44, 0x00, /* .#...#.......... */ - 0x64, 0x00, /* .##..#.......... */ - 0x54, 0x00, /* .#.#.#.......... */ - 0x4c, 0x00, /* .#..##.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x0144 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0168 */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0xf8, 0x00, /* #####........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x018c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xf8, 0x00, /* #####........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - - /* Index: 0x0c, char: \x0d, offset: 0x01b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - - /* Index: 0x0d, char: \x0e, offset: 0x01d4 */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x01f8 */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0xff, 0xc0, /* ##########...... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - - /* Index: 0x0f, char: \x10, offset: 0x021c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x0264 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0288 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x02ac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x02d0 */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x0f, 0xc0, /* ....######...... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - - /* Index: 0x15, char: \x16, offset: 0x02f4 */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0xf8, 0x00, /* #####........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - - /* Index: 0x16, char: \x17, offset: 0x0318 */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x033c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - - /* Index: 0x18, char: \x19, offset: 0x0360 */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - - /* Index: 0x19, char: \x1a, offset: 0x0384 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x03a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x03cc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x03f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0414 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x21, 0x00, /* ..#....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0438 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x045c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x04a4 */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x04c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x7f, 0x00, /* .#######........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x7f, 0x00, /* .#######........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x04ec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x3e, 0x00, /* ..#####......... */ - 0x49, 0x00, /* .#..#..#........ */ - 0x48, 0x00, /* .#..#........... */ - 0x48, 0x00, /* .#..#........... */ - 0x48, 0x00, /* .#..#........... */ - 0x3e, 0x00, /* ..#####......... */ - 0x09, 0x00, /* ....#..#........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x0510 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x71, 0x00, /* .###...#........ */ - 0x51, 0x00, /* .#.#...#........ */ - 0x72, 0x00, /* .###..#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x13, 0x80, /* ...#..###....... */ - 0x22, 0x80, /* ..#...#.#....... */ - 0x23, 0x80, /* ..#...###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0534 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x43, 0x00, /* .#....##........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x80, /* ..#...#.#....... */ - 0x1c, 0x80, /* ...###..#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0558 */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x057c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x05a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x05c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x7f, 0x00, /* .#######........ */ - 0x08, 0x00, /* ....#........... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x05e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x7f, 0x00, /* .#######........ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x060c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0630 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0654 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0678 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x069c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x43, 0x00, /* .#....##........ */ - 0x45, 0x00, /* .#...#.#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x51, 0x00, /* .#.#...#........ */ - 0x61, 0x00, /* .##....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x06c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x18, 0x00, /* ...##........... */ - 0x28, 0x00, /* ..#.#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x06e4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0708 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x072c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x03, 0x00, /* ......##........ */ - 0x05, 0x00, /* .....#.#........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0750 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0774 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0798 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x07bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x07e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0804 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0828 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x084c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0870 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0894 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x08b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x08dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x47, 0x80, /* .#...####....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x49, 0x80, /* .#..#..##....... */ - 0x46, 0x80, /* .#...##.#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0924 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0948 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x096c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7c, 0x00, /* .#####.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x42, 0x00, /* .#....#......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0990 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x09b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x09d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x4f, 0x00, /* .#..####........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x09fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0a20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0a44 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x0a68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x42, 0x00, /* .#....#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x48, 0x00, /* .#..#........... */ - 0x50, 0x00, /* .#.#............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x50, 0x00, /* .#.#............ */ - 0x48, 0x00, /* .#..#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x0a8c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0ab0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x61, 0x80, /* .##....##....... */ - 0x52, 0x80, /* .#.#..#.#....... */ - 0x52, 0x80, /* .#.#..#.#....... */ - 0x4c, 0x80, /* .#..##..#....... */ - 0x4c, 0x80, /* .#..##..#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0ad4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x61, 0x00, /* .##....#........ */ - 0x51, 0x00, /* .#.#...#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x45, 0x00, /* .#...#.#........ */ - 0x43, 0x00, /* .#....##........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0af8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x0b1c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x0b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x0b64 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x50, 0x00, /* .#.#............ */ - 0x48, 0x00, /* .#..#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x0b88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x0bac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x0bd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x0bf4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x0c18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x4c, 0x80, /* .#..##..#....... */ - 0x4c, 0x80, /* .#..##..#....... */ - 0x52, 0x80, /* .#.#..#.#....... */ - 0x52, 0x80, /* .#.#..#.#....... */ - 0x61, 0x80, /* .##....##....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x0c3c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x0c60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x0c84 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x0ca8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x0ccc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0cf0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x0d14 */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x0d38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x0d5c */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x0d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x0da4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x0dc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x0dec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x0e10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x0e34 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x3e, 0x00, /* ..#####......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x0e58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ - - /* Index: 0x67, char: \x68, offset: 0x0e7c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x0ea0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x0ec4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - - /* Index: 0x6a, char: \x6b, offset: 0x0ee8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x42, 0x00, /* .#....#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x48, 0x00, /* .#..#........... */ - 0x70, 0x00, /* .###............ */ - 0x48, 0x00, /* .#..#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x0f0c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x0f30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x0f54 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x0f78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x0f9c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - - /* Index: 0x70, char: \x71, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - - /* Index: 0x71, char: \x72, offset: 0x0fe4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x4f, 0x00, /* .#..####........ */ - 0x50, 0x00, /* .#.#............ */ - 0x60, 0x00, /* .##............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1008 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x102c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x3e, 0x00, /* ..#####......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1050 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1074 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1098 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x10bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x10e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ - - /* Index: 0x79, char: \x7a, offset: 0x1104 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1128 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x30, 0x00, /* ..##............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x114c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1170 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x06, 0x00, /* .....##......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1194 */ - 0x00, 0x00, /* ................ */ - 0x31, 0x00, /* ..##...#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x46, 0x00, /* .#...##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x11b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x11dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x1224 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x1248 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x126c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x1290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x12b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x12d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x12fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x1320 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x1344 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x1368 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x138c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x13b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x13d4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x13f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x141c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x1440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x1464 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x1488 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x14ac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x14d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x14f4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x1518 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x153c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x1560 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x1584 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x15a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x15cc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x15f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x1614 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x1638 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x165c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x1680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x16a4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x3e, 0x00, /* ..#####......... */ - 0x49, 0x00, /* .#..#..#........ */ - 0x48, 0x00, /* .#..#........... */ - 0x48, 0x00, /* .#..#........... */ - 0x48, 0x00, /* .#..#........... */ - 0x48, 0x00, /* .#..#........... */ - 0x48, 0x00, /* .#..#........... */ - 0x49, 0x00, /* .#..#..#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x16c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x21, 0x00, /* ..#....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x16ec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x1710 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x3e, 0x00, /* ..#####......... */ - 0x08, 0x00, /* ....#........... */ - 0x3e, 0x00, /* ..#####......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x1734 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x1758 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x20, 0x00, /* ..#............. */ - 0x18, 0x00, /* ...##........... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x02, 0x00, /* ......#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x177c */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x17a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x9c, 0x80, /* #..###..#....... */ - 0xa2, 0x80, /* #.#...#.#....... */ - 0xa0, 0x80, /* #.#.....#....... */ - 0xa0, 0x80, /* #.#.....#....... */ - 0xa2, 0x80, /* #.#...#.#....... */ - 0x9c, 0x80, /* #..###..#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x17c4 */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x01, 0x00, /* .......#........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x17e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x80, /* ....#...#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x88, 0x00, /* #...#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x180c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x1830 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x1854 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0xbc, 0x80, /* #.####..#....... */ - 0xa2, 0x80, /* #.#...#.#....... */ - 0xa2, 0x80, /* #.#...#.#....... */ - 0xbc, 0x80, /* #.####..#....... */ - 0xa4, 0x80, /* #.#..#..#....... */ - 0xa2, 0x80, /* #.#...#.#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x1878 */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x189c */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x7f, 0x00, /* .#######........ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x18e4 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x1908 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x02, 0x00, /* ......#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x02, 0x00, /* ......#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x192c */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x1950 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x43, 0x00, /* .#....##........ */ - 0x7d, 0x00, /* .#####.#........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - - /* Index: 0xb5, char: \xb6, offset: 0x1974 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x39, 0x00, /* ..###..#........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x09, 0x00, /* ....#..#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x1998 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x19bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - - /* Index: 0xb8, char: \xb9, offset: 0x19e0 */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x18, 0x00, /* ...##........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x1a04 */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x1a28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x88, 0x00, /* #...#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x88, 0x00, /* #...#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x1a4c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x60, 0x00, /* .##............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x11, 0x00, /* ...#...#........ */ - 0x23, 0x00, /* ..#...##........ */ - 0x45, 0x00, /* .#...#.#........ */ - 0x89, 0x00, /* #...#..#........ */ - 0x0f, 0x00, /* ....####........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x1a70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x60, 0x00, /* .##............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x26, 0x00, /* ..#..##......... */ - 0x49, 0x00, /* .#..#..#........ */ - 0x81, 0x00, /* #......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x1a94 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xe0, 0x00, /* ###............. */ - 0x10, 0x00, /* ...#............ */ - 0x60, 0x80, /* .##.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0xe4, 0x00, /* ###..#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x11, 0x00, /* ...#...#........ */ - 0x23, 0x00, /* ..#...##........ */ - 0x45, 0x00, /* .#...#.#........ */ - 0x89, 0x00, /* #...#..#........ */ - 0x0f, 0x00, /* ....####........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x1ab8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x1adc */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x1b00 */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x1b24 */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x1b48 */ - 0x33, 0x00, /* ..##..##........ */ - 0x4c, 0x00, /* .#..##.......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x1b6c */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x1b90 */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x1bb4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x00, /* #...#........... */ - 0xff, 0x00, /* ########........ */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x00, /* #...#........... */ - 0x8f, 0x80, /* #...#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x1bd8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - - /* Index: 0xc7, char: \xc8, offset: 0x1bfc */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x1c20 */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x1c44 */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x1c68 */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x1c8c */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x1cb0 */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x1cd4 */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x1cf8 */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x1d1c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7c, 0x00, /* .#####.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0xf9, 0x00, /* #####..#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x42, 0x00, /* .#....#......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x1d40 */ - 0x33, 0x00, /* ..##..##........ */ - 0x4c, 0x00, /* .#..##.......... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x61, 0x00, /* .##....#........ */ - 0x51, 0x00, /* .#.#...#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x45, 0x00, /* .#...#.#........ */ - 0x43, 0x00, /* .#....##........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x1d64 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x1d88 */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x1dac */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x1dd0 */ - 0x33, 0x00, /* ..##..##........ */ - 0x4c, 0x00, /* .#..##.......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x1df4 */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x1e18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x1e3c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x80, /* .#.....##....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x43, 0x00, /* .#....##........ */ - 0x45, 0x00, /* .#...#.#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x51, 0x00, /* .#.#...#........ */ - 0x61, 0x00, /* .##....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0xc1, 0x00, /* ##.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x1e60 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x1e84 */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x1ea8 */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x1ecc */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x1ef0 */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x1f14 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x1f38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x00, /* ..####.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x42, 0x00, /* .#....#......... */ - 0x42, 0x00, /* .#....#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x61, 0x00, /* .##....#........ */ - 0x5e, 0x00, /* .#.####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x1f5c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x1fa4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x1fc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x4c, 0x00, /* .#..##.......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x1fec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x2010 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x2034 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x77, 0x00, /* .###.###........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x08, 0x80, /* ....#...#....... */ - 0x78, 0x80, /* .####...#....... */ - 0x8f, 0x80, /* #...#####....... */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x00, /* #...#........... */ - 0x88, 0x80, /* #...#...#....... */ - 0x77, 0x00, /* .###.###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x2058 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - - /* Index: 0xe7, char: \xe8, offset: 0x207c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x20a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x20c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x20e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x210c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x2130 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x2154 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x2178 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x219c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x2c, 0x00, /* ..#.##.......... */ - 0x10, 0x00, /* ...#............ */ - 0x68, 0x00, /* .##.#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x21c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x4c, 0x00, /* .#..##.......... */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x21e4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x2208 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x222c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x2250 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x4c, 0x00, /* .#..##.......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x2274 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x2298 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x22bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x80, /* ..#####.#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x43, 0x00, /* .#....##........ */ - 0x45, 0x00, /* .#...#.#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x51, 0x00, /* .#.#...#........ */ - 0x61, 0x00, /* .##....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0xbe, 0x00, /* #.#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x22e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x2304 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x2328 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x234c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x2370 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ - - /* Index: 0xfd, char: \xfe, offset: 0x2394 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - - /* Index: 0xfe, char: \xff, offset: 0x23b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x22, 0x00, /* ..#...#......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x00, 0x00, /* ................ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ -}; - -const font_char_desc_t _fonts_terminus_10x18_iso8859_1_descriptors[] = { - { 0x0a, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0a, 0x0024 }, /* Index: 0x01, char: \x02 */ - { 0x0a, 0x0048 }, /* Index: 0x02, char: \x03 */ - { 0x0a, 0x006c }, /* Index: 0x03, char: \x04 */ - { 0x0a, 0x0090 }, /* Index: 0x04, char: \x05 */ - { 0x0a, 0x00b4 }, /* Index: 0x05, char: \x06 */ - { 0x0a, 0x00d8 }, /* Index: 0x06, char: \x07 */ - { 0x0a, 0x00fc }, /* Index: 0x07, char: \x08 */ - { 0x0a, 0x0120 }, /* Index: 0x08, char: \x09 */ - { 0x0a, 0x0144 }, /* Index: 0x09, char: \x0a */ - { 0x0a, 0x0168 }, /* Index: 0x0a, char: \x0b */ - { 0x0a, 0x018c }, /* Index: 0x0b, char: \x0c */ - { 0x0a, 0x01b0 }, /* Index: 0x0c, char: \x0d */ - { 0x0a, 0x01d4 }, /* Index: 0x0d, char: \x0e */ - { 0x0a, 0x01f8 }, /* Index: 0x0e, char: \x0f */ - { 0x0a, 0x021c }, /* Index: 0x0f, char: \x10 */ - { 0x0a, 0x0240 }, /* Index: 0x10, char: \x11 */ - { 0x0a, 0x0264 }, /* Index: 0x11, char: \x12 */ - { 0x0a, 0x0288 }, /* Index: 0x12, char: \x13 */ - { 0x0a, 0x02ac }, /* Index: 0x13, char: \x14 */ - { 0x0a, 0x02d0 }, /* Index: 0x14, char: \x15 */ - { 0x0a, 0x02f4 }, /* Index: 0x15, char: \x16 */ - { 0x0a, 0x0318 }, /* Index: 0x16, char: \x17 */ - { 0x0a, 0x033c }, /* Index: 0x17, char: \x18 */ - { 0x0a, 0x0360 }, /* Index: 0x18, char: \x19 */ - { 0x0a, 0x0384 }, /* Index: 0x19, char: \x1a */ - { 0x0a, 0x03a8 }, /* Index: 0x1a, char: \x1b */ - { 0x0a, 0x03cc }, /* Index: 0x1b, char: \x1c */ - { 0x0a, 0x03f0 }, /* Index: 0x1c, char: \x1d */ - { 0x0a, 0x0414 }, /* Index: 0x1d, char: \x1e */ - { 0x0a, 0x0438 }, /* Index: 0x1e, char: \x1f */ - { 0x0a, 0x045c }, /* Index: 0x1f, char: \x20 */ - { 0x0a, 0x0480 }, /* Index: 0x20, char: \x21 */ - { 0x0a, 0x04a4 }, /* Index: 0x21, char: \x22 */ - { 0x0a, 0x04c8 }, /* Index: 0x22, char: \x23 */ - { 0x0a, 0x04ec }, /* Index: 0x23, char: \x24 */ - { 0x0a, 0x0510 }, /* Index: 0x24, char: \x25 */ - { 0x0a, 0x0534 }, /* Index: 0x25, char: \x26 */ - { 0x0a, 0x0558 }, /* Index: 0x26, char: \x27 */ - { 0x0a, 0x057c }, /* Index: 0x27, char: \x28 */ - { 0x0a, 0x05a0 }, /* Index: 0x28, char: \x29 */ - { 0x0a, 0x05c4 }, /* Index: 0x29, char: \x2a */ - { 0x0a, 0x05e8 }, /* Index: 0x2a, char: \x2b */ - { 0x0a, 0x060c }, /* Index: 0x2b, char: \x2c */ - { 0x0a, 0x0630 }, /* Index: 0x2c, char: \x2d */ - { 0x0a, 0x0654 }, /* Index: 0x2d, char: \x2e */ - { 0x0a, 0x0678 }, /* Index: 0x2e, char: \x2f */ - { 0x0a, 0x069c }, /* Index: 0x2f, char: \x30 */ - { 0x0a, 0x06c0 }, /* Index: 0x30, char: \x31 */ - { 0x0a, 0x06e4 }, /* Index: 0x31, char: \x32 */ - { 0x0a, 0x0708 }, /* Index: 0x32, char: \x33 */ - { 0x0a, 0x072c }, /* Index: 0x33, char: \x34 */ - { 0x0a, 0x0750 }, /* Index: 0x34, char: \x35 */ - { 0x0a, 0x0774 }, /* Index: 0x35, char: \x36 */ - { 0x0a, 0x0798 }, /* Index: 0x36, char: \x37 */ - { 0x0a, 0x07bc }, /* Index: 0x37, char: \x38 */ - { 0x0a, 0x07e0 }, /* Index: 0x38, char: \x39 */ - { 0x0a, 0x0804 }, /* Index: 0x39, char: \x3a */ - { 0x0a, 0x0828 }, /* Index: 0x3a, char: \x3b */ - { 0x0a, 0x084c }, /* Index: 0x3b, char: \x3c */ - { 0x0a, 0x0870 }, /* Index: 0x3c, char: \x3d */ - { 0x0a, 0x0894 }, /* Index: 0x3d, char: \x3e */ - { 0x0a, 0x08b8 }, /* Index: 0x3e, char: \x3f */ - { 0x0a, 0x08dc }, /* Index: 0x3f, char: \x40 */ - { 0x0a, 0x0900 }, /* Index: 0x40, char: \x41 */ - { 0x0a, 0x0924 }, /* Index: 0x41, char: \x42 */ - { 0x0a, 0x0948 }, /* Index: 0x42, char: \x43 */ - { 0x0a, 0x096c }, /* Index: 0x43, char: \x44 */ - { 0x0a, 0x0990 }, /* Index: 0x44, char: \x45 */ - { 0x0a, 0x09b4 }, /* Index: 0x45, char: \x46 */ - { 0x0a, 0x09d8 }, /* Index: 0x46, char: \x47 */ - { 0x0a, 0x09fc }, /* Index: 0x47, char: \x48 */ - { 0x0a, 0x0a20 }, /* Index: 0x48, char: \x49 */ - { 0x0a, 0x0a44 }, /* Index: 0x49, char: \x4a */ - { 0x0a, 0x0a68 }, /* Index: 0x4a, char: \x4b */ - { 0x0a, 0x0a8c }, /* Index: 0x4b, char: \x4c */ - { 0x0a, 0x0ab0 }, /* Index: 0x4c, char: \x4d */ - { 0x0a, 0x0ad4 }, /* Index: 0x4d, char: \x4e */ - { 0x0a, 0x0af8 }, /* Index: 0x4e, char: \x4f */ - { 0x0a, 0x0b1c }, /* Index: 0x4f, char: \x50 */ - { 0x0a, 0x0b40 }, /* Index: 0x50, char: \x51 */ - { 0x0a, 0x0b64 }, /* Index: 0x51, char: \x52 */ - { 0x0a, 0x0b88 }, /* Index: 0x52, char: \x53 */ - { 0x0a, 0x0bac }, /* Index: 0x53, char: \x54 */ - { 0x0a, 0x0bd0 }, /* Index: 0x54, char: \x55 */ - { 0x0a, 0x0bf4 }, /* Index: 0x55, char: \x56 */ - { 0x0a, 0x0c18 }, /* Index: 0x56, char: \x57 */ - { 0x0a, 0x0c3c }, /* Index: 0x57, char: \x58 */ - { 0x0a, 0x0c60 }, /* Index: 0x58, char: \x59 */ - { 0x0a, 0x0c84 }, /* Index: 0x59, char: \x5a */ - { 0x0a, 0x0ca8 }, /* Index: 0x5a, char: \x5b */ - { 0x0a, 0x0ccc }, /* Index: 0x5b, char: \x5c */ - { 0x0a, 0x0cf0 }, /* Index: 0x5c, char: \x5d */ - { 0x0a, 0x0d14 }, /* Index: 0x5d, char: \x5e */ - { 0x0a, 0x0d38 }, /* Index: 0x5e, char: \x5f */ - { 0x0a, 0x0d5c }, /* Index: 0x5f, char: \x60 */ - { 0x0a, 0x0d80 }, /* Index: 0x60, char: \x61 */ - { 0x0a, 0x0da4 }, /* Index: 0x61, char: \x62 */ - { 0x0a, 0x0dc8 }, /* Index: 0x62, char: \x63 */ - { 0x0a, 0x0dec }, /* Index: 0x63, char: \x64 */ - { 0x0a, 0x0e10 }, /* Index: 0x64, char: \x65 */ - { 0x0a, 0x0e34 }, /* Index: 0x65, char: \x66 */ - { 0x0a, 0x0e58 }, /* Index: 0x66, char: \x67 */ - { 0x0a, 0x0e7c }, /* Index: 0x67, char: \x68 */ - { 0x0a, 0x0ea0 }, /* Index: 0x68, char: \x69 */ - { 0x0a, 0x0ec4 }, /* Index: 0x69, char: \x6a */ - { 0x0a, 0x0ee8 }, /* Index: 0x6a, char: \x6b */ - { 0x0a, 0x0f0c }, /* Index: 0x6b, char: \x6c */ - { 0x0a, 0x0f30 }, /* Index: 0x6c, char: \x6d */ - { 0x0a, 0x0f54 }, /* Index: 0x6d, char: \x6e */ - { 0x0a, 0x0f78 }, /* Index: 0x6e, char: \x6f */ - { 0x0a, 0x0f9c }, /* Index: 0x6f, char: \x70 */ - { 0x0a, 0x0fc0 }, /* Index: 0x70, char: \x71 */ - { 0x0a, 0x0fe4 }, /* Index: 0x71, char: \x72 */ - { 0x0a, 0x1008 }, /* Index: 0x72, char: \x73 */ - { 0x0a, 0x102c }, /* Index: 0x73, char: \x74 */ - { 0x0a, 0x1050 }, /* Index: 0x74, char: \x75 */ - { 0x0a, 0x1074 }, /* Index: 0x75, char: \x76 */ - { 0x0a, 0x1098 }, /* Index: 0x76, char: \x77 */ - { 0x0a, 0x10bc }, /* Index: 0x77, char: \x78 */ - { 0x0a, 0x10e0 }, /* Index: 0x78, char: \x79 */ - { 0x0a, 0x1104 }, /* Index: 0x79, char: \x7a */ - { 0x0a, 0x1128 }, /* Index: 0x7a, char: \x7b */ - { 0x0a, 0x114c }, /* Index: 0x7b, char: \x7c */ - { 0x0a, 0x1170 }, /* Index: 0x7c, char: \x7d */ - { 0x0a, 0x1194 }, /* Index: 0x7d, char: \x7e */ - { 0x0a, 0x11b8 }, /* Index: 0x7e, char: \x7f */ - { 0x0a, 0x11dc }, /* Index: 0x7f, char: \x80 */ - { 0x0a, 0x1200 }, /* Index: 0x80, char: \x81 */ - { 0x0a, 0x1224 }, /* Index: 0x81, char: \x82 */ - { 0x0a, 0x1248 }, /* Index: 0x82, char: \x83 */ - { 0x0a, 0x126c }, /* Index: 0x83, char: \x84 */ - { 0x0a, 0x1290 }, /* Index: 0x84, char: \x85 */ - { 0x0a, 0x12b4 }, /* Index: 0x85, char: \x86 */ - { 0x0a, 0x12d8 }, /* Index: 0x86, char: \x87 */ - { 0x0a, 0x12fc }, /* Index: 0x87, char: \x88 */ - { 0x0a, 0x1320 }, /* Index: 0x88, char: \x89 */ - { 0x0a, 0x1344 }, /* Index: 0x89, char: \x8a */ - { 0x0a, 0x1368 }, /* Index: 0x8a, char: \x8b */ - { 0x0a, 0x138c }, /* Index: 0x8b, char: \x8c */ - { 0x0a, 0x13b0 }, /* Index: 0x8c, char: \x8d */ - { 0x0a, 0x13d4 }, /* Index: 0x8d, char: \x8e */ - { 0x0a, 0x13f8 }, /* Index: 0x8e, char: \x8f */ - { 0x0a, 0x141c }, /* Index: 0x8f, char: \x90 */ - { 0x0a, 0x1440 }, /* Index: 0x90, char: \x91 */ - { 0x0a, 0x1464 }, /* Index: 0x91, char: \x92 */ - { 0x0a, 0x1488 }, /* Index: 0x92, char: \x93 */ - { 0x0a, 0x14ac }, /* Index: 0x93, char: \x94 */ - { 0x0a, 0x14d0 }, /* Index: 0x94, char: \x95 */ - { 0x0a, 0x14f4 }, /* Index: 0x95, char: \x96 */ - { 0x0a, 0x1518 }, /* Index: 0x96, char: \x97 */ - { 0x0a, 0x153c }, /* Index: 0x97, char: \x98 */ - { 0x0a, 0x1560 }, /* Index: 0x98, char: \x99 */ - { 0x0a, 0x1584 }, /* Index: 0x99, char: \x9a */ - { 0x0a, 0x15a8 }, /* Index: 0x9a, char: \x9b */ - { 0x0a, 0x15cc }, /* Index: 0x9b, char: \x9c */ - { 0x0a, 0x15f0 }, /* Index: 0x9c, char: \x9d */ - { 0x0a, 0x1614 }, /* Index: 0x9d, char: \x9e */ - { 0x0a, 0x1638 }, /* Index: 0x9e, char: \x9f */ - { 0x0a, 0x165c }, /* Index: 0x9f, char: \xa0 */ - { 0x0a, 0x1680 }, /* Index: 0xa0, char: \xa1 */ - { 0x0a, 0x16a4 }, /* Index: 0xa1, char: \xa2 */ - { 0x0a, 0x16c8 }, /* Index: 0xa2, char: \xa3 */ - { 0x0a, 0x16ec }, /* Index: 0xa3, char: \xa4 */ - { 0x0a, 0x1710 }, /* Index: 0xa4, char: \xa5 */ - { 0x0a, 0x1734 }, /* Index: 0xa5, char: \xa6 */ - { 0x0a, 0x1758 }, /* Index: 0xa6, char: \xa7 */ - { 0x0a, 0x177c }, /* Index: 0xa7, char: \xa8 */ - { 0x0a, 0x17a0 }, /* Index: 0xa8, char: \xa9 */ - { 0x0a, 0x17c4 }, /* Index: 0xa9, char: \xaa */ - { 0x0a, 0x17e8 }, /* Index: 0xaa, char: \xab */ - { 0x0a, 0x180c }, /* Index: 0xab, char: \xac */ - { 0x0a, 0x1830 }, /* Index: 0xac, char: \xad */ - { 0x0a, 0x1854 }, /* Index: 0xad, char: \xae */ - { 0x0a, 0x1878 }, /* Index: 0xae, char: \xaf */ - { 0x0a, 0x189c }, /* Index: 0xaf, char: \xb0 */ - { 0x0a, 0x18c0 }, /* Index: 0xb0, char: \xb1 */ - { 0x0a, 0x18e4 }, /* Index: 0xb1, char: \xb2 */ - { 0x0a, 0x1908 }, /* Index: 0xb2, char: \xb3 */ - { 0x0a, 0x192c }, /* Index: 0xb3, char: \xb4 */ - { 0x0a, 0x1950 }, /* Index: 0xb4, char: \xb5 */ - { 0x0a, 0x1974 }, /* Index: 0xb5, char: \xb6 */ - { 0x0a, 0x1998 }, /* Index: 0xb6, char: \xb7 */ - { 0x0a, 0x19bc }, /* Index: 0xb7, char: \xb8 */ - { 0x0a, 0x19e0 }, /* Index: 0xb8, char: \xb9 */ - { 0x0a, 0x1a04 }, /* Index: 0xb9, char: \xba */ - { 0x0a, 0x1a28 }, /* Index: 0xba, char: \xbb */ - { 0x0a, 0x1a4c }, /* Index: 0xbb, char: \xbc */ - { 0x0a, 0x1a70 }, /* Index: 0xbc, char: \xbd */ - { 0x0a, 0x1a94 }, /* Index: 0xbd, char: \xbe */ - { 0x0a, 0x1ab8 }, /* Index: 0xbe, char: \xbf */ - { 0x0a, 0x1adc }, /* Index: 0xbf, char: \xc0 */ - { 0x0a, 0x1b00 }, /* Index: 0xc0, char: \xc1 */ - { 0x0a, 0x1b24 }, /* Index: 0xc1, char: \xc2 */ - { 0x0a, 0x1b48 }, /* Index: 0xc2, char: \xc3 */ - { 0x0a, 0x1b6c }, /* Index: 0xc3, char: \xc4 */ - { 0x0a, 0x1b90 }, /* Index: 0xc4, char: \xc5 */ - { 0x0a, 0x1bb4 }, /* Index: 0xc5, char: \xc6 */ - { 0x0a, 0x1bd8 }, /* Index: 0xc6, char: \xc7 */ - { 0x0a, 0x1bfc }, /* Index: 0xc7, char: \xc8 */ - { 0x0a, 0x1c20 }, /* Index: 0xc8, char: \xc9 */ - { 0x0a, 0x1c44 }, /* Index: 0xc9, char: \xca */ - { 0x0a, 0x1c68 }, /* Index: 0xca, char: \xcb */ - { 0x0a, 0x1c8c }, /* Index: 0xcb, char: \xcc */ - { 0x0a, 0x1cb0 }, /* Index: 0xcc, char: \xcd */ - { 0x0a, 0x1cd4 }, /* Index: 0xcd, char: \xce */ - { 0x0a, 0x1cf8 }, /* Index: 0xce, char: \xcf */ - { 0x0a, 0x1d1c }, /* Index: 0xcf, char: \xd0 */ - { 0x0a, 0x1d40 }, /* Index: 0xd0, char: \xd1 */ - { 0x0a, 0x1d64 }, /* Index: 0xd1, char: \xd2 */ - { 0x0a, 0x1d88 }, /* Index: 0xd2, char: \xd3 */ - { 0x0a, 0x1dac }, /* Index: 0xd3, char: \xd4 */ - { 0x0a, 0x1dd0 }, /* Index: 0xd4, char: \xd5 */ - { 0x0a, 0x1df4 }, /* Index: 0xd5, char: \xd6 */ - { 0x0a, 0x1e18 }, /* Index: 0xd6, char: \xd7 */ - { 0x0a, 0x1e3c }, /* Index: 0xd7, char: \xd8 */ - { 0x0a, 0x1e60 }, /* Index: 0xd8, char: \xd9 */ - { 0x0a, 0x1e84 }, /* Index: 0xd9, char: \xda */ - { 0x0a, 0x1ea8 }, /* Index: 0xda, char: \xdb */ - { 0x0a, 0x1ecc }, /* Index: 0xdb, char: \xdc */ - { 0x0a, 0x1ef0 }, /* Index: 0xdc, char: \xdd */ - { 0x0a, 0x1f14 }, /* Index: 0xdd, char: \xde */ - { 0x0a, 0x1f38 }, /* Index: 0xde, char: \xdf */ - { 0x0a, 0x1f5c }, /* Index: 0xdf, char: \xe0 */ - { 0x0a, 0x1f80 }, /* Index: 0xe0, char: \xe1 */ - { 0x0a, 0x1fa4 }, /* Index: 0xe1, char: \xe2 */ - { 0x0a, 0x1fc8 }, /* Index: 0xe2, char: \xe3 */ - { 0x0a, 0x1fec }, /* Index: 0xe3, char: \xe4 */ - { 0x0a, 0x2010 }, /* Index: 0xe4, char: \xe5 */ - { 0x0a, 0x2034 }, /* Index: 0xe5, char: \xe6 */ - { 0x0a, 0x2058 }, /* Index: 0xe6, char: \xe7 */ - { 0x0a, 0x207c }, /* Index: 0xe7, char: \xe8 */ - { 0x0a, 0x20a0 }, /* Index: 0xe8, char: \xe9 */ - { 0x0a, 0x20c4 }, /* Index: 0xe9, char: \xea */ - { 0x0a, 0x20e8 }, /* Index: 0xea, char: \xeb */ - { 0x0a, 0x210c }, /* Index: 0xeb, char: \xec */ - { 0x0a, 0x2130 }, /* Index: 0xec, char: \xed */ - { 0x0a, 0x2154 }, /* Index: 0xed, char: \xee */ - { 0x0a, 0x2178 }, /* Index: 0xee, char: \xef */ - { 0x0a, 0x219c }, /* Index: 0xef, char: \xf0 */ - { 0x0a, 0x21c0 }, /* Index: 0xf0, char: \xf1 */ - { 0x0a, 0x21e4 }, /* Index: 0xf1, char: \xf2 */ - { 0x0a, 0x2208 }, /* Index: 0xf2, char: \xf3 */ - { 0x0a, 0x222c }, /* Index: 0xf3, char: \xf4 */ - { 0x0a, 0x2250 }, /* Index: 0xf4, char: \xf5 */ - { 0x0a, 0x2274 }, /* Index: 0xf5, char: \xf6 */ - { 0x0a, 0x2298 }, /* Index: 0xf6, char: \xf7 */ - { 0x0a, 0x22bc }, /* Index: 0xf7, char: \xf8 */ - { 0x0a, 0x22e0 }, /* Index: 0xf8, char: \xf9 */ - { 0x0a, 0x2304 }, /* Index: 0xf9, char: \xfa */ - { 0x0a, 0x2328 }, /* Index: 0xfa, char: \xfb */ - { 0x0a, 0x234c }, /* Index: 0xfb, char: \xfc */ - { 0x0a, 0x2370 }, /* Index: 0xfc, char: \xfd */ - { 0x0a, 0x2394 }, /* Index: 0xfd, char: \xfe */ - { 0x0a, 0x23b8 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_10x18_iso8859_1_info = -{ - .height = 18, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_10x18_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_10x18_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_10X18_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_11x22_iso8859_1.h b/extras/fonts/data/font_terminus_11x22_iso8859_1.h deleted file mode 100644 index d0dfd0e..0000000 --- a/extras/fonts/data/font_terminus_11x22_iso8859_1.h +++ /dev/null @@ -1,6409 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 11x22 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 01:52:29 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_11X22_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_11X22_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_11x22_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x3f, 0x80, /* ..#######....... */ - 0x7f, 0xc0, /* .#########...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x0e, 0x00, /* ....###......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x002c */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - - /* Index: 0x02, char: \x03, offset: 0x0058 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x0084 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x70, 0x00, /* .###............ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x0e, 0x00, /* ....###......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x00b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x44, 0x00, /* .#...#.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x08, 0x80, /* ....#...#....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x09, 0x00, /* ....#..#........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x00dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x0e, 0x00, /* ....###......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0108 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x0134 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0160 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x64, 0x00, /* .##..#.......... */ - 0x54, 0x00, /* .#.#.#.......... */ - 0x4c, 0x00, /* .#..##.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x018c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x01b8 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x01e4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0x00, /* ######.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0210 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x0d, char: \x0e, offset: 0x023c */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0268 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0xff, 0xe0, /* ###########..... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x0f, char: \x10, offset: 0x0294 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x02c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x02ec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xe0, /* ###########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0318 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x0344 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0370 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x07, 0xe0, /* .....######..... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x15, char: \x16, offset: 0x039c */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x16, char: \x17, offset: 0x03c8 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0xff, 0xe0, /* ###########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x03f4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xe0, /* ###########..... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x18, char: \x19, offset: 0x0420 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x19, char: \x1a, offset: 0x044c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x0478 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x04a4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x04d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x80, /* ........#....... */ - 0x7f, 0x80, /* .########....... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x04fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0528 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x0554 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x05ac */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x05d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x7f, 0xc0, /* .#########...... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x7f, 0xc0, /* .#########...... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x0604 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x80, /* .....#..#....... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x0630 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x80, /* ..##....#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x49, 0x00, /* .#..#..#........ */ - 0x31, 0x00, /* ..##...#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x11, 0x80, /* ...#...##....... */ - 0x12, 0x40, /* ...#..#..#...... */ - 0x22, 0x40, /* ..#...#..#...... */ - 0x21, 0x80, /* ..#....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x065c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x22, 0x40, /* ..#...#..#...... */ - 0x41, 0x40, /* .#.....#.#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x40, /* ..#....#.#...... */ - 0x1e, 0x40, /* ...####..#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0688 */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x06b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x06e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x070c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0738 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0764 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0790 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x07bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x07e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0814 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x80, /* .#.....##....... */ - 0x42, 0x80, /* .#....#.#....... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x50, 0x80, /* .#.#....#....... */ - 0x60, 0x80, /* .##.....#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x086c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0898 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x08c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x80, /* .......##....... */ - 0x02, 0x80, /* ......#.#....... */ - 0x04, 0x80, /* .....#..#....... */ - 0x08, 0x80, /* ....#...#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x08f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x091c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0948 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0974 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x09a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x09cc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x09f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0a24 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0a50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0a7c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0aa8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0ad4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x43, 0xc0, /* .#....####...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x43, 0xc0, /* .#....####...... */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x00, /* ..#............. */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0b2c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0b58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x0b84 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0bb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x0bdc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x0c08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x47, 0x80, /* .#...####....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x0c34 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0c60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0c8c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x0cb8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x42, 0x00, /* .#....#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x48, 0x00, /* .#..#........... */ - 0x50, 0x00, /* .#.#............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x50, 0x00, /* .#.#............ */ - 0x48, 0x00, /* .#..#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x0ce4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0d10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x4a, 0x40, /* .#..#.#..#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0d3c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x60, 0x80, /* .##.....#....... */ - 0x50, 0x80, /* .#.#....#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x42, 0x80, /* .#....#.#....... */ - 0x41, 0x80, /* .#.....##....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0d68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x0d94 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x0dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x25, 0x00, /* ..#..#.#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x0dec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x50, 0x00, /* .#.#............ */ - 0x48, 0x00, /* .#..#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x0e18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x00, /* ..#............. */ - 0x1e, 0x00, /* ...####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x0e44 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x0e70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x0e9c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x0ec8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x4a, 0x40, /* .#..#.#..#...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x0ef4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x0f20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x0f4c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x0f78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x0fa4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0fd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x0ffc */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1028 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x1054 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x10ac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x10d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x1104 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x1130 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x115c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x7f, 0x00, /* .#######........ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1188 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x11b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x11e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x120c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1238 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1264 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x1290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x44, 0x80, /* .#...#..#....... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x12bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x12e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1314 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x136c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x4f, 0x80, /* .#..#####....... */ - 0x50, 0x00, /* .#.#............ */ - 0x60, 0x00, /* .##............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1398 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x13c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x7f, 0x00, /* .#######........ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x07, 0x80, /* .....####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x13f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x141c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1448 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1474 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x14a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x14cc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x14f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x30, 0x00, /* ..##............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1524 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1550 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x03, 0x00, /* ......##........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x157c */ - 0x00, 0x00, /* ................ */ - 0x30, 0x80, /* ..##....#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x43, 0x00, /* .#....##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x15a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x15d4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x162c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x1658 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x1684 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x16b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x16dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x1708 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x1734 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x1760 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x178c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x17b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x17e4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x1810 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x183c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x1868 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x1894 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x18ec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x1918 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x1944 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x1970 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x199c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x19c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x19f4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x1a20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x1a4c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x1a78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x1aa4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x1ad0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x1afc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x1b28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x1b54 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x1b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x1bac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x1bd8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x1c04 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x1c30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x3f, 0x80, /* ..#######....... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x3f, 0x80, /* ..#######....... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x1c5c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x1c88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0e, 0x00, /* ....###......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x1cb4 */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x1ce0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x4e, 0x40, /* .#..###..#...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x50, 0x40, /* .#.#.....#...... */ - 0x50, 0x40, /* .#.#.....#...... */ - 0x50, 0x40, /* .#.#.....#...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x4e, 0x40, /* .#..###..#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x1d0c */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x1d38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x40, /* .....#...#...... */ - 0x08, 0x80, /* ....#...#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x04, 0x40, /* .....#...#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x1d64 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x1d90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x1dbc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x5e, 0x40, /* .#.####..#...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x5e, 0x40, /* .#.####..#...... */ - 0x54, 0x40, /* .#.#.#...#...... */ - 0x52, 0x40, /* .#.#..#..#...... */ - 0x51, 0x40, /* .#.#...#.#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x1de8 */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x1e14 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x1e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x1e6c */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x1e98 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x01, 0x00, /* .......#........ */ - 0x06, 0x00, /* .....##......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x1ec4 */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x1ef0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x80, /* .#.....##....... */ - 0x42, 0x80, /* .#....#.#....... */ - 0x7c, 0x80, /* .#####..#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb5, char: \xb6, offset: 0x1f1c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x3c, 0x40, /* ..####...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x1f48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x1f74 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb8, char: \xb9, offset: 0x1fa0 */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x1fcc */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x1ff8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x44, 0x00, /* .#...#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x08, 0x80, /* ....#...#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x2024 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x30, 0x00, /* ..##............ */ - 0x50, 0x00, /* .#.#............ */ - 0x10, 0x40, /* ...#.....#...... */ - 0x10, 0x80, /* ...#....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x80, /* ....#...#....... */ - 0x11, 0x80, /* ...#...##....... */ - 0x22, 0x80, /* ..#...#.#....... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x08, 0x80, /* ....#...#....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2050 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x30, 0x00, /* ..##............ */ - 0x50, 0x00, /* .#.#............ */ - 0x10, 0x40, /* ...#.....#...... */ - 0x10, 0x80, /* ...#....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x13, 0x80, /* ...#..###....... */ - 0x24, 0x40, /* ..#..#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x207c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x18, 0x00, /* ...##........... */ - 0x04, 0x40, /* .....#...#...... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x39, 0x00, /* ..###..#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x80, /* .....#..#....... */ - 0x09, 0x80, /* ....#..##....... */ - 0x12, 0x80, /* ...#..#.#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x20a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x20d4 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x2100 */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x212c */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x2158 */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x2184 */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x21b0 */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x21dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x44, 0x00, /* .#...#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0xff, 0xc0, /* ##########...... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x87, 0xc0, /* #....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x2208 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x2234 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x2260 */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x228c */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x22b8 */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x22e4 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x2310 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x233c */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x2368 */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x2394 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0xf8, 0x80, /* #####...#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x23c0 */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x60, 0x80, /* .##.....#....... */ - 0x50, 0x80, /* .#.#....#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x42, 0x80, /* .#....#.#....... */ - 0x41, 0x80, /* .#.....##....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x23ec */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x2418 */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x2444 */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x2470 */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x249c */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x24c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x24f4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0xc0, /* .#......##...... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x80, /* .#.....##....... */ - 0x42, 0x80, /* .#....#.#....... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x50, 0x80, /* .#.#....#....... */ - 0x60, 0x80, /* .##.....#....... */ - 0x40, 0x80, /* .#......#....... */ - 0xc0, 0x80, /* ##......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x2520 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x254c */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x2578 */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x25a4 */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x25d0 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x25fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x2628 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x00, /* ..####.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x41, 0x00, /* .#.....#........ */ - 0x42, 0x00, /* .#....#......... */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x61, 0x00, /* .##....#........ */ - 0x5e, 0x00, /* .#.####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x2654 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x2680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x26ac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x26d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x2704 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x2730 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x275c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7b, 0xc0, /* .####.####...... */ - 0x04, 0x20, /* .....#....#..... */ - 0x04, 0x20, /* .....#....#..... */ - 0x04, 0x20, /* .....#....#..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x20, /* #....#....#..... */ - 0x7b, 0xc0, /* .####.####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x2788 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x27b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x27e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x280c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x2838 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x80, /* .########....... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x2864 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x2890 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x28bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x28e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x2914 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x2c, 0x00, /* ..#.##.......... */ - 0x10, 0x00, /* ...#............ */ - 0x68, 0x00, /* .##.#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x2940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x00, /* ..##...#........ */ - 0x49, 0x00, /* .#..#..#........ */ - 0x46, 0x00, /* .#...##......... */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x296c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x2998 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x29c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x29f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x2a1c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x2a48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x2a74 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x40, /* ...####..#...... */ - 0x21, 0x80, /* ..#....##....... */ - 0x41, 0x80, /* .#.....##....... */ - 0x42, 0x80, /* .#....#.#....... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x50, 0x80, /* .#.#....#....... */ - 0x60, 0x80, /* .##.....#....... */ - 0x61, 0x00, /* .##....#........ */ - 0x9e, 0x00, /* #..####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x2aa0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x2acc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x2af8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x12, 0x00, /* ...#..#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x2b24 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x2b50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x2b7c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7e, 0x00, /* .######......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7e, 0x00, /* .######......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x2ba8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_11x22_iso8859_1_descriptors[] = { - { 0x0b, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0b, 0x002c }, /* Index: 0x01, char: \x02 */ - { 0x0b, 0x0058 }, /* Index: 0x02, char: \x03 */ - { 0x0b, 0x0084 }, /* Index: 0x03, char: \x04 */ - { 0x0b, 0x00b0 }, /* Index: 0x04, char: \x05 */ - { 0x0b, 0x00dc }, /* Index: 0x05, char: \x06 */ - { 0x0b, 0x0108 }, /* Index: 0x06, char: \x07 */ - { 0x0b, 0x0134 }, /* Index: 0x07, char: \x08 */ - { 0x0b, 0x0160 }, /* Index: 0x08, char: \x09 */ - { 0x0b, 0x018c }, /* Index: 0x09, char: \x0a */ - { 0x0b, 0x01b8 }, /* Index: 0x0a, char: \x0b */ - { 0x0b, 0x01e4 }, /* Index: 0x0b, char: \x0c */ - { 0x0b, 0x0210 }, /* Index: 0x0c, char: \x0d */ - { 0x0b, 0x023c }, /* Index: 0x0d, char: \x0e */ - { 0x0b, 0x0268 }, /* Index: 0x0e, char: \x0f */ - { 0x0b, 0x0294 }, /* Index: 0x0f, char: \x10 */ - { 0x0b, 0x02c0 }, /* Index: 0x10, char: \x11 */ - { 0x0b, 0x02ec }, /* Index: 0x11, char: \x12 */ - { 0x0b, 0x0318 }, /* Index: 0x12, char: \x13 */ - { 0x0b, 0x0344 }, /* Index: 0x13, char: \x14 */ - { 0x0b, 0x0370 }, /* Index: 0x14, char: \x15 */ - { 0x0b, 0x039c }, /* Index: 0x15, char: \x16 */ - { 0x0b, 0x03c8 }, /* Index: 0x16, char: \x17 */ - { 0x0b, 0x03f4 }, /* Index: 0x17, char: \x18 */ - { 0x0b, 0x0420 }, /* Index: 0x18, char: \x19 */ - { 0x0b, 0x044c }, /* Index: 0x19, char: \x1a */ - { 0x0b, 0x0478 }, /* Index: 0x1a, char: \x1b */ - { 0x0b, 0x04a4 }, /* Index: 0x1b, char: \x1c */ - { 0x0b, 0x04d0 }, /* Index: 0x1c, char: \x1d */ - { 0x0b, 0x04fc }, /* Index: 0x1d, char: \x1e */ - { 0x0b, 0x0528 }, /* Index: 0x1e, char: \x1f */ - { 0x0b, 0x0554 }, /* Index: 0x1f, char: \x20 */ - { 0x0b, 0x0580 }, /* Index: 0x20, char: \x21 */ - { 0x0b, 0x05ac }, /* Index: 0x21, char: \x22 */ - { 0x0b, 0x05d8 }, /* Index: 0x22, char: \x23 */ - { 0x0b, 0x0604 }, /* Index: 0x23, char: \x24 */ - { 0x0b, 0x0630 }, /* Index: 0x24, char: \x25 */ - { 0x0b, 0x065c }, /* Index: 0x25, char: \x26 */ - { 0x0b, 0x0688 }, /* Index: 0x26, char: \x27 */ - { 0x0b, 0x06b4 }, /* Index: 0x27, char: \x28 */ - { 0x0b, 0x06e0 }, /* Index: 0x28, char: \x29 */ - { 0x0b, 0x070c }, /* Index: 0x29, char: \x2a */ - { 0x0b, 0x0738 }, /* Index: 0x2a, char: \x2b */ - { 0x0b, 0x0764 }, /* Index: 0x2b, char: \x2c */ - { 0x0b, 0x0790 }, /* Index: 0x2c, char: \x2d */ - { 0x0b, 0x07bc }, /* Index: 0x2d, char: \x2e */ - { 0x0b, 0x07e8 }, /* Index: 0x2e, char: \x2f */ - { 0x0b, 0x0814 }, /* Index: 0x2f, char: \x30 */ - { 0x0b, 0x0840 }, /* Index: 0x30, char: \x31 */ - { 0x0b, 0x086c }, /* Index: 0x31, char: \x32 */ - { 0x0b, 0x0898 }, /* Index: 0x32, char: \x33 */ - { 0x0b, 0x08c4 }, /* Index: 0x33, char: \x34 */ - { 0x0b, 0x08f0 }, /* Index: 0x34, char: \x35 */ - { 0x0b, 0x091c }, /* Index: 0x35, char: \x36 */ - { 0x0b, 0x0948 }, /* Index: 0x36, char: \x37 */ - { 0x0b, 0x0974 }, /* Index: 0x37, char: \x38 */ - { 0x0b, 0x09a0 }, /* Index: 0x38, char: \x39 */ - { 0x0b, 0x09cc }, /* Index: 0x39, char: \x3a */ - { 0x0b, 0x09f8 }, /* Index: 0x3a, char: \x3b */ - { 0x0b, 0x0a24 }, /* Index: 0x3b, char: \x3c */ - { 0x0b, 0x0a50 }, /* Index: 0x3c, char: \x3d */ - { 0x0b, 0x0a7c }, /* Index: 0x3d, char: \x3e */ - { 0x0b, 0x0aa8 }, /* Index: 0x3e, char: \x3f */ - { 0x0b, 0x0ad4 }, /* Index: 0x3f, char: \x40 */ - { 0x0b, 0x0b00 }, /* Index: 0x40, char: \x41 */ - { 0x0b, 0x0b2c }, /* Index: 0x41, char: \x42 */ - { 0x0b, 0x0b58 }, /* Index: 0x42, char: \x43 */ - { 0x0b, 0x0b84 }, /* Index: 0x43, char: \x44 */ - { 0x0b, 0x0bb0 }, /* Index: 0x44, char: \x45 */ - { 0x0b, 0x0bdc }, /* Index: 0x45, char: \x46 */ - { 0x0b, 0x0c08 }, /* Index: 0x46, char: \x47 */ - { 0x0b, 0x0c34 }, /* Index: 0x47, char: \x48 */ - { 0x0b, 0x0c60 }, /* Index: 0x48, char: \x49 */ - { 0x0b, 0x0c8c }, /* Index: 0x49, char: \x4a */ - { 0x0b, 0x0cb8 }, /* Index: 0x4a, char: \x4b */ - { 0x0b, 0x0ce4 }, /* Index: 0x4b, char: \x4c */ - { 0x0b, 0x0d10 }, /* Index: 0x4c, char: \x4d */ - { 0x0b, 0x0d3c }, /* Index: 0x4d, char: \x4e */ - { 0x0b, 0x0d68 }, /* Index: 0x4e, char: \x4f */ - { 0x0b, 0x0d94 }, /* Index: 0x4f, char: \x50 */ - { 0x0b, 0x0dc0 }, /* Index: 0x50, char: \x51 */ - { 0x0b, 0x0dec }, /* Index: 0x51, char: \x52 */ - { 0x0b, 0x0e18 }, /* Index: 0x52, char: \x53 */ - { 0x0b, 0x0e44 }, /* Index: 0x53, char: \x54 */ - { 0x0b, 0x0e70 }, /* Index: 0x54, char: \x55 */ - { 0x0b, 0x0e9c }, /* Index: 0x55, char: \x56 */ - { 0x0b, 0x0ec8 }, /* Index: 0x56, char: \x57 */ - { 0x0b, 0x0ef4 }, /* Index: 0x57, char: \x58 */ - { 0x0b, 0x0f20 }, /* Index: 0x58, char: \x59 */ - { 0x0b, 0x0f4c }, /* Index: 0x59, char: \x5a */ - { 0x0b, 0x0f78 }, /* Index: 0x5a, char: \x5b */ - { 0x0b, 0x0fa4 }, /* Index: 0x5b, char: \x5c */ - { 0x0b, 0x0fd0 }, /* Index: 0x5c, char: \x5d */ - { 0x0b, 0x0ffc }, /* Index: 0x5d, char: \x5e */ - { 0x0b, 0x1028 }, /* Index: 0x5e, char: \x5f */ - { 0x0b, 0x1054 }, /* Index: 0x5f, char: \x60 */ - { 0x0b, 0x1080 }, /* Index: 0x60, char: \x61 */ - { 0x0b, 0x10ac }, /* Index: 0x61, char: \x62 */ - { 0x0b, 0x10d8 }, /* Index: 0x62, char: \x63 */ - { 0x0b, 0x1104 }, /* Index: 0x63, char: \x64 */ - { 0x0b, 0x1130 }, /* Index: 0x64, char: \x65 */ - { 0x0b, 0x115c }, /* Index: 0x65, char: \x66 */ - { 0x0b, 0x1188 }, /* Index: 0x66, char: \x67 */ - { 0x0b, 0x11b4 }, /* Index: 0x67, char: \x68 */ - { 0x0b, 0x11e0 }, /* Index: 0x68, char: \x69 */ - { 0x0b, 0x120c }, /* Index: 0x69, char: \x6a */ - { 0x0b, 0x1238 }, /* Index: 0x6a, char: \x6b */ - { 0x0b, 0x1264 }, /* Index: 0x6b, char: \x6c */ - { 0x0b, 0x1290 }, /* Index: 0x6c, char: \x6d */ - { 0x0b, 0x12bc }, /* Index: 0x6d, char: \x6e */ - { 0x0b, 0x12e8 }, /* Index: 0x6e, char: \x6f */ - { 0x0b, 0x1314 }, /* Index: 0x6f, char: \x70 */ - { 0x0b, 0x1340 }, /* Index: 0x70, char: \x71 */ - { 0x0b, 0x136c }, /* Index: 0x71, char: \x72 */ - { 0x0b, 0x1398 }, /* Index: 0x72, char: \x73 */ - { 0x0b, 0x13c4 }, /* Index: 0x73, char: \x74 */ - { 0x0b, 0x13f0 }, /* Index: 0x74, char: \x75 */ - { 0x0b, 0x141c }, /* Index: 0x75, char: \x76 */ - { 0x0b, 0x1448 }, /* Index: 0x76, char: \x77 */ - { 0x0b, 0x1474 }, /* Index: 0x77, char: \x78 */ - { 0x0b, 0x14a0 }, /* Index: 0x78, char: \x79 */ - { 0x0b, 0x14cc }, /* Index: 0x79, char: \x7a */ - { 0x0b, 0x14f8 }, /* Index: 0x7a, char: \x7b */ - { 0x0b, 0x1524 }, /* Index: 0x7b, char: \x7c */ - { 0x0b, 0x1550 }, /* Index: 0x7c, char: \x7d */ - { 0x0b, 0x157c }, /* Index: 0x7d, char: \x7e */ - { 0x0b, 0x15a8 }, /* Index: 0x7e, char: \x7f */ - { 0x0b, 0x15d4 }, /* Index: 0x7f, char: \x80 */ - { 0x0b, 0x1600 }, /* Index: 0x80, char: \x81 */ - { 0x0b, 0x162c }, /* Index: 0x81, char: \x82 */ - { 0x0b, 0x1658 }, /* Index: 0x82, char: \x83 */ - { 0x0b, 0x1684 }, /* Index: 0x83, char: \x84 */ - { 0x0b, 0x16b0 }, /* Index: 0x84, char: \x85 */ - { 0x0b, 0x16dc }, /* Index: 0x85, char: \x86 */ - { 0x0b, 0x1708 }, /* Index: 0x86, char: \x87 */ - { 0x0b, 0x1734 }, /* Index: 0x87, char: \x88 */ - { 0x0b, 0x1760 }, /* Index: 0x88, char: \x89 */ - { 0x0b, 0x178c }, /* Index: 0x89, char: \x8a */ - { 0x0b, 0x17b8 }, /* Index: 0x8a, char: \x8b */ - { 0x0b, 0x17e4 }, /* Index: 0x8b, char: \x8c */ - { 0x0b, 0x1810 }, /* Index: 0x8c, char: \x8d */ - { 0x0b, 0x183c }, /* Index: 0x8d, char: \x8e */ - { 0x0b, 0x1868 }, /* Index: 0x8e, char: \x8f */ - { 0x0b, 0x1894 }, /* Index: 0x8f, char: \x90 */ - { 0x0b, 0x18c0 }, /* Index: 0x90, char: \x91 */ - { 0x0b, 0x18ec }, /* Index: 0x91, char: \x92 */ - { 0x0b, 0x1918 }, /* Index: 0x92, char: \x93 */ - { 0x0b, 0x1944 }, /* Index: 0x93, char: \x94 */ - { 0x0b, 0x1970 }, /* Index: 0x94, char: \x95 */ - { 0x0b, 0x199c }, /* Index: 0x95, char: \x96 */ - { 0x0b, 0x19c8 }, /* Index: 0x96, char: \x97 */ - { 0x0b, 0x19f4 }, /* Index: 0x97, char: \x98 */ - { 0x0b, 0x1a20 }, /* Index: 0x98, char: \x99 */ - { 0x0b, 0x1a4c }, /* Index: 0x99, char: \x9a */ - { 0x0b, 0x1a78 }, /* Index: 0x9a, char: \x9b */ - { 0x0b, 0x1aa4 }, /* Index: 0x9b, char: \x9c */ - { 0x0b, 0x1ad0 }, /* Index: 0x9c, char: \x9d */ - { 0x0b, 0x1afc }, /* Index: 0x9d, char: \x9e */ - { 0x0b, 0x1b28 }, /* Index: 0x9e, char: \x9f */ - { 0x0b, 0x1b54 }, /* Index: 0x9f, char: \xa0 */ - { 0x0b, 0x1b80 }, /* Index: 0xa0, char: \xa1 */ - { 0x0b, 0x1bac }, /* Index: 0xa1, char: \xa2 */ - { 0x0b, 0x1bd8 }, /* Index: 0xa2, char: \xa3 */ - { 0x0b, 0x1c04 }, /* Index: 0xa3, char: \xa4 */ - { 0x0b, 0x1c30 }, /* Index: 0xa4, char: \xa5 */ - { 0x0b, 0x1c5c }, /* Index: 0xa5, char: \xa6 */ - { 0x0b, 0x1c88 }, /* Index: 0xa6, char: \xa7 */ - { 0x0b, 0x1cb4 }, /* Index: 0xa7, char: \xa8 */ - { 0x0b, 0x1ce0 }, /* Index: 0xa8, char: \xa9 */ - { 0x0b, 0x1d0c }, /* Index: 0xa9, char: \xaa */ - { 0x0b, 0x1d38 }, /* Index: 0xaa, char: \xab */ - { 0x0b, 0x1d64 }, /* Index: 0xab, char: \xac */ - { 0x0b, 0x1d90 }, /* Index: 0xac, char: \xad */ - { 0x0b, 0x1dbc }, /* Index: 0xad, char: \xae */ - { 0x0b, 0x1de8 }, /* Index: 0xae, char: \xaf */ - { 0x0b, 0x1e14 }, /* Index: 0xaf, char: \xb0 */ - { 0x0b, 0x1e40 }, /* Index: 0xb0, char: \xb1 */ - { 0x0b, 0x1e6c }, /* Index: 0xb1, char: \xb2 */ - { 0x0b, 0x1e98 }, /* Index: 0xb2, char: \xb3 */ - { 0x0b, 0x1ec4 }, /* Index: 0xb3, char: \xb4 */ - { 0x0b, 0x1ef0 }, /* Index: 0xb4, char: \xb5 */ - { 0x0b, 0x1f1c }, /* Index: 0xb5, char: \xb6 */ - { 0x0b, 0x1f48 }, /* Index: 0xb6, char: \xb7 */ - { 0x0b, 0x1f74 }, /* Index: 0xb7, char: \xb8 */ - { 0x0b, 0x1fa0 }, /* Index: 0xb8, char: \xb9 */ - { 0x0b, 0x1fcc }, /* Index: 0xb9, char: \xba */ - { 0x0b, 0x1ff8 }, /* Index: 0xba, char: \xbb */ - { 0x0b, 0x2024 }, /* Index: 0xbb, char: \xbc */ - { 0x0b, 0x2050 }, /* Index: 0xbc, char: \xbd */ - { 0x0b, 0x207c }, /* Index: 0xbd, char: \xbe */ - { 0x0b, 0x20a8 }, /* Index: 0xbe, char: \xbf */ - { 0x0b, 0x20d4 }, /* Index: 0xbf, char: \xc0 */ - { 0x0b, 0x2100 }, /* Index: 0xc0, char: \xc1 */ - { 0x0b, 0x212c }, /* Index: 0xc1, char: \xc2 */ - { 0x0b, 0x2158 }, /* Index: 0xc2, char: \xc3 */ - { 0x0b, 0x2184 }, /* Index: 0xc3, char: \xc4 */ - { 0x0b, 0x21b0 }, /* Index: 0xc4, char: \xc5 */ - { 0x0b, 0x21dc }, /* Index: 0xc5, char: \xc6 */ - { 0x0b, 0x2208 }, /* Index: 0xc6, char: \xc7 */ - { 0x0b, 0x2234 }, /* Index: 0xc7, char: \xc8 */ - { 0x0b, 0x2260 }, /* Index: 0xc8, char: \xc9 */ - { 0x0b, 0x228c }, /* Index: 0xc9, char: \xca */ - { 0x0b, 0x22b8 }, /* Index: 0xca, char: \xcb */ - { 0x0b, 0x22e4 }, /* Index: 0xcb, char: \xcc */ - { 0x0b, 0x2310 }, /* Index: 0xcc, char: \xcd */ - { 0x0b, 0x233c }, /* Index: 0xcd, char: \xce */ - { 0x0b, 0x2368 }, /* Index: 0xce, char: \xcf */ - { 0x0b, 0x2394 }, /* Index: 0xcf, char: \xd0 */ - { 0x0b, 0x23c0 }, /* Index: 0xd0, char: \xd1 */ - { 0x0b, 0x23ec }, /* Index: 0xd1, char: \xd2 */ - { 0x0b, 0x2418 }, /* Index: 0xd2, char: \xd3 */ - { 0x0b, 0x2444 }, /* Index: 0xd3, char: \xd4 */ - { 0x0b, 0x2470 }, /* Index: 0xd4, char: \xd5 */ - { 0x0b, 0x249c }, /* Index: 0xd5, char: \xd6 */ - { 0x0b, 0x24c8 }, /* Index: 0xd6, char: \xd7 */ - { 0x0b, 0x24f4 }, /* Index: 0xd7, char: \xd8 */ - { 0x0b, 0x2520 }, /* Index: 0xd8, char: \xd9 */ - { 0x0b, 0x254c }, /* Index: 0xd9, char: \xda */ - { 0x0b, 0x2578 }, /* Index: 0xda, char: \xdb */ - { 0x0b, 0x25a4 }, /* Index: 0xdb, char: \xdc */ - { 0x0b, 0x25d0 }, /* Index: 0xdc, char: \xdd */ - { 0x0b, 0x25fc }, /* Index: 0xdd, char: \xde */ - { 0x0b, 0x2628 }, /* Index: 0xde, char: \xdf */ - { 0x0b, 0x2654 }, /* Index: 0xdf, char: \xe0 */ - { 0x0b, 0x2680 }, /* Index: 0xe0, char: \xe1 */ - { 0x0b, 0x26ac }, /* Index: 0xe1, char: \xe2 */ - { 0x0b, 0x26d8 }, /* Index: 0xe2, char: \xe3 */ - { 0x0b, 0x2704 }, /* Index: 0xe3, char: \xe4 */ - { 0x0b, 0x2730 }, /* Index: 0xe4, char: \xe5 */ - { 0x0b, 0x275c }, /* Index: 0xe5, char: \xe6 */ - { 0x0b, 0x2788 }, /* Index: 0xe6, char: \xe7 */ - { 0x0b, 0x27b4 }, /* Index: 0xe7, char: \xe8 */ - { 0x0b, 0x27e0 }, /* Index: 0xe8, char: \xe9 */ - { 0x0b, 0x280c }, /* Index: 0xe9, char: \xea */ - { 0x0b, 0x2838 }, /* Index: 0xea, char: \xeb */ - { 0x0b, 0x2864 }, /* Index: 0xeb, char: \xec */ - { 0x0b, 0x2890 }, /* Index: 0xec, char: \xed */ - { 0x0b, 0x28bc }, /* Index: 0xed, char: \xee */ - { 0x0b, 0x28e8 }, /* Index: 0xee, char: \xef */ - { 0x0b, 0x2914 }, /* Index: 0xef, char: \xf0 */ - { 0x0b, 0x2940 }, /* Index: 0xf0, char: \xf1 */ - { 0x0b, 0x296c }, /* Index: 0xf1, char: \xf2 */ - { 0x0b, 0x2998 }, /* Index: 0xf2, char: \xf3 */ - { 0x0b, 0x29c4 }, /* Index: 0xf3, char: \xf4 */ - { 0x0b, 0x29f0 }, /* Index: 0xf4, char: \xf5 */ - { 0x0b, 0x2a1c }, /* Index: 0xf5, char: \xf6 */ - { 0x0b, 0x2a48 }, /* Index: 0xf6, char: \xf7 */ - { 0x0b, 0x2a74 }, /* Index: 0xf7, char: \xf8 */ - { 0x0b, 0x2aa0 }, /* Index: 0xf8, char: \xf9 */ - { 0x0b, 0x2acc }, /* Index: 0xf9, char: \xfa */ - { 0x0b, 0x2af8 }, /* Index: 0xfa, char: \xfb */ - { 0x0b, 0x2b24 }, /* Index: 0xfb, char: \xfc */ - { 0x0b, 0x2b50 }, /* Index: 0xfc, char: \xfd */ - { 0x0b, 0x2b7c }, /* Index: 0xfd, char: \xfe */ - { 0x0b, 0x2ba8 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_11x22_iso8859_1_info = -{ - .height = 22, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_11x22_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_11x22_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_11X22_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_12x24_iso8859_1.h b/extras/fonts/data/font_terminus_12x24_iso8859_1.h deleted file mode 100644 index b74c34f..0000000 --- a/extras/fonts/data/font_terminus_12x24_iso8859_1.h +++ /dev/null @@ -1,6919 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 12x24 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 02:32:24 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_12X24_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_12X24_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_12x24_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x3f, 0x80, /* ..#######....... */ - 0x7f, 0xc0, /* .#########...... */ - 0xff, 0xe0, /* ###########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x0e, 0x00, /* ....###......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0030 */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - - /* Index: 0x02, char: \x03, offset: 0x0060 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x0090 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7c, 0x00, /* .#####.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x70, 0x00, /* .###............ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x07, 0x00, /* .....###........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x00c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x44, 0x00, /* .#...#.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x07, 0x80, /* .....####....... */ - 0x05, 0x00, /* .....#.#........ */ - 0x04, 0x80, /* .....#..#....... */ - 0x04, 0x40, /* .....#...#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x00f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x07, 0x00, /* .....###........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0120 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x0150 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x64, 0x00, /* .##..#.......... */ - 0x54, 0x00, /* .#.#.#.......... */ - 0x4c, 0x00, /* .#..##.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x01b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x01e0 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x0210 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0x00, /* ######.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf0, /* .....#######.... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x0d, char: \x0e, offset: 0x0270 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x07, 0xf0, /* .....#######.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x02a0 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0xff, 0xf0, /* ############.... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x0f, char: \x10, offset: 0x02d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x0330 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xf0, /* ############.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0360 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x0390 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x03c0 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x07, 0xf0, /* .....#######.... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x15, char: \x16, offset: 0x03f0 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x16, char: \x17, offset: 0x0420 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0xff, 0xf0, /* ############.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x0450 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xf0, /* ############.... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x18, char: \x19, offset: 0x0480 */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - - /* Index: 0x19, char: \x1a, offset: 0x04b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x04e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x0510 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x40, /* .........#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0570 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x7e, 0x00, /* .######......... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x05a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x05d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0630 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0660 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x7f, 0xc0, /* .#########...... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x7f, 0xc0, /* .#########...... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x0690 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x80, /* .....#..#....... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x06c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x80, /* ..##....#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x49, 0x00, /* .#..#..#........ */ - 0x31, 0x00, /* ..##...#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x11, 0x80, /* ...#...##....... */ - 0x12, 0x40, /* ...#..#..#...... */ - 0x22, 0x40, /* ..#...#..#...... */ - 0x21, 0x80, /* ..#....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x06f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x21, 0x00, /* ..#....#........ */ - 0x12, 0x00, /* ...#..#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x22, 0x40, /* ..#...#..#...... */ - 0x41, 0x40, /* .#.....#.#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x40, /* ..#....#.#...... */ - 0x1e, 0x40, /* ...####..#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0720 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x0750 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x0780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x07b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x07e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0810 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0870 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x08a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x08d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0xc0, /* .#......##...... */ - 0x41, 0x40, /* .#.....#.#...... */ - 0x42, 0x40, /* .#....#..#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x50, 0x40, /* .#.#.....#...... */ - 0x60, 0x40, /* .##......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0930 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0960 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0990 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x40, /* .......#.#...... */ - 0x02, 0x40, /* ......#..#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x08, 0x40, /* ....#....#...... */ - 0x10, 0x40, /* ...#.....#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x09c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x09f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0a20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0a50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0ab0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0ae0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0b10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0b70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0ba0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0bd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x20, /* .#........#..... */ - 0x43, 0xe0, /* .#....#####..... */ - 0x44, 0x20, /* .#...#....#..... */ - 0x48, 0x20, /* .#..#.....#..... */ - 0x48, 0x20, /* .#..#.....#..... */ - 0x48, 0x20, /* .#..#.....#..... */ - 0x48, 0x20, /* .#..#.....#..... */ - 0x48, 0x20, /* .#..#.....#..... */ - 0x44, 0x60, /* .#...#...##..... */ - 0x43, 0xa0, /* .#....###.#..... */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x00, /* ..#............. */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0c30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0c60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x0c90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x0cf0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x0d20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x47, 0xc0, /* .#...#####...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x0d50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0db0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xe0, /* ......#####..... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x0de0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x42, 0x00, /* .#....#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x48, 0x00, /* .#..#........... */ - 0x50, 0x00, /* .#.#............ */ - 0x60, 0x00, /* .##............. */ - 0x50, 0x00, /* .#.#............ */ - 0x48, 0x00, /* .#..#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x0e10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x20, /* .#........#..... */ - 0x60, 0x60, /* .##......##..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x49, 0x20, /* .#..#..#..#..... */ - 0x46, 0x20, /* .#...##...#..... */ - 0x46, 0x20, /* .#...##...#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0e70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x60, 0x40, /* .##......#...... */ - 0x50, 0x40, /* .#.#.....#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x42, 0x40, /* .#....#..#...... */ - 0x41, 0x40, /* .#.....#.#...... */ - 0x40, 0xc0, /* .#......##...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0ea0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x0ed0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x0f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x22, 0x80, /* ..#...#.#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x0f30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x50, 0x00, /* .#.#............ */ - 0x48, 0x00, /* .#..#........... */ - 0x44, 0x00, /* .#...#.......... */ - 0x42, 0x00, /* .#....#......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x0f60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x00, /* ..#............. */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x0f90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x0ff0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x1020 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x40, 0x20, /* .#........#..... */ - 0x46, 0x20, /* .#...##...#..... */ - 0x46, 0x20, /* .#...##...#..... */ - 0x49, 0x20, /* .#..#..#..#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x60, 0x60, /* .##......##..... */ - 0x40, 0x20, /* .#........#..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x1050 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x10b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x10e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x1110 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x01, 0x00, /* .......#........ */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1170 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x11a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x11d0 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1230 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1260 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x1290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x12c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x12f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xc0, /* ......####...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x3f, 0x80, /* ..#######....... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1320 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0xc0, /* ..#.....##...... */ - 0x1f, 0x40, /* ...#####.#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x1350 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x1380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x13b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x13e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x21, 0x00, /* ..#....#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x38, 0x00, /* ..###........... */ - 0x24, 0x00, /* ..#..#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x21, 0x00, /* ..#....#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x40, /* ..#......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1410 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x1440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x44, 0x80, /* .#...#..#....... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x1470 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x14a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x14d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x1530 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x47, 0xc0, /* .#...#####...... */ - 0x48, 0x00, /* .#..#........... */ - 0x50, 0x00, /* .#.#............ */ - 0x60, 0x00, /* .##............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1560 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1590 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x3f, 0x80, /* ..#######....... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x15c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x15f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1620 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1650 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0xc0, /* ..#.....##...... */ - 0x1f, 0x40, /* ...#####.#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x16b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x16e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x18, 0x00, /* ...##........... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1710 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x04, 0x00, /* .....#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x01, 0x80, /* .......##....... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1770 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x40, /* ..###....#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x43, 0x80, /* .#....###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x17a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x17d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x1830 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x1860 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x1890 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x18f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x1920 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x1950 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x1980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x19b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x19e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x1a10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x1a70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x1aa0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x1ad0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x1b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x1b30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x1b60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x1b90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x1bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x1bf0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x1c20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x1c50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x1c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x1cb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x1ce0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x1d10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x1d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x1d70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x1da0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x1dd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x1e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x1e30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x1e60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x7e, 0x00, /* .######......... */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x00, /* ..#............. */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x1e90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x20, /* .#........#..... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x20, /* .#........#..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x1ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x3f, 0x80, /* ..#######....... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x3f, 0x80, /* ..#######....... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x1ef0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x1f20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x00, /* ...#............ */ - 0x10, 0x00, /* ...#............ */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x08, 0x80, /* ....#...#....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x1f50 */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x40, /* ..#......#...... */ - 0x4f, 0x20, /* .#..####..#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x50, 0x20, /* .#.#......#..... */ - 0x50, 0x20, /* .#.#......#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x4f, 0x20, /* .#..####..#..... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x1fb0 */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x1fe0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x20, /* ......#...#..... */ - 0x04, 0x40, /* .....#...#...... */ - 0x08, 0x80, /* ....#...#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x04, 0x40, /* .....#...#...... */ - 0x02, 0x20, /* ......#...#..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2010 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x2040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x2070 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x20, 0x40, /* ..#......#...... */ - 0x5f, 0x20, /* .#.#####..#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x5f, 0x20, /* .#.#####..#..... */ - 0x52, 0x20, /* .#.#..#...#..... */ - 0x51, 0x20, /* .#.#...#..#..... */ - 0x50, 0xa0, /* .#.#....#.#..... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x20a0 */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x20d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x2100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x7f, 0xc0, /* .#########...... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x2130 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x10, 0x80, /* ...#....#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x2160 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x10, 0x80, /* ...#....#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x10, 0x80, /* ...#....#....... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2190 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x21c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0xc0, /* .#......##...... */ - 0x41, 0x40, /* .#.....#.#...... */ - 0x7e, 0x40, /* .######..#...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb5, char: \xb6, offset: 0x21f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x3c, 0x40, /* ..####...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x04, 0x40, /* .....#...#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x2220 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x2250 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb8, char: \xb9, offset: 0x2280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x14, 0x00, /* ...#.#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x22b0 */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x10, 0x80, /* ...#....#....... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x10, 0x80, /* ...#....#....... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x22e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x44, 0x00, /* .#...#.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x08, 0x80, /* ....#...#....... */ - 0x04, 0x40, /* .....#...#...... */ - 0x02, 0x20, /* ......#...#..... */ - 0x04, 0x40, /* .....#...#...... */ - 0x08, 0x80, /* ....#...#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x22, 0x00, /* ..#...#......... */ - 0x44, 0x00, /* .#...#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x2310 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x18, 0x00, /* ...##........... */ - 0x28, 0x00, /* ..#.#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x40, /* ....#....#...... */ - 0x08, 0x80, /* ....#...#....... */ - 0x09, 0x00, /* ....#..#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x80, /* ....#...#....... */ - 0x11, 0x80, /* ...#...##....... */ - 0x22, 0x80, /* ..#...#.#....... */ - 0x44, 0x80, /* .#...#..#....... */ - 0x08, 0x80, /* ....#...#....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x08, 0x00, /* ....#........... */ - 0x18, 0x00, /* ...##........... */ - 0x28, 0x00, /* ..#.#........... */ - 0x08, 0x00, /* ....#........... */ - 0x08, 0x40, /* ....#....#...... */ - 0x08, 0x80, /* ....#...#....... */ - 0x09, 0x00, /* ....#..#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x13, 0x80, /* ...#..###....... */ - 0x24, 0x40, /* ..#..#...#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x00, 0x80, /* ........#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x2370 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x22, 0x00, /* ..#...#......... */ - 0x02, 0x00, /* ......#......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x02, 0x00, /* ......#......... */ - 0x22, 0x40, /* ..#...#..#...... */ - 0x1c, 0x80, /* ...###..#....... */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x80, /* .....#..#....... */ - 0x09, 0x80, /* ....#..##....... */ - 0x12, 0x80, /* ...#..#.#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x48, 0x80, /* .#..#...#....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x23a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x10, 0x00, /* ...#............ */ - 0x20, 0x00, /* ..#............. */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x23d0 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x2400 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x2430 */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x2460 */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x2490 */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x24c0 */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x24f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x44, 0x00, /* .#...#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0xff, 0xc0, /* ##########...... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x87, 0xe0, /* #....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x2520 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x2550 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x2580 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x25b0 */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x25e0 */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x2610 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x2640 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x2670 */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x26a0 */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x26d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0xfc, 0x40, /* ######...#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x2700 */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x60, 0x40, /* .##......#...... */ - 0x50, 0x40, /* .#.#.....#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x42, 0x40, /* .#....#..#...... */ - 0x41, 0x40, /* .#.....#.#...... */ - 0x40, 0xc0, /* .#......##...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x2730 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x2760 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x2790 */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x27c0 */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x27f0 */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x2820 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x2850 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x60, /* .#.......##..... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0xc0, /* .#......##...... */ - 0x41, 0x40, /* .#.....#.#...... */ - 0x42, 0x40, /* .#....#..#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x50, 0x40, /* .#.#.....#...... */ - 0x60, 0x40, /* .##......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0xc0, 0x40, /* ##.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x2880 */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x28b0 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x28e0 */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x2910 */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x2940 */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0a, 0x00, /* ....#.#......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x2970 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x29a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x41, 0x00, /* .#.....#........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x80, /* .#......#....... */ - 0x41, 0x00, /* .#.....#........ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x60, 0x40, /* .##......#...... */ - 0x50, 0x80, /* .#.#....#....... */ - 0x4f, 0x00, /* .#..####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x29d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x2a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x2a30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x2a60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x2a90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x2ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x0e, 0x00, /* ....###......... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x80, /* ........#....... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x2af0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7b, 0xc0, /* .####.####...... */ - 0x04, 0x20, /* .....#....#..... */ - 0x04, 0x20, /* .....#....#..... */ - 0x04, 0x20, /* .....#....#..... */ - 0x7c, 0x20, /* .#####....#..... */ - 0x87, 0xe0, /* #....######..... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x00, /* #....#.......... */ - 0x84, 0x20, /* #....#....#..... */ - 0x7b, 0xc0, /* .####.####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x2b20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x08, 0x00, /* ....#........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x2b50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x2b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x2bb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x2be0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x2c10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x2c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x2c70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x2ca0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x2cd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x16, 0x00, /* ...#.##......... */ - 0x08, 0x00, /* ....#........... */ - 0x34, 0x00, /* ..##.#.......... */ - 0x02, 0x00, /* ......#......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x2d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x2d30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x2d60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x2d90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x2dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x80, /* ...##...#....... */ - 0x24, 0x80, /* ..#..#..#....... */ - 0x23, 0x00, /* ..#...##........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x2df0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x20, 0x80, /* ..#.....#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x80, /* ..#.....#....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x2e20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x2e50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x20, /* ...#####..#..... */ - 0x20, 0xc0, /* ..#.....##...... */ - 0x40, 0xc0, /* .#......##...... */ - 0x41, 0x40, /* .#.....#.#...... */ - 0x42, 0x40, /* .#....#..#...... */ - 0x44, 0x40, /* .#...#...#...... */ - 0x48, 0x40, /* .#..#....#...... */ - 0x50, 0x40, /* .#.#.....#...... */ - 0x60, 0x40, /* .##......#...... */ - 0x60, 0x80, /* .##.....#....... */ - 0x9f, 0x00, /* #..#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x2e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x10, 0x00, /* ...#............ */ - 0x08, 0x00, /* ....#........... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x2eb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x2ee0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0a, 0x00, /* ....#.#......... */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x2f10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0x40, /* ..#......#...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x2f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x00, /* .......#........ */ - 0x02, 0x00, /* ......#......... */ - 0x04, 0x00, /* .....#.......... */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0xc0, /* ..#.....##...... */ - 0x1f, 0x40, /* ...#####.#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x2f70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x7f, 0x00, /* .#######........ */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x40, 0x00, /* .#.............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x2fa0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x11, 0x00, /* ...#...#........ */ - 0x00, 0x00, /* ................ */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x40, 0x40, /* .#.......#...... */ - 0x20, 0xc0, /* ..#.....##...... */ - 0x1f, 0x40, /* ...#####.#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x40, /* .........#...... */ - 0x00, 0x80, /* ........#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_12x24_iso8859_1_descriptors[] = { - { 0x0c, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0c, 0x0030 }, /* Index: 0x01, char: \x02 */ - { 0x0c, 0x0060 }, /* Index: 0x02, char: \x03 */ - { 0x0c, 0x0090 }, /* Index: 0x03, char: \x04 */ - { 0x0c, 0x00c0 }, /* Index: 0x04, char: \x05 */ - { 0x0c, 0x00f0 }, /* Index: 0x05, char: \x06 */ - { 0x0c, 0x0120 }, /* Index: 0x06, char: \x07 */ - { 0x0c, 0x0150 }, /* Index: 0x07, char: \x08 */ - { 0x0c, 0x0180 }, /* Index: 0x08, char: \x09 */ - { 0x0c, 0x01b0 }, /* Index: 0x09, char: \x0a */ - { 0x0c, 0x01e0 }, /* Index: 0x0a, char: \x0b */ - { 0x0c, 0x0210 }, /* Index: 0x0b, char: \x0c */ - { 0x0c, 0x0240 }, /* Index: 0x0c, char: \x0d */ - { 0x0c, 0x0270 }, /* Index: 0x0d, char: \x0e */ - { 0x0c, 0x02a0 }, /* Index: 0x0e, char: \x0f */ - { 0x0c, 0x02d0 }, /* Index: 0x0f, char: \x10 */ - { 0x0c, 0x0300 }, /* Index: 0x10, char: \x11 */ - { 0x0c, 0x0330 }, /* Index: 0x11, char: \x12 */ - { 0x0c, 0x0360 }, /* Index: 0x12, char: \x13 */ - { 0x0c, 0x0390 }, /* Index: 0x13, char: \x14 */ - { 0x0c, 0x03c0 }, /* Index: 0x14, char: \x15 */ - { 0x0c, 0x03f0 }, /* Index: 0x15, char: \x16 */ - { 0x0c, 0x0420 }, /* Index: 0x16, char: \x17 */ - { 0x0c, 0x0450 }, /* Index: 0x17, char: \x18 */ - { 0x0c, 0x0480 }, /* Index: 0x18, char: \x19 */ - { 0x0c, 0x04b0 }, /* Index: 0x19, char: \x1a */ - { 0x0c, 0x04e0 }, /* Index: 0x1a, char: \x1b */ - { 0x0c, 0x0510 }, /* Index: 0x1b, char: \x1c */ - { 0x0c, 0x0540 }, /* Index: 0x1c, char: \x1d */ - { 0x0c, 0x0570 }, /* Index: 0x1d, char: \x1e */ - { 0x0c, 0x05a0 }, /* Index: 0x1e, char: \x1f */ - { 0x0c, 0x05d0 }, /* Index: 0x1f, char: \x20 */ - { 0x0c, 0x0600 }, /* Index: 0x20, char: \x21 */ - { 0x0c, 0x0630 }, /* Index: 0x21, char: \x22 */ - { 0x0c, 0x0660 }, /* Index: 0x22, char: \x23 */ - { 0x0c, 0x0690 }, /* Index: 0x23, char: \x24 */ - { 0x0c, 0x06c0 }, /* Index: 0x24, char: \x25 */ - { 0x0c, 0x06f0 }, /* Index: 0x25, char: \x26 */ - { 0x0c, 0x0720 }, /* Index: 0x26, char: \x27 */ - { 0x0c, 0x0750 }, /* Index: 0x27, char: \x28 */ - { 0x0c, 0x0780 }, /* Index: 0x28, char: \x29 */ - { 0x0c, 0x07b0 }, /* Index: 0x29, char: \x2a */ - { 0x0c, 0x07e0 }, /* Index: 0x2a, char: \x2b */ - { 0x0c, 0x0810 }, /* Index: 0x2b, char: \x2c */ - { 0x0c, 0x0840 }, /* Index: 0x2c, char: \x2d */ - { 0x0c, 0x0870 }, /* Index: 0x2d, char: \x2e */ - { 0x0c, 0x08a0 }, /* Index: 0x2e, char: \x2f */ - { 0x0c, 0x08d0 }, /* Index: 0x2f, char: \x30 */ - { 0x0c, 0x0900 }, /* Index: 0x30, char: \x31 */ - { 0x0c, 0x0930 }, /* Index: 0x31, char: \x32 */ - { 0x0c, 0x0960 }, /* Index: 0x32, char: \x33 */ - { 0x0c, 0x0990 }, /* Index: 0x33, char: \x34 */ - { 0x0c, 0x09c0 }, /* Index: 0x34, char: \x35 */ - { 0x0c, 0x09f0 }, /* Index: 0x35, char: \x36 */ - { 0x0c, 0x0a20 }, /* Index: 0x36, char: \x37 */ - { 0x0c, 0x0a50 }, /* Index: 0x37, char: \x38 */ - { 0x0c, 0x0a80 }, /* Index: 0x38, char: \x39 */ - { 0x0c, 0x0ab0 }, /* Index: 0x39, char: \x3a */ - { 0x0c, 0x0ae0 }, /* Index: 0x3a, char: \x3b */ - { 0x0c, 0x0b10 }, /* Index: 0x3b, char: \x3c */ - { 0x0c, 0x0b40 }, /* Index: 0x3c, char: \x3d */ - { 0x0c, 0x0b70 }, /* Index: 0x3d, char: \x3e */ - { 0x0c, 0x0ba0 }, /* Index: 0x3e, char: \x3f */ - { 0x0c, 0x0bd0 }, /* Index: 0x3f, char: \x40 */ - { 0x0c, 0x0c00 }, /* Index: 0x40, char: \x41 */ - { 0x0c, 0x0c30 }, /* Index: 0x41, char: \x42 */ - { 0x0c, 0x0c60 }, /* Index: 0x42, char: \x43 */ - { 0x0c, 0x0c90 }, /* Index: 0x43, char: \x44 */ - { 0x0c, 0x0cc0 }, /* Index: 0x44, char: \x45 */ - { 0x0c, 0x0cf0 }, /* Index: 0x45, char: \x46 */ - { 0x0c, 0x0d20 }, /* Index: 0x46, char: \x47 */ - { 0x0c, 0x0d50 }, /* Index: 0x47, char: \x48 */ - { 0x0c, 0x0d80 }, /* Index: 0x48, char: \x49 */ - { 0x0c, 0x0db0 }, /* Index: 0x49, char: \x4a */ - { 0x0c, 0x0de0 }, /* Index: 0x4a, char: \x4b */ - { 0x0c, 0x0e10 }, /* Index: 0x4b, char: \x4c */ - { 0x0c, 0x0e40 }, /* Index: 0x4c, char: \x4d */ - { 0x0c, 0x0e70 }, /* Index: 0x4d, char: \x4e */ - { 0x0c, 0x0ea0 }, /* Index: 0x4e, char: \x4f */ - { 0x0c, 0x0ed0 }, /* Index: 0x4f, char: \x50 */ - { 0x0c, 0x0f00 }, /* Index: 0x50, char: \x51 */ - { 0x0c, 0x0f30 }, /* Index: 0x51, char: \x52 */ - { 0x0c, 0x0f60 }, /* Index: 0x52, char: \x53 */ - { 0x0c, 0x0f90 }, /* Index: 0x53, char: \x54 */ - { 0x0c, 0x0fc0 }, /* Index: 0x54, char: \x55 */ - { 0x0c, 0x0ff0 }, /* Index: 0x55, char: \x56 */ - { 0x0c, 0x1020 }, /* Index: 0x56, char: \x57 */ - { 0x0c, 0x1050 }, /* Index: 0x57, char: \x58 */ - { 0x0c, 0x1080 }, /* Index: 0x58, char: \x59 */ - { 0x0c, 0x10b0 }, /* Index: 0x59, char: \x5a */ - { 0x0c, 0x10e0 }, /* Index: 0x5a, char: \x5b */ - { 0x0c, 0x1110 }, /* Index: 0x5b, char: \x5c */ - { 0x0c, 0x1140 }, /* Index: 0x5c, char: \x5d */ - { 0x0c, 0x1170 }, /* Index: 0x5d, char: \x5e */ - { 0x0c, 0x11a0 }, /* Index: 0x5e, char: \x5f */ - { 0x0c, 0x11d0 }, /* Index: 0x5f, char: \x60 */ - { 0x0c, 0x1200 }, /* Index: 0x60, char: \x61 */ - { 0x0c, 0x1230 }, /* Index: 0x61, char: \x62 */ - { 0x0c, 0x1260 }, /* Index: 0x62, char: \x63 */ - { 0x0c, 0x1290 }, /* Index: 0x63, char: \x64 */ - { 0x0c, 0x12c0 }, /* Index: 0x64, char: \x65 */ - { 0x0c, 0x12f0 }, /* Index: 0x65, char: \x66 */ - { 0x0c, 0x1320 }, /* Index: 0x66, char: \x67 */ - { 0x0c, 0x1350 }, /* Index: 0x67, char: \x68 */ - { 0x0c, 0x1380 }, /* Index: 0x68, char: \x69 */ - { 0x0c, 0x13b0 }, /* Index: 0x69, char: \x6a */ - { 0x0c, 0x13e0 }, /* Index: 0x6a, char: \x6b */ - { 0x0c, 0x1410 }, /* Index: 0x6b, char: \x6c */ - { 0x0c, 0x1440 }, /* Index: 0x6c, char: \x6d */ - { 0x0c, 0x1470 }, /* Index: 0x6d, char: \x6e */ - { 0x0c, 0x14a0 }, /* Index: 0x6e, char: \x6f */ - { 0x0c, 0x14d0 }, /* Index: 0x6f, char: \x70 */ - { 0x0c, 0x1500 }, /* Index: 0x70, char: \x71 */ - { 0x0c, 0x1530 }, /* Index: 0x71, char: \x72 */ - { 0x0c, 0x1560 }, /* Index: 0x72, char: \x73 */ - { 0x0c, 0x1590 }, /* Index: 0x73, char: \x74 */ - { 0x0c, 0x15c0 }, /* Index: 0x74, char: \x75 */ - { 0x0c, 0x15f0 }, /* Index: 0x75, char: \x76 */ - { 0x0c, 0x1620 }, /* Index: 0x76, char: \x77 */ - { 0x0c, 0x1650 }, /* Index: 0x77, char: \x78 */ - { 0x0c, 0x1680 }, /* Index: 0x78, char: \x79 */ - { 0x0c, 0x16b0 }, /* Index: 0x79, char: \x7a */ - { 0x0c, 0x16e0 }, /* Index: 0x7a, char: \x7b */ - { 0x0c, 0x1710 }, /* Index: 0x7b, char: \x7c */ - { 0x0c, 0x1740 }, /* Index: 0x7c, char: \x7d */ - { 0x0c, 0x1770 }, /* Index: 0x7d, char: \x7e */ - { 0x0c, 0x17a0 }, /* Index: 0x7e, char: \x7f */ - { 0x0c, 0x17d0 }, /* Index: 0x7f, char: \x80 */ - { 0x0c, 0x1800 }, /* Index: 0x80, char: \x81 */ - { 0x0c, 0x1830 }, /* Index: 0x81, char: \x82 */ - { 0x0c, 0x1860 }, /* Index: 0x82, char: \x83 */ - { 0x0c, 0x1890 }, /* Index: 0x83, char: \x84 */ - { 0x0c, 0x18c0 }, /* Index: 0x84, char: \x85 */ - { 0x0c, 0x18f0 }, /* Index: 0x85, char: \x86 */ - { 0x0c, 0x1920 }, /* Index: 0x86, char: \x87 */ - { 0x0c, 0x1950 }, /* Index: 0x87, char: \x88 */ - { 0x0c, 0x1980 }, /* Index: 0x88, char: \x89 */ - { 0x0c, 0x19b0 }, /* Index: 0x89, char: \x8a */ - { 0x0c, 0x19e0 }, /* Index: 0x8a, char: \x8b */ - { 0x0c, 0x1a10 }, /* Index: 0x8b, char: \x8c */ - { 0x0c, 0x1a40 }, /* Index: 0x8c, char: \x8d */ - { 0x0c, 0x1a70 }, /* Index: 0x8d, char: \x8e */ - { 0x0c, 0x1aa0 }, /* Index: 0x8e, char: \x8f */ - { 0x0c, 0x1ad0 }, /* Index: 0x8f, char: \x90 */ - { 0x0c, 0x1b00 }, /* Index: 0x90, char: \x91 */ - { 0x0c, 0x1b30 }, /* Index: 0x91, char: \x92 */ - { 0x0c, 0x1b60 }, /* Index: 0x92, char: \x93 */ - { 0x0c, 0x1b90 }, /* Index: 0x93, char: \x94 */ - { 0x0c, 0x1bc0 }, /* Index: 0x94, char: \x95 */ - { 0x0c, 0x1bf0 }, /* Index: 0x95, char: \x96 */ - { 0x0c, 0x1c20 }, /* Index: 0x96, char: \x97 */ - { 0x0c, 0x1c50 }, /* Index: 0x97, char: \x98 */ - { 0x0c, 0x1c80 }, /* Index: 0x98, char: \x99 */ - { 0x0c, 0x1cb0 }, /* Index: 0x99, char: \x9a */ - { 0x0c, 0x1ce0 }, /* Index: 0x9a, char: \x9b */ - { 0x0c, 0x1d10 }, /* Index: 0x9b, char: \x9c */ - { 0x0c, 0x1d40 }, /* Index: 0x9c, char: \x9d */ - { 0x0c, 0x1d70 }, /* Index: 0x9d, char: \x9e */ - { 0x0c, 0x1da0 }, /* Index: 0x9e, char: \x9f */ - { 0x0c, 0x1dd0 }, /* Index: 0x9f, char: \xa0 */ - { 0x0c, 0x1e00 }, /* Index: 0xa0, char: \xa1 */ - { 0x0c, 0x1e30 }, /* Index: 0xa1, char: \xa2 */ - { 0x0c, 0x1e60 }, /* Index: 0xa2, char: \xa3 */ - { 0x0c, 0x1e90 }, /* Index: 0xa3, char: \xa4 */ - { 0x0c, 0x1ec0 }, /* Index: 0xa4, char: \xa5 */ - { 0x0c, 0x1ef0 }, /* Index: 0xa5, char: \xa6 */ - { 0x0c, 0x1f20 }, /* Index: 0xa6, char: \xa7 */ - { 0x0c, 0x1f50 }, /* Index: 0xa7, char: \xa8 */ - { 0x0c, 0x1f80 }, /* Index: 0xa8, char: \xa9 */ - { 0x0c, 0x1fb0 }, /* Index: 0xa9, char: \xaa */ - { 0x0c, 0x1fe0 }, /* Index: 0xaa, char: \xab */ - { 0x0c, 0x2010 }, /* Index: 0xab, char: \xac */ - { 0x0c, 0x2040 }, /* Index: 0xac, char: \xad */ - { 0x0c, 0x2070 }, /* Index: 0xad, char: \xae */ - { 0x0c, 0x20a0 }, /* Index: 0xae, char: \xaf */ - { 0x0c, 0x20d0 }, /* Index: 0xaf, char: \xb0 */ - { 0x0c, 0x2100 }, /* Index: 0xb0, char: \xb1 */ - { 0x0c, 0x2130 }, /* Index: 0xb1, char: \xb2 */ - { 0x0c, 0x2160 }, /* Index: 0xb2, char: \xb3 */ - { 0x0c, 0x2190 }, /* Index: 0xb3, char: \xb4 */ - { 0x0c, 0x21c0 }, /* Index: 0xb4, char: \xb5 */ - { 0x0c, 0x21f0 }, /* Index: 0xb5, char: \xb6 */ - { 0x0c, 0x2220 }, /* Index: 0xb6, char: \xb7 */ - { 0x0c, 0x2250 }, /* Index: 0xb7, char: \xb8 */ - { 0x0c, 0x2280 }, /* Index: 0xb8, char: \xb9 */ - { 0x0c, 0x22b0 }, /* Index: 0xb9, char: \xba */ - { 0x0c, 0x22e0 }, /* Index: 0xba, char: \xbb */ - { 0x0c, 0x2310 }, /* Index: 0xbb, char: \xbc */ - { 0x0c, 0x2340 }, /* Index: 0xbc, char: \xbd */ - { 0x0c, 0x2370 }, /* Index: 0xbd, char: \xbe */ - { 0x0c, 0x23a0 }, /* Index: 0xbe, char: \xbf */ - { 0x0c, 0x23d0 }, /* Index: 0xbf, char: \xc0 */ - { 0x0c, 0x2400 }, /* Index: 0xc0, char: \xc1 */ - { 0x0c, 0x2430 }, /* Index: 0xc1, char: \xc2 */ - { 0x0c, 0x2460 }, /* Index: 0xc2, char: \xc3 */ - { 0x0c, 0x2490 }, /* Index: 0xc3, char: \xc4 */ - { 0x0c, 0x24c0 }, /* Index: 0xc4, char: \xc5 */ - { 0x0c, 0x24f0 }, /* Index: 0xc5, char: \xc6 */ - { 0x0c, 0x2520 }, /* Index: 0xc6, char: \xc7 */ - { 0x0c, 0x2550 }, /* Index: 0xc7, char: \xc8 */ - { 0x0c, 0x2580 }, /* Index: 0xc8, char: \xc9 */ - { 0x0c, 0x25b0 }, /* Index: 0xc9, char: \xca */ - { 0x0c, 0x25e0 }, /* Index: 0xca, char: \xcb */ - { 0x0c, 0x2610 }, /* Index: 0xcb, char: \xcc */ - { 0x0c, 0x2640 }, /* Index: 0xcc, char: \xcd */ - { 0x0c, 0x2670 }, /* Index: 0xcd, char: \xce */ - { 0x0c, 0x26a0 }, /* Index: 0xce, char: \xcf */ - { 0x0c, 0x26d0 }, /* Index: 0xcf, char: \xd0 */ - { 0x0c, 0x2700 }, /* Index: 0xd0, char: \xd1 */ - { 0x0c, 0x2730 }, /* Index: 0xd1, char: \xd2 */ - { 0x0c, 0x2760 }, /* Index: 0xd2, char: \xd3 */ - { 0x0c, 0x2790 }, /* Index: 0xd3, char: \xd4 */ - { 0x0c, 0x27c0 }, /* Index: 0xd4, char: \xd5 */ - { 0x0c, 0x27f0 }, /* Index: 0xd5, char: \xd6 */ - { 0x0c, 0x2820 }, /* Index: 0xd6, char: \xd7 */ - { 0x0c, 0x2850 }, /* Index: 0xd7, char: \xd8 */ - { 0x0c, 0x2880 }, /* Index: 0xd8, char: \xd9 */ - { 0x0c, 0x28b0 }, /* Index: 0xd9, char: \xda */ - { 0x0c, 0x28e0 }, /* Index: 0xda, char: \xdb */ - { 0x0c, 0x2910 }, /* Index: 0xdb, char: \xdc */ - { 0x0c, 0x2940 }, /* Index: 0xdc, char: \xdd */ - { 0x0c, 0x2970 }, /* Index: 0xdd, char: \xde */ - { 0x0c, 0x29a0 }, /* Index: 0xde, char: \xdf */ - { 0x0c, 0x29d0 }, /* Index: 0xdf, char: \xe0 */ - { 0x0c, 0x2a00 }, /* Index: 0xe0, char: \xe1 */ - { 0x0c, 0x2a30 }, /* Index: 0xe1, char: \xe2 */ - { 0x0c, 0x2a60 }, /* Index: 0xe2, char: \xe3 */ - { 0x0c, 0x2a90 }, /* Index: 0xe3, char: \xe4 */ - { 0x0c, 0x2ac0 }, /* Index: 0xe4, char: \xe5 */ - { 0x0c, 0x2af0 }, /* Index: 0xe5, char: \xe6 */ - { 0x0c, 0x2b20 }, /* Index: 0xe6, char: \xe7 */ - { 0x0c, 0x2b50 }, /* Index: 0xe7, char: \xe8 */ - { 0x0c, 0x2b80 }, /* Index: 0xe8, char: \xe9 */ - { 0x0c, 0x2bb0 }, /* Index: 0xe9, char: \xea */ - { 0x0c, 0x2be0 }, /* Index: 0xea, char: \xeb */ - { 0x0c, 0x2c10 }, /* Index: 0xeb, char: \xec */ - { 0x0c, 0x2c40 }, /* Index: 0xec, char: \xed */ - { 0x0c, 0x2c70 }, /* Index: 0xed, char: \xee */ - { 0x0c, 0x2ca0 }, /* Index: 0xee, char: \xef */ - { 0x0c, 0x2cd0 }, /* Index: 0xef, char: \xf0 */ - { 0x0c, 0x2d00 }, /* Index: 0xf0, char: \xf1 */ - { 0x0c, 0x2d30 }, /* Index: 0xf1, char: \xf2 */ - { 0x0c, 0x2d60 }, /* Index: 0xf2, char: \xf3 */ - { 0x0c, 0x2d90 }, /* Index: 0xf3, char: \xf4 */ - { 0x0c, 0x2dc0 }, /* Index: 0xf4, char: \xf5 */ - { 0x0c, 0x2df0 }, /* Index: 0xf5, char: \xf6 */ - { 0x0c, 0x2e20 }, /* Index: 0xf6, char: \xf7 */ - { 0x0c, 0x2e50 }, /* Index: 0xf7, char: \xf8 */ - { 0x0c, 0x2e80 }, /* Index: 0xf8, char: \xf9 */ - { 0x0c, 0x2eb0 }, /* Index: 0xf9, char: \xfa */ - { 0x0c, 0x2ee0 }, /* Index: 0xfa, char: \xfb */ - { 0x0c, 0x2f10 }, /* Index: 0xfb, char: \xfc */ - { 0x0c, 0x2f40 }, /* Index: 0xfc, char: \xfd */ - { 0x0c, 0x2f70 }, /* Index: 0xfd, char: \xfe */ - { 0x0c, 0x2fa0 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_12x24_iso8859_1_info = -{ - .height = 24, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_12x24_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_12x24_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_12X24_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_14x28_iso8859_1.h b/extras/fonts/data/font_terminus_14x28_iso8859_1.h deleted file mode 100644 index 9dd93bb..0000000 --- a/extras/fonts/data/font_terminus_14x28_iso8859_1.h +++ /dev/null @@ -1,7939 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 14x28 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 02:37:43 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_14X28_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_14X28_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_14x28_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0xff, 0xf8, /* #############... */ - 0xff, 0xf8, /* #############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0038 */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - - /* Index: 0x02, char: \x03, offset: 0x0070 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x7f, 0x00, /* .#######........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x00a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x00e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0x00, /* .##...##........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0x60, /* ......##.##..... */ - 0x03, 0x30, /* ......##..##.... */ - 0x03, 0x18, /* ......##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x0118 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0150 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x0188 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x01c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x73, 0x00, /* .###..##........ */ - 0x7b, 0x00, /* .####.##........ */ - 0x6f, 0x00, /* .##.####........ */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xf8, /* ......#######... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x01f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0230 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x0268 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0c, char: \x0d, offset: 0x02a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0d, char: \x0e, offset: 0x02d8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0310 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0f, char: \x10, offset: 0x0348 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x03b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x03f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x0428 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0460 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x15, char: \x16, offset: 0x0498 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x16, char: \x17, offset: 0x04d0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x0508 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x18, char: \x19, offset: 0x0540 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x19, char: \x1a, offset: 0x0578 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x05b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x05e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0620 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x30, /* ..........##.... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0xf8, /* .############... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0658 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x80, /* ..#######....... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0690 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x06c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0738 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0770 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x07a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x30, /* ......##..##.... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x07e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x30, /* ..####....##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x3c, 0xc0, /* ..####..##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0xf0, /* ....##..####.... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x31, 0x98, /* ..##...##..##... */ - 0x30, 0xf0, /* ..##....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0818 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x18, /* ...##.##...##... */ - 0x31, 0x98, /* ..##...##..##... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x31, 0x98, /* ..##...##..##... */ - 0x1f, 0x18, /* ...#####...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0850 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x0888 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x08c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x08f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0930 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0968 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x09a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x09d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0a10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0a48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x00, /* ....####........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0ab8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0af0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0b28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0xb0, /* .......##.##.... */ - 0x03, 0x30, /* ......##..##.... */ - 0x06, 0x30, /* .....##...##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0b60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0b98 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0bd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0c08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0c78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0cb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0ce8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0d20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0d58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0d90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0dc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x61, 0xf8, /* .##....######... */ - 0x63, 0x18, /* .##...##...##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x61, 0xe8, /* .##....####.#... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0e38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0e70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x0ea8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0ee0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x0f18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x0f50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0xf0, /* .##...######.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x0f88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0ff8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf8, /* .......######... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x1030 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x1068 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x10a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x10d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x1110 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x1148 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x1180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x31, 0xe0, /* ..##...####..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x11b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x11f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x1228 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x1260 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x1298 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x12d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x78, 0x78, /* .####....####... */ - 0x70, 0x38, /* .###......###... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x1308 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x1378 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x13b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x13e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1420 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1458 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1490 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x14c8 */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1538 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1570 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x15a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x15e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x1618 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1650 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x1688 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x16c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x16f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xe0, /* .......####..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1730 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1768 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x17a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x17d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x1810 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1848 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x18b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x67, 0xf0, /* .##..#######.... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x18f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1928 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0xe0, /* ......#####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1960 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1998 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x19d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1a08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x1a78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1ab0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1ae8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1b20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1b58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x30, /* ..####....##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x1b90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x1bc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x1c38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x1c70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x1ca8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x1ce0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x1d18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x1d50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x1d88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x1dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x1df8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x1e30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x1e68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x1ea0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x1ed8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x1f10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x1f48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x1fb8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x1ff0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x2028 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x2060 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x2098 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x20d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x2108 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x2140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x2178 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x21b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x21e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x2220 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x2258 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x2290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x22c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x2300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x2338 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x1b, 0x60, /* ...##.##.##..... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1b, 0x60, /* ...##.##.##..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x2370 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x80, /* ..#######....... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x23a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x23e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x2418 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x2450 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x00, /* ...##........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0f, 0x00, /* ....####........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0x60, /* ....##...##..... */ - 0x06, 0xc0, /* .....##.##...... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x60, /* .........##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x2488 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x24c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x60, 0x30, /* .##.......##.... */ - 0xcf, 0x98, /* ##..#####..##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xcf, 0x98, /* ##..#####..##... */ - 0x60, 0x30, /* .##.......##.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x24f8 */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x2530 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x98, /* .......##..##... */ - 0x03, 0x30, /* ......##..##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0x30, /* ......##..##.... */ - 0x01, 0x98, /* .......##..##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2568 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x25a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x25d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x60, 0x30, /* .##.......##.... */ - 0xdf, 0x98, /* ##.######..##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xdf, 0x98, /* ##.######..##... */ - 0xde, 0x18, /* ##.####....##... */ - 0xdb, 0x18, /* ##.##.##...##... */ - 0xd9, 0x98, /* ##.##..##..##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0x60, 0x30, /* .##.......##.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x2610 */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x2648 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x2680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x26b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x26f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x07, 0x80, /* .....####....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2728 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x2760 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x7f, 0x30, /* .#######..##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb5, char: \xb6, offset: 0x2798 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf8, /* ..###########... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x3f, 0x18, /* ..######...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x27d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x2808 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb8, char: \xb9, offset: 0x2840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x2878 */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x28b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x66, 0x00, /* .##..##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0x30, /* ......##..##.... */ - 0x01, 0x98, /* .......##..##... */ - 0x03, 0x30, /* ......##..##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x28e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x10, /* ....##.....#.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x60, /* ....##...##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x30, /* ......##..##.... */ - 0x06, 0x70, /* .....##..###.... */ - 0x0c, 0xf0, /* ....##..####.... */ - 0x19, 0xb0, /* ...##..##.##.... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x47, 0xf0, /* .#...#######.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2920 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x38, 0x00, /* ..###........... */ - 0x78, 0x10, /* .####......#.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1b, 0xe0, /* ...##.#####..... */ - 0x36, 0x30, /* ..##.##...##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x40, 0x60, /* .#.......##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0xf0, /* .....#######.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x2958 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x03, 0x08, /* ......##....#... */ - 0x03, 0x18, /* ......##...##... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x3e, 0x60, /* ..#####..##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x98, /* .......##..##... */ - 0x03, 0x38, /* ......##..###... */ - 0x06, 0x78, /* .....##..####... */ - 0x0c, 0xd8, /* ....##..##.##... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x33, 0x18, /* ..##..##...##... */ - 0x63, 0xf8, /* .##...#######... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x2990 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x29c8 */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x2a00 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x2a38 */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x2a70 */ - 0x1c, 0x60, /* ...###...##..... */ - 0x37, 0x60, /* ..##.###.##..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x2aa8 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x2ae0 */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x2b18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf8, /* ..###########... */ - 0x63, 0x00, /* .##...##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xff, 0xf0, /* ############.... */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0xf8, /* ##....#######... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x2b50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x2b88 */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x2bc0 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x2bf8 */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x2c30 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x2c68 */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x2ca0 */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x2cd8 */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x2d10 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x2d48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0xfe, 0x30, /* #######...##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x2d80 */ - 0x1c, 0x60, /* ...###...##..... */ - 0x37, 0x60, /* ..##.###.##..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x2db8 */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x2df0 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x2e28 */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x2e60 */ - 0x1c, 0x60, /* ...###...##..... */ - 0x37, 0x60, /* ..##.###.##..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x2e98 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x2ed0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x2f08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x38, /* .##.......###... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0xe0, 0x30, /* ###.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x2f40 */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x2f78 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x2fb0 */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x2fe8 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x3020 */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x3058 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x3090 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x6c, 0x60, /* .##.##...##..... */ - 0x67, 0xc0, /* .##..#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x30c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x3100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x3138 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x3170 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x60, /* ...###...##..... */ - 0x37, 0x60, /* ..##.###.##..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x31a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x31e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x3218 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7d, 0xe0, /* .#####.####..... */ - 0x07, 0x30, /* .....###..##.... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x3f, 0x18, /* ..######...##... */ - 0x63, 0xf8, /* .##...#######... */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0x63, 0x98, /* .##...###..##... */ - 0x3e, 0xf0, /* ..#####.####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x3250 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x3288 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x32c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x32f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x3330 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x3368 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x33a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x33d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x3410 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x3448 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x01, 0x80, /* .......##....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x3480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x60, /* ..####...##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x63, 0xc0, /* .##...####...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x34b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x34f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x3528 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x3560 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x60, /* ...###...##..... */ - 0x37, 0x60, /* ..##.###.##..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x3598 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x35d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x3608 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xd8, /* ...#######.##... */ - 0x30, 0x78, /* ..##.....####... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0xf0, 0x60, /* ####.....##..... */ - 0xdf, 0xc0, /* ##.#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x3640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x3678 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x36b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x36e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x3720 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x3758 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x3790 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_14x28_iso8859_1_descriptors[] = { - { 0x0e, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0e, 0x0038 }, /* Index: 0x01, char: \x02 */ - { 0x0e, 0x0070 }, /* Index: 0x02, char: \x03 */ - { 0x0e, 0x00a8 }, /* Index: 0x03, char: \x04 */ - { 0x0e, 0x00e0 }, /* Index: 0x04, char: \x05 */ - { 0x0e, 0x0118 }, /* Index: 0x05, char: \x06 */ - { 0x0e, 0x0150 }, /* Index: 0x06, char: \x07 */ - { 0x0e, 0x0188 }, /* Index: 0x07, char: \x08 */ - { 0x0e, 0x01c0 }, /* Index: 0x08, char: \x09 */ - { 0x0e, 0x01f8 }, /* Index: 0x09, char: \x0a */ - { 0x0e, 0x0230 }, /* Index: 0x0a, char: \x0b */ - { 0x0e, 0x0268 }, /* Index: 0x0b, char: \x0c */ - { 0x0e, 0x02a0 }, /* Index: 0x0c, char: \x0d */ - { 0x0e, 0x02d8 }, /* Index: 0x0d, char: \x0e */ - { 0x0e, 0x0310 }, /* Index: 0x0e, char: \x0f */ - { 0x0e, 0x0348 }, /* Index: 0x0f, char: \x10 */ - { 0x0e, 0x0380 }, /* Index: 0x10, char: \x11 */ - { 0x0e, 0x03b8 }, /* Index: 0x11, char: \x12 */ - { 0x0e, 0x03f0 }, /* Index: 0x12, char: \x13 */ - { 0x0e, 0x0428 }, /* Index: 0x13, char: \x14 */ - { 0x0e, 0x0460 }, /* Index: 0x14, char: \x15 */ - { 0x0e, 0x0498 }, /* Index: 0x15, char: \x16 */ - { 0x0e, 0x04d0 }, /* Index: 0x16, char: \x17 */ - { 0x0e, 0x0508 }, /* Index: 0x17, char: \x18 */ - { 0x0e, 0x0540 }, /* Index: 0x18, char: \x19 */ - { 0x0e, 0x0578 }, /* Index: 0x19, char: \x1a */ - { 0x0e, 0x05b0 }, /* Index: 0x1a, char: \x1b */ - { 0x0e, 0x05e8 }, /* Index: 0x1b, char: \x1c */ - { 0x0e, 0x0620 }, /* Index: 0x1c, char: \x1d */ - { 0x0e, 0x0658 }, /* Index: 0x1d, char: \x1e */ - { 0x0e, 0x0690 }, /* Index: 0x1e, char: \x1f */ - { 0x0e, 0x06c8 }, /* Index: 0x1f, char: \x20 */ - { 0x0e, 0x0700 }, /* Index: 0x20, char: \x21 */ - { 0x0e, 0x0738 }, /* Index: 0x21, char: \x22 */ - { 0x0e, 0x0770 }, /* Index: 0x22, char: \x23 */ - { 0x0e, 0x07a8 }, /* Index: 0x23, char: \x24 */ - { 0x0e, 0x07e0 }, /* Index: 0x24, char: \x25 */ - { 0x0e, 0x0818 }, /* Index: 0x25, char: \x26 */ - { 0x0e, 0x0850 }, /* Index: 0x26, char: \x27 */ - { 0x0e, 0x0888 }, /* Index: 0x27, char: \x28 */ - { 0x0e, 0x08c0 }, /* Index: 0x28, char: \x29 */ - { 0x0e, 0x08f8 }, /* Index: 0x29, char: \x2a */ - { 0x0e, 0x0930 }, /* Index: 0x2a, char: \x2b */ - { 0x0e, 0x0968 }, /* Index: 0x2b, char: \x2c */ - { 0x0e, 0x09a0 }, /* Index: 0x2c, char: \x2d */ - { 0x0e, 0x09d8 }, /* Index: 0x2d, char: \x2e */ - { 0x0e, 0x0a10 }, /* Index: 0x2e, char: \x2f */ - { 0x0e, 0x0a48 }, /* Index: 0x2f, char: \x30 */ - { 0x0e, 0x0a80 }, /* Index: 0x30, char: \x31 */ - { 0x0e, 0x0ab8 }, /* Index: 0x31, char: \x32 */ - { 0x0e, 0x0af0 }, /* Index: 0x32, char: \x33 */ - { 0x0e, 0x0b28 }, /* Index: 0x33, char: \x34 */ - { 0x0e, 0x0b60 }, /* Index: 0x34, char: \x35 */ - { 0x0e, 0x0b98 }, /* Index: 0x35, char: \x36 */ - { 0x0e, 0x0bd0 }, /* Index: 0x36, char: \x37 */ - { 0x0e, 0x0c08 }, /* Index: 0x37, char: \x38 */ - { 0x0e, 0x0c40 }, /* Index: 0x38, char: \x39 */ - { 0x0e, 0x0c78 }, /* Index: 0x39, char: \x3a */ - { 0x0e, 0x0cb0 }, /* Index: 0x3a, char: \x3b */ - { 0x0e, 0x0ce8 }, /* Index: 0x3b, char: \x3c */ - { 0x0e, 0x0d20 }, /* Index: 0x3c, char: \x3d */ - { 0x0e, 0x0d58 }, /* Index: 0x3d, char: \x3e */ - { 0x0e, 0x0d90 }, /* Index: 0x3e, char: \x3f */ - { 0x0e, 0x0dc8 }, /* Index: 0x3f, char: \x40 */ - { 0x0e, 0x0e00 }, /* Index: 0x40, char: \x41 */ - { 0x0e, 0x0e38 }, /* Index: 0x41, char: \x42 */ - { 0x0e, 0x0e70 }, /* Index: 0x42, char: \x43 */ - { 0x0e, 0x0ea8 }, /* Index: 0x43, char: \x44 */ - { 0x0e, 0x0ee0 }, /* Index: 0x44, char: \x45 */ - { 0x0e, 0x0f18 }, /* Index: 0x45, char: \x46 */ - { 0x0e, 0x0f50 }, /* Index: 0x46, char: \x47 */ - { 0x0e, 0x0f88 }, /* Index: 0x47, char: \x48 */ - { 0x0e, 0x0fc0 }, /* Index: 0x48, char: \x49 */ - { 0x0e, 0x0ff8 }, /* Index: 0x49, char: \x4a */ - { 0x0e, 0x1030 }, /* Index: 0x4a, char: \x4b */ - { 0x0e, 0x1068 }, /* Index: 0x4b, char: \x4c */ - { 0x0e, 0x10a0 }, /* Index: 0x4c, char: \x4d */ - { 0x0e, 0x10d8 }, /* Index: 0x4d, char: \x4e */ - { 0x0e, 0x1110 }, /* Index: 0x4e, char: \x4f */ - { 0x0e, 0x1148 }, /* Index: 0x4f, char: \x50 */ - { 0x0e, 0x1180 }, /* Index: 0x50, char: \x51 */ - { 0x0e, 0x11b8 }, /* Index: 0x51, char: \x52 */ - { 0x0e, 0x11f0 }, /* Index: 0x52, char: \x53 */ - { 0x0e, 0x1228 }, /* Index: 0x53, char: \x54 */ - { 0x0e, 0x1260 }, /* Index: 0x54, char: \x55 */ - { 0x0e, 0x1298 }, /* Index: 0x55, char: \x56 */ - { 0x0e, 0x12d0 }, /* Index: 0x56, char: \x57 */ - { 0x0e, 0x1308 }, /* Index: 0x57, char: \x58 */ - { 0x0e, 0x1340 }, /* Index: 0x58, char: \x59 */ - { 0x0e, 0x1378 }, /* Index: 0x59, char: \x5a */ - { 0x0e, 0x13b0 }, /* Index: 0x5a, char: \x5b */ - { 0x0e, 0x13e8 }, /* Index: 0x5b, char: \x5c */ - { 0x0e, 0x1420 }, /* Index: 0x5c, char: \x5d */ - { 0x0e, 0x1458 }, /* Index: 0x5d, char: \x5e */ - { 0x0e, 0x1490 }, /* Index: 0x5e, char: \x5f */ - { 0x0e, 0x14c8 }, /* Index: 0x5f, char: \x60 */ - { 0x0e, 0x1500 }, /* Index: 0x60, char: \x61 */ - { 0x0e, 0x1538 }, /* Index: 0x61, char: \x62 */ - { 0x0e, 0x1570 }, /* Index: 0x62, char: \x63 */ - { 0x0e, 0x15a8 }, /* Index: 0x63, char: \x64 */ - { 0x0e, 0x15e0 }, /* Index: 0x64, char: \x65 */ - { 0x0e, 0x1618 }, /* Index: 0x65, char: \x66 */ - { 0x0e, 0x1650 }, /* Index: 0x66, char: \x67 */ - { 0x0e, 0x1688 }, /* Index: 0x67, char: \x68 */ - { 0x0e, 0x16c0 }, /* Index: 0x68, char: \x69 */ - { 0x0e, 0x16f8 }, /* Index: 0x69, char: \x6a */ - { 0x0e, 0x1730 }, /* Index: 0x6a, char: \x6b */ - { 0x0e, 0x1768 }, /* Index: 0x6b, char: \x6c */ - { 0x0e, 0x17a0 }, /* Index: 0x6c, char: \x6d */ - { 0x0e, 0x17d8 }, /* Index: 0x6d, char: \x6e */ - { 0x0e, 0x1810 }, /* Index: 0x6e, char: \x6f */ - { 0x0e, 0x1848 }, /* Index: 0x6f, char: \x70 */ - { 0x0e, 0x1880 }, /* Index: 0x70, char: \x71 */ - { 0x0e, 0x18b8 }, /* Index: 0x71, char: \x72 */ - { 0x0e, 0x18f0 }, /* Index: 0x72, char: \x73 */ - { 0x0e, 0x1928 }, /* Index: 0x73, char: \x74 */ - { 0x0e, 0x1960 }, /* Index: 0x74, char: \x75 */ - { 0x0e, 0x1998 }, /* Index: 0x75, char: \x76 */ - { 0x0e, 0x19d0 }, /* Index: 0x76, char: \x77 */ - { 0x0e, 0x1a08 }, /* Index: 0x77, char: \x78 */ - { 0x0e, 0x1a40 }, /* Index: 0x78, char: \x79 */ - { 0x0e, 0x1a78 }, /* Index: 0x79, char: \x7a */ - { 0x0e, 0x1ab0 }, /* Index: 0x7a, char: \x7b */ - { 0x0e, 0x1ae8 }, /* Index: 0x7b, char: \x7c */ - { 0x0e, 0x1b20 }, /* Index: 0x7c, char: \x7d */ - { 0x0e, 0x1b58 }, /* Index: 0x7d, char: \x7e */ - { 0x0e, 0x1b90 }, /* Index: 0x7e, char: \x7f */ - { 0x0e, 0x1bc8 }, /* Index: 0x7f, char: \x80 */ - { 0x0e, 0x1c00 }, /* Index: 0x80, char: \x81 */ - { 0x0e, 0x1c38 }, /* Index: 0x81, char: \x82 */ - { 0x0e, 0x1c70 }, /* Index: 0x82, char: \x83 */ - { 0x0e, 0x1ca8 }, /* Index: 0x83, char: \x84 */ - { 0x0e, 0x1ce0 }, /* Index: 0x84, char: \x85 */ - { 0x0e, 0x1d18 }, /* Index: 0x85, char: \x86 */ - { 0x0e, 0x1d50 }, /* Index: 0x86, char: \x87 */ - { 0x0e, 0x1d88 }, /* Index: 0x87, char: \x88 */ - { 0x0e, 0x1dc0 }, /* Index: 0x88, char: \x89 */ - { 0x0e, 0x1df8 }, /* Index: 0x89, char: \x8a */ - { 0x0e, 0x1e30 }, /* Index: 0x8a, char: \x8b */ - { 0x0e, 0x1e68 }, /* Index: 0x8b, char: \x8c */ - { 0x0e, 0x1ea0 }, /* Index: 0x8c, char: \x8d */ - { 0x0e, 0x1ed8 }, /* Index: 0x8d, char: \x8e */ - { 0x0e, 0x1f10 }, /* Index: 0x8e, char: \x8f */ - { 0x0e, 0x1f48 }, /* Index: 0x8f, char: \x90 */ - { 0x0e, 0x1f80 }, /* Index: 0x90, char: \x91 */ - { 0x0e, 0x1fb8 }, /* Index: 0x91, char: \x92 */ - { 0x0e, 0x1ff0 }, /* Index: 0x92, char: \x93 */ - { 0x0e, 0x2028 }, /* Index: 0x93, char: \x94 */ - { 0x0e, 0x2060 }, /* Index: 0x94, char: \x95 */ - { 0x0e, 0x2098 }, /* Index: 0x95, char: \x96 */ - { 0x0e, 0x20d0 }, /* Index: 0x96, char: \x97 */ - { 0x0e, 0x2108 }, /* Index: 0x97, char: \x98 */ - { 0x0e, 0x2140 }, /* Index: 0x98, char: \x99 */ - { 0x0e, 0x2178 }, /* Index: 0x99, char: \x9a */ - { 0x0e, 0x21b0 }, /* Index: 0x9a, char: \x9b */ - { 0x0e, 0x21e8 }, /* Index: 0x9b, char: \x9c */ - { 0x0e, 0x2220 }, /* Index: 0x9c, char: \x9d */ - { 0x0e, 0x2258 }, /* Index: 0x9d, char: \x9e */ - { 0x0e, 0x2290 }, /* Index: 0x9e, char: \x9f */ - { 0x0e, 0x22c8 }, /* Index: 0x9f, char: \xa0 */ - { 0x0e, 0x2300 }, /* Index: 0xa0, char: \xa1 */ - { 0x0e, 0x2338 }, /* Index: 0xa1, char: \xa2 */ - { 0x0e, 0x2370 }, /* Index: 0xa2, char: \xa3 */ - { 0x0e, 0x23a8 }, /* Index: 0xa3, char: \xa4 */ - { 0x0e, 0x23e0 }, /* Index: 0xa4, char: \xa5 */ - { 0x0e, 0x2418 }, /* Index: 0xa5, char: \xa6 */ - { 0x0e, 0x2450 }, /* Index: 0xa6, char: \xa7 */ - { 0x0e, 0x2488 }, /* Index: 0xa7, char: \xa8 */ - { 0x0e, 0x24c0 }, /* Index: 0xa8, char: \xa9 */ - { 0x0e, 0x24f8 }, /* Index: 0xa9, char: \xaa */ - { 0x0e, 0x2530 }, /* Index: 0xaa, char: \xab */ - { 0x0e, 0x2568 }, /* Index: 0xab, char: \xac */ - { 0x0e, 0x25a0 }, /* Index: 0xac, char: \xad */ - { 0x0e, 0x25d8 }, /* Index: 0xad, char: \xae */ - { 0x0e, 0x2610 }, /* Index: 0xae, char: \xaf */ - { 0x0e, 0x2648 }, /* Index: 0xaf, char: \xb0 */ - { 0x0e, 0x2680 }, /* Index: 0xb0, char: \xb1 */ - { 0x0e, 0x26b8 }, /* Index: 0xb1, char: \xb2 */ - { 0x0e, 0x26f0 }, /* Index: 0xb2, char: \xb3 */ - { 0x0e, 0x2728 }, /* Index: 0xb3, char: \xb4 */ - { 0x0e, 0x2760 }, /* Index: 0xb4, char: \xb5 */ - { 0x0e, 0x2798 }, /* Index: 0xb5, char: \xb6 */ - { 0x0e, 0x27d0 }, /* Index: 0xb6, char: \xb7 */ - { 0x0e, 0x2808 }, /* Index: 0xb7, char: \xb8 */ - { 0x0e, 0x2840 }, /* Index: 0xb8, char: \xb9 */ - { 0x0e, 0x2878 }, /* Index: 0xb9, char: \xba */ - { 0x0e, 0x28b0 }, /* Index: 0xba, char: \xbb */ - { 0x0e, 0x28e8 }, /* Index: 0xbb, char: \xbc */ - { 0x0e, 0x2920 }, /* Index: 0xbc, char: \xbd */ - { 0x0e, 0x2958 }, /* Index: 0xbd, char: \xbe */ - { 0x0e, 0x2990 }, /* Index: 0xbe, char: \xbf */ - { 0x0e, 0x29c8 }, /* Index: 0xbf, char: \xc0 */ - { 0x0e, 0x2a00 }, /* Index: 0xc0, char: \xc1 */ - { 0x0e, 0x2a38 }, /* Index: 0xc1, char: \xc2 */ - { 0x0e, 0x2a70 }, /* Index: 0xc2, char: \xc3 */ - { 0x0e, 0x2aa8 }, /* Index: 0xc3, char: \xc4 */ - { 0x0e, 0x2ae0 }, /* Index: 0xc4, char: \xc5 */ - { 0x0e, 0x2b18 }, /* Index: 0xc5, char: \xc6 */ - { 0x0e, 0x2b50 }, /* Index: 0xc6, char: \xc7 */ - { 0x0e, 0x2b88 }, /* Index: 0xc7, char: \xc8 */ - { 0x0e, 0x2bc0 }, /* Index: 0xc8, char: \xc9 */ - { 0x0e, 0x2bf8 }, /* Index: 0xc9, char: \xca */ - { 0x0e, 0x2c30 }, /* Index: 0xca, char: \xcb */ - { 0x0e, 0x2c68 }, /* Index: 0xcb, char: \xcc */ - { 0x0e, 0x2ca0 }, /* Index: 0xcc, char: \xcd */ - { 0x0e, 0x2cd8 }, /* Index: 0xcd, char: \xce */ - { 0x0e, 0x2d10 }, /* Index: 0xce, char: \xcf */ - { 0x0e, 0x2d48 }, /* Index: 0xcf, char: \xd0 */ - { 0x0e, 0x2d80 }, /* Index: 0xd0, char: \xd1 */ - { 0x0e, 0x2db8 }, /* Index: 0xd1, char: \xd2 */ - { 0x0e, 0x2df0 }, /* Index: 0xd2, char: \xd3 */ - { 0x0e, 0x2e28 }, /* Index: 0xd3, char: \xd4 */ - { 0x0e, 0x2e60 }, /* Index: 0xd4, char: \xd5 */ - { 0x0e, 0x2e98 }, /* Index: 0xd5, char: \xd6 */ - { 0x0e, 0x2ed0 }, /* Index: 0xd6, char: \xd7 */ - { 0x0e, 0x2f08 }, /* Index: 0xd7, char: \xd8 */ - { 0x0e, 0x2f40 }, /* Index: 0xd8, char: \xd9 */ - { 0x0e, 0x2f78 }, /* Index: 0xd9, char: \xda */ - { 0x0e, 0x2fb0 }, /* Index: 0xda, char: \xdb */ - { 0x0e, 0x2fe8 }, /* Index: 0xdb, char: \xdc */ - { 0x0e, 0x3020 }, /* Index: 0xdc, char: \xdd */ - { 0x0e, 0x3058 }, /* Index: 0xdd, char: \xde */ - { 0x0e, 0x3090 }, /* Index: 0xde, char: \xdf */ - { 0x0e, 0x30c8 }, /* Index: 0xdf, char: \xe0 */ - { 0x0e, 0x3100 }, /* Index: 0xe0, char: \xe1 */ - { 0x0e, 0x3138 }, /* Index: 0xe1, char: \xe2 */ - { 0x0e, 0x3170 }, /* Index: 0xe2, char: \xe3 */ - { 0x0e, 0x31a8 }, /* Index: 0xe3, char: \xe4 */ - { 0x0e, 0x31e0 }, /* Index: 0xe4, char: \xe5 */ - { 0x0e, 0x3218 }, /* Index: 0xe5, char: \xe6 */ - { 0x0e, 0x3250 }, /* Index: 0xe6, char: \xe7 */ - { 0x0e, 0x3288 }, /* Index: 0xe7, char: \xe8 */ - { 0x0e, 0x32c0 }, /* Index: 0xe8, char: \xe9 */ - { 0x0e, 0x32f8 }, /* Index: 0xe9, char: \xea */ - { 0x0e, 0x3330 }, /* Index: 0xea, char: \xeb */ - { 0x0e, 0x3368 }, /* Index: 0xeb, char: \xec */ - { 0x0e, 0x33a0 }, /* Index: 0xec, char: \xed */ - { 0x0e, 0x33d8 }, /* Index: 0xed, char: \xee */ - { 0x0e, 0x3410 }, /* Index: 0xee, char: \xef */ - { 0x0e, 0x3448 }, /* Index: 0xef, char: \xf0 */ - { 0x0e, 0x3480 }, /* Index: 0xf0, char: \xf1 */ - { 0x0e, 0x34b8 }, /* Index: 0xf1, char: \xf2 */ - { 0x0e, 0x34f0 }, /* Index: 0xf2, char: \xf3 */ - { 0x0e, 0x3528 }, /* Index: 0xf3, char: \xf4 */ - { 0x0e, 0x3560 }, /* Index: 0xf4, char: \xf5 */ - { 0x0e, 0x3598 }, /* Index: 0xf5, char: \xf6 */ - { 0x0e, 0x35d0 }, /* Index: 0xf6, char: \xf7 */ - { 0x0e, 0x3608 }, /* Index: 0xf7, char: \xf8 */ - { 0x0e, 0x3640 }, /* Index: 0xf8, char: \xf9 */ - { 0x0e, 0x3678 }, /* Index: 0xf9, char: \xfa */ - { 0x0e, 0x36b0 }, /* Index: 0xfa, char: \xfb */ - { 0x0e, 0x36e8 }, /* Index: 0xfb, char: \xfc */ - { 0x0e, 0x3720 }, /* Index: 0xfc, char: \xfd */ - { 0x0e, 0x3758 }, /* Index: 0xfd, char: \xfe */ - { 0x0e, 0x3790 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_14x28_iso8859_1_info = -{ - .height = 28, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_14x28_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_14x28_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_14X28_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_14x28_koi8_r.h b/extras/fonts/data/font_terminus_14x28_koi8_r.h deleted file mode 100644 index 1fa1b8c..0000000 --- a/extras/fonts/data/font_terminus_14x28_koi8_r.h +++ /dev/null @@ -1,7939 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 14x28 - * Charset: koi8_r - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_14X28_KOI8_R_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_14X28_KOI8_R_H_ - -static const uint8_t _fonts_terminus_14x28_koi8_r_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0xff, 0xf8, /* #############... */ - 0xff, 0xf8, /* #############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0038 */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - - /* Index: 0x02, char: \x03, offset: 0x0070 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x7f, 0x00, /* .#######........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x00a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x00e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0x00, /* .##...##........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0x60, /* ......##.##..... */ - 0x03, 0x30, /* ......##..##.... */ - 0x03, 0x18, /* ......##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x0118 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0150 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x0188 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x01c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x73, 0x00, /* .###..##........ */ - 0x7b, 0x00, /* .####.##........ */ - 0x6f, 0x00, /* .##.####........ */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xf8, /* ......#######... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x01f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0230 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x0268 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0c, char: \x0d, offset: 0x02a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0d, char: \x0e, offset: 0x02d8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0310 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0f, char: \x10, offset: 0x0348 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x03b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x03f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x0428 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0460 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x15, char: \x16, offset: 0x0498 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x16, char: \x17, offset: 0x04d0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x0508 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x18, char: \x19, offset: 0x0540 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x19, char: \x1a, offset: 0x0578 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x05b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x05e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0620 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x30, /* ..........##.... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0xf8, /* .############... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0658 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x80, /* ..#######....... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0690 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x06c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0738 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0770 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x07a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x30, /* ......##..##.... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x07e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x30, /* ..####....##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x3c, 0xc0, /* ..####..##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0xf0, /* ....##..####.... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x31, 0x98, /* ..##...##..##... */ - 0x30, 0xf0, /* ..##....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0818 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x18, /* ...##.##...##... */ - 0x31, 0x98, /* ..##...##..##... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x31, 0x98, /* ..##...##..##... */ - 0x1f, 0x18, /* ...#####...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0850 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x0888 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x08c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x08f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x18, 0x60, /* ...##....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0930 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0968 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x09a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x09d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0a10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0a48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x00, /* ....####........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0ab8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0af0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0b28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0xb0, /* .......##.##.... */ - 0x03, 0x30, /* ......##..##.... */ - 0x06, 0x30, /* .....##...##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0b60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0b98 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0bd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0c08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0c78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0cb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0ce8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0d20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0d58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0d90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0dc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x61, 0xf8, /* .##....######... */ - 0x63, 0x18, /* .##...##...##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x61, 0xe8, /* .##....####.#... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0e38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0e70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x0ea8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0ee0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x0f18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x0f50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0xf0, /* .##...######.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x0f88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0ff8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf8, /* .......######... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x1030 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x1068 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x10a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x10d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x1110 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x1148 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x1180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x31, 0xe0, /* ..##...####..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x11b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x11f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x1228 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x1260 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x1298 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x12d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x78, 0x78, /* .####....####... */ - 0x70, 0x38, /* .###......###... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x1308 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x1378 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x13b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x13e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1420 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1458 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1490 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x14c8 */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1538 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1570 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x15a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x15e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x1618 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1650 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x1688 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x16c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x16f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xe0, /* .......####..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1730 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1768 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x17a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x17d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x1810 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1848 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x18b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x67, 0xf0, /* .##..#######.... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x18f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1928 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0xe0, /* ......#####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1960 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1998 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x19d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1a08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x1a78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1ab0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1ae8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1b20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1b58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x30, /* ..####....##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x1b90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x1bc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1c00 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x81, char: \x82, offset: 0x1c38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x82, char: \x83, offset: 0x1c70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x83, char: \x84, offset: 0x1ca8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x1ce0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x1d18 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x86, char: \x87, offset: 0x1d50 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x87, char: \x88, offset: 0x1d88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x88, char: \x89, offset: 0x1dc0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x1df8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x8a, char: \x8b, offset: 0x1e30 */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x1e68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - - /* Index: 0x8c, char: \x8d, offset: 0x1ea0 */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - - /* Index: 0x8d, char: \x8e, offset: 0x1ed8 */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - - /* Index: 0x8e, char: \x8f, offset: 0x1f10 */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - - /* Index: 0x8f, char: \x90, offset: 0x1f48 */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x1f80 */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - - /* Index: 0x91, char: \x92, offset: 0x1fb8 */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - - /* Index: 0x92, char: \x93, offset: 0x1ff0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x93, char: \x94, offset: 0x2028 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x2060 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x2098 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0x60, /* ....##...##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0x60, /* ......##.##..... */ - 0x01, 0xe0, /* .......####..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x20d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x30, /* ...###....##.... */ - 0x36, 0x30, /* ..##.##...##.... */ - 0x63, 0x60, /* .##...##.##..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x30, /* ...###....##.... */ - 0x36, 0x30, /* ..##.##...##.... */ - 0x63, 0x60, /* .##...##.##..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x2108 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x2140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x2178 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x21b0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x21e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x2220 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x2258 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x2290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x22c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x2300 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa1, char: \xa2, offset: 0x2338 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xa2, char: \xa3, offset: 0x2370 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x23a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa4, char: \xa5, offset: 0x23e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa5, char: \xa6, offset: 0x2418 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xa6, char: \xa7, offset: 0x2450 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa7, char: \xa8, offset: 0x2488 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa8, char: \xa9, offset: 0x24c0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x24f8 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x2530 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2568 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x25a0 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x25d8 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x2610 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xaf, char: \xb0, offset: 0x2648 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb0, char: \xb1, offset: 0x2680 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb1, char: \xb2, offset: 0x26b8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xb2, char: \xb3, offset: 0x26f0 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2728 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb4, char: \xb5, offset: 0x2760 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb5, char: \xb6, offset: 0x2798 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xb6, char: \xb7, offset: 0x27d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb7, char: \xb8, offset: 0x2808 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0xfc, /* ######..######.. */ - 0xfc, 0xfc, /* ######..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb8, char: \xb9, offset: 0x2840 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x2878 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x28b0 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xfc, /* ######..######.. */ - 0xfc, 0xfc, /* ######..######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x28e8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2920 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xbd, char: \xbe, offset: 0x2958 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xfc, /* ######..######.. */ - 0xfc, 0xfc, /* ######..######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0xfc, /* ######..######.. */ - 0xfc, 0xfc, /* ######..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xbe, char: \xbf, offset: 0x2990 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x60, 0x30, /* .##.......##.... */ - 0xcf, 0x98, /* ##..#####..##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xcf, 0x98, /* ##..#####..##... */ - 0x60, 0x30, /* .##.......##.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x29c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0xe0, /* .##....####..... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x7e, 0x18, /* .######....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x2a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x2a38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x2a70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x2aa8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x2ae0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x2b18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x2b50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x2b88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x2bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x2bf8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x2c30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x2c68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf0, /* .....#######.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x2ca0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x2cd8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x2d10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x2d48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x2d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x01, 0xb0, /* .......##.##.... */ - 0x03, 0x30, /* ......##..##.... */ - 0x06, 0x30, /* .....##...##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x2db8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x2df0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x2e28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x2e60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x2e98 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1b, 0x60, /* ...##.##.##..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x1b, 0x60, /* ...##.##.##..... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x2ed0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x2f08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xc0, /* ..########...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x2f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x61, 0x98, /* .##....##..##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x61, 0x98, /* .##....##..##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x2f78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x2fb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x18, /* ..##..##...##... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x2fe8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x3020 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x18, /* ..##..##...##... */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x3058 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x3090 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xf0, 0x00, /* ####............ */ - 0xf0, 0x00, /* ####............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xc0, /* ..########...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x30c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0xe0, /* .##....####..... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x7e, 0x18, /* .######....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x3100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x3138 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x3170 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x31a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf0, /* .....#######.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x7f, 0xf8, /* .############... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x31e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x3218 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x3250 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x3288 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x32c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x32f8 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xb0, /* .##....##.##.... */ - 0x63, 0x30, /* .##...##..##.... */ - 0x66, 0x30, /* .##..##...##.... */ - 0x6c, 0x30, /* .##.##....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x3330 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x3368 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf0, /* .....#######.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x33a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x6c, 0xd8, /* .##.##..##.##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x33d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x3410 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x3448 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x3480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0xb0, /* .......##.##.... */ - 0x03, 0x30, /* ......##..##.... */ - 0x06, 0x30, /* .....##...##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x34b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x34f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x3528 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x3560 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x3598 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1b, 0x60, /* ...##.##.##..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x1b, 0x60, /* ...##.##.##..... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x35d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x3608 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x3640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x61, 0x98, /* .##....##..##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x61, 0x98, /* .##....##..##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x3678 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x36b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x18, /* ..##..##...##... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x36e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x3720 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x33, 0x18, /* ..##..##...##... */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x3758 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x3790 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xf0, 0x00, /* ####............ */ - 0xf0, 0x00, /* ####............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_14x28_koi8_r_descriptors[] = { - { 0x0e, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0e, 0x0038 }, /* Index: 0x01, char: \x02 */ - { 0x0e, 0x0070 }, /* Index: 0x02, char: \x03 */ - { 0x0e, 0x00a8 }, /* Index: 0x03, char: \x04 */ - { 0x0e, 0x00e0 }, /* Index: 0x04, char: \x05 */ - { 0x0e, 0x0118 }, /* Index: 0x05, char: \x06 */ - { 0x0e, 0x0150 }, /* Index: 0x06, char: \x07 */ - { 0x0e, 0x0188 }, /* Index: 0x07, char: \x08 */ - { 0x0e, 0x01c0 }, /* Index: 0x08, char: \x09 */ - { 0x0e, 0x01f8 }, /* Index: 0x09, char: \x0a */ - { 0x0e, 0x0230 }, /* Index: 0x0a, char: \x0b */ - { 0x0e, 0x0268 }, /* Index: 0x0b, char: \x0c */ - { 0x0e, 0x02a0 }, /* Index: 0x0c, char: \x0d */ - { 0x0e, 0x02d8 }, /* Index: 0x0d, char: \x0e */ - { 0x0e, 0x0310 }, /* Index: 0x0e, char: \x0f */ - { 0x0e, 0x0348 }, /* Index: 0x0f, char: \x10 */ - { 0x0e, 0x0380 }, /* Index: 0x10, char: \x11 */ - { 0x0e, 0x03b8 }, /* Index: 0x11, char: \x12 */ - { 0x0e, 0x03f0 }, /* Index: 0x12, char: \x13 */ - { 0x0e, 0x0428 }, /* Index: 0x13, char: \x14 */ - { 0x0e, 0x0460 }, /* Index: 0x14, char: \x15 */ - { 0x0e, 0x0498 }, /* Index: 0x15, char: \x16 */ - { 0x0e, 0x04d0 }, /* Index: 0x16, char: \x17 */ - { 0x0e, 0x0508 }, /* Index: 0x17, char: \x18 */ - { 0x0e, 0x0540 }, /* Index: 0x18, char: \x19 */ - { 0x0e, 0x0578 }, /* Index: 0x19, char: \x1a */ - { 0x0e, 0x05b0 }, /* Index: 0x1a, char: \x1b */ - { 0x0e, 0x05e8 }, /* Index: 0x1b, char: \x1c */ - { 0x0e, 0x0620 }, /* Index: 0x1c, char: \x1d */ - { 0x0e, 0x0658 }, /* Index: 0x1d, char: \x1e */ - { 0x0e, 0x0690 }, /* Index: 0x1e, char: \x1f */ - { 0x0e, 0x06c8 }, /* Index: 0x1f, char: \x20 */ - { 0x0e, 0x0700 }, /* Index: 0x20, char: \x21 */ - { 0x0e, 0x0738 }, /* Index: 0x21, char: \x22 */ - { 0x0e, 0x0770 }, /* Index: 0x22, char: \x23 */ - { 0x0e, 0x07a8 }, /* Index: 0x23, char: \x24 */ - { 0x0e, 0x07e0 }, /* Index: 0x24, char: \x25 */ - { 0x0e, 0x0818 }, /* Index: 0x25, char: \x26 */ - { 0x0e, 0x0850 }, /* Index: 0x26, char: \x27 */ - { 0x0e, 0x0888 }, /* Index: 0x27, char: \x28 */ - { 0x0e, 0x08c0 }, /* Index: 0x28, char: \x29 */ - { 0x0e, 0x08f8 }, /* Index: 0x29, char: \x2a */ - { 0x0e, 0x0930 }, /* Index: 0x2a, char: \x2b */ - { 0x0e, 0x0968 }, /* Index: 0x2b, char: \x2c */ - { 0x0e, 0x09a0 }, /* Index: 0x2c, char: \x2d */ - { 0x0e, 0x09d8 }, /* Index: 0x2d, char: \x2e */ - { 0x0e, 0x0a10 }, /* Index: 0x2e, char: \x2f */ - { 0x0e, 0x0a48 }, /* Index: 0x2f, char: \x30 */ - { 0x0e, 0x0a80 }, /* Index: 0x30, char: \x31 */ - { 0x0e, 0x0ab8 }, /* Index: 0x31, char: \x32 */ - { 0x0e, 0x0af0 }, /* Index: 0x32, char: \x33 */ - { 0x0e, 0x0b28 }, /* Index: 0x33, char: \x34 */ - { 0x0e, 0x0b60 }, /* Index: 0x34, char: \x35 */ - { 0x0e, 0x0b98 }, /* Index: 0x35, char: \x36 */ - { 0x0e, 0x0bd0 }, /* Index: 0x36, char: \x37 */ - { 0x0e, 0x0c08 }, /* Index: 0x37, char: \x38 */ - { 0x0e, 0x0c40 }, /* Index: 0x38, char: \x39 */ - { 0x0e, 0x0c78 }, /* Index: 0x39, char: \x3a */ - { 0x0e, 0x0cb0 }, /* Index: 0x3a, char: \x3b */ - { 0x0e, 0x0ce8 }, /* Index: 0x3b, char: \x3c */ - { 0x0e, 0x0d20 }, /* Index: 0x3c, char: \x3d */ - { 0x0e, 0x0d58 }, /* Index: 0x3d, char: \x3e */ - { 0x0e, 0x0d90 }, /* Index: 0x3e, char: \x3f */ - { 0x0e, 0x0dc8 }, /* Index: 0x3f, char: \x40 */ - { 0x0e, 0x0e00 }, /* Index: 0x40, char: \x41 */ - { 0x0e, 0x0e38 }, /* Index: 0x41, char: \x42 */ - { 0x0e, 0x0e70 }, /* Index: 0x42, char: \x43 */ - { 0x0e, 0x0ea8 }, /* Index: 0x43, char: \x44 */ - { 0x0e, 0x0ee0 }, /* Index: 0x44, char: \x45 */ - { 0x0e, 0x0f18 }, /* Index: 0x45, char: \x46 */ - { 0x0e, 0x0f50 }, /* Index: 0x46, char: \x47 */ - { 0x0e, 0x0f88 }, /* Index: 0x47, char: \x48 */ - { 0x0e, 0x0fc0 }, /* Index: 0x48, char: \x49 */ - { 0x0e, 0x0ff8 }, /* Index: 0x49, char: \x4a */ - { 0x0e, 0x1030 }, /* Index: 0x4a, char: \x4b */ - { 0x0e, 0x1068 }, /* Index: 0x4b, char: \x4c */ - { 0x0e, 0x10a0 }, /* Index: 0x4c, char: \x4d */ - { 0x0e, 0x10d8 }, /* Index: 0x4d, char: \x4e */ - { 0x0e, 0x1110 }, /* Index: 0x4e, char: \x4f */ - { 0x0e, 0x1148 }, /* Index: 0x4f, char: \x50 */ - { 0x0e, 0x1180 }, /* Index: 0x50, char: \x51 */ - { 0x0e, 0x11b8 }, /* Index: 0x51, char: \x52 */ - { 0x0e, 0x11f0 }, /* Index: 0x52, char: \x53 */ - { 0x0e, 0x1228 }, /* Index: 0x53, char: \x54 */ - { 0x0e, 0x1260 }, /* Index: 0x54, char: \x55 */ - { 0x0e, 0x1298 }, /* Index: 0x55, char: \x56 */ - { 0x0e, 0x12d0 }, /* Index: 0x56, char: \x57 */ - { 0x0e, 0x1308 }, /* Index: 0x57, char: \x58 */ - { 0x0e, 0x1340 }, /* Index: 0x58, char: \x59 */ - { 0x0e, 0x1378 }, /* Index: 0x59, char: \x5a */ - { 0x0e, 0x13b0 }, /* Index: 0x5a, char: \x5b */ - { 0x0e, 0x13e8 }, /* Index: 0x5b, char: \x5c */ - { 0x0e, 0x1420 }, /* Index: 0x5c, char: \x5d */ - { 0x0e, 0x1458 }, /* Index: 0x5d, char: \x5e */ - { 0x0e, 0x1490 }, /* Index: 0x5e, char: \x5f */ - { 0x0e, 0x14c8 }, /* Index: 0x5f, char: \x60 */ - { 0x0e, 0x1500 }, /* Index: 0x60, char: \x61 */ - { 0x0e, 0x1538 }, /* Index: 0x61, char: \x62 */ - { 0x0e, 0x1570 }, /* Index: 0x62, char: \x63 */ - { 0x0e, 0x15a8 }, /* Index: 0x63, char: \x64 */ - { 0x0e, 0x15e0 }, /* Index: 0x64, char: \x65 */ - { 0x0e, 0x1618 }, /* Index: 0x65, char: \x66 */ - { 0x0e, 0x1650 }, /* Index: 0x66, char: \x67 */ - { 0x0e, 0x1688 }, /* Index: 0x67, char: \x68 */ - { 0x0e, 0x16c0 }, /* Index: 0x68, char: \x69 */ - { 0x0e, 0x16f8 }, /* Index: 0x69, char: \x6a */ - { 0x0e, 0x1730 }, /* Index: 0x6a, char: \x6b */ - { 0x0e, 0x1768 }, /* Index: 0x6b, char: \x6c */ - { 0x0e, 0x17a0 }, /* Index: 0x6c, char: \x6d */ - { 0x0e, 0x17d8 }, /* Index: 0x6d, char: \x6e */ - { 0x0e, 0x1810 }, /* Index: 0x6e, char: \x6f */ - { 0x0e, 0x1848 }, /* Index: 0x6f, char: \x70 */ - { 0x0e, 0x1880 }, /* Index: 0x70, char: \x71 */ - { 0x0e, 0x18b8 }, /* Index: 0x71, char: \x72 */ - { 0x0e, 0x18f0 }, /* Index: 0x72, char: \x73 */ - { 0x0e, 0x1928 }, /* Index: 0x73, char: \x74 */ - { 0x0e, 0x1960 }, /* Index: 0x74, char: \x75 */ - { 0x0e, 0x1998 }, /* Index: 0x75, char: \x76 */ - { 0x0e, 0x19d0 }, /* Index: 0x76, char: \x77 */ - { 0x0e, 0x1a08 }, /* Index: 0x77, char: \x78 */ - { 0x0e, 0x1a40 }, /* Index: 0x78, char: \x79 */ - { 0x0e, 0x1a78 }, /* Index: 0x79, char: \x7a */ - { 0x0e, 0x1ab0 }, /* Index: 0x7a, char: \x7b */ - { 0x0e, 0x1ae8 }, /* Index: 0x7b, char: \x7c */ - { 0x0e, 0x1b20 }, /* Index: 0x7c, char: \x7d */ - { 0x0e, 0x1b58 }, /* Index: 0x7d, char: \x7e */ - { 0x0e, 0x1b90 }, /* Index: 0x7e, char: \x7f */ - { 0x0e, 0x1bc8 }, /* Index: 0x7f, char: \x80 */ - { 0x0e, 0x1c00 }, /* Index: 0x80, char: \x81 */ - { 0x0e, 0x1c38 }, /* Index: 0x81, char: \x82 */ - { 0x0e, 0x1c70 }, /* Index: 0x82, char: \x83 */ - { 0x0e, 0x1ca8 }, /* Index: 0x83, char: \x84 */ - { 0x0e, 0x1ce0 }, /* Index: 0x84, char: \x85 */ - { 0x0e, 0x1d18 }, /* Index: 0x85, char: \x86 */ - { 0x0e, 0x1d50 }, /* Index: 0x86, char: \x87 */ - { 0x0e, 0x1d88 }, /* Index: 0x87, char: \x88 */ - { 0x0e, 0x1dc0 }, /* Index: 0x88, char: \x89 */ - { 0x0e, 0x1df8 }, /* Index: 0x89, char: \x8a */ - { 0x0e, 0x1e30 }, /* Index: 0x8a, char: \x8b */ - { 0x0e, 0x1e68 }, /* Index: 0x8b, char: \x8c */ - { 0x0e, 0x1ea0 }, /* Index: 0x8c, char: \x8d */ - { 0x0e, 0x1ed8 }, /* Index: 0x8d, char: \x8e */ - { 0x0e, 0x1f10 }, /* Index: 0x8e, char: \x8f */ - { 0x0e, 0x1f48 }, /* Index: 0x8f, char: \x90 */ - { 0x0e, 0x1f80 }, /* Index: 0x90, char: \x91 */ - { 0x0e, 0x1fb8 }, /* Index: 0x91, char: \x92 */ - { 0x0e, 0x1ff0 }, /* Index: 0x92, char: \x93 */ - { 0x0e, 0x2028 }, /* Index: 0x93, char: \x94 */ - { 0x0e, 0x2060 }, /* Index: 0x94, char: \x95 */ - { 0x0e, 0x2098 }, /* Index: 0x95, char: \x96 */ - { 0x0e, 0x20d0 }, /* Index: 0x96, char: \x97 */ - { 0x0e, 0x2108 }, /* Index: 0x97, char: \x98 */ - { 0x0e, 0x2140 }, /* Index: 0x98, char: \x99 */ - { 0x0e, 0x2178 }, /* Index: 0x99, char: \x9a */ - { 0x0e, 0x21b0 }, /* Index: 0x9a, char: \x9b */ - { 0x0e, 0x21e8 }, /* Index: 0x9b, char: \x9c */ - { 0x0e, 0x2220 }, /* Index: 0x9c, char: \x9d */ - { 0x0e, 0x2258 }, /* Index: 0x9d, char: \x9e */ - { 0x0e, 0x2290 }, /* Index: 0x9e, char: \x9f */ - { 0x0e, 0x22c8 }, /* Index: 0x9f, char: \xa0 */ - { 0x0e, 0x2300 }, /* Index: 0xa0, char: \xa1 */ - { 0x0e, 0x2338 }, /* Index: 0xa1, char: \xa2 */ - { 0x0e, 0x2370 }, /* Index: 0xa2, char: \xa3 */ - { 0x0e, 0x23a8 }, /* Index: 0xa3, char: \xa4 */ - { 0x0e, 0x23e0 }, /* Index: 0xa4, char: \xa5 */ - { 0x0e, 0x2418 }, /* Index: 0xa5, char: \xa6 */ - { 0x0e, 0x2450 }, /* Index: 0xa6, char: \xa7 */ - { 0x0e, 0x2488 }, /* Index: 0xa7, char: \xa8 */ - { 0x0e, 0x24c0 }, /* Index: 0xa8, char: \xa9 */ - { 0x0e, 0x24f8 }, /* Index: 0xa9, char: \xaa */ - { 0x0e, 0x2530 }, /* Index: 0xaa, char: \xab */ - { 0x0e, 0x2568 }, /* Index: 0xab, char: \xac */ - { 0x0e, 0x25a0 }, /* Index: 0xac, char: \xad */ - { 0x0e, 0x25d8 }, /* Index: 0xad, char: \xae */ - { 0x0e, 0x2610 }, /* Index: 0xae, char: \xaf */ - { 0x0e, 0x2648 }, /* Index: 0xaf, char: \xb0 */ - { 0x0e, 0x2680 }, /* Index: 0xb0, char: \xb1 */ - { 0x0e, 0x26b8 }, /* Index: 0xb1, char: \xb2 */ - { 0x0e, 0x26f0 }, /* Index: 0xb2, char: \xb3 */ - { 0x0e, 0x2728 }, /* Index: 0xb3, char: \xb4 */ - { 0x0e, 0x2760 }, /* Index: 0xb4, char: \xb5 */ - { 0x0e, 0x2798 }, /* Index: 0xb5, char: \xb6 */ - { 0x0e, 0x27d0 }, /* Index: 0xb6, char: \xb7 */ - { 0x0e, 0x2808 }, /* Index: 0xb7, char: \xb8 */ - { 0x0e, 0x2840 }, /* Index: 0xb8, char: \xb9 */ - { 0x0e, 0x2878 }, /* Index: 0xb9, char: \xba */ - { 0x0e, 0x28b0 }, /* Index: 0xba, char: \xbb */ - { 0x0e, 0x28e8 }, /* Index: 0xbb, char: \xbc */ - { 0x0e, 0x2920 }, /* Index: 0xbc, char: \xbd */ - { 0x0e, 0x2958 }, /* Index: 0xbd, char: \xbe */ - { 0x0e, 0x2990 }, /* Index: 0xbe, char: \xbf */ - { 0x0e, 0x29c8 }, /* Index: 0xbf, char: \xc0 */ - { 0x0e, 0x2a00 }, /* Index: 0xc0, char: \xc1 */ - { 0x0e, 0x2a38 }, /* Index: 0xc1, char: \xc2 */ - { 0x0e, 0x2a70 }, /* Index: 0xc2, char: \xc3 */ - { 0x0e, 0x2aa8 }, /* Index: 0xc3, char: \xc4 */ - { 0x0e, 0x2ae0 }, /* Index: 0xc4, char: \xc5 */ - { 0x0e, 0x2b18 }, /* Index: 0xc5, char: \xc6 */ - { 0x0e, 0x2b50 }, /* Index: 0xc6, char: \xc7 */ - { 0x0e, 0x2b88 }, /* Index: 0xc7, char: \xc8 */ - { 0x0e, 0x2bc0 }, /* Index: 0xc8, char: \xc9 */ - { 0x0e, 0x2bf8 }, /* Index: 0xc9, char: \xca */ - { 0x0e, 0x2c30 }, /* Index: 0xca, char: \xcb */ - { 0x0e, 0x2c68 }, /* Index: 0xcb, char: \xcc */ - { 0x0e, 0x2ca0 }, /* Index: 0xcc, char: \xcd */ - { 0x0e, 0x2cd8 }, /* Index: 0xcd, char: \xce */ - { 0x0e, 0x2d10 }, /* Index: 0xce, char: \xcf */ - { 0x0e, 0x2d48 }, /* Index: 0xcf, char: \xd0 */ - { 0x0e, 0x2d80 }, /* Index: 0xd0, char: \xd1 */ - { 0x0e, 0x2db8 }, /* Index: 0xd1, char: \xd2 */ - { 0x0e, 0x2df0 }, /* Index: 0xd2, char: \xd3 */ - { 0x0e, 0x2e28 }, /* Index: 0xd3, char: \xd4 */ - { 0x0e, 0x2e60 }, /* Index: 0xd4, char: \xd5 */ - { 0x0e, 0x2e98 }, /* Index: 0xd5, char: \xd6 */ - { 0x0e, 0x2ed0 }, /* Index: 0xd6, char: \xd7 */ - { 0x0e, 0x2f08 }, /* Index: 0xd7, char: \xd8 */ - { 0x0e, 0x2f40 }, /* Index: 0xd8, char: \xd9 */ - { 0x0e, 0x2f78 }, /* Index: 0xd9, char: \xda */ - { 0x0e, 0x2fb0 }, /* Index: 0xda, char: \xdb */ - { 0x0e, 0x2fe8 }, /* Index: 0xdb, char: \xdc */ - { 0x0e, 0x3020 }, /* Index: 0xdc, char: \xdd */ - { 0x0e, 0x3058 }, /* Index: 0xdd, char: \xde */ - { 0x0e, 0x3090 }, /* Index: 0xde, char: \xdf */ - { 0x0e, 0x30c8 }, /* Index: 0xdf, char: \xe0 */ - { 0x0e, 0x3100 }, /* Index: 0xe0, char: \xe1 */ - { 0x0e, 0x3138 }, /* Index: 0xe1, char: \xe2 */ - { 0x0e, 0x3170 }, /* Index: 0xe2, char: \xe3 */ - { 0x0e, 0x31a8 }, /* Index: 0xe3, char: \xe4 */ - { 0x0e, 0x31e0 }, /* Index: 0xe4, char: \xe5 */ - { 0x0e, 0x3218 }, /* Index: 0xe5, char: \xe6 */ - { 0x0e, 0x3250 }, /* Index: 0xe6, char: \xe7 */ - { 0x0e, 0x3288 }, /* Index: 0xe7, char: \xe8 */ - { 0x0e, 0x32c0 }, /* Index: 0xe8, char: \xe9 */ - { 0x0e, 0x32f8 }, /* Index: 0xe9, char: \xea */ - { 0x0e, 0x3330 }, /* Index: 0xea, char: \xeb */ - { 0x0e, 0x3368 }, /* Index: 0xeb, char: \xec */ - { 0x0e, 0x33a0 }, /* Index: 0xec, char: \xed */ - { 0x0e, 0x33d8 }, /* Index: 0xed, char: \xee */ - { 0x0e, 0x3410 }, /* Index: 0xee, char: \xef */ - { 0x0e, 0x3448 }, /* Index: 0xef, char: \xf0 */ - { 0x0e, 0x3480 }, /* Index: 0xf0, char: \xf1 */ - { 0x0e, 0x34b8 }, /* Index: 0xf1, char: \xf2 */ - { 0x0e, 0x34f0 }, /* Index: 0xf2, char: \xf3 */ - { 0x0e, 0x3528 }, /* Index: 0xf3, char: \xf4 */ - { 0x0e, 0x3560 }, /* Index: 0xf4, char: \xf5 */ - { 0x0e, 0x3598 }, /* Index: 0xf5, char: \xf6 */ - { 0x0e, 0x35d0 }, /* Index: 0xf6, char: \xf7 */ - { 0x0e, 0x3608 }, /* Index: 0xf7, char: \xf8 */ - { 0x0e, 0x3640 }, /* Index: 0xf8, char: \xf9 */ - { 0x0e, 0x3678 }, /* Index: 0xf9, char: \xfa */ - { 0x0e, 0x36b0 }, /* Index: 0xfa, char: \xfb */ - { 0x0e, 0x36e8 }, /* Index: 0xfb, char: \xfc */ - { 0x0e, 0x3720 }, /* Index: 0xfc, char: \xfd */ - { 0x0e, 0x3758 }, /* Index: 0xfd, char: \xfe */ - { 0x0e, 0x3790 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_14x28_koi8_r_info = -{ - .height = 28, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_14x28_koi8_r_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_14x28_koi8_r_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_14X28_KOI8_R_H_ */ diff --git a/extras/fonts/data/font_terminus_16x32_iso8859_1.h b/extras/fonts/data/font_terminus_16x32_iso8859_1.h deleted file mode 100644 index cf73ac4..0000000 --- a/extras/fonts/data/font_terminus_16x32_iso8859_1.h +++ /dev/null @@ -1,8959 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 16x32 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 02:38:17 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_16X32_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_16X32_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_16x32_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x7f, 0xfe, /* .##############. */ - 0x7f, 0xfe, /* .##############. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0040 */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - - /* Index: 0x02, char: \x03, offset: 0x0080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x00c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x0100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x0c, /* ......##....##.. */ - 0x03, 0x0c, /* ......##....##.. */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x70, /* ......##.###.... */ - 0x03, 0x38, /* ......##..###... */ - 0x03, 0x1c, /* ......##...###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x0140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x01c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x71, 0x80, /* .###...##....... */ - 0x79, 0x80, /* .####..##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x67, 0x80, /* .##..####....... */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x0240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0280 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x02c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x0d, char: \x0e, offset: 0x0340 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0380 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x0f, char: \x10, offset: 0x03c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x0440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x04c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0500 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x15, char: \x16, offset: 0x0540 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x16, char: \x17, offset: 0x0580 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x05c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x18, char: \x19, offset: 0x0600 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x19, char: \x1a, offset: 0x0640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x0680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x06c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xe0, /* ......#####..... */ - 0x07, 0xf0, /* .....#######.... */ - 0x0e, 0x38, /* ....###...###... */ - 0x0c, 0x18, /* ....##.....##... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x07c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x08c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x39, 0x80, /* ..###..##....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xf8, /* ....#########... */ - 0x01, 0x9c, /* .......##..###.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x0900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x18, /* ...####....##... */ - 0x3f, 0x18, /* ..######...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x3f, 0x60, /* ..######.##..... */ - 0x1e, 0x60, /* ...####..##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0xf0, /* ....##..####.... */ - 0x0d, 0xf8, /* ....##.######... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x31, 0xf8, /* ..##...######... */ - 0x30, 0xf0, /* ..##....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x00, /* ....####........ */ - 0x1f, 0x8c, /* ...######...##.. */ - 0x39, 0xdc, /* ..###..###.###.. */ - 0x70, 0xf8, /* .###....#####... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x70, 0xf8, /* .###....#####... */ - 0x3f, 0xdc, /* ..########.###.. */ - 0x1f, 0x8c, /* ...######...##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x09c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x0a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x0a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x07, 0xf8, /* .....########... */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x7c, /* .........#####.. */ - 0x00, 0xec, /* ........###.##.. */ - 0x01, 0xcc, /* .......###..##.. */ - 0x03, 0x8c, /* ......###...##.. */ - 0x07, 0x0c, /* .....###....##.. */ - 0x0e, 0x0c, /* ....###.....##.. */ - 0x1c, 0x0c, /* ...###......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf8, /* ....#########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x00, /* ..###........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x18, /* ..##.......##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x61, 0xfc, /* .##....#######.. */ - 0x63, 0xfc, /* .##...########.. */ - 0x67, 0x0c, /* .##..###....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x67, 0x1c, /* .##..###...###.. */ - 0x63, 0xfc, /* .##...########.. */ - 0x61, 0xec, /* .##....####.##.. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x00, /* .###............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x1000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x1040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x18, /* ..##.......##... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x1080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x10c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x38, /* ..##......###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x1100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x1140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x1180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0xfc, /* ..##....######.. */ - 0x30, 0xfc, /* ..##....######.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x11c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x1200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x1240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x7e, /* .........######. */ - 0x00, 0x7e, /* .........######. */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x1280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x37, 0x00, /* ..##.###........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x37, 0x00, /* ..##.###........ */ - 0x33, 0x80, /* ..##..###....... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x12c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x1300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x67, 0xcc, /* .##..#####..##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x61, 0x0c, /* .##....#....##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x1380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x13c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x1400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x38, 0xfc, /* ..###...######.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0e, /* ............###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x1440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x37, 0x00, /* ..##.###........ */ - 0x33, 0x80, /* ..##..###....... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x1480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x00, /* ..###........... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x14c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x1540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x1580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x61, 0x0c, /* .##....#....##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x67, 0xcc, /* .##..#####..##.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x15c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x1640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x1680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x16c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x17c0 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x1900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x1940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x7e, /* .........######. */ - 0x00, 0xfe, /* ........#######. */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x19c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x1a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x1c, 0x38, /* ...###....###... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x1c, /* ...##......###.. */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x1b, 0x80, /* ...##.###....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x1b, 0x80, /* ...##.###....... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x1c, /* ...##......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x1b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x31, 0x9c, /* ..##...##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x1b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x1b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x1c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0xfc, /* ..##..########.. */ - 0x37, 0xfc, /* ..##.#########.. */ - 0x3e, 0x00, /* ..#####......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x38, 0x00, /* ..###........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x00, /* ..###........... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xfc, /* .......#######.. */ - 0x00, 0xfc, /* ........######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1c, 0x38, /* ...###....###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x1e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1e, 0x00, /* ...####......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xf0, /* .......#####.... */ - 0x00, 0xf0, /* ........####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xf0, /* ........####.... */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x0c, /* ....###.....##.. */ - 0x1f, 0x0c, /* ...#####....##.. */ - 0x3b, 0x8c, /* ..###.###...##.. */ - 0x31, 0xdc, /* ..##...###.###.. */ - 0x30, 0xf8, /* ..##....#####... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x1fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x2000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x2040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x2080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x20c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x2100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x2140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x2180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x21c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x2200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x2240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x2280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x22c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x2300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x2340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x2380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x23c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x2400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x2440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x2480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x24c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x2500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x2540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x2580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x25c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x2600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x2640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x2680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x26c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x2700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x2740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x2780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x27c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x2800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x2840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x2880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xe0, /* ......#####..... */ - 0x07, 0xf0, /* .....#######.... */ - 0x0e, 0x38, /* ....###...###... */ - 0x0c, 0x18, /* ....##.....##... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x28c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1c, 0x38, /* ...###....###... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x1c, 0x38, /* ...###....###... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x2900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x2940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x2980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x00, /* ...##........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0xc0, /* ....######...... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x1c, 0x30, /* ...###....##.... */ - 0x0e, 0x30, /* ....###...##.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x29c0 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x2a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x70, 0x0e, /* .###........###. */ - 0x67, 0xe6, /* .##..######..##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x6c, 0x36, /* .##.##....##.##. */ - 0x6c, 0x06, /* .##.##.......##. */ - 0x6c, 0x06, /* .##.##.......##. */ - 0x6c, 0x06, /* .##.##.......##. */ - 0x6c, 0x06, /* .##.##.......##. */ - 0x6c, 0x36, /* .##.##....##.##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x67, 0xe6, /* .##..######..##. */ - 0x70, 0x0e, /* .###........###. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x2a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x18, /* ...........##... */ - 0x07, 0xf8, /* .....########... */ - 0x0f, 0xf8, /* ....#########... */ - 0x1c, 0x18, /* ...###.....##... */ - 0x18, 0x18, /* ...##......##... */ - 0x1c, 0x18, /* ...###.....##... */ - 0x0f, 0xf8, /* ....#########... */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x2a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xce, /* .......###..###. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x38, /* .....###..###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0x38, /* .....###..###... */ - 0x03, 0x9c, /* ......###..###.. */ - 0x01, 0xce, /* .......###..###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x2b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x2b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x70, 0x0e, /* .###........###. */ - 0x6f, 0xe6, /* .##.#######..##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x6c, 0x36, /* .##.##....##.##. */ - 0x6c, 0x36, /* .##.##....##.##. */ - 0x6c, 0x36, /* .##.##....##.##. */ - 0x6f, 0xe6, /* .##.#######..##. */ - 0x6f, 0xc6, /* .##.######...##. */ - 0x6d, 0xc6, /* .##.##.###...##. */ - 0x6c, 0xe6, /* .##.##..###..##. */ - 0x6c, 0x76, /* .##.##...###.##. */ - 0x70, 0x0e, /* .###........###. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x2b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x2bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x2c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x2c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x2c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x01, 0xe0, /* .......####..... */ - 0x01, 0xe0, /* .......####..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x2d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x3f, 0xec, /* ..#########.##.. */ - 0x3f, 0xcc, /* ..########..##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb5, char: \xb6, offset: 0x2d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x71, 0x8c, /* .###...##...##.. */ - 0x61, 0x8c, /* .##....##...##.. */ - 0x61, 0x8c, /* .##....##...##.. */ - 0x61, 0x8c, /* .##....##...##.. */ - 0x61, 0x8c, /* .##....##...##.. */ - 0x61, 0x8c, /* .##....##...##.. */ - 0x71, 0x8c, /* .###...##...##.. */ - 0x3f, 0x8c, /* ..#######...##.. */ - 0x1f, 0x8c, /* ...######...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x2d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x2dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb8, char: \xb9, offset: 0x2e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x2e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x1c, 0x38, /* ...###....###... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x2e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x80, /* .###..###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0x38, /* .....###..###... */ - 0x03, 0x9c, /* ......###..###.. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x38, /* .....###..###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x73, 0x80, /* .###..###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x2ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x06, /* ....##.......##. */ - 0x0c, 0x0e, /* ....##......###. */ - 0x0c, 0x1c, /* ....##.....###.. */ - 0x0c, 0x38, /* ....##....###... */ - 0x0c, 0x70, /* ....##...###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc6, /* .......###...##. */ - 0x03, 0x8e, /* ......###...###. */ - 0x07, 0x1e, /* .....###...####. */ - 0x0e, 0x36, /* ....###...##.##. */ - 0x1c, 0x66, /* ...###...##..##. */ - 0x38, 0xc6, /* ..###...##...##. */ - 0x71, 0xfe, /* .###...########. */ - 0x61, 0xfe, /* .##....########. */ - 0x00, 0x06, /* .............##. */ - 0x00, 0x06, /* .............##. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x38, 0x00, /* ..###........... */ - 0x78, 0x06, /* .####........##. */ - 0x18, 0x0e, /* ...##.......###. */ - 0x18, 0x1c, /* ...##......###.. */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x7c, /* ....###..#####.. */ - 0x1c, 0xfe, /* ...###..#######. */ - 0x38, 0xc6, /* ..###...##...##. */ - 0x70, 0xc6, /* .###....##...##. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x7e, /* .........######. */ - 0x00, 0xfe, /* ........#######. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x2f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x01, 0x86, /* .......##....##. */ - 0x61, 0x8e, /* .##....##...###. */ - 0x7f, 0x9c, /* .########..###.. */ - 0x3f, 0x38, /* ..######..###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe6, /* ........###..##. */ - 0x01, 0xce, /* .......###..###. */ - 0x03, 0x9e, /* ......###..####. */ - 0x07, 0x36, /* .....###..##.##. */ - 0x0e, 0x66, /* ....###..##..##. */ - 0x1c, 0xc6, /* ...###..##...##. */ - 0x39, 0xfe, /* ..###..########. */ - 0x71, 0xfe, /* .###...########. */ - 0x60, 0x06, /* .##..........##. */ - 0x00, 0x06, /* .............##. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x2f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x2fc0 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x3000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x3040 */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x3080 */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x18, /* ....####...##... */ - 0x1b, 0x98, /* ...##.###..##... */ - 0x19, 0xd8, /* ...##..###.##... */ - 0x18, 0xf0, /* ...##...####.... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x30c0 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x3100 */ - 0x00, 0x00, /* ................ */ - 0x03, 0xc0, /* ......####...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x3140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xff, /* ...############# */ - 0x3f, 0xff, /* ..############## */ - 0x70, 0xc0, /* .###....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xfe, /* .##############. */ - 0x7f, 0xfe, /* .##############. */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xff, /* .##.....######## */ - 0x60, 0xff, /* .##.....######## */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x3180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x31c0 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x3200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x3240 */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x3280 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x32c0 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x3300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x3340 */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x3380 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x33c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x7f, 0x8c, /* .########...##.. */ - 0x7f, 0x8c, /* .########...##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x38, /* ..##......###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x3400 */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x18, /* ....####...##... */ - 0x1b, 0x98, /* ...##.###..##... */ - 0x19, 0xd8, /* ...##..###.##... */ - 0x18, 0xf0, /* ...##...####.... */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x3440 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x3480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x34c0 */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x3500 */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x18, /* ....####...##... */ - 0x1b, 0x98, /* ...##.###..##... */ - 0x19, 0xd8, /* ...##..###.##... */ - 0x18, 0xf0, /* ...##...####.... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x3540 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x3580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x35c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0e, /* ..##........###. */ - 0x30, 0x0e, /* ..##........###. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x70, 0x0c, /* .###........##.. */ - 0x70, 0x0c, /* .###........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x3600 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x3640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x3680 */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x36c0 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x3700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x3740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x3780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x3c, 0x1c, /* ..####.....###.. */ - 0x37, 0xf8, /* ..##.########... */ - 0x33, 0xf0, /* ..##..######.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x37c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x3800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x3840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x3880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x18, /* ....####...##... */ - 0x1b, 0x98, /* ...##.###..##... */ - 0x19, 0xd8, /* ...##..###.##... */ - 0x18, 0xf0, /* ...##...####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x38c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x3900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xc0, /* ......####...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x3940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0xf8, /* ..#####.#####... */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x8e, /* .......##...###. */ - 0x01, 0x86, /* .......##....##. */ - 0x01, 0x86, /* .......##....##. */ - 0x1f, 0x86, /* ...######....##. */ - 0x3f, 0xfe, /* ..#############. */ - 0x71, 0xfe, /* .###...########. */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x71, 0xc6, /* .###...###...##. */ - 0x3f, 0xfe, /* ..#############. */ - 0x1f, 0x7c, /* ...#####.#####.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x3980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x39c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x3a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x3a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x3a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x3ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x3b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x3b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x3b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x3bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x3b, 0x80, /* ..###.###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x3c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x18, /* ....####...##... */ - 0x1b, 0x98, /* ...##.###..##... */ - 0x19, 0xd8, /* ...##..###.##... */ - 0x18, 0xf0, /* ...##...####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x3c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x3c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x3cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x3d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x18, /* ....####...##... */ - 0x1b, 0x98, /* ...##.###..##... */ - 0x19, 0xd8, /* ...##..###.##... */ - 0x18, 0xf0, /* ...##...####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x3d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x3d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x3dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf6, /* ....########.##. */ - 0x1f, 0xfe, /* ...############. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x7f, 0xf8, /* .############... */ - 0xef, 0xf0, /* ###.########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x3e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x3e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x3e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x3ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x3f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x3f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x3f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_16x32_iso8859_1_descriptors[] = { - { 0x10, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x10, 0x0040 }, /* Index: 0x01, char: \x02 */ - { 0x10, 0x0080 }, /* Index: 0x02, char: \x03 */ - { 0x10, 0x00c0 }, /* Index: 0x03, char: \x04 */ - { 0x10, 0x0100 }, /* Index: 0x04, char: \x05 */ - { 0x10, 0x0140 }, /* Index: 0x05, char: \x06 */ - { 0x10, 0x0180 }, /* Index: 0x06, char: \x07 */ - { 0x10, 0x01c0 }, /* Index: 0x07, char: \x08 */ - { 0x10, 0x0200 }, /* Index: 0x08, char: \x09 */ - { 0x10, 0x0240 }, /* Index: 0x09, char: \x0a */ - { 0x10, 0x0280 }, /* Index: 0x0a, char: \x0b */ - { 0x10, 0x02c0 }, /* Index: 0x0b, char: \x0c */ - { 0x10, 0x0300 }, /* Index: 0x0c, char: \x0d */ - { 0x10, 0x0340 }, /* Index: 0x0d, char: \x0e */ - { 0x10, 0x0380 }, /* Index: 0x0e, char: \x0f */ - { 0x10, 0x03c0 }, /* Index: 0x0f, char: \x10 */ - { 0x10, 0x0400 }, /* Index: 0x10, char: \x11 */ - { 0x10, 0x0440 }, /* Index: 0x11, char: \x12 */ - { 0x10, 0x0480 }, /* Index: 0x12, char: \x13 */ - { 0x10, 0x04c0 }, /* Index: 0x13, char: \x14 */ - { 0x10, 0x0500 }, /* Index: 0x14, char: \x15 */ - { 0x10, 0x0540 }, /* Index: 0x15, char: \x16 */ - { 0x10, 0x0580 }, /* Index: 0x16, char: \x17 */ - { 0x10, 0x05c0 }, /* Index: 0x17, char: \x18 */ - { 0x10, 0x0600 }, /* Index: 0x18, char: \x19 */ - { 0x10, 0x0640 }, /* Index: 0x19, char: \x1a */ - { 0x10, 0x0680 }, /* Index: 0x1a, char: \x1b */ - { 0x10, 0x06c0 }, /* Index: 0x1b, char: \x1c */ - { 0x10, 0x0700 }, /* Index: 0x1c, char: \x1d */ - { 0x10, 0x0740 }, /* Index: 0x1d, char: \x1e */ - { 0x10, 0x0780 }, /* Index: 0x1e, char: \x1f */ - { 0x10, 0x07c0 }, /* Index: 0x1f, char: \x20 */ - { 0x10, 0x0800 }, /* Index: 0x20, char: \x21 */ - { 0x10, 0x0840 }, /* Index: 0x21, char: \x22 */ - { 0x10, 0x0880 }, /* Index: 0x22, char: \x23 */ - { 0x10, 0x08c0 }, /* Index: 0x23, char: \x24 */ - { 0x10, 0x0900 }, /* Index: 0x24, char: \x25 */ - { 0x10, 0x0940 }, /* Index: 0x25, char: \x26 */ - { 0x10, 0x0980 }, /* Index: 0x26, char: \x27 */ - { 0x10, 0x09c0 }, /* Index: 0x27, char: \x28 */ - { 0x10, 0x0a00 }, /* Index: 0x28, char: \x29 */ - { 0x10, 0x0a40 }, /* Index: 0x29, char: \x2a */ - { 0x10, 0x0a80 }, /* Index: 0x2a, char: \x2b */ - { 0x10, 0x0ac0 }, /* Index: 0x2b, char: \x2c */ - { 0x10, 0x0b00 }, /* Index: 0x2c, char: \x2d */ - { 0x10, 0x0b40 }, /* Index: 0x2d, char: \x2e */ - { 0x10, 0x0b80 }, /* Index: 0x2e, char: \x2f */ - { 0x10, 0x0bc0 }, /* Index: 0x2f, char: \x30 */ - { 0x10, 0x0c00 }, /* Index: 0x30, char: \x31 */ - { 0x10, 0x0c40 }, /* Index: 0x31, char: \x32 */ - { 0x10, 0x0c80 }, /* Index: 0x32, char: \x33 */ - { 0x10, 0x0cc0 }, /* Index: 0x33, char: \x34 */ - { 0x10, 0x0d00 }, /* Index: 0x34, char: \x35 */ - { 0x10, 0x0d40 }, /* Index: 0x35, char: \x36 */ - { 0x10, 0x0d80 }, /* Index: 0x36, char: \x37 */ - { 0x10, 0x0dc0 }, /* Index: 0x37, char: \x38 */ - { 0x10, 0x0e00 }, /* Index: 0x38, char: \x39 */ - { 0x10, 0x0e40 }, /* Index: 0x39, char: \x3a */ - { 0x10, 0x0e80 }, /* Index: 0x3a, char: \x3b */ - { 0x10, 0x0ec0 }, /* Index: 0x3b, char: \x3c */ - { 0x10, 0x0f00 }, /* Index: 0x3c, char: \x3d */ - { 0x10, 0x0f40 }, /* Index: 0x3d, char: \x3e */ - { 0x10, 0x0f80 }, /* Index: 0x3e, char: \x3f */ - { 0x10, 0x0fc0 }, /* Index: 0x3f, char: \x40 */ - { 0x10, 0x1000 }, /* Index: 0x40, char: \x41 */ - { 0x10, 0x1040 }, /* Index: 0x41, char: \x42 */ - { 0x10, 0x1080 }, /* Index: 0x42, char: \x43 */ - { 0x10, 0x10c0 }, /* Index: 0x43, char: \x44 */ - { 0x10, 0x1100 }, /* Index: 0x44, char: \x45 */ - { 0x10, 0x1140 }, /* Index: 0x45, char: \x46 */ - { 0x10, 0x1180 }, /* Index: 0x46, char: \x47 */ - { 0x10, 0x11c0 }, /* Index: 0x47, char: \x48 */ - { 0x10, 0x1200 }, /* Index: 0x48, char: \x49 */ - { 0x10, 0x1240 }, /* Index: 0x49, char: \x4a */ - { 0x10, 0x1280 }, /* Index: 0x4a, char: \x4b */ - { 0x10, 0x12c0 }, /* Index: 0x4b, char: \x4c */ - { 0x10, 0x1300 }, /* Index: 0x4c, char: \x4d */ - { 0x10, 0x1340 }, /* Index: 0x4d, char: \x4e */ - { 0x10, 0x1380 }, /* Index: 0x4e, char: \x4f */ - { 0x10, 0x13c0 }, /* Index: 0x4f, char: \x50 */ - { 0x10, 0x1400 }, /* Index: 0x50, char: \x51 */ - { 0x10, 0x1440 }, /* Index: 0x51, char: \x52 */ - { 0x10, 0x1480 }, /* Index: 0x52, char: \x53 */ - { 0x10, 0x14c0 }, /* Index: 0x53, char: \x54 */ - { 0x10, 0x1500 }, /* Index: 0x54, char: \x55 */ - { 0x10, 0x1540 }, /* Index: 0x55, char: \x56 */ - { 0x10, 0x1580 }, /* Index: 0x56, char: \x57 */ - { 0x10, 0x15c0 }, /* Index: 0x57, char: \x58 */ - { 0x10, 0x1600 }, /* Index: 0x58, char: \x59 */ - { 0x10, 0x1640 }, /* Index: 0x59, char: \x5a */ - { 0x10, 0x1680 }, /* Index: 0x5a, char: \x5b */ - { 0x10, 0x16c0 }, /* Index: 0x5b, char: \x5c */ - { 0x10, 0x1700 }, /* Index: 0x5c, char: \x5d */ - { 0x10, 0x1740 }, /* Index: 0x5d, char: \x5e */ - { 0x10, 0x1780 }, /* Index: 0x5e, char: \x5f */ - { 0x10, 0x17c0 }, /* Index: 0x5f, char: \x60 */ - { 0x10, 0x1800 }, /* Index: 0x60, char: \x61 */ - { 0x10, 0x1840 }, /* Index: 0x61, char: \x62 */ - { 0x10, 0x1880 }, /* Index: 0x62, char: \x63 */ - { 0x10, 0x18c0 }, /* Index: 0x63, char: \x64 */ - { 0x10, 0x1900 }, /* Index: 0x64, char: \x65 */ - { 0x10, 0x1940 }, /* Index: 0x65, char: \x66 */ - { 0x10, 0x1980 }, /* Index: 0x66, char: \x67 */ - { 0x10, 0x19c0 }, /* Index: 0x67, char: \x68 */ - { 0x10, 0x1a00 }, /* Index: 0x68, char: \x69 */ - { 0x10, 0x1a40 }, /* Index: 0x69, char: \x6a */ - { 0x10, 0x1a80 }, /* Index: 0x6a, char: \x6b */ - { 0x10, 0x1ac0 }, /* Index: 0x6b, char: \x6c */ - { 0x10, 0x1b00 }, /* Index: 0x6c, char: \x6d */ - { 0x10, 0x1b40 }, /* Index: 0x6d, char: \x6e */ - { 0x10, 0x1b80 }, /* Index: 0x6e, char: \x6f */ - { 0x10, 0x1bc0 }, /* Index: 0x6f, char: \x70 */ - { 0x10, 0x1c00 }, /* Index: 0x70, char: \x71 */ - { 0x10, 0x1c40 }, /* Index: 0x71, char: \x72 */ - { 0x10, 0x1c80 }, /* Index: 0x72, char: \x73 */ - { 0x10, 0x1cc0 }, /* Index: 0x73, char: \x74 */ - { 0x10, 0x1d00 }, /* Index: 0x74, char: \x75 */ - { 0x10, 0x1d40 }, /* Index: 0x75, char: \x76 */ - { 0x10, 0x1d80 }, /* Index: 0x76, char: \x77 */ - { 0x10, 0x1dc0 }, /* Index: 0x77, char: \x78 */ - { 0x10, 0x1e00 }, /* Index: 0x78, char: \x79 */ - { 0x10, 0x1e40 }, /* Index: 0x79, char: \x7a */ - { 0x10, 0x1e80 }, /* Index: 0x7a, char: \x7b */ - { 0x10, 0x1ec0 }, /* Index: 0x7b, char: \x7c */ - { 0x10, 0x1f00 }, /* Index: 0x7c, char: \x7d */ - { 0x10, 0x1f40 }, /* Index: 0x7d, char: \x7e */ - { 0x10, 0x1f80 }, /* Index: 0x7e, char: \x7f */ - { 0x10, 0x1fc0 }, /* Index: 0x7f, char: \x80 */ - { 0x10, 0x2000 }, /* Index: 0x80, char: \x81 */ - { 0x10, 0x2040 }, /* Index: 0x81, char: \x82 */ - { 0x10, 0x2080 }, /* Index: 0x82, char: \x83 */ - { 0x10, 0x20c0 }, /* Index: 0x83, char: \x84 */ - { 0x10, 0x2100 }, /* Index: 0x84, char: \x85 */ - { 0x10, 0x2140 }, /* Index: 0x85, char: \x86 */ - { 0x10, 0x2180 }, /* Index: 0x86, char: \x87 */ - { 0x10, 0x21c0 }, /* Index: 0x87, char: \x88 */ - { 0x10, 0x2200 }, /* Index: 0x88, char: \x89 */ - { 0x10, 0x2240 }, /* Index: 0x89, char: \x8a */ - { 0x10, 0x2280 }, /* Index: 0x8a, char: \x8b */ - { 0x10, 0x22c0 }, /* Index: 0x8b, char: \x8c */ - { 0x10, 0x2300 }, /* Index: 0x8c, char: \x8d */ - { 0x10, 0x2340 }, /* Index: 0x8d, char: \x8e */ - { 0x10, 0x2380 }, /* Index: 0x8e, char: \x8f */ - { 0x10, 0x23c0 }, /* Index: 0x8f, char: \x90 */ - { 0x10, 0x2400 }, /* Index: 0x90, char: \x91 */ - { 0x10, 0x2440 }, /* Index: 0x91, char: \x92 */ - { 0x10, 0x2480 }, /* Index: 0x92, char: \x93 */ - { 0x10, 0x24c0 }, /* Index: 0x93, char: \x94 */ - { 0x10, 0x2500 }, /* Index: 0x94, char: \x95 */ - { 0x10, 0x2540 }, /* Index: 0x95, char: \x96 */ - { 0x10, 0x2580 }, /* Index: 0x96, char: \x97 */ - { 0x10, 0x25c0 }, /* Index: 0x97, char: \x98 */ - { 0x10, 0x2600 }, /* Index: 0x98, char: \x99 */ - { 0x10, 0x2640 }, /* Index: 0x99, char: \x9a */ - { 0x10, 0x2680 }, /* Index: 0x9a, char: \x9b */ - { 0x10, 0x26c0 }, /* Index: 0x9b, char: \x9c */ - { 0x10, 0x2700 }, /* Index: 0x9c, char: \x9d */ - { 0x10, 0x2740 }, /* Index: 0x9d, char: \x9e */ - { 0x10, 0x2780 }, /* Index: 0x9e, char: \x9f */ - { 0x10, 0x27c0 }, /* Index: 0x9f, char: \xa0 */ - { 0x10, 0x2800 }, /* Index: 0xa0, char: \xa1 */ - { 0x10, 0x2840 }, /* Index: 0xa1, char: \xa2 */ - { 0x10, 0x2880 }, /* Index: 0xa2, char: \xa3 */ - { 0x10, 0x28c0 }, /* Index: 0xa3, char: \xa4 */ - { 0x10, 0x2900 }, /* Index: 0xa4, char: \xa5 */ - { 0x10, 0x2940 }, /* Index: 0xa5, char: \xa6 */ - { 0x10, 0x2980 }, /* Index: 0xa6, char: \xa7 */ - { 0x10, 0x29c0 }, /* Index: 0xa7, char: \xa8 */ - { 0x10, 0x2a00 }, /* Index: 0xa8, char: \xa9 */ - { 0x10, 0x2a40 }, /* Index: 0xa9, char: \xaa */ - { 0x10, 0x2a80 }, /* Index: 0xaa, char: \xab */ - { 0x10, 0x2ac0 }, /* Index: 0xab, char: \xac */ - { 0x10, 0x2b00 }, /* Index: 0xac, char: \xad */ - { 0x10, 0x2b40 }, /* Index: 0xad, char: \xae */ - { 0x10, 0x2b80 }, /* Index: 0xae, char: \xaf */ - { 0x10, 0x2bc0 }, /* Index: 0xaf, char: \xb0 */ - { 0x10, 0x2c00 }, /* Index: 0xb0, char: \xb1 */ - { 0x10, 0x2c40 }, /* Index: 0xb1, char: \xb2 */ - { 0x10, 0x2c80 }, /* Index: 0xb2, char: \xb3 */ - { 0x10, 0x2cc0 }, /* Index: 0xb3, char: \xb4 */ - { 0x10, 0x2d00 }, /* Index: 0xb4, char: \xb5 */ - { 0x10, 0x2d40 }, /* Index: 0xb5, char: \xb6 */ - { 0x10, 0x2d80 }, /* Index: 0xb6, char: \xb7 */ - { 0x10, 0x2dc0 }, /* Index: 0xb7, char: \xb8 */ - { 0x10, 0x2e00 }, /* Index: 0xb8, char: \xb9 */ - { 0x10, 0x2e40 }, /* Index: 0xb9, char: \xba */ - { 0x10, 0x2e80 }, /* Index: 0xba, char: \xbb */ - { 0x10, 0x2ec0 }, /* Index: 0xbb, char: \xbc */ - { 0x10, 0x2f00 }, /* Index: 0xbc, char: \xbd */ - { 0x10, 0x2f40 }, /* Index: 0xbd, char: \xbe */ - { 0x10, 0x2f80 }, /* Index: 0xbe, char: \xbf */ - { 0x10, 0x2fc0 }, /* Index: 0xbf, char: \xc0 */ - { 0x10, 0x3000 }, /* Index: 0xc0, char: \xc1 */ - { 0x10, 0x3040 }, /* Index: 0xc1, char: \xc2 */ - { 0x10, 0x3080 }, /* Index: 0xc2, char: \xc3 */ - { 0x10, 0x30c0 }, /* Index: 0xc3, char: \xc4 */ - { 0x10, 0x3100 }, /* Index: 0xc4, char: \xc5 */ - { 0x10, 0x3140 }, /* Index: 0xc5, char: \xc6 */ - { 0x10, 0x3180 }, /* Index: 0xc6, char: \xc7 */ - { 0x10, 0x31c0 }, /* Index: 0xc7, char: \xc8 */ - { 0x10, 0x3200 }, /* Index: 0xc8, char: \xc9 */ - { 0x10, 0x3240 }, /* Index: 0xc9, char: \xca */ - { 0x10, 0x3280 }, /* Index: 0xca, char: \xcb */ - { 0x10, 0x32c0 }, /* Index: 0xcb, char: \xcc */ - { 0x10, 0x3300 }, /* Index: 0xcc, char: \xcd */ - { 0x10, 0x3340 }, /* Index: 0xcd, char: \xce */ - { 0x10, 0x3380 }, /* Index: 0xce, char: \xcf */ - { 0x10, 0x33c0 }, /* Index: 0xcf, char: \xd0 */ - { 0x10, 0x3400 }, /* Index: 0xd0, char: \xd1 */ - { 0x10, 0x3440 }, /* Index: 0xd1, char: \xd2 */ - { 0x10, 0x3480 }, /* Index: 0xd2, char: \xd3 */ - { 0x10, 0x34c0 }, /* Index: 0xd3, char: \xd4 */ - { 0x10, 0x3500 }, /* Index: 0xd4, char: \xd5 */ - { 0x10, 0x3540 }, /* Index: 0xd5, char: \xd6 */ - { 0x10, 0x3580 }, /* Index: 0xd6, char: \xd7 */ - { 0x10, 0x35c0 }, /* Index: 0xd7, char: \xd8 */ - { 0x10, 0x3600 }, /* Index: 0xd8, char: \xd9 */ - { 0x10, 0x3640 }, /* Index: 0xd9, char: \xda */ - { 0x10, 0x3680 }, /* Index: 0xda, char: \xdb */ - { 0x10, 0x36c0 }, /* Index: 0xdb, char: \xdc */ - { 0x10, 0x3700 }, /* Index: 0xdc, char: \xdd */ - { 0x10, 0x3740 }, /* Index: 0xdd, char: \xde */ - { 0x10, 0x3780 }, /* Index: 0xde, char: \xdf */ - { 0x10, 0x37c0 }, /* Index: 0xdf, char: \xe0 */ - { 0x10, 0x3800 }, /* Index: 0xe0, char: \xe1 */ - { 0x10, 0x3840 }, /* Index: 0xe1, char: \xe2 */ - { 0x10, 0x3880 }, /* Index: 0xe2, char: \xe3 */ - { 0x10, 0x38c0 }, /* Index: 0xe3, char: \xe4 */ - { 0x10, 0x3900 }, /* Index: 0xe4, char: \xe5 */ - { 0x10, 0x3940 }, /* Index: 0xe5, char: \xe6 */ - { 0x10, 0x3980 }, /* Index: 0xe6, char: \xe7 */ - { 0x10, 0x39c0 }, /* Index: 0xe7, char: \xe8 */ - { 0x10, 0x3a00 }, /* Index: 0xe8, char: \xe9 */ - { 0x10, 0x3a40 }, /* Index: 0xe9, char: \xea */ - { 0x10, 0x3a80 }, /* Index: 0xea, char: \xeb */ - { 0x10, 0x3ac0 }, /* Index: 0xeb, char: \xec */ - { 0x10, 0x3b00 }, /* Index: 0xec, char: \xed */ - { 0x10, 0x3b40 }, /* Index: 0xed, char: \xee */ - { 0x10, 0x3b80 }, /* Index: 0xee, char: \xef */ - { 0x10, 0x3bc0 }, /* Index: 0xef, char: \xf0 */ - { 0x10, 0x3c00 }, /* Index: 0xf0, char: \xf1 */ - { 0x10, 0x3c40 }, /* Index: 0xf1, char: \xf2 */ - { 0x10, 0x3c80 }, /* Index: 0xf2, char: \xf3 */ - { 0x10, 0x3cc0 }, /* Index: 0xf3, char: \xf4 */ - { 0x10, 0x3d00 }, /* Index: 0xf4, char: \xf5 */ - { 0x10, 0x3d40 }, /* Index: 0xf5, char: \xf6 */ - { 0x10, 0x3d80 }, /* Index: 0xf6, char: \xf7 */ - { 0x10, 0x3dc0 }, /* Index: 0xf7, char: \xf8 */ - { 0x10, 0x3e00 }, /* Index: 0xf8, char: \xf9 */ - { 0x10, 0x3e40 }, /* Index: 0xf9, char: \xfa */ - { 0x10, 0x3e80 }, /* Index: 0xfa, char: \xfb */ - { 0x10, 0x3ec0 }, /* Index: 0xfb, char: \xfc */ - { 0x10, 0x3f00 }, /* Index: 0xfc, char: \xfd */ - { 0x10, 0x3f40 }, /* Index: 0xfd, char: \xfe */ - { 0x10, 0x3f80 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_16x32_iso8859_1_info = -{ - .height = 32, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_16x32_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_16x32_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_16X32_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_16x32_koi8_r.h b/extras/fonts/data/font_terminus_16x32_koi8_r.h deleted file mode 100644 index b5194a1..0000000 --- a/extras/fonts/data/font_terminus_16x32_koi8_r.h +++ /dev/null @@ -1,8959 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 16x32 - * Charset: koi8_r - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_16X32_KOI8_R_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_16X32_KOI8_R_H_ - -static const uint8_t _fonts_terminus_16x32_koi8_r_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x7f, 0xfe, /* .##############. */ - 0x7f, 0xfe, /* .##############. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0040 */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - - /* Index: 0x02, char: \x03, offset: 0x0080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x00c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x0100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x0c, /* ......##....##.. */ - 0x03, 0x0c, /* ......##....##.. */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x70, /* ......##.###.... */ - 0x03, 0x38, /* ......##..###... */ - 0x03, 0x1c, /* ......##...###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x0140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x01c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x71, 0x80, /* .###...##....... */ - 0x79, 0x80, /* .####..##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x67, 0x80, /* .##..####....... */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x0240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0280 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x02c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x0d, char: \x0e, offset: 0x0340 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0380 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x0f, char: \x10, offset: 0x03c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x0440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x04c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0500 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x15, char: \x16, offset: 0x0540 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x16, char: \x17, offset: 0x0580 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x05c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x18, char: \x19, offset: 0x0600 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x19, char: \x1a, offset: 0x0640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x0680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x06c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xe0, /* ......#####..... */ - 0x07, 0xf0, /* .....#######.... */ - 0x0e, 0x38, /* ....###...###... */ - 0x0c, 0x18, /* ....##.....##... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x07c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x08c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x39, 0x80, /* ..###..##....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xf8, /* ....#########... */ - 0x01, 0x9c, /* .......##..###.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x0900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x18, /* ...####....##... */ - 0x3f, 0x18, /* ..######...##... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x3f, 0x60, /* ..######.##..... */ - 0x1e, 0x60, /* ...####..##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0xf0, /* ....##..####.... */ - 0x0d, 0xf8, /* ....##.######... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x31, 0xf8, /* ..##...######... */ - 0x30, 0xf0, /* ..##....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x00, /* ....####........ */ - 0x1f, 0x8c, /* ...######...##.. */ - 0x39, 0xdc, /* ..###..###.###.. */ - 0x70, 0xf8, /* .###....#####... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x70, 0xf8, /* .###....#####... */ - 0x3f, 0xdc, /* ..########.###.. */ - 0x1f, 0x8c, /* ...######...##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x09c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x0a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x0a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x07, 0xf8, /* .....########... */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x7c, /* .........#####.. */ - 0x00, 0xec, /* ........###.##.. */ - 0x01, 0xcc, /* .......###..##.. */ - 0x03, 0x8c, /* ......###...##.. */ - 0x07, 0x0c, /* .....###....##.. */ - 0x0e, 0x0c, /* ....###.....##.. */ - 0x1c, 0x0c, /* ...###......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf8, /* ....#########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x00, /* ..###........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x18, /* ..##.......##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x61, 0xfc, /* .##....#######.. */ - 0x63, 0xfc, /* .##...########.. */ - 0x67, 0x0c, /* .##..###....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x66, 0x0c, /* .##..##.....##.. */ - 0x67, 0x1c, /* .##..###...###.. */ - 0x63, 0xfc, /* .##...########.. */ - 0x61, 0xec, /* .##....####.##.. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x00, /* .###............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x1000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x1040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x18, /* ..##.......##... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x1080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x10c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x38, /* ..##......###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x1100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x1140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x1180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0xfc, /* ..##....######.. */ - 0x30, 0xfc, /* ..##....######.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x11c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x1200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x1240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x7e, /* .........######. */ - 0x00, 0x7e, /* .........######. */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x1280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x37, 0x00, /* ..##.###........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x37, 0x00, /* ..##.###........ */ - 0x33, 0x80, /* ..##..###....... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x12c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x1300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x67, 0xcc, /* .##..#####..##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x61, 0x0c, /* .##....#....##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x1380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x13c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x1400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x38, 0xfc, /* ..###...######.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0e, /* ............###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x1440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x37, 0x00, /* ..##.###........ */ - 0x33, 0x80, /* ..##..###....... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x1480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x00, /* ..###........... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x14c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x1540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x1580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x61, 0x0c, /* .##....#....##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x67, 0xcc, /* .##..#####..##.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x15c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x1640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x1680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x16c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x17c0 */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x1900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x1940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x7e, /* .........######. */ - 0x00, 0xfe, /* ........#######. */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x19c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x1a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x1c, 0x38, /* ...###....###... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x1c, /* ...##......###.. */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x1b, 0x80, /* ...##.###....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x1b, 0x80, /* ...##.###....... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x1c, /* ...##......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x1b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x31, 0x9c, /* ..##...##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x1b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x1b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x1c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0xfc, /* ..##..########.. */ - 0x37, 0xfc, /* ..##.#########.. */ - 0x3e, 0x00, /* ..#####......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x38, 0x00, /* ..###........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x00, /* ..###........... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xfc, /* .......#######.. */ - 0x00, 0xfc, /* ........######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1c, 0x38, /* ...###....###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x1e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1e, 0x00, /* ...####......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xf0, /* .......#####.... */ - 0x00, 0xf0, /* ........####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xf0, /* ........####.... */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x0c, /* ....###.....##.. */ - 0x1f, 0x0c, /* ...#####....##.. */ - 0x3b, 0x8c, /* ..###.###...##.. */ - 0x31, 0xdc, /* ..##...###.###.. */ - 0x30, 0xf8, /* ..##....#####... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x1fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x2000 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x81, char: \x82, offset: 0x2040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x82, char: \x83, offset: 0x2080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x83, char: \x84, offset: 0x20c0 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x2100 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x2140 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x86, char: \x87, offset: 0x2180 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x87, char: \x88, offset: 0x21c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x88, char: \x89, offset: 0x2200 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x2240 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x8a, char: \x8b, offset: 0x2280 */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x22c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - - /* Index: 0x8c, char: \x8d, offset: 0x2300 */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - - /* Index: 0x8d, char: \x8e, offset: 0x2340 */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - - /* Index: 0x8e, char: \x8f, offset: 0x2380 */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - - /* Index: 0x8f, char: \x90, offset: 0x23c0 */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x2400 */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - - /* Index: 0x91, char: \x92, offset: 0x2440 */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - - /* Index: 0x92, char: \x93, offset: 0x2480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xf8, /* ........#####... */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x8c, /* .......##...##.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x93, char: \x94, offset: 0x24c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x2500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x2540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1e, /* ...........####. */ - 0x00, 0x1e, /* ...........####. */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x38, 0x18, /* ..###......##... */ - 0x1c, 0x18, /* ...###.....##... */ - 0x0e, 0x18, /* ....###....##... */ - 0x07, 0x18, /* .....###...##... */ - 0x03, 0x98, /* ......###..##... */ - 0x01, 0xd8, /* .......###.##... */ - 0x00, 0xf8, /* ........#####... */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x2580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x0c, /* ...#####....##.. */ - 0x3f, 0x9c, /* ..#######..###.. */ - 0x39, 0xfc, /* ..###..#######.. */ - 0x30, 0xf8, /* ..##....#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x0c, /* ...#####....##.. */ - 0x3f, 0x9c, /* ..#######..###.. */ - 0x39, 0xfc, /* ..###..#######.. */ - 0x30, 0xf8, /* ..##....#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x25c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x2600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x2640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x2680 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x26c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x2700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x2740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x2780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x27c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x2800 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xa1, char: \xa2, offset: 0x2840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0xa2, char: \xa3, offset: 0x2880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x28c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xff, /* .....########### */ - 0x07, 0xff, /* .....########### */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xa4, char: \xa5, offset: 0x2900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xff, /* .....########### */ - 0x07, 0xff, /* .....########### */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xa5, char: \xa6, offset: 0x2940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0xa6, char: \xa7, offset: 0x2980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xe0, /* ###########..... */ - 0xff, 0xe0, /* ###########..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xa7, char: \xa8, offset: 0x29c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xe0, /* ###########..... */ - 0xff, 0xe0, /* ###########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xa8, char: \xa9, offset: 0x2a00 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x2a40 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x07, 0xff, /* .....########### */ - 0x07, 0xff, /* .....########### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x2a80 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0xff, /* .....########### */ - 0x07, 0xff, /* .....########### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2ac0 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x2b00 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0xff, 0xe0, /* ###########..... */ - 0xff, 0xe0, /* ###########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x2b40 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0xff, 0xe0, /* ###########..... */ - 0xff, 0xe0, /* ###########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x2b80 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0xff, /* .......######### */ - 0x01, 0xff, /* .......######### */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0xaf, char: \xb0, offset: 0x2bc0 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xb0, char: \xb1, offset: 0x2c00 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x7f, /* .....##..####### */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xb1, char: \xb2, offset: 0x2c40 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0xb2, char: \xb3, offset: 0x2c80 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2cc0 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xb4, char: \xb5, offset: 0x2d00 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xb5, char: \xb6, offset: 0x2d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0xb6, char: \xb7, offset: 0x2d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xb7, char: \xb8, offset: 0x2dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xb8, char: \xb9, offset: 0x2e00 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x2e40 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x2e80 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x2ec0 */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0xbc, char: \xbd, offset: 0x2f00 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xbd, char: \xbe, offset: 0x2f40 */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - - /* Index: 0xbe, char: \xbf, offset: 0x2f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x70, 0x0e, /* .###........###. */ - 0x67, 0xe6, /* .##..######..##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x6c, 0x36, /* .##.##....##.##. */ - 0x6c, 0x06, /* .##.##.......##. */ - 0x6c, 0x06, /* .##.##.......##. */ - 0x6c, 0x06, /* .##.##.......##. */ - 0x6c, 0x06, /* .##.##.......##. */ - 0x6c, 0x36, /* .##.##....##.##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x67, 0xe6, /* .##..######..##. */ - 0x70, 0x0e, /* .###........###. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x2fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf8, /* .##....######... */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x7f, 0x0c, /* .#######....##.. */ - 0x7f, 0x0c, /* .#######....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x61, 0xf8, /* .##....######... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x3000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x3040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x38, 0x00, /* ..###........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x3080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfe, /* ...############. */ - 0x0f, 0xff, /* ....############ */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x30c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x3100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x3140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x3180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x31c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1c, 0x38, /* ...###....###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x3200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x3240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x3280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x1c, /* ...##......###.. */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x1b, 0x80, /* ...##.###....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x1b, 0x80, /* ...##.###....... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x1c, /* ...##......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x32c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x07, 0xfc, /* .....#########.. */ - 0x0e, 0x0c, /* ....###.....##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x1c, 0x0c, /* ...###......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x3300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x0c, /* .##.........##.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x7c, 0x7c, /* .#####...#####.. */ - 0x6e, 0xec, /* .##.###.###.##.. */ - 0x67, 0xcc, /* .##..#####..##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x61, 0x0c, /* .##....#....##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x3340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x3380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x33c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x3400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0xec, /* ........###.##.. */ - 0x01, 0xcc, /* .......###..##.. */ - 0x03, 0x8c, /* ......###...##.. */ - 0x07, 0x0c, /* .....###....##.. */ - 0x0e, 0x0c, /* ....###.....##.. */ - 0x1c, 0x0c, /* ...###......##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x3440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x3480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x34c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x3500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x3540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1d, 0xb8, /* ...###.##.###... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1d, 0xb8, /* ...###.##.###... */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x3580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x35c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x1f, 0xe0, /* ...########..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x38, /* ...##.....###... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x3600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x7f, 0x0c, /* .#######....##.. */ - 0x7f, 0x8c, /* .########...##.. */ - 0x61, 0xcc, /* .##....###..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x61, 0xcc, /* .##....###..##.. */ - 0x7f, 0x8c, /* .########...##.. */ - 0x7f, 0x0c, /* .#######....##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x3640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x3680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x8c, /* ..###..##...##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x36c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x3700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x8c, /* ..###..##...##.. */ - 0x1f, 0xfe, /* ...############. */ - 0x0f, 0xff, /* ....############ */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x3740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x3780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x00, /* ..####.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf8, /* ....#########... */ - 0x0c, 0x1c, /* ....##.....###.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x1c, /* ....##.....###.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x37c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf8, /* .##....######... */ - 0x63, 0x9c, /* .##...###..###.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x7f, 0x0c, /* .#######....##.. */ - 0x7f, 0x0c, /* .#######....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x0c, /* .##...##....##.. */ - 0x63, 0x9c, /* .##...###..###.. */ - 0x61, 0xf8, /* .##....######... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x3800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x3840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x3880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0e, /* ..###.......###. */ - 0x1f, 0xff, /* ...############# */ - 0x0f, 0xff, /* ....############ */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x38c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf8, /* .....########... */ - 0x0f, 0xf8, /* ....#########... */ - 0x1c, 0x18, /* ...###.....##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x3f, 0xfc, /* ..############.. */ - 0x7f, 0xfe, /* .##############. */ - 0x60, 0x06, /* .##..........##. */ - 0x60, 0x06, /* .##..........##. */ - 0x60, 0x06, /* .##..........##. */ - 0x60, 0x06, /* .##..........##. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x3900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x3940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x3980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x39c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x18, /* ...##......##... */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x3a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x3a40 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x30, /* ....##....##.... */ - 0x0c, 0x30, /* ....##....##.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x3c, /* ..##......####.. */ - 0x30, 0x7c, /* ..##.....#####.. */ - 0x30, 0xec, /* ..##....###.##.. */ - 0x31, 0xcc, /* ..##...###..##.. */ - 0x33, 0x8c, /* ..##..###...##.. */ - 0x37, 0x0c, /* ..##.###....##.. */ - 0x3e, 0x0c, /* ..#####.....##.. */ - 0x3c, 0x0c, /* ..####......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x3a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x37, 0x00, /* ..##.###........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x37, 0x00, /* ..##.###........ */ - 0x33, 0x80, /* ..##..###....... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x3ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x07, 0xfc, /* .....#########.. */ - 0x0e, 0x0c, /* ....###.....##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x0c, 0x0c, /* ....##......##.. */ - 0x1c, 0x0c, /* ...###......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x3b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x6c, 0x6c, /* .##.##...##.##.. */ - 0x67, 0xcc, /* .##..#####..##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x63, 0x8c, /* .##...###...##.. */ - 0x61, 0x0c, /* .##....#....##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x3b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x3b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x3bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x3c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0xec, /* ........###.##.. */ - 0x01, 0xcc, /* .......###..##.. */ - 0x03, 0x8c, /* ......###...##.. */ - 0x07, 0x0c, /* .....###....##.. */ - 0x0e, 0x0c, /* ....###.....##.. */ - 0x1c, 0x0c, /* ...###......##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x3c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x3c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x3cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x3d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x3d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x1d, 0xb8, /* ...###.##.###... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1d, 0xb8, /* ...###.##.###... */ - 0x39, 0x9c, /* ..###..##..###.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x3d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x18, /* ..##.......##... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x1c, /* ..##.......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x3dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x38, /* ..##......###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x3e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x60, 0x0c, /* .##.........##.. */ - 0x7f, 0x0c, /* .#######....##.. */ - 0x7f, 0x8c, /* .########...##.. */ - 0x61, 0xcc, /* .##....###..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x60, 0xcc, /* .##.....##..##.. */ - 0x61, 0xcc, /* .##....###..##.. */ - 0x7f, 0x8c, /* .########...##.. */ - 0x7f, 0x0c, /* .#######....##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x3e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x07, 0xf8, /* .....########... */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x3e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x8c, /* ..###..##...##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x3ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x07, 0xfc, /* .....#########.. */ - 0x07, 0xfc, /* .....#########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x3f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x31, 0x8c, /* ..##...##...##.. */ - 0x39, 0x8c, /* ..###..##...##.. */ - 0x1f, 0xfe, /* ...############. */ - 0x0f, 0xff, /* ....############ */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x03, /* ..............## */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x3f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x30, 0x0c, /* ..##........##.. */ - 0x38, 0x0c, /* ..###.......##.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x3f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xf0, 0x00, /* ####............ */ - 0xf0, 0x00, /* ####............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x38, /* ..##......###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_16x32_koi8_r_descriptors[] = { - { 0x10, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x10, 0x0040 }, /* Index: 0x01, char: \x02 */ - { 0x10, 0x0080 }, /* Index: 0x02, char: \x03 */ - { 0x10, 0x00c0 }, /* Index: 0x03, char: \x04 */ - { 0x10, 0x0100 }, /* Index: 0x04, char: \x05 */ - { 0x10, 0x0140 }, /* Index: 0x05, char: \x06 */ - { 0x10, 0x0180 }, /* Index: 0x06, char: \x07 */ - { 0x10, 0x01c0 }, /* Index: 0x07, char: \x08 */ - { 0x10, 0x0200 }, /* Index: 0x08, char: \x09 */ - { 0x10, 0x0240 }, /* Index: 0x09, char: \x0a */ - { 0x10, 0x0280 }, /* Index: 0x0a, char: \x0b */ - { 0x10, 0x02c0 }, /* Index: 0x0b, char: \x0c */ - { 0x10, 0x0300 }, /* Index: 0x0c, char: \x0d */ - { 0x10, 0x0340 }, /* Index: 0x0d, char: \x0e */ - { 0x10, 0x0380 }, /* Index: 0x0e, char: \x0f */ - { 0x10, 0x03c0 }, /* Index: 0x0f, char: \x10 */ - { 0x10, 0x0400 }, /* Index: 0x10, char: \x11 */ - { 0x10, 0x0440 }, /* Index: 0x11, char: \x12 */ - { 0x10, 0x0480 }, /* Index: 0x12, char: \x13 */ - { 0x10, 0x04c0 }, /* Index: 0x13, char: \x14 */ - { 0x10, 0x0500 }, /* Index: 0x14, char: \x15 */ - { 0x10, 0x0540 }, /* Index: 0x15, char: \x16 */ - { 0x10, 0x0580 }, /* Index: 0x16, char: \x17 */ - { 0x10, 0x05c0 }, /* Index: 0x17, char: \x18 */ - { 0x10, 0x0600 }, /* Index: 0x18, char: \x19 */ - { 0x10, 0x0640 }, /* Index: 0x19, char: \x1a */ - { 0x10, 0x0680 }, /* Index: 0x1a, char: \x1b */ - { 0x10, 0x06c0 }, /* Index: 0x1b, char: \x1c */ - { 0x10, 0x0700 }, /* Index: 0x1c, char: \x1d */ - { 0x10, 0x0740 }, /* Index: 0x1d, char: \x1e */ - { 0x10, 0x0780 }, /* Index: 0x1e, char: \x1f */ - { 0x10, 0x07c0 }, /* Index: 0x1f, char: \x20 */ - { 0x10, 0x0800 }, /* Index: 0x20, char: \x21 */ - { 0x10, 0x0840 }, /* Index: 0x21, char: \x22 */ - { 0x10, 0x0880 }, /* Index: 0x22, char: \x23 */ - { 0x10, 0x08c0 }, /* Index: 0x23, char: \x24 */ - { 0x10, 0x0900 }, /* Index: 0x24, char: \x25 */ - { 0x10, 0x0940 }, /* Index: 0x25, char: \x26 */ - { 0x10, 0x0980 }, /* Index: 0x26, char: \x27 */ - { 0x10, 0x09c0 }, /* Index: 0x27, char: \x28 */ - { 0x10, 0x0a00 }, /* Index: 0x28, char: \x29 */ - { 0x10, 0x0a40 }, /* Index: 0x29, char: \x2a */ - { 0x10, 0x0a80 }, /* Index: 0x2a, char: \x2b */ - { 0x10, 0x0ac0 }, /* Index: 0x2b, char: \x2c */ - { 0x10, 0x0b00 }, /* Index: 0x2c, char: \x2d */ - { 0x10, 0x0b40 }, /* Index: 0x2d, char: \x2e */ - { 0x10, 0x0b80 }, /* Index: 0x2e, char: \x2f */ - { 0x10, 0x0bc0 }, /* Index: 0x2f, char: \x30 */ - { 0x10, 0x0c00 }, /* Index: 0x30, char: \x31 */ - { 0x10, 0x0c40 }, /* Index: 0x31, char: \x32 */ - { 0x10, 0x0c80 }, /* Index: 0x32, char: \x33 */ - { 0x10, 0x0cc0 }, /* Index: 0x33, char: \x34 */ - { 0x10, 0x0d00 }, /* Index: 0x34, char: \x35 */ - { 0x10, 0x0d40 }, /* Index: 0x35, char: \x36 */ - { 0x10, 0x0d80 }, /* Index: 0x36, char: \x37 */ - { 0x10, 0x0dc0 }, /* Index: 0x37, char: \x38 */ - { 0x10, 0x0e00 }, /* Index: 0x38, char: \x39 */ - { 0x10, 0x0e40 }, /* Index: 0x39, char: \x3a */ - { 0x10, 0x0e80 }, /* Index: 0x3a, char: \x3b */ - { 0x10, 0x0ec0 }, /* Index: 0x3b, char: \x3c */ - { 0x10, 0x0f00 }, /* Index: 0x3c, char: \x3d */ - { 0x10, 0x0f40 }, /* Index: 0x3d, char: \x3e */ - { 0x10, 0x0f80 }, /* Index: 0x3e, char: \x3f */ - { 0x10, 0x0fc0 }, /* Index: 0x3f, char: \x40 */ - { 0x10, 0x1000 }, /* Index: 0x40, char: \x41 */ - { 0x10, 0x1040 }, /* Index: 0x41, char: \x42 */ - { 0x10, 0x1080 }, /* Index: 0x42, char: \x43 */ - { 0x10, 0x10c0 }, /* Index: 0x43, char: \x44 */ - { 0x10, 0x1100 }, /* Index: 0x44, char: \x45 */ - { 0x10, 0x1140 }, /* Index: 0x45, char: \x46 */ - { 0x10, 0x1180 }, /* Index: 0x46, char: \x47 */ - { 0x10, 0x11c0 }, /* Index: 0x47, char: \x48 */ - { 0x10, 0x1200 }, /* Index: 0x48, char: \x49 */ - { 0x10, 0x1240 }, /* Index: 0x49, char: \x4a */ - { 0x10, 0x1280 }, /* Index: 0x4a, char: \x4b */ - { 0x10, 0x12c0 }, /* Index: 0x4b, char: \x4c */ - { 0x10, 0x1300 }, /* Index: 0x4c, char: \x4d */ - { 0x10, 0x1340 }, /* Index: 0x4d, char: \x4e */ - { 0x10, 0x1380 }, /* Index: 0x4e, char: \x4f */ - { 0x10, 0x13c0 }, /* Index: 0x4f, char: \x50 */ - { 0x10, 0x1400 }, /* Index: 0x50, char: \x51 */ - { 0x10, 0x1440 }, /* Index: 0x51, char: \x52 */ - { 0x10, 0x1480 }, /* Index: 0x52, char: \x53 */ - { 0x10, 0x14c0 }, /* Index: 0x53, char: \x54 */ - { 0x10, 0x1500 }, /* Index: 0x54, char: \x55 */ - { 0x10, 0x1540 }, /* Index: 0x55, char: \x56 */ - { 0x10, 0x1580 }, /* Index: 0x56, char: \x57 */ - { 0x10, 0x15c0 }, /* Index: 0x57, char: \x58 */ - { 0x10, 0x1600 }, /* Index: 0x58, char: \x59 */ - { 0x10, 0x1640 }, /* Index: 0x59, char: \x5a */ - { 0x10, 0x1680 }, /* Index: 0x5a, char: \x5b */ - { 0x10, 0x16c0 }, /* Index: 0x5b, char: \x5c */ - { 0x10, 0x1700 }, /* Index: 0x5c, char: \x5d */ - { 0x10, 0x1740 }, /* Index: 0x5d, char: \x5e */ - { 0x10, 0x1780 }, /* Index: 0x5e, char: \x5f */ - { 0x10, 0x17c0 }, /* Index: 0x5f, char: \x60 */ - { 0x10, 0x1800 }, /* Index: 0x60, char: \x61 */ - { 0x10, 0x1840 }, /* Index: 0x61, char: \x62 */ - { 0x10, 0x1880 }, /* Index: 0x62, char: \x63 */ - { 0x10, 0x18c0 }, /* Index: 0x63, char: \x64 */ - { 0x10, 0x1900 }, /* Index: 0x64, char: \x65 */ - { 0x10, 0x1940 }, /* Index: 0x65, char: \x66 */ - { 0x10, 0x1980 }, /* Index: 0x66, char: \x67 */ - { 0x10, 0x19c0 }, /* Index: 0x67, char: \x68 */ - { 0x10, 0x1a00 }, /* Index: 0x68, char: \x69 */ - { 0x10, 0x1a40 }, /* Index: 0x69, char: \x6a */ - { 0x10, 0x1a80 }, /* Index: 0x6a, char: \x6b */ - { 0x10, 0x1ac0 }, /* Index: 0x6b, char: \x6c */ - { 0x10, 0x1b00 }, /* Index: 0x6c, char: \x6d */ - { 0x10, 0x1b40 }, /* Index: 0x6d, char: \x6e */ - { 0x10, 0x1b80 }, /* Index: 0x6e, char: \x6f */ - { 0x10, 0x1bc0 }, /* Index: 0x6f, char: \x70 */ - { 0x10, 0x1c00 }, /* Index: 0x70, char: \x71 */ - { 0x10, 0x1c40 }, /* Index: 0x71, char: \x72 */ - { 0x10, 0x1c80 }, /* Index: 0x72, char: \x73 */ - { 0x10, 0x1cc0 }, /* Index: 0x73, char: \x74 */ - { 0x10, 0x1d00 }, /* Index: 0x74, char: \x75 */ - { 0x10, 0x1d40 }, /* Index: 0x75, char: \x76 */ - { 0x10, 0x1d80 }, /* Index: 0x76, char: \x77 */ - { 0x10, 0x1dc0 }, /* Index: 0x77, char: \x78 */ - { 0x10, 0x1e00 }, /* Index: 0x78, char: \x79 */ - { 0x10, 0x1e40 }, /* Index: 0x79, char: \x7a */ - { 0x10, 0x1e80 }, /* Index: 0x7a, char: \x7b */ - { 0x10, 0x1ec0 }, /* Index: 0x7b, char: \x7c */ - { 0x10, 0x1f00 }, /* Index: 0x7c, char: \x7d */ - { 0x10, 0x1f40 }, /* Index: 0x7d, char: \x7e */ - { 0x10, 0x1f80 }, /* Index: 0x7e, char: \x7f */ - { 0x10, 0x1fc0 }, /* Index: 0x7f, char: \x80 */ - { 0x10, 0x2000 }, /* Index: 0x80, char: \x81 */ - { 0x10, 0x2040 }, /* Index: 0x81, char: \x82 */ - { 0x10, 0x2080 }, /* Index: 0x82, char: \x83 */ - { 0x10, 0x20c0 }, /* Index: 0x83, char: \x84 */ - { 0x10, 0x2100 }, /* Index: 0x84, char: \x85 */ - { 0x10, 0x2140 }, /* Index: 0x85, char: \x86 */ - { 0x10, 0x2180 }, /* Index: 0x86, char: \x87 */ - { 0x10, 0x21c0 }, /* Index: 0x87, char: \x88 */ - { 0x10, 0x2200 }, /* Index: 0x88, char: \x89 */ - { 0x10, 0x2240 }, /* Index: 0x89, char: \x8a */ - { 0x10, 0x2280 }, /* Index: 0x8a, char: \x8b */ - { 0x10, 0x22c0 }, /* Index: 0x8b, char: \x8c */ - { 0x10, 0x2300 }, /* Index: 0x8c, char: \x8d */ - { 0x10, 0x2340 }, /* Index: 0x8d, char: \x8e */ - { 0x10, 0x2380 }, /* Index: 0x8e, char: \x8f */ - { 0x10, 0x23c0 }, /* Index: 0x8f, char: \x90 */ - { 0x10, 0x2400 }, /* Index: 0x90, char: \x91 */ - { 0x10, 0x2440 }, /* Index: 0x91, char: \x92 */ - { 0x10, 0x2480 }, /* Index: 0x92, char: \x93 */ - { 0x10, 0x24c0 }, /* Index: 0x93, char: \x94 */ - { 0x10, 0x2500 }, /* Index: 0x94, char: \x95 */ - { 0x10, 0x2540 }, /* Index: 0x95, char: \x96 */ - { 0x10, 0x2580 }, /* Index: 0x96, char: \x97 */ - { 0x10, 0x25c0 }, /* Index: 0x97, char: \x98 */ - { 0x10, 0x2600 }, /* Index: 0x98, char: \x99 */ - { 0x10, 0x2640 }, /* Index: 0x99, char: \x9a */ - { 0x10, 0x2680 }, /* Index: 0x9a, char: \x9b */ - { 0x10, 0x26c0 }, /* Index: 0x9b, char: \x9c */ - { 0x10, 0x2700 }, /* Index: 0x9c, char: \x9d */ - { 0x10, 0x2740 }, /* Index: 0x9d, char: \x9e */ - { 0x10, 0x2780 }, /* Index: 0x9e, char: \x9f */ - { 0x10, 0x27c0 }, /* Index: 0x9f, char: \xa0 */ - { 0x10, 0x2800 }, /* Index: 0xa0, char: \xa1 */ - { 0x10, 0x2840 }, /* Index: 0xa1, char: \xa2 */ - { 0x10, 0x2880 }, /* Index: 0xa2, char: \xa3 */ - { 0x10, 0x28c0 }, /* Index: 0xa3, char: \xa4 */ - { 0x10, 0x2900 }, /* Index: 0xa4, char: \xa5 */ - { 0x10, 0x2940 }, /* Index: 0xa5, char: \xa6 */ - { 0x10, 0x2980 }, /* Index: 0xa6, char: \xa7 */ - { 0x10, 0x29c0 }, /* Index: 0xa7, char: \xa8 */ - { 0x10, 0x2a00 }, /* Index: 0xa8, char: \xa9 */ - { 0x10, 0x2a40 }, /* Index: 0xa9, char: \xaa */ - { 0x10, 0x2a80 }, /* Index: 0xaa, char: \xab */ - { 0x10, 0x2ac0 }, /* Index: 0xab, char: \xac */ - { 0x10, 0x2b00 }, /* Index: 0xac, char: \xad */ - { 0x10, 0x2b40 }, /* Index: 0xad, char: \xae */ - { 0x10, 0x2b80 }, /* Index: 0xae, char: \xaf */ - { 0x10, 0x2bc0 }, /* Index: 0xaf, char: \xb0 */ - { 0x10, 0x2c00 }, /* Index: 0xb0, char: \xb1 */ - { 0x10, 0x2c40 }, /* Index: 0xb1, char: \xb2 */ - { 0x10, 0x2c80 }, /* Index: 0xb2, char: \xb3 */ - { 0x10, 0x2cc0 }, /* Index: 0xb3, char: \xb4 */ - { 0x10, 0x2d00 }, /* Index: 0xb4, char: \xb5 */ - { 0x10, 0x2d40 }, /* Index: 0xb5, char: \xb6 */ - { 0x10, 0x2d80 }, /* Index: 0xb6, char: \xb7 */ - { 0x10, 0x2dc0 }, /* Index: 0xb7, char: \xb8 */ - { 0x10, 0x2e00 }, /* Index: 0xb8, char: \xb9 */ - { 0x10, 0x2e40 }, /* Index: 0xb9, char: \xba */ - { 0x10, 0x2e80 }, /* Index: 0xba, char: \xbb */ - { 0x10, 0x2ec0 }, /* Index: 0xbb, char: \xbc */ - { 0x10, 0x2f00 }, /* Index: 0xbc, char: \xbd */ - { 0x10, 0x2f40 }, /* Index: 0xbd, char: \xbe */ - { 0x10, 0x2f80 }, /* Index: 0xbe, char: \xbf */ - { 0x10, 0x2fc0 }, /* Index: 0xbf, char: \xc0 */ - { 0x10, 0x3000 }, /* Index: 0xc0, char: \xc1 */ - { 0x10, 0x3040 }, /* Index: 0xc1, char: \xc2 */ - { 0x10, 0x3080 }, /* Index: 0xc2, char: \xc3 */ - { 0x10, 0x30c0 }, /* Index: 0xc3, char: \xc4 */ - { 0x10, 0x3100 }, /* Index: 0xc4, char: \xc5 */ - { 0x10, 0x3140 }, /* Index: 0xc5, char: \xc6 */ - { 0x10, 0x3180 }, /* Index: 0xc6, char: \xc7 */ - { 0x10, 0x31c0 }, /* Index: 0xc7, char: \xc8 */ - { 0x10, 0x3200 }, /* Index: 0xc8, char: \xc9 */ - { 0x10, 0x3240 }, /* Index: 0xc9, char: \xca */ - { 0x10, 0x3280 }, /* Index: 0xca, char: \xcb */ - { 0x10, 0x32c0 }, /* Index: 0xcb, char: \xcc */ - { 0x10, 0x3300 }, /* Index: 0xcc, char: \xcd */ - { 0x10, 0x3340 }, /* Index: 0xcd, char: \xce */ - { 0x10, 0x3380 }, /* Index: 0xce, char: \xcf */ - { 0x10, 0x33c0 }, /* Index: 0xcf, char: \xd0 */ - { 0x10, 0x3400 }, /* Index: 0xd0, char: \xd1 */ - { 0x10, 0x3440 }, /* Index: 0xd1, char: \xd2 */ - { 0x10, 0x3480 }, /* Index: 0xd2, char: \xd3 */ - { 0x10, 0x34c0 }, /* Index: 0xd3, char: \xd4 */ - { 0x10, 0x3500 }, /* Index: 0xd4, char: \xd5 */ - { 0x10, 0x3540 }, /* Index: 0xd5, char: \xd6 */ - { 0x10, 0x3580 }, /* Index: 0xd6, char: \xd7 */ - { 0x10, 0x35c0 }, /* Index: 0xd7, char: \xd8 */ - { 0x10, 0x3600 }, /* Index: 0xd8, char: \xd9 */ - { 0x10, 0x3640 }, /* Index: 0xd9, char: \xda */ - { 0x10, 0x3680 }, /* Index: 0xda, char: \xdb */ - { 0x10, 0x36c0 }, /* Index: 0xdb, char: \xdc */ - { 0x10, 0x3700 }, /* Index: 0xdc, char: \xdd */ - { 0x10, 0x3740 }, /* Index: 0xdd, char: \xde */ - { 0x10, 0x3780 }, /* Index: 0xde, char: \xdf */ - { 0x10, 0x37c0 }, /* Index: 0xdf, char: \xe0 */ - { 0x10, 0x3800 }, /* Index: 0xe0, char: \xe1 */ - { 0x10, 0x3840 }, /* Index: 0xe1, char: \xe2 */ - { 0x10, 0x3880 }, /* Index: 0xe2, char: \xe3 */ - { 0x10, 0x38c0 }, /* Index: 0xe3, char: \xe4 */ - { 0x10, 0x3900 }, /* Index: 0xe4, char: \xe5 */ - { 0x10, 0x3940 }, /* Index: 0xe5, char: \xe6 */ - { 0x10, 0x3980 }, /* Index: 0xe6, char: \xe7 */ - { 0x10, 0x39c0 }, /* Index: 0xe7, char: \xe8 */ - { 0x10, 0x3a00 }, /* Index: 0xe8, char: \xe9 */ - { 0x10, 0x3a40 }, /* Index: 0xe9, char: \xea */ - { 0x10, 0x3a80 }, /* Index: 0xea, char: \xeb */ - { 0x10, 0x3ac0 }, /* Index: 0xeb, char: \xec */ - { 0x10, 0x3b00 }, /* Index: 0xec, char: \xed */ - { 0x10, 0x3b40 }, /* Index: 0xed, char: \xee */ - { 0x10, 0x3b80 }, /* Index: 0xee, char: \xef */ - { 0x10, 0x3bc0 }, /* Index: 0xef, char: \xf0 */ - { 0x10, 0x3c00 }, /* Index: 0xf0, char: \xf1 */ - { 0x10, 0x3c40 }, /* Index: 0xf1, char: \xf2 */ - { 0x10, 0x3c80 }, /* Index: 0xf2, char: \xf3 */ - { 0x10, 0x3cc0 }, /* Index: 0xf3, char: \xf4 */ - { 0x10, 0x3d00 }, /* Index: 0xf4, char: \xf5 */ - { 0x10, 0x3d40 }, /* Index: 0xf5, char: \xf6 */ - { 0x10, 0x3d80 }, /* Index: 0xf6, char: \xf7 */ - { 0x10, 0x3dc0 }, /* Index: 0xf7, char: \xf8 */ - { 0x10, 0x3e00 }, /* Index: 0xf8, char: \xf9 */ - { 0x10, 0x3e40 }, /* Index: 0xf9, char: \xfa */ - { 0x10, 0x3e80 }, /* Index: 0xfa, char: \xfb */ - { 0x10, 0x3ec0 }, /* Index: 0xfb, char: \xfc */ - { 0x10, 0x3f00 }, /* Index: 0xfc, char: \xfd */ - { 0x10, 0x3f40 }, /* Index: 0xfd, char: \xfe */ - { 0x10, 0x3f80 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_16x32_koi8_r_info = -{ - .height = 32, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_16x32_koi8_r_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_16x32_koi8_r_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_16X32_KOI8_R_H_ */ diff --git a/extras/fonts/data/font_terminus_6x12_iso8859_1.h b/extras/fonts/data/font_terminus_6x12_iso8859_1.h deleted file mode 100644 index 9cc0316..0000000 --- a/extras/fonts/data/font_terminus_6x12_iso8859_1.h +++ /dev/null @@ -1,3859 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 6x12 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 01:44:01 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_6X12_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_6X12_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_6x12_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xf8, /* #####... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x02, offset: 0x000c */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - - /* Index: 0x02, char: \x03, offset: 0x0018 */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x04, offset: 0x0024 */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x38, /* ..###... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x05, offset: 0x0030 */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x80, /* #....... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x24, /* ..#..#.. */ - 0x38, /* ..###... */ - 0x28, /* ..#.#... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - - /* Index: 0x05, char: \x06, offset: 0x003c */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x38, /* ..###... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x07, offset: 0x0048 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x08, offset: 0x0054 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x09, offset: 0x0060 */ - 0x90, /* #..#.... */ - 0xd0, /* ##.#.... */ - 0xb0, /* #.##.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - - /* Index: 0x09, char: \x0a, offset: 0x006c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0078 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x0c, offset: 0x0084 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0090 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x0d, char: \x0e, offset: 0x009c */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x0f, offset: 0x00a8 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x0f, char: \x10, offset: 0x00b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x10, char: \x11, offset: 0x00c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x12, offset: 0x00cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x13, offset: 0x00d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x14, offset: 0x00e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x15, offset: 0x00f0 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x15, char: \x16, offset: 0x00fc */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x16, char: \x17, offset: 0x0108 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x18, offset: 0x0114 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x18, char: \x19, offset: 0x0120 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x19, char: \x1a, offset: 0x012c */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x1b, offset: 0x0138 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x1c, offset: 0x0144 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0150 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x1e, offset: 0x015c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x48, /* .#..#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0168 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x20, offset: 0x0174 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x20, char: \x21, offset: 0x0180 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x22, offset: 0x018c */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x23, offset: 0x0198 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x24, offset: 0x01a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0xa0, /* #.#..... */ - 0x70, /* .###.... */ - 0x28, /* ..#.#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x24, char: \x25, offset: 0x01b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0xa8, /* #.#.#... */ - 0x50, /* .#.#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x28, /* ..#.#... */ - 0x54, /* .#.#.#.. */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x26, offset: 0x01bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x68, /* .##.#... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x68, /* .##.#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x27, offset: 0x01c8 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x28, offset: 0x01d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x29, offset: 0x01e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x2a, offset: 0x01ec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x2b, offset: 0x01f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0204 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0210 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x2e, offset: 0x021c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0228 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x30, offset: 0x0234 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xa8, /* #.#.#... */ - 0xc8, /* ##..#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x31, offset: 0x0240 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x32, offset: 0x024c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x32, char: \x33, offset: 0x0258 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x08, /* ....#... */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x34, offset: 0x0264 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x18, /* ...##... */ - 0x28, /* ..#.#... */ - 0x48, /* .#..#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x35, offset: 0x0270 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x36, offset: 0x027c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x37, offset: 0x0288 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x38, offset: 0x0294 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x39, offset: 0x02a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x3a, offset: 0x02ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x3b, offset: 0x02b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x3c, offset: 0x02c4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3c, char: \x3d, offset: 0x02d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3d, char: \x3e, offset: 0x02dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3e, char: \x3f, offset: 0x02e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x40, offset: 0x02f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x98, /* #..##... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x40, char: \x41, offset: 0x0300 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x42, offset: 0x030c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x43, offset: 0x0318 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x44, offset: 0x0324 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x90, /* #..#.... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x45, offset: 0x0330 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x46, offset: 0x033c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x47, offset: 0x0348 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xb8, /* #.###... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x48, offset: 0x0354 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x48, char: \x49, offset: 0x0360 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x4a, offset: 0x036c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x4b, offset: 0x0378 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x90, /* #..#.... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xa0, /* #.#..... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4b, char: \x4c, offset: 0x0384 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0390 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x4e, offset: 0x039c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xa8, /* #.#.#... */ - 0x98, /* #..##... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x4f, offset: 0x03a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x50, offset: 0x03b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x51, offset: 0x03c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - - /* Index: 0x51, char: \x52, offset: 0x03cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0xa0, /* #.#..... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x52, char: \x53, offset: 0x03d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x54, offset: 0x03e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x55, offset: 0x03f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x56, offset: 0x03fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x57, offset: 0x0408 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xd8, /* ##.##... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x58, offset: 0x0414 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x59, offset: 0x0420 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x5a, offset: 0x042c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5a, char: \x5b, offset: 0x0438 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x5c, offset: 0x0444 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0450 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x5e, offset: 0x045c */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5e, char: \x5f, offset: 0x0468 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x60, offset: 0x0474 */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x60, char: \x61, offset: 0x0480 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x61, char: \x62, offset: 0x048c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x62, char: \x63, offset: 0x0498 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x63, char: \x64, offset: 0x04a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x64, char: \x65, offset: 0x04b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x65, char: \x66, offset: 0x04bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x66, char: \x67, offset: 0x04c8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - - /* Index: 0x67, char: \x68, offset: 0x04d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x68, char: \x69, offset: 0x04e0 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x69, char: \x6a, offset: 0x04ec */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - - /* Index: 0x6a, char: \x6b, offset: 0x04f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x48, /* .#..#... */ - 0x50, /* .#.#.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6b, char: \x6c, offset: 0x0504 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6c, char: \x6d, offset: 0x0510 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6d, char: \x6e, offset: 0x051c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6e, char: \x6f, offset: 0x0528 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6f, char: \x70, offset: 0x0534 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0x70, char: \x71, offset: 0x0540 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - - /* Index: 0x71, char: \x72, offset: 0x054c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xb8, /* #.###... */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x72, char: \x73, offset: 0x0558 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x73, char: \x74, offset: 0x0564 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x74, char: \x75, offset: 0x0570 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x75, char: \x76, offset: 0x057c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x76, char: \x77, offset: 0x0588 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x77, char: \x78, offset: 0x0594 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x78, char: \x79, offset: 0x05a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - - /* Index: 0x79, char: \x7a, offset: 0x05ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7a, char: \x7b, offset: 0x05b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7b, char: \x7c, offset: 0x05c4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7c, char: \x7d, offset: 0x05d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7d, char: \x7e, offset: 0x05dc */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0xa8, /* #.#.#... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7e, char: \x7f, offset: 0x05e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7f, char: \x80, offset: 0x05f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x80, char: \x81, offset: 0x0600 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x81, char: \x82, offset: 0x060c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x82, char: \x83, offset: 0x0618 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x83, char: \x84, offset: 0x0624 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x84, char: \x85, offset: 0x0630 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x85, char: \x86, offset: 0x063c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x86, char: \x87, offset: 0x0648 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x87, char: \x88, offset: 0x0654 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x88, char: \x89, offset: 0x0660 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x89, char: \x8a, offset: 0x066c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8a, char: \x8b, offset: 0x0678 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8b, char: \x8c, offset: 0x0684 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8c, char: \x8d, offset: 0x0690 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8d, char: \x8e, offset: 0x069c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8e, char: \x8f, offset: 0x06a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8f, char: \x90, offset: 0x06b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x90, char: \x91, offset: 0x06c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x91, char: \x92, offset: 0x06cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x92, char: \x93, offset: 0x06d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x93, char: \x94, offset: 0x06e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x94, char: \x95, offset: 0x06f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x95, char: \x96, offset: 0x06fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x96, char: \x97, offset: 0x0708 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x97, char: \x98, offset: 0x0714 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x98, char: \x99, offset: 0x0720 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x99, char: \x9a, offset: 0x072c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9a, char: \x9b, offset: 0x0738 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9b, char: \x9c, offset: 0x0744 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9c, char: \x9d, offset: 0x0750 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9d, char: \x9e, offset: 0x075c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9e, char: \x9f, offset: 0x0768 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9f, char: \xa0, offset: 0x0774 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa0, char: \xa1, offset: 0x0780 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa1, char: \xa2, offset: 0x078c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0xa2, char: \xa3, offset: 0x0798 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x48, /* .#..#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa3, char: \xa4, offset: 0x07a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa4, char: \xa5, offset: 0x07b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa5, char: \xa6, offset: 0x07bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa6, char: \xa7, offset: 0x07c8 */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x28, /* ..#.#... */ - 0x10, /* ...#.... */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa7, char: \xa8, offset: 0x07d4 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa8, char: \xa9, offset: 0x07e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x84, /* #....#.. */ - 0xb4, /* #.##.#.. */ - 0xa4, /* #.#..#.. */ - 0xa4, /* #.#..#.. */ - 0xb4, /* #.##.#.. */ - 0x84, /* #....#.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa9, char: \xaa, offset: 0x07ec */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x38, /* ..###... */ - 0x48, /* .#..#... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaa, char: \xab, offset: 0x07f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x14, /* ...#.#.. */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x50, /* .#.#.... */ - 0x28, /* ..#.#... */ - 0x14, /* ...#.#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xab, char: \xac, offset: 0x0804 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xac, char: \xad, offset: 0x0810 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xad, char: \xae, offset: 0x081c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x84, /* #....#.. */ - 0xb4, /* #.##.#.. */ - 0xac, /* #.#.##.. */ - 0xb4, /* #.##.#.. */ - 0xac, /* #.#.##.. */ - 0x84, /* #....#.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xae, char: \xaf, offset: 0x0828 */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaf, char: \xb0, offset: 0x0834 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb0, char: \xb1, offset: 0x0840 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb1, char: \xb2, offset: 0x084c */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb2, char: \xb3, offset: 0x0858 */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb3, char: \xb4, offset: 0x0864 */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb4, char: \xb5, offset: 0x0870 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xe8, /* ###.#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0xb5, char: \xb6, offset: 0x087c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x68, /* .##.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb6, char: \xb7, offset: 0x0888 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb7, char: \xb8, offset: 0x0894 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - - /* Index: 0xb8, char: \xb9, offset: 0x08a0 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb9, char: \xba, offset: 0x08ac */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xba, char: \xbb, offset: 0x08b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0x50, /* .#.#.... */ - 0x28, /* ..#.#... */ - 0x14, /* ...#.#.. */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0xa0, /* #.#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbb, char: \xbc, offset: 0x08c4 */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x48, /* .#..#... */ - 0x98, /* #..##... */ - 0x28, /* ..#.#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - - /* Index: 0xbc, char: \xbd, offset: 0x08d0 */ - 0x40, /* .#...... */ - 0xc0, /* ##...... */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x98, /* #..##... */ - 0x24, /* ..#..#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x3c, /* ..####.. */ - - /* Index: 0xbd, char: \xbe, offset: 0x08dc */ - 0xe0, /* ###..... */ - 0x10, /* ...#.... */ - 0x60, /* .##..... */ - 0x14, /* ...#.#.. */ - 0xe8, /* ###.#... */ - 0x10, /* ...#.... */ - 0x24, /* ..#..#.. */ - 0x4c, /* .#..##.. */ - 0x94, /* #..#.#.. */ - 0x3c, /* ..####.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - - /* Index: 0xbe, char: \xbf, offset: 0x08e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbf, char: \xc0, offset: 0x08f4 */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc0, char: \xc1, offset: 0x0900 */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc1, char: \xc2, offset: 0x090c */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc2, char: \xc3, offset: 0x0918 */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc3, char: \xc4, offset: 0x0924 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc4, char: \xc5, offset: 0x0930 */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc5, char: \xc6, offset: 0x093c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xfc, /* ######.. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x9c, /* #..###.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc6, char: \xc7, offset: 0x0948 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - - /* Index: 0xc7, char: \xc8, offset: 0x0954 */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc8, char: \xc9, offset: 0x0960 */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc9, char: \xca, offset: 0x096c */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xca, char: \xcb, offset: 0x0978 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcb, char: \xcc, offset: 0x0984 */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcc, char: \xcd, offset: 0x0990 */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcd, char: \xce, offset: 0x099c */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xce, char: \xcf, offset: 0x09a8 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcf, char: \xd0, offset: 0x09b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0xe8, /* ###.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x90, /* #..#.... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd0, char: \xd1, offset: 0x09c0 */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xa8, /* #.#.#... */ - 0x98, /* #..##... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd1, char: \xd2, offset: 0x09cc */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd2, char: \xd3, offset: 0x09d8 */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd3, char: \xd4, offset: 0x09e4 */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd4, char: \xd5, offset: 0x09f0 */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd5, char: \xd6, offset: 0x09fc */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd6, char: \xd7, offset: 0x0a08 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd7, char: \xd8, offset: 0x0a14 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x74, /* .###.#.. */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xa8, /* #.#.#... */ - 0xc8, /* ##..#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd8, char: \xd9, offset: 0x0a20 */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd9, char: \xda, offset: 0x0a2c */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xda, char: \xdb, offset: 0x0a38 */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdb, char: \xdc, offset: 0x0a44 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdc, char: \xdd, offset: 0x0a50 */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdd, char: \xde, offset: 0x0a5c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xde, char: \xdf, offset: 0x0a68 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xb0, /* #.##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdf, char: \xe0, offset: 0x0a74 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe0, char: \xe1, offset: 0x0a80 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe1, char: \xe2, offset: 0x0a8c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe2, char: \xe3, offset: 0x0a98 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe3, char: \xe4, offset: 0x0aa4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe4, char: \xe5, offset: 0x0ab0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe5, char: \xe6, offset: 0x0abc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x28, /* ..#.#... */ - 0x68, /* .##.#... */ - 0xb0, /* #.##.... */ - 0xa0, /* #.#..... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe6, char: \xe7, offset: 0x0ac8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - - /* Index: 0xe7, char: \xe8, offset: 0x0ad4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe8, char: \xe9, offset: 0x0ae0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe9, char: \xea, offset: 0x0aec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xea, char: \xeb, offset: 0x0af8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xeb, char: \xec, offset: 0x0b04 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xec, char: \xed, offset: 0x0b10 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xed, char: \xee, offset: 0x0b1c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xee, char: \xef, offset: 0x0b28 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xef, char: \xf0, offset: 0x0b34 */ - 0x00, /* ........ */ - 0xa0, /* #.#..... */ - 0x40, /* .#...... */ - 0xa0, /* #.#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf0, char: \xf1, offset: 0x0b40 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf1, char: \xf2, offset: 0x0b4c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf2, char: \xf3, offset: 0x0b58 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf3, char: \xf4, offset: 0x0b64 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf4, char: \xf5, offset: 0x0b70 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x28, /* ..#.#... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf5, char: \xf6, offset: 0x0b7c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf6, char: \xf7, offset: 0x0b88 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf7, char: \xf8, offset: 0x0b94 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x34, /* ..##.#.. */ - 0x48, /* .#..#... */ - 0x58, /* .#.##... */ - 0x68, /* .##.#... */ - 0x48, /* .#..#... */ - 0xb0, /* #.##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf8, char: \xf9, offset: 0x0ba0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf9, char: \xfa, offset: 0x0bac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfa, char: \xfb, offset: 0x0bb8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfb, char: \xfc, offset: 0x0bc4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfc, char: \xfd, offset: 0x0bd0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - - /* Index: 0xfd, char: \xfe, offset: 0x0bdc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0xfe, char: \xff, offset: 0x0be8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ -}; - -const font_char_desc_t _fonts_terminus_6x12_iso8859_1_descriptors[] = { - { 0x06, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x06, 0x000c }, /* Index: 0x01, char: \x02 */ - { 0x06, 0x0018 }, /* Index: 0x02, char: \x03 */ - { 0x06, 0x0024 }, /* Index: 0x03, char: \x04 */ - { 0x06, 0x0030 }, /* Index: 0x04, char: \x05 */ - { 0x06, 0x003c }, /* Index: 0x05, char: \x06 */ - { 0x06, 0x0048 }, /* Index: 0x06, char: \x07 */ - { 0x06, 0x0054 }, /* Index: 0x07, char: \x08 */ - { 0x06, 0x0060 }, /* Index: 0x08, char: \x09 */ - { 0x06, 0x006c }, /* Index: 0x09, char: \x0a */ - { 0x06, 0x0078 }, /* Index: 0x0a, char: \x0b */ - { 0x06, 0x0084 }, /* Index: 0x0b, char: \x0c */ - { 0x06, 0x0090 }, /* Index: 0x0c, char: \x0d */ - { 0x06, 0x009c }, /* Index: 0x0d, char: \x0e */ - { 0x06, 0x00a8 }, /* Index: 0x0e, char: \x0f */ - { 0x06, 0x00b4 }, /* Index: 0x0f, char: \x10 */ - { 0x06, 0x00c0 }, /* Index: 0x10, char: \x11 */ - { 0x06, 0x00cc }, /* Index: 0x11, char: \x12 */ - { 0x06, 0x00d8 }, /* Index: 0x12, char: \x13 */ - { 0x06, 0x00e4 }, /* Index: 0x13, char: \x14 */ - { 0x06, 0x00f0 }, /* Index: 0x14, char: \x15 */ - { 0x06, 0x00fc }, /* Index: 0x15, char: \x16 */ - { 0x06, 0x0108 }, /* Index: 0x16, char: \x17 */ - { 0x06, 0x0114 }, /* Index: 0x17, char: \x18 */ - { 0x06, 0x0120 }, /* Index: 0x18, char: \x19 */ - { 0x06, 0x012c }, /* Index: 0x19, char: \x1a */ - { 0x06, 0x0138 }, /* Index: 0x1a, char: \x1b */ - { 0x06, 0x0144 }, /* Index: 0x1b, char: \x1c */ - { 0x06, 0x0150 }, /* Index: 0x1c, char: \x1d */ - { 0x06, 0x015c }, /* Index: 0x1d, char: \x1e */ - { 0x06, 0x0168 }, /* Index: 0x1e, char: \x1f */ - { 0x06, 0x0174 }, /* Index: 0x1f, char: \x20 */ - { 0x06, 0x0180 }, /* Index: 0x20, char: \x21 */ - { 0x06, 0x018c }, /* Index: 0x21, char: \x22 */ - { 0x06, 0x0198 }, /* Index: 0x22, char: \x23 */ - { 0x06, 0x01a4 }, /* Index: 0x23, char: \x24 */ - { 0x06, 0x01b0 }, /* Index: 0x24, char: \x25 */ - { 0x06, 0x01bc }, /* Index: 0x25, char: \x26 */ - { 0x06, 0x01c8 }, /* Index: 0x26, char: \x27 */ - { 0x06, 0x01d4 }, /* Index: 0x27, char: \x28 */ - { 0x06, 0x01e0 }, /* Index: 0x28, char: \x29 */ - { 0x06, 0x01ec }, /* Index: 0x29, char: \x2a */ - { 0x06, 0x01f8 }, /* Index: 0x2a, char: \x2b */ - { 0x06, 0x0204 }, /* Index: 0x2b, char: \x2c */ - { 0x06, 0x0210 }, /* Index: 0x2c, char: \x2d */ - { 0x06, 0x021c }, /* Index: 0x2d, char: \x2e */ - { 0x06, 0x0228 }, /* Index: 0x2e, char: \x2f */ - { 0x06, 0x0234 }, /* Index: 0x2f, char: \x30 */ - { 0x06, 0x0240 }, /* Index: 0x30, char: \x31 */ - { 0x06, 0x024c }, /* Index: 0x31, char: \x32 */ - { 0x06, 0x0258 }, /* Index: 0x32, char: \x33 */ - { 0x06, 0x0264 }, /* Index: 0x33, char: \x34 */ - { 0x06, 0x0270 }, /* Index: 0x34, char: \x35 */ - { 0x06, 0x027c }, /* Index: 0x35, char: \x36 */ - { 0x06, 0x0288 }, /* Index: 0x36, char: \x37 */ - { 0x06, 0x0294 }, /* Index: 0x37, char: \x38 */ - { 0x06, 0x02a0 }, /* Index: 0x38, char: \x39 */ - { 0x06, 0x02ac }, /* Index: 0x39, char: \x3a */ - { 0x06, 0x02b8 }, /* Index: 0x3a, char: \x3b */ - { 0x06, 0x02c4 }, /* Index: 0x3b, char: \x3c */ - { 0x06, 0x02d0 }, /* Index: 0x3c, char: \x3d */ - { 0x06, 0x02dc }, /* Index: 0x3d, char: \x3e */ - { 0x06, 0x02e8 }, /* Index: 0x3e, char: \x3f */ - { 0x06, 0x02f4 }, /* Index: 0x3f, char: \x40 */ - { 0x06, 0x0300 }, /* Index: 0x40, char: \x41 */ - { 0x06, 0x030c }, /* Index: 0x41, char: \x42 */ - { 0x06, 0x0318 }, /* Index: 0x42, char: \x43 */ - { 0x06, 0x0324 }, /* Index: 0x43, char: \x44 */ - { 0x06, 0x0330 }, /* Index: 0x44, char: \x45 */ - { 0x06, 0x033c }, /* Index: 0x45, char: \x46 */ - { 0x06, 0x0348 }, /* Index: 0x46, char: \x47 */ - { 0x06, 0x0354 }, /* Index: 0x47, char: \x48 */ - { 0x06, 0x0360 }, /* Index: 0x48, char: \x49 */ - { 0x06, 0x036c }, /* Index: 0x49, char: \x4a */ - { 0x06, 0x0378 }, /* Index: 0x4a, char: \x4b */ - { 0x06, 0x0384 }, /* Index: 0x4b, char: \x4c */ - { 0x06, 0x0390 }, /* Index: 0x4c, char: \x4d */ - { 0x06, 0x039c }, /* Index: 0x4d, char: \x4e */ - { 0x06, 0x03a8 }, /* Index: 0x4e, char: \x4f */ - { 0x06, 0x03b4 }, /* Index: 0x4f, char: \x50 */ - { 0x06, 0x03c0 }, /* Index: 0x50, char: \x51 */ - { 0x06, 0x03cc }, /* Index: 0x51, char: \x52 */ - { 0x06, 0x03d8 }, /* Index: 0x52, char: \x53 */ - { 0x06, 0x03e4 }, /* Index: 0x53, char: \x54 */ - { 0x06, 0x03f0 }, /* Index: 0x54, char: \x55 */ - { 0x06, 0x03fc }, /* Index: 0x55, char: \x56 */ - { 0x06, 0x0408 }, /* Index: 0x56, char: \x57 */ - { 0x06, 0x0414 }, /* Index: 0x57, char: \x58 */ - { 0x06, 0x0420 }, /* Index: 0x58, char: \x59 */ - { 0x06, 0x042c }, /* Index: 0x59, char: \x5a */ - { 0x06, 0x0438 }, /* Index: 0x5a, char: \x5b */ - { 0x06, 0x0444 }, /* Index: 0x5b, char: \x5c */ - { 0x06, 0x0450 }, /* Index: 0x5c, char: \x5d */ - { 0x06, 0x045c }, /* Index: 0x5d, char: \x5e */ - { 0x06, 0x0468 }, /* Index: 0x5e, char: \x5f */ - { 0x06, 0x0474 }, /* Index: 0x5f, char: \x60 */ - { 0x06, 0x0480 }, /* Index: 0x60, char: \x61 */ - { 0x06, 0x048c }, /* Index: 0x61, char: \x62 */ - { 0x06, 0x0498 }, /* Index: 0x62, char: \x63 */ - { 0x06, 0x04a4 }, /* Index: 0x63, char: \x64 */ - { 0x06, 0x04b0 }, /* Index: 0x64, char: \x65 */ - { 0x06, 0x04bc }, /* Index: 0x65, char: \x66 */ - { 0x06, 0x04c8 }, /* Index: 0x66, char: \x67 */ - { 0x06, 0x04d4 }, /* Index: 0x67, char: \x68 */ - { 0x06, 0x04e0 }, /* Index: 0x68, char: \x69 */ - { 0x06, 0x04ec }, /* Index: 0x69, char: \x6a */ - { 0x06, 0x04f8 }, /* Index: 0x6a, char: \x6b */ - { 0x06, 0x0504 }, /* Index: 0x6b, char: \x6c */ - { 0x06, 0x0510 }, /* Index: 0x6c, char: \x6d */ - { 0x06, 0x051c }, /* Index: 0x6d, char: \x6e */ - { 0x06, 0x0528 }, /* Index: 0x6e, char: \x6f */ - { 0x06, 0x0534 }, /* Index: 0x6f, char: \x70 */ - { 0x06, 0x0540 }, /* Index: 0x70, char: \x71 */ - { 0x06, 0x054c }, /* Index: 0x71, char: \x72 */ - { 0x06, 0x0558 }, /* Index: 0x72, char: \x73 */ - { 0x06, 0x0564 }, /* Index: 0x73, char: \x74 */ - { 0x06, 0x0570 }, /* Index: 0x74, char: \x75 */ - { 0x06, 0x057c }, /* Index: 0x75, char: \x76 */ - { 0x06, 0x0588 }, /* Index: 0x76, char: \x77 */ - { 0x06, 0x0594 }, /* Index: 0x77, char: \x78 */ - { 0x06, 0x05a0 }, /* Index: 0x78, char: \x79 */ - { 0x06, 0x05ac }, /* Index: 0x79, char: \x7a */ - { 0x06, 0x05b8 }, /* Index: 0x7a, char: \x7b */ - { 0x06, 0x05c4 }, /* Index: 0x7b, char: \x7c */ - { 0x06, 0x05d0 }, /* Index: 0x7c, char: \x7d */ - { 0x06, 0x05dc }, /* Index: 0x7d, char: \x7e */ - { 0x06, 0x05e8 }, /* Index: 0x7e, char: \x7f */ - { 0x06, 0x05f4 }, /* Index: 0x7f, char: \x80 */ - { 0x06, 0x0600 }, /* Index: 0x80, char: \x81 */ - { 0x06, 0x060c }, /* Index: 0x81, char: \x82 */ - { 0x06, 0x0618 }, /* Index: 0x82, char: \x83 */ - { 0x06, 0x0624 }, /* Index: 0x83, char: \x84 */ - { 0x06, 0x0630 }, /* Index: 0x84, char: \x85 */ - { 0x06, 0x063c }, /* Index: 0x85, char: \x86 */ - { 0x06, 0x0648 }, /* Index: 0x86, char: \x87 */ - { 0x06, 0x0654 }, /* Index: 0x87, char: \x88 */ - { 0x06, 0x0660 }, /* Index: 0x88, char: \x89 */ - { 0x06, 0x066c }, /* Index: 0x89, char: \x8a */ - { 0x06, 0x0678 }, /* Index: 0x8a, char: \x8b */ - { 0x06, 0x0684 }, /* Index: 0x8b, char: \x8c */ - { 0x06, 0x0690 }, /* Index: 0x8c, char: \x8d */ - { 0x06, 0x069c }, /* Index: 0x8d, char: \x8e */ - { 0x06, 0x06a8 }, /* Index: 0x8e, char: \x8f */ - { 0x06, 0x06b4 }, /* Index: 0x8f, char: \x90 */ - { 0x06, 0x06c0 }, /* Index: 0x90, char: \x91 */ - { 0x06, 0x06cc }, /* Index: 0x91, char: \x92 */ - { 0x06, 0x06d8 }, /* Index: 0x92, char: \x93 */ - { 0x06, 0x06e4 }, /* Index: 0x93, char: \x94 */ - { 0x06, 0x06f0 }, /* Index: 0x94, char: \x95 */ - { 0x06, 0x06fc }, /* Index: 0x95, char: \x96 */ - { 0x06, 0x0708 }, /* Index: 0x96, char: \x97 */ - { 0x06, 0x0714 }, /* Index: 0x97, char: \x98 */ - { 0x06, 0x0720 }, /* Index: 0x98, char: \x99 */ - { 0x06, 0x072c }, /* Index: 0x99, char: \x9a */ - { 0x06, 0x0738 }, /* Index: 0x9a, char: \x9b */ - { 0x06, 0x0744 }, /* Index: 0x9b, char: \x9c */ - { 0x06, 0x0750 }, /* Index: 0x9c, char: \x9d */ - { 0x06, 0x075c }, /* Index: 0x9d, char: \x9e */ - { 0x06, 0x0768 }, /* Index: 0x9e, char: \x9f */ - { 0x06, 0x0774 }, /* Index: 0x9f, char: \xa0 */ - { 0x06, 0x0780 }, /* Index: 0xa0, char: \xa1 */ - { 0x06, 0x078c }, /* Index: 0xa1, char: \xa2 */ - { 0x06, 0x0798 }, /* Index: 0xa2, char: \xa3 */ - { 0x06, 0x07a4 }, /* Index: 0xa3, char: \xa4 */ - { 0x06, 0x07b0 }, /* Index: 0xa4, char: \xa5 */ - { 0x06, 0x07bc }, /* Index: 0xa5, char: \xa6 */ - { 0x06, 0x07c8 }, /* Index: 0xa6, char: \xa7 */ - { 0x06, 0x07d4 }, /* Index: 0xa7, char: \xa8 */ - { 0x06, 0x07e0 }, /* Index: 0xa8, char: \xa9 */ - { 0x06, 0x07ec }, /* Index: 0xa9, char: \xaa */ - { 0x06, 0x07f8 }, /* Index: 0xaa, char: \xab */ - { 0x06, 0x0804 }, /* Index: 0xab, char: \xac */ - { 0x06, 0x0810 }, /* Index: 0xac, char: \xad */ - { 0x06, 0x081c }, /* Index: 0xad, char: \xae */ - { 0x06, 0x0828 }, /* Index: 0xae, char: \xaf */ - { 0x06, 0x0834 }, /* Index: 0xaf, char: \xb0 */ - { 0x06, 0x0840 }, /* Index: 0xb0, char: \xb1 */ - { 0x06, 0x084c }, /* Index: 0xb1, char: \xb2 */ - { 0x06, 0x0858 }, /* Index: 0xb2, char: \xb3 */ - { 0x06, 0x0864 }, /* Index: 0xb3, char: \xb4 */ - { 0x06, 0x0870 }, /* Index: 0xb4, char: \xb5 */ - { 0x06, 0x087c }, /* Index: 0xb5, char: \xb6 */ - { 0x06, 0x0888 }, /* Index: 0xb6, char: \xb7 */ - { 0x06, 0x0894 }, /* Index: 0xb7, char: \xb8 */ - { 0x06, 0x08a0 }, /* Index: 0xb8, char: \xb9 */ - { 0x06, 0x08ac }, /* Index: 0xb9, char: \xba */ - { 0x06, 0x08b8 }, /* Index: 0xba, char: \xbb */ - { 0x06, 0x08c4 }, /* Index: 0xbb, char: \xbc */ - { 0x06, 0x08d0 }, /* Index: 0xbc, char: \xbd */ - { 0x06, 0x08dc }, /* Index: 0xbd, char: \xbe */ - { 0x06, 0x08e8 }, /* Index: 0xbe, char: \xbf */ - { 0x06, 0x08f4 }, /* Index: 0xbf, char: \xc0 */ - { 0x06, 0x0900 }, /* Index: 0xc0, char: \xc1 */ - { 0x06, 0x090c }, /* Index: 0xc1, char: \xc2 */ - { 0x06, 0x0918 }, /* Index: 0xc2, char: \xc3 */ - { 0x06, 0x0924 }, /* Index: 0xc3, char: \xc4 */ - { 0x06, 0x0930 }, /* Index: 0xc4, char: \xc5 */ - { 0x06, 0x093c }, /* Index: 0xc5, char: \xc6 */ - { 0x06, 0x0948 }, /* Index: 0xc6, char: \xc7 */ - { 0x06, 0x0954 }, /* Index: 0xc7, char: \xc8 */ - { 0x06, 0x0960 }, /* Index: 0xc8, char: \xc9 */ - { 0x06, 0x096c }, /* Index: 0xc9, char: \xca */ - { 0x06, 0x0978 }, /* Index: 0xca, char: \xcb */ - { 0x06, 0x0984 }, /* Index: 0xcb, char: \xcc */ - { 0x06, 0x0990 }, /* Index: 0xcc, char: \xcd */ - { 0x06, 0x099c }, /* Index: 0xcd, char: \xce */ - { 0x06, 0x09a8 }, /* Index: 0xce, char: \xcf */ - { 0x06, 0x09b4 }, /* Index: 0xcf, char: \xd0 */ - { 0x06, 0x09c0 }, /* Index: 0xd0, char: \xd1 */ - { 0x06, 0x09cc }, /* Index: 0xd1, char: \xd2 */ - { 0x06, 0x09d8 }, /* Index: 0xd2, char: \xd3 */ - { 0x06, 0x09e4 }, /* Index: 0xd3, char: \xd4 */ - { 0x06, 0x09f0 }, /* Index: 0xd4, char: \xd5 */ - { 0x06, 0x09fc }, /* Index: 0xd5, char: \xd6 */ - { 0x06, 0x0a08 }, /* Index: 0xd6, char: \xd7 */ - { 0x06, 0x0a14 }, /* Index: 0xd7, char: \xd8 */ - { 0x06, 0x0a20 }, /* Index: 0xd8, char: \xd9 */ - { 0x06, 0x0a2c }, /* Index: 0xd9, char: \xda */ - { 0x06, 0x0a38 }, /* Index: 0xda, char: \xdb */ - { 0x06, 0x0a44 }, /* Index: 0xdb, char: \xdc */ - { 0x06, 0x0a50 }, /* Index: 0xdc, char: \xdd */ - { 0x06, 0x0a5c }, /* Index: 0xdd, char: \xde */ - { 0x06, 0x0a68 }, /* Index: 0xde, char: \xdf */ - { 0x06, 0x0a74 }, /* Index: 0xdf, char: \xe0 */ - { 0x06, 0x0a80 }, /* Index: 0xe0, char: \xe1 */ - { 0x06, 0x0a8c }, /* Index: 0xe1, char: \xe2 */ - { 0x06, 0x0a98 }, /* Index: 0xe2, char: \xe3 */ - { 0x06, 0x0aa4 }, /* Index: 0xe3, char: \xe4 */ - { 0x06, 0x0ab0 }, /* Index: 0xe4, char: \xe5 */ - { 0x06, 0x0abc }, /* Index: 0xe5, char: \xe6 */ - { 0x06, 0x0ac8 }, /* Index: 0xe6, char: \xe7 */ - { 0x06, 0x0ad4 }, /* Index: 0xe7, char: \xe8 */ - { 0x06, 0x0ae0 }, /* Index: 0xe8, char: \xe9 */ - { 0x06, 0x0aec }, /* Index: 0xe9, char: \xea */ - { 0x06, 0x0af8 }, /* Index: 0xea, char: \xeb */ - { 0x06, 0x0b04 }, /* Index: 0xeb, char: \xec */ - { 0x06, 0x0b10 }, /* Index: 0xec, char: \xed */ - { 0x06, 0x0b1c }, /* Index: 0xed, char: \xee */ - { 0x06, 0x0b28 }, /* Index: 0xee, char: \xef */ - { 0x06, 0x0b34 }, /* Index: 0xef, char: \xf0 */ - { 0x06, 0x0b40 }, /* Index: 0xf0, char: \xf1 */ - { 0x06, 0x0b4c }, /* Index: 0xf1, char: \xf2 */ - { 0x06, 0x0b58 }, /* Index: 0xf2, char: \xf3 */ - { 0x06, 0x0b64 }, /* Index: 0xf3, char: \xf4 */ - { 0x06, 0x0b70 }, /* Index: 0xf4, char: \xf5 */ - { 0x06, 0x0b7c }, /* Index: 0xf5, char: \xf6 */ - { 0x06, 0x0b88 }, /* Index: 0xf6, char: \xf7 */ - { 0x06, 0x0b94 }, /* Index: 0xf7, char: \xf8 */ - { 0x06, 0x0ba0 }, /* Index: 0xf8, char: \xf9 */ - { 0x06, 0x0bac }, /* Index: 0xf9, char: \xfa */ - { 0x06, 0x0bb8 }, /* Index: 0xfa, char: \xfb */ - { 0x06, 0x0bc4 }, /* Index: 0xfb, char: \xfc */ - { 0x06, 0x0bd0 }, /* Index: 0xfc, char: \xfd */ - { 0x06, 0x0bdc }, /* Index: 0xfd, char: \xfe */ - { 0x06, 0x0be8 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_6x12_iso8859_1_info = -{ - .height = 12, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_6x12_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_6x12_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_6X12_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_6x12_koi8_r.h b/extras/fonts/data/font_terminus_6x12_koi8_r.h deleted file mode 100644 index fb95441..0000000 --- a/extras/fonts/data/font_terminus_6x12_koi8_r.h +++ /dev/null @@ -1,3859 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 6x12 - * Charset: koi8_r - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.txt, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_6X12_KOI8_R_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_6X12_KOI8_R_H_ - -static const uint8_t _fonts_terminus_6x12_koi8_r_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xf8, /* #####... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x02, offset: 0x000c */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - - /* Index: 0x02, char: \x03, offset: 0x0018 */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x04, offset: 0x0024 */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x38, /* ..###... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x05, offset: 0x0030 */ - 0x60, /* .##..... */ - 0x90, /* #..#.... */ - 0x80, /* #....... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x24, /* ..#..#.. */ - 0x38, /* ..###... */ - 0x28, /* ..#.#... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - - /* Index: 0x05, char: \x06, offset: 0x003c */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x38, /* ..###... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x07, offset: 0x0048 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x08, offset: 0x0054 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x09, offset: 0x0060 */ - 0x90, /* #..#.... */ - 0xd0, /* ##.#.... */ - 0xb0, /* #.##.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - - /* Index: 0x09, char: \x0a, offset: 0x006c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0078 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x0c, offset: 0x0084 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0090 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x0d, char: \x0e, offset: 0x009c */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x0f, offset: 0x00a8 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x0f, char: \x10, offset: 0x00b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x10, char: \x11, offset: 0x00c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x12, offset: 0x00cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x13, offset: 0x00d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x14, offset: 0x00e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x15, offset: 0x00f0 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x15, char: \x16, offset: 0x00fc */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x16, char: \x17, offset: 0x0108 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x18, offset: 0x0114 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x18, char: \x19, offset: 0x0120 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x19, char: \x1a, offset: 0x012c */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x1b, offset: 0x0138 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x1c, offset: 0x0144 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0150 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x1e, offset: 0x015c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x40, /* .#...... */ - 0xf0, /* ####.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x48, /* .#..#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0168 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x20, offset: 0x0174 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x20, char: \x21, offset: 0x0180 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x22, offset: 0x018c */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x23, offset: 0x0198 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x24, offset: 0x01a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0xa0, /* #.#..... */ - 0x70, /* .###.... */ - 0x28, /* ..#.#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x24, char: \x25, offset: 0x01b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0xa8, /* #.#.#... */ - 0x50, /* .#.#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x28, /* ..#.#... */ - 0x54, /* .#.#.#.. */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x26, offset: 0x01bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x68, /* .##.#... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x68, /* .##.#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x27, offset: 0x01c8 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x28, offset: 0x01d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x29, offset: 0x01e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x2a, offset: 0x01ec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x2b, offset: 0x01f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0204 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0210 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x2e, offset: 0x021c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0228 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x30, offset: 0x0234 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xa8, /* #.#.#... */ - 0xc8, /* ##..#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x31, offset: 0x0240 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x32, offset: 0x024c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x32, char: \x33, offset: 0x0258 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x08, /* ....#... */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x34, offset: 0x0264 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x18, /* ...##... */ - 0x28, /* ..#.#... */ - 0x48, /* .#..#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x35, offset: 0x0270 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x36, offset: 0x027c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x37, offset: 0x0288 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x38, offset: 0x0294 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x39, offset: 0x02a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x3a, offset: 0x02ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x3b, offset: 0x02b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x3c, offset: 0x02c4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3c, char: \x3d, offset: 0x02d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3d, char: \x3e, offset: 0x02dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3e, char: \x3f, offset: 0x02e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x40, offset: 0x02f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x98, /* #..##... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x40, char: \x41, offset: 0x0300 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x42, offset: 0x030c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x43, offset: 0x0318 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x44, offset: 0x0324 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x90, /* #..#.... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x45, offset: 0x0330 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x46, offset: 0x033c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x47, offset: 0x0348 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xb8, /* #.###... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x48, offset: 0x0354 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x48, char: \x49, offset: 0x0360 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x4a, offset: 0x036c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x4b, offset: 0x0378 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x90, /* #..#.... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xa0, /* #.#..... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4b, char: \x4c, offset: 0x0384 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0390 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x4e, offset: 0x039c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xa8, /* #.#.#... */ - 0x98, /* #..##... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x4f, offset: 0x03a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x50, offset: 0x03b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x51, offset: 0x03c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - - /* Index: 0x51, char: \x52, offset: 0x03cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0xa0, /* #.#..... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x52, char: \x53, offset: 0x03d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x54, offset: 0x03e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x55, offset: 0x03f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x56, offset: 0x03fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x57, offset: 0x0408 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xd8, /* ##.##... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x58, offset: 0x0414 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x59, offset: 0x0420 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x5a, offset: 0x042c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5a, char: \x5b, offset: 0x0438 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x5c, offset: 0x0444 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0450 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x5e, offset: 0x045c */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5e, char: \x5f, offset: 0x0468 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x60, offset: 0x0474 */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x60, char: \x61, offset: 0x0480 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x61, char: \x62, offset: 0x048c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x62, char: \x63, offset: 0x0498 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x63, char: \x64, offset: 0x04a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x64, char: \x65, offset: 0x04b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x65, char: \x66, offset: 0x04bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x66, char: \x67, offset: 0x04c8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - - /* Index: 0x67, char: \x68, offset: 0x04d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x68, char: \x69, offset: 0x04e0 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x69, char: \x6a, offset: 0x04ec */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x48, /* .#..#... */ - 0x30, /* ..##.... */ - - /* Index: 0x6a, char: \x6b, offset: 0x04f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x48, /* .#..#... */ - 0x50, /* .#.#.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6b, char: \x6c, offset: 0x0504 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6c, char: \x6d, offset: 0x0510 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6d, char: \x6e, offset: 0x051c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6e, char: \x6f, offset: 0x0528 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6f, char: \x70, offset: 0x0534 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0x70, char: \x71, offset: 0x0540 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - - /* Index: 0x71, char: \x72, offset: 0x054c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xb8, /* #.###... */ - 0xc0, /* ##...... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x72, char: \x73, offset: 0x0558 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x80, /* #....... */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x73, char: \x74, offset: 0x0564 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x74, char: \x75, offset: 0x0570 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x75, char: \x76, offset: 0x057c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x76, char: \x77, offset: 0x0588 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x77, char: \x78, offset: 0x0594 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x78, char: \x79, offset: 0x05a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - - /* Index: 0x79, char: \x7a, offset: 0x05ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7a, char: \x7b, offset: 0x05b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7b, char: \x7c, offset: 0x05c4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7c, char: \x7d, offset: 0x05d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7d, char: \x7e, offset: 0x05dc */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0xa8, /* #.#.#... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7e, char: \x7f, offset: 0x05e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7f, char: \x80, offset: 0x05f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x80, char: \x81, offset: 0x0600 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x81, char: \x82, offset: 0x060c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x82, char: \x83, offset: 0x0618 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x83, char: \x84, offset: 0x0624 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x84, char: \x85, offset: 0x0630 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x85, char: \x86, offset: 0x063c */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x86, char: \x87, offset: 0x0648 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x87, char: \x88, offset: 0x0654 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x88, char: \x89, offset: 0x0660 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x89, char: \x8a, offset: 0x066c */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x8a, char: \x8b, offset: 0x0678 */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8b, char: \x8c, offset: 0x0684 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - - /* Index: 0x8c, char: \x8d, offset: 0x0690 */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - - /* Index: 0x8d, char: \x8e, offset: 0x069c */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - 0xe0, /* ###..... */ - - /* Index: 0x8e, char: \x8f, offset: 0x06a8 */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - 0x1c, /* ...###.. */ - - /* Index: 0x8f, char: \x90, offset: 0x06b4 */ - 0x90, /* #..#.... */ - 0x24, /* ..#..#.. */ - 0x90, /* #..#.... */ - 0x24, /* ..#..#.. */ - 0x90, /* #..#.... */ - 0x24, /* ..#..#.. */ - 0x90, /* #..#.... */ - 0x24, /* ..#..#.. */ - 0x90, /* #..#.... */ - 0x24, /* ..#..#.. */ - 0x90, /* #..#.... */ - 0x24, /* ..#..#.. */ - - /* Index: 0x90, char: \x91, offset: 0x06c0 */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - 0xa8, /* #.#.#... */ - 0x54, /* .#.#.#.. */ - - /* Index: 0x91, char: \x92, offset: 0x06cc */ - 0xd8, /* ##.##... */ - 0xb4, /* #.##.#.. */ - 0xd8, /* ##.##... */ - 0xb4, /* #.##.#.. */ - 0xd8, /* ##.##... */ - 0xb4, /* #.##.#.. */ - 0xd8, /* ##.##... */ - 0xb4, /* #.##.#.. */ - 0xd8, /* ##.##... */ - 0xb4, /* #.##.#.. */ - 0xd8, /* ##.##... */ - 0xb4, /* #.##.#.. */ - - /* Index: 0x92, char: \x93, offset: 0x06d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0x93, char: \x94, offset: 0x06e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x78, /* .####... */ - 0x78, /* .####... */ - 0x78, /* .####... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x94, char: \x95, offset: 0x06f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x78, /* .####... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x95, char: \x96, offset: 0x06fc */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x48, /* .#..#... */ - 0x28, /* ..#.#... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x96, char: \x97, offset: 0x0708 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x68, /* .##.#... */ - 0xb0, /* #.##.... */ - 0x00, /* ........ */ - 0x68, /* .##.#... */ - 0xb0, /* #.##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x97, char: \x98, offset: 0x0714 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x80, /* #....... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x98, char: \x99, offset: 0x0720 */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x99, char: \x9a, offset: 0x072c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9a, char: \x9b, offset: 0x0738 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xa0, /* #.#..... */ - 0xa0, /* #.#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9b, char: \x9c, offset: 0x0744 */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9c, char: \x9d, offset: 0x0750 */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9d, char: \x9e, offset: 0x075c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9e, char: \x9f, offset: 0x0768 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9f, char: \xa0, offset: 0x0774 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa0, char: \xa1, offset: 0x0780 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xa1, char: \xa2, offset: 0x078c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0xa2, char: \xa3, offset: 0x0798 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa3, char: \xa4, offset: 0x07a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xa4, char: \xa5, offset: 0x07b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x5c, /* .#.###.. */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xa5, char: \xa6, offset: 0x07bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0xa6, char: \xa7, offset: 0x07c8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xa7, char: \xa8, offset: 0x07d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xd0, /* ##.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xa8, char: \xa9, offset: 0x07e0 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa9, char: \xaa, offset: 0x07ec */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaa, char: \xab, offset: 0x07f8 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x5c, /* .#.###.. */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xab, char: \xac, offset: 0x0804 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xac, char: \xad, offset: 0x0810 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xad, char: \xae, offset: 0x081c */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xd0, /* ##.#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xae, char: \xaf, offset: 0x0828 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0xaf, char: \xb0, offset: 0x0834 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x5c, /* .#.###.. */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xb0, char: \xb1, offset: 0x0840 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x5c, /* .#.###.. */ - 0x40, /* .#...... */ - 0x5c, /* .#.###.. */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xb1, char: \xb2, offset: 0x084c */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0xe0, /* ###..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0xb2, char: \xb3, offset: 0x0858 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb3, char: \xb4, offset: 0x0864 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xd0, /* ##.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xb4, char: \xb5, offset: 0x0870 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xd0, /* ##.#.... */ - 0x10, /* ...#.... */ - 0xd0, /* ##.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xb5, char: \xb6, offset: 0x087c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0xb6, char: \xb7, offset: 0x0888 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xb7, char: \xb8, offset: 0x0894 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0xdc, /* ##.###.. */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xb8, char: \xb9, offset: 0x08a0 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb9, char: \xba, offset: 0x08ac */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xba, char: \xbb, offset: 0x08b8 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbb, char: \xbc, offset: 0x08c4 */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0xfc, /* ######.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - - /* Index: 0xbc, char: \xbd, offset: 0x08d0 */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xfc, /* ######.. */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xbd, char: \xbe, offset: 0x08dc */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0xdc, /* ##.###.. */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - 0x50, /* .#.#.... */ - - /* Index: 0xbe, char: \xbf, offset: 0x08e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x84, /* #....#.. */ - 0xb4, /* #.##.#.. */ - 0xa4, /* #.#..#.. */ - 0xa4, /* #.#..#.. */ - 0xb4, /* #.##.#.. */ - 0x84, /* #....#.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbf, char: \xc0, offset: 0x08f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xe8, /* ###.#... */ - 0xa8, /* #.#.#... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc0, char: \xc1, offset: 0x0900 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x08, /* ....#... */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc1, char: \xc2, offset: 0x090c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc2, char: \xc3, offset: 0x0918 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x7c, /* .#####.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - - /* Index: 0xc3, char: \xc4, offset: 0x0924 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - - /* Index: 0xc4, char: \xc5, offset: 0x0930 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc5, char: \xc6, offset: 0x093c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0xc6, char: \xc7, offset: 0x0948 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc7, char: \xc8, offset: 0x0954 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc8, char: \xc9, offset: 0x0960 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc9, char: \xca, offset: 0x096c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xca, char: \xcb, offset: 0x0978 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0x50, /* .#.#.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcb, char: \xcc, offset: 0x0984 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcc, char: \xcd, offset: 0x0990 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcd, char: \xce, offset: 0x099c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xce, char: \xcf, offset: 0x09a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcf, char: \xd0, offset: 0x09b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd0, char: \xd1, offset: 0x09c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x28, /* ..#.#... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd1, char: \xd2, offset: 0x09cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - - /* Index: 0xd2, char: \xd3, offset: 0x09d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd3, char: \xd4, offset: 0x09e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd4, char: \xd5, offset: 0x09f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - - /* Index: 0xd5, char: \xd6, offset: 0x09fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd6, char: \xd7, offset: 0x0a08 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd7, char: \xd8, offset: 0x0a14 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd8, char: \xd9, offset: 0x0a20 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xc8, /* ##..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd9, char: \xda, offset: 0x0a2c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xda, char: \xdb, offset: 0x0a38 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdb, char: \xdc, offset: 0x0a44 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x38, /* ..###... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdc, char: \xdd, offset: 0x0a50 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x7c, /* .#####.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - - /* Index: 0xdd, char: \xde, offset: 0x0a5c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xde, char: \xdf, offset: 0x0a68 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdf, char: \xe0, offset: 0x0a74 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xe8, /* ###.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe0, char: \xe1, offset: 0x0a80 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe1, char: \xe2, offset: 0x0a8c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe2, char: \xe3, offset: 0x0a98 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x7c, /* .#####.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - - /* Index: 0xe3, char: \xe4, offset: 0x0aa4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0xfc, /* ######.. */ - 0x84, /* #....#.. */ - 0x00, /* ........ */ - - /* Index: 0xe4, char: \xe5, offset: 0x0ab0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe5, char: \xe6, offset: 0x0abc */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0xe6, char: \xe7, offset: 0x0ac8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe7, char: \xe8, offset: 0x0ad4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x50, /* .#.#.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe8, char: \xe9, offset: 0x0ae0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xa8, /* #.#.#... */ - 0xc8, /* ##..#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe9, char: \xea, offset: 0x0aec */ - 0x50, /* .#.#.... */ - 0x20, /* ..#..... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x98, /* #..##... */ - 0xa8, /* #.#.#... */ - 0xc8, /* ##..#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xea, char: \xeb, offset: 0x0af8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x90, /* #..#.... */ - 0xa0, /* #.#..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xa0, /* #.#..... */ - 0x90, /* #..#.... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xeb, char: \xec, offset: 0x0b04 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xec, char: \xed, offset: 0x0b10 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0xd8, /* ##.##... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xed, char: \xee, offset: 0x0b1c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xee, char: \xef, offset: 0x0b28 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xef, char: \xf0, offset: 0x0b34 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf0, char: \xf1, offset: 0x0b40 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x28, /* ..#.#... */ - 0x48, /* .#..#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf1, char: \xf2, offset: 0x0b4c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf2, char: \xf3, offset: 0x0b58 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf3, char: \xf4, offset: 0x0b64 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf4, char: \xf5, offset: 0x0b70 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf5, char: \xf6, offset: 0x0b7c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x70, /* .###.... */ - 0x70, /* .###.... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf6, char: \xf7, offset: 0x0b88 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf7, char: \xf8, offset: 0x0b94 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf8, char: \xf9, offset: 0x0ba0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xc8, /* ##..#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf9, char: \xfa, offset: 0x0bac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x08, /* ....#... */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfa, char: \xfb, offset: 0x0bb8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfb, char: \xfc, offset: 0x0bc4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x08, /* ....#... */ - 0x38, /* ..###... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfc, char: \xfd, offset: 0x0bd0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0xa8, /* #.#.#... */ - 0x7c, /* .#####.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - - /* Index: 0xfd, char: \xfe, offset: 0x0bdc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x78, /* .####... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfe, char: \xff, offset: 0x0be8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x70, /* .###.... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ -}; - -const font_char_desc_t _fonts_terminus_6x12_koi8_r_descriptors[] = { - { 0x06, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x06, 0x000c }, /* Index: 0x01, char: \x02 */ - { 0x06, 0x0018 }, /* Index: 0x02, char: \x03 */ - { 0x06, 0x0024 }, /* Index: 0x03, char: \x04 */ - { 0x06, 0x0030 }, /* Index: 0x04, char: \x05 */ - { 0x06, 0x003c }, /* Index: 0x05, char: \x06 */ - { 0x06, 0x0048 }, /* Index: 0x06, char: \x07 */ - { 0x06, 0x0054 }, /* Index: 0x07, char: \x08 */ - { 0x06, 0x0060 }, /* Index: 0x08, char: \x09 */ - { 0x06, 0x006c }, /* Index: 0x09, char: \x0a */ - { 0x06, 0x0078 }, /* Index: 0x0a, char: \x0b */ - { 0x06, 0x0084 }, /* Index: 0x0b, char: \x0c */ - { 0x06, 0x0090 }, /* Index: 0x0c, char: \x0d */ - { 0x06, 0x009c }, /* Index: 0x0d, char: \x0e */ - { 0x06, 0x00a8 }, /* Index: 0x0e, char: \x0f */ - { 0x06, 0x00b4 }, /* Index: 0x0f, char: \x10 */ - { 0x06, 0x00c0 }, /* Index: 0x10, char: \x11 */ - { 0x06, 0x00cc }, /* Index: 0x11, char: \x12 */ - { 0x06, 0x00d8 }, /* Index: 0x12, char: \x13 */ - { 0x06, 0x00e4 }, /* Index: 0x13, char: \x14 */ - { 0x06, 0x00f0 }, /* Index: 0x14, char: \x15 */ - { 0x06, 0x00fc }, /* Index: 0x15, char: \x16 */ - { 0x06, 0x0108 }, /* Index: 0x16, char: \x17 */ - { 0x06, 0x0114 }, /* Index: 0x17, char: \x18 */ - { 0x06, 0x0120 }, /* Index: 0x18, char: \x19 */ - { 0x06, 0x012c }, /* Index: 0x19, char: \x1a */ - { 0x06, 0x0138 }, /* Index: 0x1a, char: \x1b */ - { 0x06, 0x0144 }, /* Index: 0x1b, char: \x1c */ - { 0x06, 0x0150 }, /* Index: 0x1c, char: \x1d */ - { 0x06, 0x015c }, /* Index: 0x1d, char: \x1e */ - { 0x06, 0x0168 }, /* Index: 0x1e, char: \x1f */ - { 0x06, 0x0174 }, /* Index: 0x1f, char: \x20 */ - { 0x06, 0x0180 }, /* Index: 0x20, char: \x21 */ - { 0x06, 0x018c }, /* Index: 0x21, char: \x22 */ - { 0x06, 0x0198 }, /* Index: 0x22, char: \x23 */ - { 0x06, 0x01a4 }, /* Index: 0x23, char: \x24 */ - { 0x06, 0x01b0 }, /* Index: 0x24, char: \x25 */ - { 0x06, 0x01bc }, /* Index: 0x25, char: \x26 */ - { 0x06, 0x01c8 }, /* Index: 0x26, char: \x27 */ - { 0x06, 0x01d4 }, /* Index: 0x27, char: \x28 */ - { 0x06, 0x01e0 }, /* Index: 0x28, char: \x29 */ - { 0x06, 0x01ec }, /* Index: 0x29, char: \x2a */ - { 0x06, 0x01f8 }, /* Index: 0x2a, char: \x2b */ - { 0x06, 0x0204 }, /* Index: 0x2b, char: \x2c */ - { 0x06, 0x0210 }, /* Index: 0x2c, char: \x2d */ - { 0x06, 0x021c }, /* Index: 0x2d, char: \x2e */ - { 0x06, 0x0228 }, /* Index: 0x2e, char: \x2f */ - { 0x06, 0x0234 }, /* Index: 0x2f, char: \x30 */ - { 0x06, 0x0240 }, /* Index: 0x30, char: \x31 */ - { 0x06, 0x024c }, /* Index: 0x31, char: \x32 */ - { 0x06, 0x0258 }, /* Index: 0x32, char: \x33 */ - { 0x06, 0x0264 }, /* Index: 0x33, char: \x34 */ - { 0x06, 0x0270 }, /* Index: 0x34, char: \x35 */ - { 0x06, 0x027c }, /* Index: 0x35, char: \x36 */ - { 0x06, 0x0288 }, /* Index: 0x36, char: \x37 */ - { 0x06, 0x0294 }, /* Index: 0x37, char: \x38 */ - { 0x06, 0x02a0 }, /* Index: 0x38, char: \x39 */ - { 0x06, 0x02ac }, /* Index: 0x39, char: \x3a */ - { 0x06, 0x02b8 }, /* Index: 0x3a, char: \x3b */ - { 0x06, 0x02c4 }, /* Index: 0x3b, char: \x3c */ - { 0x06, 0x02d0 }, /* Index: 0x3c, char: \x3d */ - { 0x06, 0x02dc }, /* Index: 0x3d, char: \x3e */ - { 0x06, 0x02e8 }, /* Index: 0x3e, char: \x3f */ - { 0x06, 0x02f4 }, /* Index: 0x3f, char: \x40 */ - { 0x06, 0x0300 }, /* Index: 0x40, char: \x41 */ - { 0x06, 0x030c }, /* Index: 0x41, char: \x42 */ - { 0x06, 0x0318 }, /* Index: 0x42, char: \x43 */ - { 0x06, 0x0324 }, /* Index: 0x43, char: \x44 */ - { 0x06, 0x0330 }, /* Index: 0x44, char: \x45 */ - { 0x06, 0x033c }, /* Index: 0x45, char: \x46 */ - { 0x06, 0x0348 }, /* Index: 0x46, char: \x47 */ - { 0x06, 0x0354 }, /* Index: 0x47, char: \x48 */ - { 0x06, 0x0360 }, /* Index: 0x48, char: \x49 */ - { 0x06, 0x036c }, /* Index: 0x49, char: \x4a */ - { 0x06, 0x0378 }, /* Index: 0x4a, char: \x4b */ - { 0x06, 0x0384 }, /* Index: 0x4b, char: \x4c */ - { 0x06, 0x0390 }, /* Index: 0x4c, char: \x4d */ - { 0x06, 0x039c }, /* Index: 0x4d, char: \x4e */ - { 0x06, 0x03a8 }, /* Index: 0x4e, char: \x4f */ - { 0x06, 0x03b4 }, /* Index: 0x4f, char: \x50 */ - { 0x06, 0x03c0 }, /* Index: 0x50, char: \x51 */ - { 0x06, 0x03cc }, /* Index: 0x51, char: \x52 */ - { 0x06, 0x03d8 }, /* Index: 0x52, char: \x53 */ - { 0x06, 0x03e4 }, /* Index: 0x53, char: \x54 */ - { 0x06, 0x03f0 }, /* Index: 0x54, char: \x55 */ - { 0x06, 0x03fc }, /* Index: 0x55, char: \x56 */ - { 0x06, 0x0408 }, /* Index: 0x56, char: \x57 */ - { 0x06, 0x0414 }, /* Index: 0x57, char: \x58 */ - { 0x06, 0x0420 }, /* Index: 0x58, char: \x59 */ - { 0x06, 0x042c }, /* Index: 0x59, char: \x5a */ - { 0x06, 0x0438 }, /* Index: 0x5a, char: \x5b */ - { 0x06, 0x0444 }, /* Index: 0x5b, char: \x5c */ - { 0x06, 0x0450 }, /* Index: 0x5c, char: \x5d */ - { 0x06, 0x045c }, /* Index: 0x5d, char: \x5e */ - { 0x06, 0x0468 }, /* Index: 0x5e, char: \x5f */ - { 0x06, 0x0474 }, /* Index: 0x5f, char: \x60 */ - { 0x06, 0x0480 }, /* Index: 0x60, char: \x61 */ - { 0x06, 0x048c }, /* Index: 0x61, char: \x62 */ - { 0x06, 0x0498 }, /* Index: 0x62, char: \x63 */ - { 0x06, 0x04a4 }, /* Index: 0x63, char: \x64 */ - { 0x06, 0x04b0 }, /* Index: 0x64, char: \x65 */ - { 0x06, 0x04bc }, /* Index: 0x65, char: \x66 */ - { 0x06, 0x04c8 }, /* Index: 0x66, char: \x67 */ - { 0x06, 0x04d4 }, /* Index: 0x67, char: \x68 */ - { 0x06, 0x04e0 }, /* Index: 0x68, char: \x69 */ - { 0x06, 0x04ec }, /* Index: 0x69, char: \x6a */ - { 0x06, 0x04f8 }, /* Index: 0x6a, char: \x6b */ - { 0x06, 0x0504 }, /* Index: 0x6b, char: \x6c */ - { 0x06, 0x0510 }, /* Index: 0x6c, char: \x6d */ - { 0x06, 0x051c }, /* Index: 0x6d, char: \x6e */ - { 0x06, 0x0528 }, /* Index: 0x6e, char: \x6f */ - { 0x06, 0x0534 }, /* Index: 0x6f, char: \x70 */ - { 0x06, 0x0540 }, /* Index: 0x70, char: \x71 */ - { 0x06, 0x054c }, /* Index: 0x71, char: \x72 */ - { 0x06, 0x0558 }, /* Index: 0x72, char: \x73 */ - { 0x06, 0x0564 }, /* Index: 0x73, char: \x74 */ - { 0x06, 0x0570 }, /* Index: 0x74, char: \x75 */ - { 0x06, 0x057c }, /* Index: 0x75, char: \x76 */ - { 0x06, 0x0588 }, /* Index: 0x76, char: \x77 */ - { 0x06, 0x0594 }, /* Index: 0x77, char: \x78 */ - { 0x06, 0x05a0 }, /* Index: 0x78, char: \x79 */ - { 0x06, 0x05ac }, /* Index: 0x79, char: \x7a */ - { 0x06, 0x05b8 }, /* Index: 0x7a, char: \x7b */ - { 0x06, 0x05c4 }, /* Index: 0x7b, char: \x7c */ - { 0x06, 0x05d0 }, /* Index: 0x7c, char: \x7d */ - { 0x06, 0x05dc }, /* Index: 0x7d, char: \x7e */ - { 0x06, 0x05e8 }, /* Index: 0x7e, char: \x7f */ - { 0x06, 0x05f4 }, /* Index: 0x7f, char: \x80 */ - { 0x06, 0x0600 }, /* Index: 0x80, char: \x81 */ - { 0x06, 0x060c }, /* Index: 0x81, char: \x82 */ - { 0x06, 0x0618 }, /* Index: 0x82, char: \x83 */ - { 0x06, 0x0624 }, /* Index: 0x83, char: \x84 */ - { 0x06, 0x0630 }, /* Index: 0x84, char: \x85 */ - { 0x06, 0x063c }, /* Index: 0x85, char: \x86 */ - { 0x06, 0x0648 }, /* Index: 0x86, char: \x87 */ - { 0x06, 0x0654 }, /* Index: 0x87, char: \x88 */ - { 0x06, 0x0660 }, /* Index: 0x88, char: \x89 */ - { 0x06, 0x066c }, /* Index: 0x89, char: \x8a */ - { 0x06, 0x0678 }, /* Index: 0x8a, char: \x8b */ - { 0x06, 0x0684 }, /* Index: 0x8b, char: \x8c */ - { 0x06, 0x0690 }, /* Index: 0x8c, char: \x8d */ - { 0x06, 0x069c }, /* Index: 0x8d, char: \x8e */ - { 0x06, 0x06a8 }, /* Index: 0x8e, char: \x8f */ - { 0x06, 0x06b4 }, /* Index: 0x8f, char: \x90 */ - { 0x06, 0x06c0 }, /* Index: 0x90, char: \x91 */ - { 0x06, 0x06cc }, /* Index: 0x91, char: \x92 */ - { 0x06, 0x06d8 }, /* Index: 0x92, char: \x93 */ - { 0x06, 0x06e4 }, /* Index: 0x93, char: \x94 */ - { 0x06, 0x06f0 }, /* Index: 0x94, char: \x95 */ - { 0x06, 0x06fc }, /* Index: 0x95, char: \x96 */ - { 0x06, 0x0708 }, /* Index: 0x96, char: \x97 */ - { 0x06, 0x0714 }, /* Index: 0x97, char: \x98 */ - { 0x06, 0x0720 }, /* Index: 0x98, char: \x99 */ - { 0x06, 0x072c }, /* Index: 0x99, char: \x9a */ - { 0x06, 0x0738 }, /* Index: 0x9a, char: \x9b */ - { 0x06, 0x0744 }, /* Index: 0x9b, char: \x9c */ - { 0x06, 0x0750 }, /* Index: 0x9c, char: \x9d */ - { 0x06, 0x075c }, /* Index: 0x9d, char: \x9e */ - { 0x06, 0x0768 }, /* Index: 0x9e, char: \x9f */ - { 0x06, 0x0774 }, /* Index: 0x9f, char: \xa0 */ - { 0x06, 0x0780 }, /* Index: 0xa0, char: \xa1 */ - { 0x06, 0x078c }, /* Index: 0xa1, char: \xa2 */ - { 0x06, 0x0798 }, /* Index: 0xa2, char: \xa3 */ - { 0x06, 0x07a4 }, /* Index: 0xa3, char: \xa4 */ - { 0x06, 0x07b0 }, /* Index: 0xa4, char: \xa5 */ - { 0x06, 0x07bc }, /* Index: 0xa5, char: \xa6 */ - { 0x06, 0x07c8 }, /* Index: 0xa6, char: \xa7 */ - { 0x06, 0x07d4 }, /* Index: 0xa7, char: \xa8 */ - { 0x06, 0x07e0 }, /* Index: 0xa8, char: \xa9 */ - { 0x06, 0x07ec }, /* Index: 0xa9, char: \xaa */ - { 0x06, 0x07f8 }, /* Index: 0xaa, char: \xab */ - { 0x06, 0x0804 }, /* Index: 0xab, char: \xac */ - { 0x06, 0x0810 }, /* Index: 0xac, char: \xad */ - { 0x06, 0x081c }, /* Index: 0xad, char: \xae */ - { 0x06, 0x0828 }, /* Index: 0xae, char: \xaf */ - { 0x06, 0x0834 }, /* Index: 0xaf, char: \xb0 */ - { 0x06, 0x0840 }, /* Index: 0xb0, char: \xb1 */ - { 0x06, 0x084c }, /* Index: 0xb1, char: \xb2 */ - { 0x06, 0x0858 }, /* Index: 0xb2, char: \xb3 */ - { 0x06, 0x0864 }, /* Index: 0xb3, char: \xb4 */ - { 0x06, 0x0870 }, /* Index: 0xb4, char: \xb5 */ - { 0x06, 0x087c }, /* Index: 0xb5, char: \xb6 */ - { 0x06, 0x0888 }, /* Index: 0xb6, char: \xb7 */ - { 0x06, 0x0894 }, /* Index: 0xb7, char: \xb8 */ - { 0x06, 0x08a0 }, /* Index: 0xb8, char: \xb9 */ - { 0x06, 0x08ac }, /* Index: 0xb9, char: \xba */ - { 0x06, 0x08b8 }, /* Index: 0xba, char: \xbb */ - { 0x06, 0x08c4 }, /* Index: 0xbb, char: \xbc */ - { 0x06, 0x08d0 }, /* Index: 0xbc, char: \xbd */ - { 0x06, 0x08dc }, /* Index: 0xbd, char: \xbe */ - { 0x06, 0x08e8 }, /* Index: 0xbe, char: \xbf */ - { 0x06, 0x08f4 }, /* Index: 0xbf, char: \xc0 */ - { 0x06, 0x0900 }, /* Index: 0xc0, char: \xc1 */ - { 0x06, 0x090c }, /* Index: 0xc1, char: \xc2 */ - { 0x06, 0x0918 }, /* Index: 0xc2, char: \xc3 */ - { 0x06, 0x0924 }, /* Index: 0xc3, char: \xc4 */ - { 0x06, 0x0930 }, /* Index: 0xc4, char: \xc5 */ - { 0x06, 0x093c }, /* Index: 0xc5, char: \xc6 */ - { 0x06, 0x0948 }, /* Index: 0xc6, char: \xc7 */ - { 0x06, 0x0954 }, /* Index: 0xc7, char: \xc8 */ - { 0x06, 0x0960 }, /* Index: 0xc8, char: \xc9 */ - { 0x06, 0x096c }, /* Index: 0xc9, char: \xca */ - { 0x06, 0x0978 }, /* Index: 0xca, char: \xcb */ - { 0x06, 0x0984 }, /* Index: 0xcb, char: \xcc */ - { 0x06, 0x0990 }, /* Index: 0xcc, char: \xcd */ - { 0x06, 0x099c }, /* Index: 0xcd, char: \xce */ - { 0x06, 0x09a8 }, /* Index: 0xce, char: \xcf */ - { 0x06, 0x09b4 }, /* Index: 0xcf, char: \xd0 */ - { 0x06, 0x09c0 }, /* Index: 0xd0, char: \xd1 */ - { 0x06, 0x09cc }, /* Index: 0xd1, char: \xd2 */ - { 0x06, 0x09d8 }, /* Index: 0xd2, char: \xd3 */ - { 0x06, 0x09e4 }, /* Index: 0xd3, char: \xd4 */ - { 0x06, 0x09f0 }, /* Index: 0xd4, char: \xd5 */ - { 0x06, 0x09fc }, /* Index: 0xd5, char: \xd6 */ - { 0x06, 0x0a08 }, /* Index: 0xd6, char: \xd7 */ - { 0x06, 0x0a14 }, /* Index: 0xd7, char: \xd8 */ - { 0x06, 0x0a20 }, /* Index: 0xd8, char: \xd9 */ - { 0x06, 0x0a2c }, /* Index: 0xd9, char: \xda */ - { 0x06, 0x0a38 }, /* Index: 0xda, char: \xdb */ - { 0x06, 0x0a44 }, /* Index: 0xdb, char: \xdc */ - { 0x06, 0x0a50 }, /* Index: 0xdc, char: \xdd */ - { 0x06, 0x0a5c }, /* Index: 0xdd, char: \xde */ - { 0x06, 0x0a68 }, /* Index: 0xde, char: \xdf */ - { 0x06, 0x0a74 }, /* Index: 0xdf, char: \xe0 */ - { 0x06, 0x0a80 }, /* Index: 0xe0, char: \xe1 */ - { 0x06, 0x0a8c }, /* Index: 0xe1, char: \xe2 */ - { 0x06, 0x0a98 }, /* Index: 0xe2, char: \xe3 */ - { 0x06, 0x0aa4 }, /* Index: 0xe3, char: \xe4 */ - { 0x06, 0x0ab0 }, /* Index: 0xe4, char: \xe5 */ - { 0x06, 0x0abc }, /* Index: 0xe5, char: \xe6 */ - { 0x06, 0x0ac8 }, /* Index: 0xe6, char: \xe7 */ - { 0x06, 0x0ad4 }, /* Index: 0xe7, char: \xe8 */ - { 0x06, 0x0ae0 }, /* Index: 0xe8, char: \xe9 */ - { 0x06, 0x0aec }, /* Index: 0xe9, char: \xea */ - { 0x06, 0x0af8 }, /* Index: 0xea, char: \xeb */ - { 0x06, 0x0b04 }, /* Index: 0xeb, char: \xec */ - { 0x06, 0x0b10 }, /* Index: 0xec, char: \xed */ - { 0x06, 0x0b1c }, /* Index: 0xed, char: \xee */ - { 0x06, 0x0b28 }, /* Index: 0xee, char: \xef */ - { 0x06, 0x0b34 }, /* Index: 0xef, char: \xf0 */ - { 0x06, 0x0b40 }, /* Index: 0xf0, char: \xf1 */ - { 0x06, 0x0b4c }, /* Index: 0xf1, char: \xf2 */ - { 0x06, 0x0b58 }, /* Index: 0xf2, char: \xf3 */ - { 0x06, 0x0b64 }, /* Index: 0xf3, char: \xf4 */ - { 0x06, 0x0b70 }, /* Index: 0xf4, char: \xf5 */ - { 0x06, 0x0b7c }, /* Index: 0xf5, char: \xf6 */ - { 0x06, 0x0b88 }, /* Index: 0xf6, char: \xf7 */ - { 0x06, 0x0b94 }, /* Index: 0xf7, char: \xf8 */ - { 0x06, 0x0ba0 }, /* Index: 0xf8, char: \xf9 */ - { 0x06, 0x0bac }, /* Index: 0xf9, char: \xfa */ - { 0x06, 0x0bb8 }, /* Index: 0xfa, char: \xfb */ - { 0x06, 0x0bc4 }, /* Index: 0xfb, char: \xfc */ - { 0x06, 0x0bd0 }, /* Index: 0xfc, char: \xfd */ - { 0x06, 0x0bdc }, /* Index: 0xfd, char: \xfe */ - { 0x06, 0x0be8 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_6x12_koi8_r_info = -{ - .height = 12, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_6x12_koi8_r_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_6x12_koi8_r_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_6X12_KOI8_R_H_ */ diff --git a/extras/fonts/data/font_terminus_8x14_iso8859_1.h b/extras/fonts/data/font_terminus_8x14_iso8859_1.h deleted file mode 100644 index c4fcc4a..0000000 --- a/extras/fonts/data/font_terminus_8x14_iso8859_1.h +++ /dev/null @@ -1,4369 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 8x14 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 01:46:58 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_8X14_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_8X14_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_8x14_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x7c, /* .#####.. */ - 0xfe, /* #######. */ - 0x7c, /* .#####.. */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x02, offset: 0x000e */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - - /* Index: 0x02, char: \x03, offset: 0x001c */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x04, offset: 0x002a */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x1c, /* ...###.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x05, offset: 0x0038 */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x1e, /* ...####. */ - 0x11, /* ...#...# */ - 0x11, /* ...#...# */ - 0x1e, /* ...####. */ - 0x12, /* ...#..#. */ - 0x11, /* ...#...# */ - 0x00, /* ........ */ - - /* Index: 0x05, char: \x06, offset: 0x0046 */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x1c, /* ...###.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x07, offset: 0x0054 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x08, offset: 0x0062 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x09, offset: 0x0070 */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xa8, /* #.#.#... */ - 0x98, /* #..##... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - - /* Index: 0x09, char: \x0a, offset: 0x007e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0a, char: \x0b, offset: 0x008c */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x0c, offset: 0x009a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x0c, char: \x0d, offset: 0x00a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x0d, char: \x0e, offset: 0x00b6 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x0f, offset: 0x00c4 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x0f, char: \x10, offset: 0x00d2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x10, char: \x11, offset: 0x00e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x12, offset: 0x00ee */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x13, offset: 0x00fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x14, offset: 0x010a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x15, offset: 0x0118 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x15, char: \x16, offset: 0x0126 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x16, char: \x17, offset: 0x0134 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x18, offset: 0x0142 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x18, char: \x19, offset: 0x0150 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x19, char: \x1a, offset: 0x015e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x1b, offset: 0x016c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x1c, offset: 0x017a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0188 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x02, /* ......#. */ - 0x7e, /* .######. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0196 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x78, /* .####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x22, /* ..#...#. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x1f, offset: 0x01a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x20, offset: 0x01b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x20, char: \x21, offset: 0x01c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x22, offset: 0x01ce */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x23, offset: 0x01dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x7e, /* .######. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x7e, /* .######. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x24, offset: 0x01ea */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x92, /* #..#..#. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x7c, /* .#####.. */ - 0x12, /* ...#..#. */ - 0x12, /* ...#..#. */ - 0x92, /* #..#..#. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x24, char: \x25, offset: 0x01f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x64, /* .##..#.. */ - 0x94, /* #..#.#.. */ - 0x68, /* .##.#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x2c, /* ..#.##.. */ - 0x52, /* .#.#..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x26, offset: 0x0206 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x4a, /* .#..#.#. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x3a, /* ..###.#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x27, offset: 0x0214 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x28, offset: 0x0222 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x29, offset: 0x0230 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x2a, offset: 0x023e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x2b, offset: 0x024c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x2c, offset: 0x025a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0268 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0276 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0284 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x30, offset: 0x0292 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x46, /* .#...##. */ - 0x4a, /* .#..#.#. */ - 0x52, /* .#.#..#. */ - 0x62, /* .##...#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x31, offset: 0x02a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x18, /* ...##... */ - 0x28, /* ..#.#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x32, offset: 0x02ae */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x02, /* ......#. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x32, char: \x33, offset: 0x02bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x02, /* ......#. */ - 0x1c, /* ...###.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x34, offset: 0x02ca */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x02, /* ......#. */ - 0x06, /* .....##. */ - 0x0a, /* ....#.#. */ - 0x12, /* ...#..#. */ - 0x22, /* ..#...#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x35, offset: 0x02d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x36, offset: 0x02e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1c, /* ...###.. */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x37, offset: 0x02f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x38, offset: 0x0302 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x39, offset: 0x0310 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x04, /* .....#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x3a, offset: 0x031e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x3b, offset: 0x032c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x3c, offset: 0x033a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0348 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0356 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0364 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x40, offset: 0x0372 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x82, /* #.....#. */ - 0x9e, /* #..####. */ - 0xa2, /* #.#...#. */ - 0xa2, /* #.#...#. */ - 0xa2, /* #.#...#. */ - 0xa6, /* #.#..##. */ - 0x9a, /* #..##.#. */ - 0x80, /* #....... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x40, char: \x41, offset: 0x0380 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x42, offset: 0x038e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x43, offset: 0x039c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x44, offset: 0x03aa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x45, offset: 0x03b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x46, offset: 0x03c6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x47, offset: 0x03d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x4e, /* .#..###. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x48, offset: 0x03e2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x48, char: \x49, offset: 0x03f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x4a, offset: 0x03fe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x4b, offset: 0x040c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x50, /* .#.#.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4b, char: \x4c, offset: 0x041a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0428 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0xc6, /* ##...##. */ - 0xaa, /* #.#.#.#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0436 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x62, /* .##...#. */ - 0x52, /* .#.#..#. */ - 0x4a, /* .#..#.#. */ - 0x46, /* .#...##. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0444 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x50, offset: 0x0452 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x51, offset: 0x0460 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x4a, /* .#..#.#. */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - - /* Index: 0x51, char: \x52, offset: 0x046e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x52, char: \x53, offset: 0x047c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x54, offset: 0x048a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x55, offset: 0x0498 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x56, offset: 0x04a6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x57, offset: 0x04b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0xaa, /* #.#.#.#. */ - 0xc6, /* ##...##. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x58, offset: 0x04c2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x59, offset: 0x04d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x28, /* ..#.#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x5a, offset: 0x04de */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5a, char: \x5b, offset: 0x04ec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x5c, offset: 0x04fa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0508 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x5e, offset: 0x0516 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x28, /* ..#.#... */ - 0x44, /* .#...#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5e, char: \x5f, offset: 0x0524 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x60, offset: 0x0532 */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x60, char: \x61, offset: 0x0540 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x61, char: \x62, offset: 0x054e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x62, char: \x63, offset: 0x055c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x63, char: \x64, offset: 0x056a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x64, char: \x65, offset: 0x0578 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x65, char: \x66, offset: 0x0586 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x66, char: \x67, offset: 0x0594 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - - /* Index: 0x67, char: \x68, offset: 0x05a2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x68, char: \x69, offset: 0x05b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x69, char: \x6a, offset: 0x05be */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - - /* Index: 0x6a, char: \x6b, offset: 0x05cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x70, /* .###.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6b, char: \x6c, offset: 0x05da */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6c, char: \x6d, offset: 0x05e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6d, char: \x6e, offset: 0x05f6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6e, char: \x6f, offset: 0x0604 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6f, char: \x70, offset: 0x0612 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - - /* Index: 0x70, char: \x71, offset: 0x0620 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - - /* Index: 0x71, char: \x72, offset: 0x062e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x5e, /* .#.####. */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x72, char: \x73, offset: 0x063c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x73, char: \x74, offset: 0x064a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x0e, /* ....###. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x74, char: \x75, offset: 0x0658 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x75, char: \x76, offset: 0x0666 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x76, char: \x77, offset: 0x0674 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x77, char: \x78, offset: 0x0682 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x78, char: \x79, offset: 0x0690 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - - /* Index: 0x79, char: \x7a, offset: 0x069e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7a, char: \x7b, offset: 0x06ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7b, char: \x7c, offset: 0x06ba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7c, char: \x7d, offset: 0x06c8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7d, char: \x7e, offset: 0x06d6 */ - 0x00, /* ........ */ - 0x62, /* .##...#. */ - 0x92, /* #..#..#. */ - 0x8c, /* #...##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7e, char: \x7f, offset: 0x06e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7f, char: \x80, offset: 0x06f2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x80, char: \x81, offset: 0x0700 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x81, char: \x82, offset: 0x070e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x82, char: \x83, offset: 0x071c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x83, char: \x84, offset: 0x072a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x84, char: \x85, offset: 0x0738 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x85, char: \x86, offset: 0x0746 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x86, char: \x87, offset: 0x0754 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x87, char: \x88, offset: 0x0762 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x88, char: \x89, offset: 0x0770 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x89, char: \x8a, offset: 0x077e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8a, char: \x8b, offset: 0x078c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8b, char: \x8c, offset: 0x079a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8c, char: \x8d, offset: 0x07a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8d, char: \x8e, offset: 0x07b6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8e, char: \x8f, offset: 0x07c4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8f, char: \x90, offset: 0x07d2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x90, char: \x91, offset: 0x07e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x91, char: \x92, offset: 0x07ee */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x92, char: \x93, offset: 0x07fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x93, char: \x94, offset: 0x080a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x94, char: \x95, offset: 0x0818 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x95, char: \x96, offset: 0x0826 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x96, char: \x97, offset: 0x0834 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x97, char: \x98, offset: 0x0842 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x98, char: \x99, offset: 0x0850 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x99, char: \x9a, offset: 0x085e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9a, char: \x9b, offset: 0x086c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9b, char: \x9c, offset: 0x087a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9c, char: \x9d, offset: 0x0888 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9d, char: \x9e, offset: 0x0896 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9e, char: \x9f, offset: 0x08a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9f, char: \xa0, offset: 0x08b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa0, char: \xa1, offset: 0x08c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa1, char: \xa2, offset: 0x08ce */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x92, /* #..#..#. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x92, /* #..#..#. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0xa2, char: \xa3, offset: 0x08dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x78, /* .####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x22, /* ..#...#. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa3, char: \xa4, offset: 0x08ea */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x44, /* .#...#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa4, char: \xa5, offset: 0x08f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x44, /* .#...#.. */ - 0x28, /* ..#.#... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa5, char: \xa6, offset: 0x0906 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa6, char: \xa7, offset: 0x0914 */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x44, /* .#...#.. */ - 0x40, /* .#...... */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x04, /* .....#.. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - - /* Index: 0xa7, char: \xa8, offset: 0x0922 */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa8, char: \xa9, offset: 0x0930 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x81, /* #......# */ - 0x99, /* #..##..# */ - 0xa5, /* #.#..#.# */ - 0xa1, /* #.#....# */ - 0xa5, /* #.#..#.# */ - 0x99, /* #..##..# */ - 0x81, /* #......# */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa9, char: \xaa, offset: 0x093e */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x04, /* .....#.. */ - 0x3c, /* ..####.. */ - 0x44, /* .#...#.. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaa, char: \xab, offset: 0x094c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x12, /* ...#..#. */ - 0x24, /* ..#..#.. */ - 0x48, /* .#..#... */ - 0x90, /* #..#.... */ - 0x48, /* .#..#... */ - 0x24, /* ..#..#.. */ - 0x12, /* ...#..#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xab, char: \xac, offset: 0x095a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xac, char: \xad, offset: 0x0968 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xad, char: \xae, offset: 0x0976 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x81, /* #......# */ - 0xb9, /* #.###..# */ - 0xa5, /* #.#..#.# */ - 0xb9, /* #.###..# */ - 0xa9, /* #.#.#..# */ - 0xa5, /* #.#..#.# */ - 0x81, /* #......# */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xae, char: \xaf, offset: 0x0984 */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaf, char: \xb0, offset: 0x0992 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb0, char: \xb1, offset: 0x09a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb1, char: \xb2, offset: 0x09ae */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb2, char: \xb3, offset: 0x09bc */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x04, /* .....#.. */ - 0x18, /* ...##... */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb3, char: \xb4, offset: 0x09ca */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb4, char: \xb5, offset: 0x09d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x46, /* .#...##. */ - 0x7a, /* .####.#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - - /* Index: 0xb5, char: \xb6, offset: 0x09e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x72, /* .###..#. */ - 0x12, /* ...#..#. */ - 0x12, /* ...#..#. */ - 0x12, /* ...#..#. */ - 0x12, /* ...#..#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb6, char: \xb7, offset: 0x09f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb7, char: \xb8, offset: 0x0a02 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - - /* Index: 0xb8, char: \xb9, offset: 0x0a10 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb9, char: \xba, offset: 0x0a1e */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xba, char: \xbb, offset: 0x0a2c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x90, /* #..#.... */ - 0x48, /* .#..#... */ - 0x24, /* ..#..#.. */ - 0x12, /* ...#..#. */ - 0x24, /* ..#..#.. */ - 0x48, /* .#..#... */ - 0x90, /* #..#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbb, char: \xbc, offset: 0x0a3a */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x22, /* ..#...#. */ - 0x24, /* ..#..#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x22, /* ..#...#. */ - 0x46, /* .#...##. */ - 0x8a, /* #...#.#. */ - 0x1e, /* ...####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - - /* Index: 0xbc, char: \xbd, offset: 0x0a48 */ - 0x20, /* ..#..... */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x22, /* ..#...#. */ - 0x24, /* ..#..#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x4c, /* .#..##.. */ - 0x92, /* #..#..#. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x1e, /* ...####. */ - 0x00, /* ........ */ - - /* Index: 0xbd, char: \xbe, offset: 0x0a56 */ - 0xe0, /* ###..... */ - 0x10, /* ...#.... */ - 0x60, /* .##..... */ - 0x12, /* ...#..#. */ - 0xe4, /* ###..#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x22, /* ..#...#. */ - 0x46, /* .#...##. */ - 0x8a, /* #...#.#. */ - 0x1e, /* ...####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - - /* Index: 0xbe, char: \xbf, offset: 0x0a64 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbf, char: \xc0, offset: 0x0a72 */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc0, char: \xc1, offset: 0x0a80 */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc1, char: \xc2, offset: 0x0a8e */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc2, char: \xc3, offset: 0x0a9c */ - 0x32, /* ..##..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc3, char: \xc4, offset: 0x0aaa */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc4, char: \xc5, offset: 0x0ab8 */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc5, char: \xc6, offset: 0x0ac6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0xfc, /* ######.. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x9e, /* #..####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc6, char: \xc7, offset: 0x0ad4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - - /* Index: 0xc7, char: \xc8, offset: 0x0ae2 */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc8, char: \xc9, offset: 0x0af0 */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc9, char: \xca, offset: 0x0afe */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xca, char: \xcb, offset: 0x0b0c */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcb, char: \xcc, offset: 0x0b1a */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcc, char: \xcd, offset: 0x0b28 */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcd, char: \xce, offset: 0x0b36 */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xce, char: \xcf, offset: 0x0b44 */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcf, char: \xd0, offset: 0x0b52 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0xf2, /* ####..#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd0, char: \xd1, offset: 0x0b60 */ - 0x32, /* ..##..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x62, /* .##...#. */ - 0x52, /* .#.#..#. */ - 0x4a, /* .#..#.#. */ - 0x46, /* .#...##. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd1, char: \xd2, offset: 0x0b6e */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd2, char: \xd3, offset: 0x0b7c */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd3, char: \xd4, offset: 0x0b8a */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd4, char: \xd5, offset: 0x0b98 */ - 0x32, /* ..##..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd5, char: \xd6, offset: 0x0ba6 */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd6, char: \xd7, offset: 0x0bb4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd7, char: \xd8, offset: 0x0bc2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x43, /* .#....## */ - 0x42, /* .#....#. */ - 0x46, /* .#...##. */ - 0x4a, /* .#..#.#. */ - 0x52, /* .#.#..#. */ - 0x62, /* .##...#. */ - 0x42, /* .#....#. */ - 0xc2, /* ##....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd8, char: \xd9, offset: 0x0bd0 */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd9, char: \xda, offset: 0x0bde */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xda, char: \xdb, offset: 0x0bec */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdb, char: \xdc, offset: 0x0bfa */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdc, char: \xdd, offset: 0x0c08 */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x28, /* ..#.#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdd, char: \xde, offset: 0x0c16 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xde, char: \xdf, offset: 0x0c24 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x62, /* .##...#. */ - 0x5c, /* .#.###.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdf, char: \xe0, offset: 0x0c32 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe0, char: \xe1, offset: 0x0c40 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe1, char: \xe2, offset: 0x0c4e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe2, char: \xe3, offset: 0x0c5c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x32, /* ..##..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe3, char: \xe4, offset: 0x0c6a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe4, char: \xe5, offset: 0x0c78 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe5, char: \xe6, offset: 0x0c86 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x12, /* ...#..#. */ - 0x72, /* .###..#. */ - 0x9e, /* #..####. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe6, char: \xe7, offset: 0x0c94 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - - /* Index: 0xe7, char: \xe8, offset: 0x0ca2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe8, char: \xe9, offset: 0x0cb0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe9, char: \xea, offset: 0x0cbe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xea, char: \xeb, offset: 0x0ccc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xeb, char: \xec, offset: 0x0cda */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xec, char: \xed, offset: 0x0ce8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xed, char: \xee, offset: 0x0cf6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xee, char: \xef, offset: 0x0d04 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x48, /* .#..#... */ - 0x48, /* .#..#... */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xef, char: \xf0, offset: 0x0d12 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x28, /* ..#.#... */ - 0x10, /* ...#.... */ - 0x28, /* ..#.#... */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf0, char: \xf1, offset: 0x0d20 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x32, /* ..##..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf1, char: \xf2, offset: 0x0d2e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf2, char: \xf3, offset: 0x0d3c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf3, char: \xf4, offset: 0x0d4a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf4, char: \xf5, offset: 0x0d58 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x32, /* ..##..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf5, char: \xf6, offset: 0x0d66 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf6, char: \xf7, offset: 0x0d74 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf7, char: \xf8, offset: 0x0d82 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - 0x46, /* .#...##. */ - 0x4a, /* .#..#.#. */ - 0x52, /* .#.#..#. */ - 0x62, /* .##...#. */ - 0x42, /* .#....#. */ - 0xbc, /* #.####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf8, char: \xf9, offset: 0x0d90 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf9, char: \xfa, offset: 0x0d9e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfa, char: \xfb, offset: 0x0dac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfb, char: \xfc, offset: 0x0dba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfc, char: \xfd, offset: 0x0dc8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - - /* Index: 0xfd, char: \xfe, offset: 0x0dd6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - - /* Index: 0xfe, char: \xff, offset: 0x0de4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ -}; - -const font_char_desc_t _fonts_terminus_8x14_iso8859_1_descriptors[] = { - { 0x08, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x08, 0x000e }, /* Index: 0x01, char: \x02 */ - { 0x08, 0x001c }, /* Index: 0x02, char: \x03 */ - { 0x08, 0x002a }, /* Index: 0x03, char: \x04 */ - { 0x08, 0x0038 }, /* Index: 0x04, char: \x05 */ - { 0x08, 0x0046 }, /* Index: 0x05, char: \x06 */ - { 0x08, 0x0054 }, /* Index: 0x06, char: \x07 */ - { 0x08, 0x0062 }, /* Index: 0x07, char: \x08 */ - { 0x08, 0x0070 }, /* Index: 0x08, char: \x09 */ - { 0x08, 0x007e }, /* Index: 0x09, char: \x0a */ - { 0x08, 0x008c }, /* Index: 0x0a, char: \x0b */ - { 0x08, 0x009a }, /* Index: 0x0b, char: \x0c */ - { 0x08, 0x00a8 }, /* Index: 0x0c, char: \x0d */ - { 0x08, 0x00b6 }, /* Index: 0x0d, char: \x0e */ - { 0x08, 0x00c4 }, /* Index: 0x0e, char: \x0f */ - { 0x08, 0x00d2 }, /* Index: 0x0f, char: \x10 */ - { 0x08, 0x00e0 }, /* Index: 0x10, char: \x11 */ - { 0x08, 0x00ee }, /* Index: 0x11, char: \x12 */ - { 0x08, 0x00fc }, /* Index: 0x12, char: \x13 */ - { 0x08, 0x010a }, /* Index: 0x13, char: \x14 */ - { 0x08, 0x0118 }, /* Index: 0x14, char: \x15 */ - { 0x08, 0x0126 }, /* Index: 0x15, char: \x16 */ - { 0x08, 0x0134 }, /* Index: 0x16, char: \x17 */ - { 0x08, 0x0142 }, /* Index: 0x17, char: \x18 */ - { 0x08, 0x0150 }, /* Index: 0x18, char: \x19 */ - { 0x08, 0x015e }, /* Index: 0x19, char: \x1a */ - { 0x08, 0x016c }, /* Index: 0x1a, char: \x1b */ - { 0x08, 0x017a }, /* Index: 0x1b, char: \x1c */ - { 0x08, 0x0188 }, /* Index: 0x1c, char: \x1d */ - { 0x08, 0x0196 }, /* Index: 0x1d, char: \x1e */ - { 0x08, 0x01a4 }, /* Index: 0x1e, char: \x1f */ - { 0x08, 0x01b2 }, /* Index: 0x1f, char: \x20 */ - { 0x08, 0x01c0 }, /* Index: 0x20, char: \x21 */ - { 0x08, 0x01ce }, /* Index: 0x21, char: \x22 */ - { 0x08, 0x01dc }, /* Index: 0x22, char: \x23 */ - { 0x08, 0x01ea }, /* Index: 0x23, char: \x24 */ - { 0x08, 0x01f8 }, /* Index: 0x24, char: \x25 */ - { 0x08, 0x0206 }, /* Index: 0x25, char: \x26 */ - { 0x08, 0x0214 }, /* Index: 0x26, char: \x27 */ - { 0x08, 0x0222 }, /* Index: 0x27, char: \x28 */ - { 0x08, 0x0230 }, /* Index: 0x28, char: \x29 */ - { 0x08, 0x023e }, /* Index: 0x29, char: \x2a */ - { 0x08, 0x024c }, /* Index: 0x2a, char: \x2b */ - { 0x08, 0x025a }, /* Index: 0x2b, char: \x2c */ - { 0x08, 0x0268 }, /* Index: 0x2c, char: \x2d */ - { 0x08, 0x0276 }, /* Index: 0x2d, char: \x2e */ - { 0x08, 0x0284 }, /* Index: 0x2e, char: \x2f */ - { 0x08, 0x0292 }, /* Index: 0x2f, char: \x30 */ - { 0x08, 0x02a0 }, /* Index: 0x30, char: \x31 */ - { 0x08, 0x02ae }, /* Index: 0x31, char: \x32 */ - { 0x08, 0x02bc }, /* Index: 0x32, char: \x33 */ - { 0x08, 0x02ca }, /* Index: 0x33, char: \x34 */ - { 0x08, 0x02d8 }, /* Index: 0x34, char: \x35 */ - { 0x08, 0x02e6 }, /* Index: 0x35, char: \x36 */ - { 0x08, 0x02f4 }, /* Index: 0x36, char: \x37 */ - { 0x08, 0x0302 }, /* Index: 0x37, char: \x38 */ - { 0x08, 0x0310 }, /* Index: 0x38, char: \x39 */ - { 0x08, 0x031e }, /* Index: 0x39, char: \x3a */ - { 0x08, 0x032c }, /* Index: 0x3a, char: \x3b */ - { 0x08, 0x033a }, /* Index: 0x3b, char: \x3c */ - { 0x08, 0x0348 }, /* Index: 0x3c, char: \x3d */ - { 0x08, 0x0356 }, /* Index: 0x3d, char: \x3e */ - { 0x08, 0x0364 }, /* Index: 0x3e, char: \x3f */ - { 0x08, 0x0372 }, /* Index: 0x3f, char: \x40 */ - { 0x08, 0x0380 }, /* Index: 0x40, char: \x41 */ - { 0x08, 0x038e }, /* Index: 0x41, char: \x42 */ - { 0x08, 0x039c }, /* Index: 0x42, char: \x43 */ - { 0x08, 0x03aa }, /* Index: 0x43, char: \x44 */ - { 0x08, 0x03b8 }, /* Index: 0x44, char: \x45 */ - { 0x08, 0x03c6 }, /* Index: 0x45, char: \x46 */ - { 0x08, 0x03d4 }, /* Index: 0x46, char: \x47 */ - { 0x08, 0x03e2 }, /* Index: 0x47, char: \x48 */ - { 0x08, 0x03f0 }, /* Index: 0x48, char: \x49 */ - { 0x08, 0x03fe }, /* Index: 0x49, char: \x4a */ - { 0x08, 0x040c }, /* Index: 0x4a, char: \x4b */ - { 0x08, 0x041a }, /* Index: 0x4b, char: \x4c */ - { 0x08, 0x0428 }, /* Index: 0x4c, char: \x4d */ - { 0x08, 0x0436 }, /* Index: 0x4d, char: \x4e */ - { 0x08, 0x0444 }, /* Index: 0x4e, char: \x4f */ - { 0x08, 0x0452 }, /* Index: 0x4f, char: \x50 */ - { 0x08, 0x0460 }, /* Index: 0x50, char: \x51 */ - { 0x08, 0x046e }, /* Index: 0x51, char: \x52 */ - { 0x08, 0x047c }, /* Index: 0x52, char: \x53 */ - { 0x08, 0x048a }, /* Index: 0x53, char: \x54 */ - { 0x08, 0x0498 }, /* Index: 0x54, char: \x55 */ - { 0x08, 0x04a6 }, /* Index: 0x55, char: \x56 */ - { 0x08, 0x04b4 }, /* Index: 0x56, char: \x57 */ - { 0x08, 0x04c2 }, /* Index: 0x57, char: \x58 */ - { 0x08, 0x04d0 }, /* Index: 0x58, char: \x59 */ - { 0x08, 0x04de }, /* Index: 0x59, char: \x5a */ - { 0x08, 0x04ec }, /* Index: 0x5a, char: \x5b */ - { 0x08, 0x04fa }, /* Index: 0x5b, char: \x5c */ - { 0x08, 0x0508 }, /* Index: 0x5c, char: \x5d */ - { 0x08, 0x0516 }, /* Index: 0x5d, char: \x5e */ - { 0x08, 0x0524 }, /* Index: 0x5e, char: \x5f */ - { 0x08, 0x0532 }, /* Index: 0x5f, char: \x60 */ - { 0x08, 0x0540 }, /* Index: 0x60, char: \x61 */ - { 0x08, 0x054e }, /* Index: 0x61, char: \x62 */ - { 0x08, 0x055c }, /* Index: 0x62, char: \x63 */ - { 0x08, 0x056a }, /* Index: 0x63, char: \x64 */ - { 0x08, 0x0578 }, /* Index: 0x64, char: \x65 */ - { 0x08, 0x0586 }, /* Index: 0x65, char: \x66 */ - { 0x08, 0x0594 }, /* Index: 0x66, char: \x67 */ - { 0x08, 0x05a2 }, /* Index: 0x67, char: \x68 */ - { 0x08, 0x05b0 }, /* Index: 0x68, char: \x69 */ - { 0x08, 0x05be }, /* Index: 0x69, char: \x6a */ - { 0x08, 0x05cc }, /* Index: 0x6a, char: \x6b */ - { 0x08, 0x05da }, /* Index: 0x6b, char: \x6c */ - { 0x08, 0x05e8 }, /* Index: 0x6c, char: \x6d */ - { 0x08, 0x05f6 }, /* Index: 0x6d, char: \x6e */ - { 0x08, 0x0604 }, /* Index: 0x6e, char: \x6f */ - { 0x08, 0x0612 }, /* Index: 0x6f, char: \x70 */ - { 0x08, 0x0620 }, /* Index: 0x70, char: \x71 */ - { 0x08, 0x062e }, /* Index: 0x71, char: \x72 */ - { 0x08, 0x063c }, /* Index: 0x72, char: \x73 */ - { 0x08, 0x064a }, /* Index: 0x73, char: \x74 */ - { 0x08, 0x0658 }, /* Index: 0x74, char: \x75 */ - { 0x08, 0x0666 }, /* Index: 0x75, char: \x76 */ - { 0x08, 0x0674 }, /* Index: 0x76, char: \x77 */ - { 0x08, 0x0682 }, /* Index: 0x77, char: \x78 */ - { 0x08, 0x0690 }, /* Index: 0x78, char: \x79 */ - { 0x08, 0x069e }, /* Index: 0x79, char: \x7a */ - { 0x08, 0x06ac }, /* Index: 0x7a, char: \x7b */ - { 0x08, 0x06ba }, /* Index: 0x7b, char: \x7c */ - { 0x08, 0x06c8 }, /* Index: 0x7c, char: \x7d */ - { 0x08, 0x06d6 }, /* Index: 0x7d, char: \x7e */ - { 0x08, 0x06e4 }, /* Index: 0x7e, char: \x7f */ - { 0x08, 0x06f2 }, /* Index: 0x7f, char: \x80 */ - { 0x08, 0x0700 }, /* Index: 0x80, char: \x81 */ - { 0x08, 0x070e }, /* Index: 0x81, char: \x82 */ - { 0x08, 0x071c }, /* Index: 0x82, char: \x83 */ - { 0x08, 0x072a }, /* Index: 0x83, char: \x84 */ - { 0x08, 0x0738 }, /* Index: 0x84, char: \x85 */ - { 0x08, 0x0746 }, /* Index: 0x85, char: \x86 */ - { 0x08, 0x0754 }, /* Index: 0x86, char: \x87 */ - { 0x08, 0x0762 }, /* Index: 0x87, char: \x88 */ - { 0x08, 0x0770 }, /* Index: 0x88, char: \x89 */ - { 0x08, 0x077e }, /* Index: 0x89, char: \x8a */ - { 0x08, 0x078c }, /* Index: 0x8a, char: \x8b */ - { 0x08, 0x079a }, /* Index: 0x8b, char: \x8c */ - { 0x08, 0x07a8 }, /* Index: 0x8c, char: \x8d */ - { 0x08, 0x07b6 }, /* Index: 0x8d, char: \x8e */ - { 0x08, 0x07c4 }, /* Index: 0x8e, char: \x8f */ - { 0x08, 0x07d2 }, /* Index: 0x8f, char: \x90 */ - { 0x08, 0x07e0 }, /* Index: 0x90, char: \x91 */ - { 0x08, 0x07ee }, /* Index: 0x91, char: \x92 */ - { 0x08, 0x07fc }, /* Index: 0x92, char: \x93 */ - { 0x08, 0x080a }, /* Index: 0x93, char: \x94 */ - { 0x08, 0x0818 }, /* Index: 0x94, char: \x95 */ - { 0x08, 0x0826 }, /* Index: 0x95, char: \x96 */ - { 0x08, 0x0834 }, /* Index: 0x96, char: \x97 */ - { 0x08, 0x0842 }, /* Index: 0x97, char: \x98 */ - { 0x08, 0x0850 }, /* Index: 0x98, char: \x99 */ - { 0x08, 0x085e }, /* Index: 0x99, char: \x9a */ - { 0x08, 0x086c }, /* Index: 0x9a, char: \x9b */ - { 0x08, 0x087a }, /* Index: 0x9b, char: \x9c */ - { 0x08, 0x0888 }, /* Index: 0x9c, char: \x9d */ - { 0x08, 0x0896 }, /* Index: 0x9d, char: \x9e */ - { 0x08, 0x08a4 }, /* Index: 0x9e, char: \x9f */ - { 0x08, 0x08b2 }, /* Index: 0x9f, char: \xa0 */ - { 0x08, 0x08c0 }, /* Index: 0xa0, char: \xa1 */ - { 0x08, 0x08ce }, /* Index: 0xa1, char: \xa2 */ - { 0x08, 0x08dc }, /* Index: 0xa2, char: \xa3 */ - { 0x08, 0x08ea }, /* Index: 0xa3, char: \xa4 */ - { 0x08, 0x08f8 }, /* Index: 0xa4, char: \xa5 */ - { 0x08, 0x0906 }, /* Index: 0xa5, char: \xa6 */ - { 0x08, 0x0914 }, /* Index: 0xa6, char: \xa7 */ - { 0x08, 0x0922 }, /* Index: 0xa7, char: \xa8 */ - { 0x08, 0x0930 }, /* Index: 0xa8, char: \xa9 */ - { 0x08, 0x093e }, /* Index: 0xa9, char: \xaa */ - { 0x08, 0x094c }, /* Index: 0xaa, char: \xab */ - { 0x08, 0x095a }, /* Index: 0xab, char: \xac */ - { 0x08, 0x0968 }, /* Index: 0xac, char: \xad */ - { 0x08, 0x0976 }, /* Index: 0xad, char: \xae */ - { 0x08, 0x0984 }, /* Index: 0xae, char: \xaf */ - { 0x08, 0x0992 }, /* Index: 0xaf, char: \xb0 */ - { 0x08, 0x09a0 }, /* Index: 0xb0, char: \xb1 */ - { 0x08, 0x09ae }, /* Index: 0xb1, char: \xb2 */ - { 0x08, 0x09bc }, /* Index: 0xb2, char: \xb3 */ - { 0x08, 0x09ca }, /* Index: 0xb3, char: \xb4 */ - { 0x08, 0x09d8 }, /* Index: 0xb4, char: \xb5 */ - { 0x08, 0x09e6 }, /* Index: 0xb5, char: \xb6 */ - { 0x08, 0x09f4 }, /* Index: 0xb6, char: \xb7 */ - { 0x08, 0x0a02 }, /* Index: 0xb7, char: \xb8 */ - { 0x08, 0x0a10 }, /* Index: 0xb8, char: \xb9 */ - { 0x08, 0x0a1e }, /* Index: 0xb9, char: \xba */ - { 0x08, 0x0a2c }, /* Index: 0xba, char: \xbb */ - { 0x08, 0x0a3a }, /* Index: 0xbb, char: \xbc */ - { 0x08, 0x0a48 }, /* Index: 0xbc, char: \xbd */ - { 0x08, 0x0a56 }, /* Index: 0xbd, char: \xbe */ - { 0x08, 0x0a64 }, /* Index: 0xbe, char: \xbf */ - { 0x08, 0x0a72 }, /* Index: 0xbf, char: \xc0 */ - { 0x08, 0x0a80 }, /* Index: 0xc0, char: \xc1 */ - { 0x08, 0x0a8e }, /* Index: 0xc1, char: \xc2 */ - { 0x08, 0x0a9c }, /* Index: 0xc2, char: \xc3 */ - { 0x08, 0x0aaa }, /* Index: 0xc3, char: \xc4 */ - { 0x08, 0x0ab8 }, /* Index: 0xc4, char: \xc5 */ - { 0x08, 0x0ac6 }, /* Index: 0xc5, char: \xc6 */ - { 0x08, 0x0ad4 }, /* Index: 0xc6, char: \xc7 */ - { 0x08, 0x0ae2 }, /* Index: 0xc7, char: \xc8 */ - { 0x08, 0x0af0 }, /* Index: 0xc8, char: \xc9 */ - { 0x08, 0x0afe }, /* Index: 0xc9, char: \xca */ - { 0x08, 0x0b0c }, /* Index: 0xca, char: \xcb */ - { 0x08, 0x0b1a }, /* Index: 0xcb, char: \xcc */ - { 0x08, 0x0b28 }, /* Index: 0xcc, char: \xcd */ - { 0x08, 0x0b36 }, /* Index: 0xcd, char: \xce */ - { 0x08, 0x0b44 }, /* Index: 0xce, char: \xcf */ - { 0x08, 0x0b52 }, /* Index: 0xcf, char: \xd0 */ - { 0x08, 0x0b60 }, /* Index: 0xd0, char: \xd1 */ - { 0x08, 0x0b6e }, /* Index: 0xd1, char: \xd2 */ - { 0x08, 0x0b7c }, /* Index: 0xd2, char: \xd3 */ - { 0x08, 0x0b8a }, /* Index: 0xd3, char: \xd4 */ - { 0x08, 0x0b98 }, /* Index: 0xd4, char: \xd5 */ - { 0x08, 0x0ba6 }, /* Index: 0xd5, char: \xd6 */ - { 0x08, 0x0bb4 }, /* Index: 0xd6, char: \xd7 */ - { 0x08, 0x0bc2 }, /* Index: 0xd7, char: \xd8 */ - { 0x08, 0x0bd0 }, /* Index: 0xd8, char: \xd9 */ - { 0x08, 0x0bde }, /* Index: 0xd9, char: \xda */ - { 0x08, 0x0bec }, /* Index: 0xda, char: \xdb */ - { 0x08, 0x0bfa }, /* Index: 0xdb, char: \xdc */ - { 0x08, 0x0c08 }, /* Index: 0xdc, char: \xdd */ - { 0x08, 0x0c16 }, /* Index: 0xdd, char: \xde */ - { 0x08, 0x0c24 }, /* Index: 0xde, char: \xdf */ - { 0x08, 0x0c32 }, /* Index: 0xdf, char: \xe0 */ - { 0x08, 0x0c40 }, /* Index: 0xe0, char: \xe1 */ - { 0x08, 0x0c4e }, /* Index: 0xe1, char: \xe2 */ - { 0x08, 0x0c5c }, /* Index: 0xe2, char: \xe3 */ - { 0x08, 0x0c6a }, /* Index: 0xe3, char: \xe4 */ - { 0x08, 0x0c78 }, /* Index: 0xe4, char: \xe5 */ - { 0x08, 0x0c86 }, /* Index: 0xe5, char: \xe6 */ - { 0x08, 0x0c94 }, /* Index: 0xe6, char: \xe7 */ - { 0x08, 0x0ca2 }, /* Index: 0xe7, char: \xe8 */ - { 0x08, 0x0cb0 }, /* Index: 0xe8, char: \xe9 */ - { 0x08, 0x0cbe }, /* Index: 0xe9, char: \xea */ - { 0x08, 0x0ccc }, /* Index: 0xea, char: \xeb */ - { 0x08, 0x0cda }, /* Index: 0xeb, char: \xec */ - { 0x08, 0x0ce8 }, /* Index: 0xec, char: \xed */ - { 0x08, 0x0cf6 }, /* Index: 0xed, char: \xee */ - { 0x08, 0x0d04 }, /* Index: 0xee, char: \xef */ - { 0x08, 0x0d12 }, /* Index: 0xef, char: \xf0 */ - { 0x08, 0x0d20 }, /* Index: 0xf0, char: \xf1 */ - { 0x08, 0x0d2e }, /* Index: 0xf1, char: \xf2 */ - { 0x08, 0x0d3c }, /* Index: 0xf2, char: \xf3 */ - { 0x08, 0x0d4a }, /* Index: 0xf3, char: \xf4 */ - { 0x08, 0x0d58 }, /* Index: 0xf4, char: \xf5 */ - { 0x08, 0x0d66 }, /* Index: 0xf5, char: \xf6 */ - { 0x08, 0x0d74 }, /* Index: 0xf6, char: \xf7 */ - { 0x08, 0x0d82 }, /* Index: 0xf7, char: \xf8 */ - { 0x08, 0x0d90 }, /* Index: 0xf8, char: \xf9 */ - { 0x08, 0x0d9e }, /* Index: 0xf9, char: \xfa */ - { 0x08, 0x0dac }, /* Index: 0xfa, char: \xfb */ - { 0x08, 0x0dba }, /* Index: 0xfb, char: \xfc */ - { 0x08, 0x0dc8 }, /* Index: 0xfc, char: \xfd */ - { 0x08, 0x0dd6 }, /* Index: 0xfd, char: \xfe */ - { 0x08, 0x0de4 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_8x14_iso8859_1_info = -{ - .height = 14, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_8x14_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_8x14_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_8X14_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_8x14_koi8_r.h b/extras/fonts/data/font_terminus_8x14_koi8_r.h deleted file mode 100644 index b71ffcb..0000000 --- a/extras/fonts/data/font_terminus_8x14_koi8_r.h +++ /dev/null @@ -1,4369 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus - * Size: 8x14 - * Charset: koi8_r - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_8X14_KOI8_R_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_8X14_KOI8_R_H_ - -static const uint8_t _fonts_terminus_8x14_koi8_r_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x7c, /* .#####.. */ - 0xfe, /* #######. */ - 0x7c, /* .#####.. */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x02, offset: 0x000e */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - - /* Index: 0x02, char: \x03, offset: 0x001c */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0xf8, /* #####... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x04, offset: 0x002a */ - 0xf8, /* #####... */ - 0x80, /* #....... */ - 0xe0, /* ###..... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x1c, /* ...###.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x05, offset: 0x0038 */ - 0x70, /* .###.... */ - 0x88, /* #...#... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x88, /* #...#... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x1e, /* ...####. */ - 0x11, /* ...#...# */ - 0x11, /* ...#...# */ - 0x1e, /* ...####. */ - 0x12, /* ...#..#. */ - 0x11, /* ...#...# */ - 0x00, /* ........ */ - - /* Index: 0x05, char: \x06, offset: 0x0046 */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0x80, /* #....... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x1c, /* ...###.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x07, offset: 0x0054 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x08, offset: 0x0062 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x09, offset: 0x0070 */ - 0x88, /* #...#... */ - 0xc8, /* ##..#... */ - 0xa8, /* #.#.#... */ - 0x98, /* #..##... */ - 0x88, /* #...#... */ - 0x88, /* #...#... */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - - /* Index: 0x09, char: \x0a, offset: 0x007e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0a, char: \x0b, offset: 0x008c */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x0c, offset: 0x009a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x0c, char: \x0d, offset: 0x00a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x0d, char: \x0e, offset: 0x00b6 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x0f, offset: 0x00c4 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x0f, char: \x10, offset: 0x00d2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x10, char: \x11, offset: 0x00e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x12, offset: 0x00ee */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x13, offset: 0x00fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x14, offset: 0x010a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x15, offset: 0x0118 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x15, char: \x16, offset: 0x0126 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x16, char: \x17, offset: 0x0134 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x18, offset: 0x0142 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x18, char: \x19, offset: 0x0150 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x19, char: \x1a, offset: 0x015e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x1b, offset: 0x016c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x1c, offset: 0x017a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0188 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x02, /* ......#. */ - 0x7e, /* .######. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0196 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x78, /* .####... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x22, /* ..#...#. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x1f, offset: 0x01a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x20, offset: 0x01b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x20, char: \x21, offset: 0x01c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x22, offset: 0x01ce */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x23, offset: 0x01dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x7e, /* .######. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x7e, /* .######. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x24, offset: 0x01ea */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x92, /* #..#..#. */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x7c, /* .#####.. */ - 0x12, /* ...#..#. */ - 0x12, /* ...#..#. */ - 0x92, /* #..#..#. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x24, char: \x25, offset: 0x01f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x64, /* .##..#.. */ - 0x94, /* #..#.#.. */ - 0x68, /* .##.#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x2c, /* ..#.##.. */ - 0x52, /* .#.#..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x26, offset: 0x0206 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x4a, /* .#..#.#. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x3a, /* ..###.#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x27, offset: 0x0214 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x28, offset: 0x0222 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x29, offset: 0x0230 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x2a, offset: 0x023e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x2b, offset: 0x024c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x2c, offset: 0x025a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0268 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0276 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0284 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x30, offset: 0x0292 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x46, /* .#...##. */ - 0x4a, /* .#..#.#. */ - 0x52, /* .#.#..#. */ - 0x62, /* .##...#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x31, offset: 0x02a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x18, /* ...##... */ - 0x28, /* ..#.#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x32, offset: 0x02ae */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x02, /* ......#. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x32, char: \x33, offset: 0x02bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x02, /* ......#. */ - 0x1c, /* ...###.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x34, offset: 0x02ca */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x02, /* ......#. */ - 0x06, /* .....##. */ - 0x0a, /* ....#.#. */ - 0x12, /* ...#..#. */ - 0x22, /* ..#...#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x35, offset: 0x02d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x36, offset: 0x02e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1c, /* ...###.. */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x37, offset: 0x02f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x38, offset: 0x0302 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x39, offset: 0x0310 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x04, /* .....#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x3a, offset: 0x031e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x3b, offset: 0x032c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x3c, offset: 0x033a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0348 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0356 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0364 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x40, offset: 0x0372 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x82, /* #.....#. */ - 0x9e, /* #..####. */ - 0xa2, /* #.#...#. */ - 0xa2, /* #.#...#. */ - 0xa2, /* #.#...#. */ - 0xa6, /* #.#..##. */ - 0x9a, /* #..##.#. */ - 0x80, /* #....... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x40, char: \x41, offset: 0x0380 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x42, offset: 0x038e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x43, offset: 0x039c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x44, offset: 0x03aa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x45, offset: 0x03b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x46, offset: 0x03c6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x47, offset: 0x03d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x4e, /* .#..###. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x48, offset: 0x03e2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x48, char: \x49, offset: 0x03f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x4a, offset: 0x03fe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x4b, offset: 0x040c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x50, /* .#.#.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4b, char: \x4c, offset: 0x041a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0428 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0xc6, /* ##...##. */ - 0xaa, /* #.#.#.#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0436 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x62, /* .##...#. */ - 0x52, /* .#.#..#. */ - 0x4a, /* .#..#.#. */ - 0x46, /* .#...##. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0444 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x50, offset: 0x0452 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x51, offset: 0x0460 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x4a, /* .#..#.#. */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - - /* Index: 0x51, char: \x52, offset: 0x046e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x52, char: \x53, offset: 0x047c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x54, offset: 0x048a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x55, offset: 0x0498 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x56, offset: 0x04a6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x57, offset: 0x04b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0xaa, /* #.#.#.#. */ - 0xc6, /* ##...##. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x58, offset: 0x04c2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x59, offset: 0x04d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x28, /* ..#.#... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x5a, offset: 0x04de */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5a, char: \x5b, offset: 0x04ec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x5c, offset: 0x04fa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x20, /* ..#..... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0508 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x5e, offset: 0x0516 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x28, /* ..#.#... */ - 0x44, /* .#...#.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5e, char: \x5f, offset: 0x0524 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x60, offset: 0x0532 */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x60, char: \x61, offset: 0x0540 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x61, char: \x62, offset: 0x054e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x62, char: \x63, offset: 0x055c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x63, char: \x64, offset: 0x056a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x64, char: \x65, offset: 0x0578 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x65, char: \x66, offset: 0x0586 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x66, char: \x67, offset: 0x0594 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - - /* Index: 0x67, char: \x68, offset: 0x05a2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x68, char: \x69, offset: 0x05b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x69, char: \x6a, offset: 0x05be */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x38, /* ..###... */ - - /* Index: 0x6a, char: \x6b, offset: 0x05cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x70, /* .###.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6b, char: \x6c, offset: 0x05da */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6c, char: \x6d, offset: 0x05e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6d, char: \x6e, offset: 0x05f6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6e, char: \x6f, offset: 0x0604 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6f, char: \x70, offset: 0x0612 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - - /* Index: 0x70, char: \x71, offset: 0x0620 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - - /* Index: 0x71, char: \x72, offset: 0x062e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x5e, /* .#.####. */ - 0x60, /* .##..... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x72, char: \x73, offset: 0x063c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x73, char: \x74, offset: 0x064a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x0e, /* ....###. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x74, char: \x75, offset: 0x0658 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x75, char: \x76, offset: 0x0666 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x76, char: \x77, offset: 0x0674 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x77, char: \x78, offset: 0x0682 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x78, char: \x79, offset: 0x0690 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - - /* Index: 0x79, char: \x7a, offset: 0x069e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7a, char: \x7b, offset: 0x06ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7b, char: \x7c, offset: 0x06ba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7c, char: \x7d, offset: 0x06c8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x08, /* ....#... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7d, char: \x7e, offset: 0x06d6 */ - 0x00, /* ........ */ - 0x62, /* .##...#. */ - 0x92, /* #..#..#. */ - 0x8c, /* #...##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7e, char: \x7f, offset: 0x06e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7f, char: \x80, offset: 0x06f2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x80, char: \x81, offset: 0x0700 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x81, char: \x82, offset: 0x070e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x82, char: \x83, offset: 0x071c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x83, char: \x84, offset: 0x072a */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x84, char: \x85, offset: 0x0738 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x85, char: \x86, offset: 0x0746 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x86, char: \x87, offset: 0x0754 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x87, char: \x88, offset: 0x0762 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x88, char: \x89, offset: 0x0770 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x89, char: \x8a, offset: 0x077e */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x8a, char: \x8b, offset: 0x078c */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8b, char: \x8c, offset: 0x079a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - - /* Index: 0x8c, char: \x8d, offset: 0x07a8 */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - - /* Index: 0x8d, char: \x8e, offset: 0x07b6 */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - - /* Index: 0x8e, char: \x8f, offset: 0x07c4 */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - - /* Index: 0x8f, char: \x90, offset: 0x07d2 */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - - /* Index: 0x90, char: \x91, offset: 0x07e0 */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - - /* Index: 0x91, char: \x92, offset: 0x07ee */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - - /* Index: 0x92, char: \x93, offset: 0x07fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x12, /* ...#..#. */ - 0x12, /* ...#..#. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x93, char: \x94, offset: 0x080a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x3c, /* ..####.. */ - 0x3c, /* ..####.. */ - 0x3c, /* ..####.. */ - 0x3c, /* ..####.. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x94, char: \x95, offset: 0x0818 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x95, char: \x96, offset: 0x0826 */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x04, /* .....#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x24, /* ..#..#.. */ - 0x14, /* ...#.#.. */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x96, char: \x97, offset: 0x0834 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x32, /* ..##..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x32, /* ..##..#. */ - 0x4c, /* .#..##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x97, char: \x98, offset: 0x0842 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x98, char: \x99, offset: 0x0850 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x20, /* ..#..... */ - 0x10, /* ...#.... */ - 0x08, /* ....#... */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x20, /* ..#..... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x99, char: \x9a, offset: 0x085e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9a, char: \x9b, offset: 0x086c */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x90, /* #..#.... */ - 0x90, /* #..#.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9b, char: \x9c, offset: 0x087a */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9c, char: \x9d, offset: 0x0888 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x04, /* .....#.. */ - 0x08, /* ....#... */ - 0x10, /* ...#.... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9d, char: \x9e, offset: 0x0896 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9e, char: \x9f, offset: 0x08a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9f, char: \xa0, offset: 0x08b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa0, char: \xa1, offset: 0x08c0 */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xa1, char: \xa2, offset: 0x08ce */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0xa2, char: \xa3, offset: 0x08dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa3, char: \xa4, offset: 0x08ea */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3f, /* ..###### */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xa4, char: \xa5, offset: 0x08f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3f, /* ..###### */ - 0x20, /* ..#..... */ - 0x2f, /* ..#.#### */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xa5, char: \xa6, offset: 0x0906 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0xa6, char: \xa7, offset: 0x0914 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xa7, char: \xa8, offset: 0x0922 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0x08, /* ....#... */ - 0xe8, /* ###.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xa8, char: \xa9, offset: 0x0930 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa9, char: \xaa, offset: 0x093e */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x3f, /* ..###### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaa, char: \xab, offset: 0x094c */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x2f, /* ..#.#### */ - 0x20, /* ..#..... */ - 0x3f, /* ..###### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xab, char: \xac, offset: 0x095a */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xac, char: \xad, offset: 0x0968 */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xad, char: \xae, offset: 0x0976 */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xe8, /* ###.#... */ - 0x08, /* ....#... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xae, char: \xaf, offset: 0x0984 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x1f, /* ...##### */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0xaf, char: \xb0, offset: 0x0992 */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x2f, /* ..#.#### */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xb0, char: \xb1, offset: 0x09a0 */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x2f, /* ..#.#### */ - 0x20, /* ..#..... */ - 0x2f, /* ..#.#### */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xb1, char: \xb2, offset: 0x09ae */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0xf0, /* ####.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0xb2, char: \xb3, offset: 0x09bc */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb3, char: \xb4, offset: 0x09ca */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xe8, /* ###.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xb4, char: \xb5, offset: 0x09d8 */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xe8, /* ###.#... */ - 0x08, /* ....#... */ - 0xe8, /* ###.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xb5, char: \xb6, offset: 0x09e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0xb6, char: \xb7, offset: 0x09f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xb7, char: \xb8, offset: 0x0a02 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0xef, /* ###.#### */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xb8, char: \xb9, offset: 0x0a10 */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb9, char: \xba, offset: 0x0a1e */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xba, char: \xbb, offset: 0x0a2c */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xef, /* ###.#### */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbb, char: \xbc, offset: 0x0a3a */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0xff, /* ######## */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0xbc, char: \xbd, offset: 0x0a48 */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xff, /* ######## */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xbd, char: \xbe, offset: 0x0a56 */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0xef, /* ###.#### */ - 0x00, /* ........ */ - 0xef, /* ###.#### */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - 0x28, /* ..#.#... */ - - /* Index: 0xbe, char: \xbf, offset: 0x0a64 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x81, /* #......# */ - 0x99, /* #..##..# */ - 0xa5, /* #.#..#.# */ - 0xa1, /* #.#....# */ - 0xa5, /* #.#..#.# */ - 0x99, /* #..##..# */ - 0x81, /* #......# */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbf, char: \xc0, offset: 0x0a72 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x8c, /* #...##.. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0xf2, /* ####..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x8c, /* #...##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc0, char: \xc1, offset: 0x0a80 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x02, /* ......#. */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc1, char: \xc2, offset: 0x0a8e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc2, char: \xc3, offset: 0x0a9c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3f, /* ..###### */ - 0x01, /* .......# */ - 0x01, /* .......# */ - - /* Index: 0xc3, char: \xc4, offset: 0x0aaa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - - /* Index: 0xc4, char: \xc5, offset: 0x0ab8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc5, char: \xc6, offset: 0x0ac6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0xc6, char: \xc7, offset: 0x0ad4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc7, char: \xc8, offset: 0x0ae2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc8, char: \xc9, offset: 0x0af0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc9, char: \xca, offset: 0x0afe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xca, char: \xcb, offset: 0x0b0c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x70, /* .###.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcb, char: \xcc, offset: 0x0b1a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1e, /* ...####. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcc, char: \xcd, offset: 0x0b28 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0xc6, /* ##...##. */ - 0xaa, /* #.#.#.#. */ - 0x92, /* #..#..#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcd, char: \xce, offset: 0x0b36 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xce, char: \xcf, offset: 0x0b44 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcf, char: \xd0, offset: 0x0b52 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd0, char: \xd1, offset: 0x0b60 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x12, /* ...#..#. */ - 0x22, /* ..#...#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd1, char: \xd2, offset: 0x0b6e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - - /* Index: 0xd2, char: \xd3, offset: 0x0b7c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd3, char: \xd4, offset: 0x0b8a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd4, char: \xd5, offset: 0x0b98 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - - /* Index: 0xd5, char: \xd6, offset: 0x0ba6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x54, /* .#.#.#.. */ - 0x38, /* ..###... */ - 0x54, /* .#.#.#.. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd6, char: \xd7, offset: 0x0bb4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd7, char: \xd8, offset: 0x0bc2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd8, char: \xd9, offset: 0x0bd0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0xf2, /* ####..#. */ - 0x8a, /* #...#.#. */ - 0x8a, /* #...#.#. */ - 0x8a, /* #...#.#. */ - 0xf2, /* ####..#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd9, char: \xda, offset: 0x0bde */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x02, /* ......#. */ - 0x1c, /* ...###.. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xda, char: \xdb, offset: 0x0bec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdb, char: \xdc, offset: 0x0bfa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x02, /* ......#. */ - 0x1e, /* ...####. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdc, char: \xdd, offset: 0x0c08 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x7f, /* .####### */ - 0x01, /* .......# */ - 0x01, /* .......# */ - - /* Index: 0xdd, char: \xde, offset: 0x0c16 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xde, char: \xdf, offset: 0x0c24 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x20, /* ..#..... */ - 0x3c, /* ..####.. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdf, char: \xe0, offset: 0x0c32 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x8c, /* #...##.. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0xf2, /* ####..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x8c, /* #...##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe0, char: \xe1, offset: 0x0c40 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe1, char: \xe2, offset: 0x0c4e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe2, char: \xe3, offset: 0x0c5c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3f, /* ..###### */ - 0x01, /* .......# */ - 0x01, /* .......# */ - - /* Index: 0xe3, char: \xe4, offset: 0x0c6a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0x44, /* .#...#.. */ - 0xfe, /* #######. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - - /* Index: 0xe4, char: \xe5, offset: 0x0c78 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x78, /* .####... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe5, char: \xe6, offset: 0x0c86 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0xe6, char: \xe7, offset: 0x0c94 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe7, char: \xe8, offset: 0x0ca2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x24, /* ..#..#.. */ - 0x24, /* ..#..#.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe8, char: \xe9, offset: 0x0cb0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x46, /* .#...##. */ - 0x4a, /* .#..#.#. */ - 0x52, /* .#.#..#. */ - 0x62, /* .##...#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe9, char: \xea, offset: 0x0cbe */ - 0x24, /* ..#..#.. */ - 0x18, /* ...##... */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x46, /* .#...##. */ - 0x4a, /* .#..#.#. */ - 0x52, /* .#.#..#. */ - 0x62, /* .##...#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xea, char: \xeb, offset: 0x0ccc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x44, /* .#...#.. */ - 0x48, /* .#..#... */ - 0x50, /* .#.#.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x50, /* .#.#.... */ - 0x48, /* .#..#... */ - 0x44, /* .#...#.. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xeb, char: \xec, offset: 0x0cda */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x12, /* ...#..#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x22, /* ..#...#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xec, char: \xed, offset: 0x0ce8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0xc6, /* ##...##. */ - 0xaa, /* #.#.#.#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xed, char: \xee, offset: 0x0cf6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xee, char: \xef, offset: 0x0d04 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xef, char: \xf0, offset: 0x0d12 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf0, char: \xf1, offset: 0x0d20 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x0a, /* ....#.#. */ - 0x12, /* ...#..#. */ - 0x22, /* ..#...#. */ - 0x42, /* .#....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf1, char: \xf2, offset: 0x0d2e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf2, char: \xf3, offset: 0x0d3c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf3, char: \xf4, offset: 0x0d4a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf4, char: \xf5, offset: 0x0d58 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf5, char: \xf6, offset: 0x0d66 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x54, /* .#.#.#.. */ - 0x38, /* ..###... */ - 0x54, /* .#.#.#.. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf6, char: \xf7, offset: 0x0d74 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf7, char: \xf8, offset: 0x0d82 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf8, char: \xf9, offset: 0x0d90 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0x82, /* #.....#. */ - 0xf2, /* ####..#. */ - 0x8a, /* #...#.#. */ - 0x8a, /* #...#.#. */ - 0x8a, /* #...#.#. */ - 0x8a, /* #...#.#. */ - 0x8a, /* #...#.#. */ - 0xf2, /* ####..#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf9, char: \xfa, offset: 0x0d9e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x02, /* ......#. */ - 0x1c, /* ...###.. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfa, char: \xfb, offset: 0x0dac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfb, char: \xfc, offset: 0x0dba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x42, /* .#....#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x1e, /* ...####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x42, /* .#....#. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfc, char: \xfd, offset: 0x0dc8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x92, /* #..#..#. */ - 0x7f, /* .####### */ - 0x01, /* .......# */ - 0x01, /* .......# */ - - /* Index: 0xfd, char: \xfe, offset: 0x0dd6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x3e, /* ..#####. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x02, /* ......#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfe, char: \xff, offset: 0x0de4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0x40, /* .#...... */ - 0x40, /* .#...... */ - 0x7c, /* .#####.. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x42, /* .#....#. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ -}; - -const font_char_desc_t _fonts_terminus_8x14_koi8_r_descriptors[] = { - { 0x08, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x08, 0x000e }, /* Index: 0x01, char: \x02 */ - { 0x08, 0x001c }, /* Index: 0x02, char: \x03 */ - { 0x08, 0x002a }, /* Index: 0x03, char: \x04 */ - { 0x08, 0x0038 }, /* Index: 0x04, char: \x05 */ - { 0x08, 0x0046 }, /* Index: 0x05, char: \x06 */ - { 0x08, 0x0054 }, /* Index: 0x06, char: \x07 */ - { 0x08, 0x0062 }, /* Index: 0x07, char: \x08 */ - { 0x08, 0x0070 }, /* Index: 0x08, char: \x09 */ - { 0x08, 0x007e }, /* Index: 0x09, char: \x0a */ - { 0x08, 0x008c }, /* Index: 0x0a, char: \x0b */ - { 0x08, 0x009a }, /* Index: 0x0b, char: \x0c */ - { 0x08, 0x00a8 }, /* Index: 0x0c, char: \x0d */ - { 0x08, 0x00b6 }, /* Index: 0x0d, char: \x0e */ - { 0x08, 0x00c4 }, /* Index: 0x0e, char: \x0f */ - { 0x08, 0x00d2 }, /* Index: 0x0f, char: \x10 */ - { 0x08, 0x00e0 }, /* Index: 0x10, char: \x11 */ - { 0x08, 0x00ee }, /* Index: 0x11, char: \x12 */ - { 0x08, 0x00fc }, /* Index: 0x12, char: \x13 */ - { 0x08, 0x010a }, /* Index: 0x13, char: \x14 */ - { 0x08, 0x0118 }, /* Index: 0x14, char: \x15 */ - { 0x08, 0x0126 }, /* Index: 0x15, char: \x16 */ - { 0x08, 0x0134 }, /* Index: 0x16, char: \x17 */ - { 0x08, 0x0142 }, /* Index: 0x17, char: \x18 */ - { 0x08, 0x0150 }, /* Index: 0x18, char: \x19 */ - { 0x08, 0x015e }, /* Index: 0x19, char: \x1a */ - { 0x08, 0x016c }, /* Index: 0x1a, char: \x1b */ - { 0x08, 0x017a }, /* Index: 0x1b, char: \x1c */ - { 0x08, 0x0188 }, /* Index: 0x1c, char: \x1d */ - { 0x08, 0x0196 }, /* Index: 0x1d, char: \x1e */ - { 0x08, 0x01a4 }, /* Index: 0x1e, char: \x1f */ - { 0x08, 0x01b2 }, /* Index: 0x1f, char: \x20 */ - { 0x08, 0x01c0 }, /* Index: 0x20, char: \x21 */ - { 0x08, 0x01ce }, /* Index: 0x21, char: \x22 */ - { 0x08, 0x01dc }, /* Index: 0x22, char: \x23 */ - { 0x08, 0x01ea }, /* Index: 0x23, char: \x24 */ - { 0x08, 0x01f8 }, /* Index: 0x24, char: \x25 */ - { 0x08, 0x0206 }, /* Index: 0x25, char: \x26 */ - { 0x08, 0x0214 }, /* Index: 0x26, char: \x27 */ - { 0x08, 0x0222 }, /* Index: 0x27, char: \x28 */ - { 0x08, 0x0230 }, /* Index: 0x28, char: \x29 */ - { 0x08, 0x023e }, /* Index: 0x29, char: \x2a */ - { 0x08, 0x024c }, /* Index: 0x2a, char: \x2b */ - { 0x08, 0x025a }, /* Index: 0x2b, char: \x2c */ - { 0x08, 0x0268 }, /* Index: 0x2c, char: \x2d */ - { 0x08, 0x0276 }, /* Index: 0x2d, char: \x2e */ - { 0x08, 0x0284 }, /* Index: 0x2e, char: \x2f */ - { 0x08, 0x0292 }, /* Index: 0x2f, char: \x30 */ - { 0x08, 0x02a0 }, /* Index: 0x30, char: \x31 */ - { 0x08, 0x02ae }, /* Index: 0x31, char: \x32 */ - { 0x08, 0x02bc }, /* Index: 0x32, char: \x33 */ - { 0x08, 0x02ca }, /* Index: 0x33, char: \x34 */ - { 0x08, 0x02d8 }, /* Index: 0x34, char: \x35 */ - { 0x08, 0x02e6 }, /* Index: 0x35, char: \x36 */ - { 0x08, 0x02f4 }, /* Index: 0x36, char: \x37 */ - { 0x08, 0x0302 }, /* Index: 0x37, char: \x38 */ - { 0x08, 0x0310 }, /* Index: 0x38, char: \x39 */ - { 0x08, 0x031e }, /* Index: 0x39, char: \x3a */ - { 0x08, 0x032c }, /* Index: 0x3a, char: \x3b */ - { 0x08, 0x033a }, /* Index: 0x3b, char: \x3c */ - { 0x08, 0x0348 }, /* Index: 0x3c, char: \x3d */ - { 0x08, 0x0356 }, /* Index: 0x3d, char: \x3e */ - { 0x08, 0x0364 }, /* Index: 0x3e, char: \x3f */ - { 0x08, 0x0372 }, /* Index: 0x3f, char: \x40 */ - { 0x08, 0x0380 }, /* Index: 0x40, char: \x41 */ - { 0x08, 0x038e }, /* Index: 0x41, char: \x42 */ - { 0x08, 0x039c }, /* Index: 0x42, char: \x43 */ - { 0x08, 0x03aa }, /* Index: 0x43, char: \x44 */ - { 0x08, 0x03b8 }, /* Index: 0x44, char: \x45 */ - { 0x08, 0x03c6 }, /* Index: 0x45, char: \x46 */ - { 0x08, 0x03d4 }, /* Index: 0x46, char: \x47 */ - { 0x08, 0x03e2 }, /* Index: 0x47, char: \x48 */ - { 0x08, 0x03f0 }, /* Index: 0x48, char: \x49 */ - { 0x08, 0x03fe }, /* Index: 0x49, char: \x4a */ - { 0x08, 0x040c }, /* Index: 0x4a, char: \x4b */ - { 0x08, 0x041a }, /* Index: 0x4b, char: \x4c */ - { 0x08, 0x0428 }, /* Index: 0x4c, char: \x4d */ - { 0x08, 0x0436 }, /* Index: 0x4d, char: \x4e */ - { 0x08, 0x0444 }, /* Index: 0x4e, char: \x4f */ - { 0x08, 0x0452 }, /* Index: 0x4f, char: \x50 */ - { 0x08, 0x0460 }, /* Index: 0x50, char: \x51 */ - { 0x08, 0x046e }, /* Index: 0x51, char: \x52 */ - { 0x08, 0x047c }, /* Index: 0x52, char: \x53 */ - { 0x08, 0x048a }, /* Index: 0x53, char: \x54 */ - { 0x08, 0x0498 }, /* Index: 0x54, char: \x55 */ - { 0x08, 0x04a6 }, /* Index: 0x55, char: \x56 */ - { 0x08, 0x04b4 }, /* Index: 0x56, char: \x57 */ - { 0x08, 0x04c2 }, /* Index: 0x57, char: \x58 */ - { 0x08, 0x04d0 }, /* Index: 0x58, char: \x59 */ - { 0x08, 0x04de }, /* Index: 0x59, char: \x5a */ - { 0x08, 0x04ec }, /* Index: 0x5a, char: \x5b */ - { 0x08, 0x04fa }, /* Index: 0x5b, char: \x5c */ - { 0x08, 0x0508 }, /* Index: 0x5c, char: \x5d */ - { 0x08, 0x0516 }, /* Index: 0x5d, char: \x5e */ - { 0x08, 0x0524 }, /* Index: 0x5e, char: \x5f */ - { 0x08, 0x0532 }, /* Index: 0x5f, char: \x60 */ - { 0x08, 0x0540 }, /* Index: 0x60, char: \x61 */ - { 0x08, 0x054e }, /* Index: 0x61, char: \x62 */ - { 0x08, 0x055c }, /* Index: 0x62, char: \x63 */ - { 0x08, 0x056a }, /* Index: 0x63, char: \x64 */ - { 0x08, 0x0578 }, /* Index: 0x64, char: \x65 */ - { 0x08, 0x0586 }, /* Index: 0x65, char: \x66 */ - { 0x08, 0x0594 }, /* Index: 0x66, char: \x67 */ - { 0x08, 0x05a2 }, /* Index: 0x67, char: \x68 */ - { 0x08, 0x05b0 }, /* Index: 0x68, char: \x69 */ - { 0x08, 0x05be }, /* Index: 0x69, char: \x6a */ - { 0x08, 0x05cc }, /* Index: 0x6a, char: \x6b */ - { 0x08, 0x05da }, /* Index: 0x6b, char: \x6c */ - { 0x08, 0x05e8 }, /* Index: 0x6c, char: \x6d */ - { 0x08, 0x05f6 }, /* Index: 0x6d, char: \x6e */ - { 0x08, 0x0604 }, /* Index: 0x6e, char: \x6f */ - { 0x08, 0x0612 }, /* Index: 0x6f, char: \x70 */ - { 0x08, 0x0620 }, /* Index: 0x70, char: \x71 */ - { 0x08, 0x062e }, /* Index: 0x71, char: \x72 */ - { 0x08, 0x063c }, /* Index: 0x72, char: \x73 */ - { 0x08, 0x064a }, /* Index: 0x73, char: \x74 */ - { 0x08, 0x0658 }, /* Index: 0x74, char: \x75 */ - { 0x08, 0x0666 }, /* Index: 0x75, char: \x76 */ - { 0x08, 0x0674 }, /* Index: 0x76, char: \x77 */ - { 0x08, 0x0682 }, /* Index: 0x77, char: \x78 */ - { 0x08, 0x0690 }, /* Index: 0x78, char: \x79 */ - { 0x08, 0x069e }, /* Index: 0x79, char: \x7a */ - { 0x08, 0x06ac }, /* Index: 0x7a, char: \x7b */ - { 0x08, 0x06ba }, /* Index: 0x7b, char: \x7c */ - { 0x08, 0x06c8 }, /* Index: 0x7c, char: \x7d */ - { 0x08, 0x06d6 }, /* Index: 0x7d, char: \x7e */ - { 0x08, 0x06e4 }, /* Index: 0x7e, char: \x7f */ - { 0x08, 0x06f2 }, /* Index: 0x7f, char: \x80 */ - { 0x08, 0x0700 }, /* Index: 0x80, char: \x81 */ - { 0x08, 0x070e }, /* Index: 0x81, char: \x82 */ - { 0x08, 0x071c }, /* Index: 0x82, char: \x83 */ - { 0x08, 0x072a }, /* Index: 0x83, char: \x84 */ - { 0x08, 0x0738 }, /* Index: 0x84, char: \x85 */ - { 0x08, 0x0746 }, /* Index: 0x85, char: \x86 */ - { 0x08, 0x0754 }, /* Index: 0x86, char: \x87 */ - { 0x08, 0x0762 }, /* Index: 0x87, char: \x88 */ - { 0x08, 0x0770 }, /* Index: 0x88, char: \x89 */ - { 0x08, 0x077e }, /* Index: 0x89, char: \x8a */ - { 0x08, 0x078c }, /* Index: 0x8a, char: \x8b */ - { 0x08, 0x079a }, /* Index: 0x8b, char: \x8c */ - { 0x08, 0x07a8 }, /* Index: 0x8c, char: \x8d */ - { 0x08, 0x07b6 }, /* Index: 0x8d, char: \x8e */ - { 0x08, 0x07c4 }, /* Index: 0x8e, char: \x8f */ - { 0x08, 0x07d2 }, /* Index: 0x8f, char: \x90 */ - { 0x08, 0x07e0 }, /* Index: 0x90, char: \x91 */ - { 0x08, 0x07ee }, /* Index: 0x91, char: \x92 */ - { 0x08, 0x07fc }, /* Index: 0x92, char: \x93 */ - { 0x08, 0x080a }, /* Index: 0x93, char: \x94 */ - { 0x08, 0x0818 }, /* Index: 0x94, char: \x95 */ - { 0x08, 0x0826 }, /* Index: 0x95, char: \x96 */ - { 0x08, 0x0834 }, /* Index: 0x96, char: \x97 */ - { 0x08, 0x0842 }, /* Index: 0x97, char: \x98 */ - { 0x08, 0x0850 }, /* Index: 0x98, char: \x99 */ - { 0x08, 0x085e }, /* Index: 0x99, char: \x9a */ - { 0x08, 0x086c }, /* Index: 0x9a, char: \x9b */ - { 0x08, 0x087a }, /* Index: 0x9b, char: \x9c */ - { 0x08, 0x0888 }, /* Index: 0x9c, char: \x9d */ - { 0x08, 0x0896 }, /* Index: 0x9d, char: \x9e */ - { 0x08, 0x08a4 }, /* Index: 0x9e, char: \x9f */ - { 0x08, 0x08b2 }, /* Index: 0x9f, char: \xa0 */ - { 0x08, 0x08c0 }, /* Index: 0xa0, char: \xa1 */ - { 0x08, 0x08ce }, /* Index: 0xa1, char: \xa2 */ - { 0x08, 0x08dc }, /* Index: 0xa2, char: \xa3 */ - { 0x08, 0x08ea }, /* Index: 0xa3, char: \xa4 */ - { 0x08, 0x08f8 }, /* Index: 0xa4, char: \xa5 */ - { 0x08, 0x0906 }, /* Index: 0xa5, char: \xa6 */ - { 0x08, 0x0914 }, /* Index: 0xa6, char: \xa7 */ - { 0x08, 0x0922 }, /* Index: 0xa7, char: \xa8 */ - { 0x08, 0x0930 }, /* Index: 0xa8, char: \xa9 */ - { 0x08, 0x093e }, /* Index: 0xa9, char: \xaa */ - { 0x08, 0x094c }, /* Index: 0xaa, char: \xab */ - { 0x08, 0x095a }, /* Index: 0xab, char: \xac */ - { 0x08, 0x0968 }, /* Index: 0xac, char: \xad */ - { 0x08, 0x0976 }, /* Index: 0xad, char: \xae */ - { 0x08, 0x0984 }, /* Index: 0xae, char: \xaf */ - { 0x08, 0x0992 }, /* Index: 0xaf, char: \xb0 */ - { 0x08, 0x09a0 }, /* Index: 0xb0, char: \xb1 */ - { 0x08, 0x09ae }, /* Index: 0xb1, char: \xb2 */ - { 0x08, 0x09bc }, /* Index: 0xb2, char: \xb3 */ - { 0x08, 0x09ca }, /* Index: 0xb3, char: \xb4 */ - { 0x08, 0x09d8 }, /* Index: 0xb4, char: \xb5 */ - { 0x08, 0x09e6 }, /* Index: 0xb5, char: \xb6 */ - { 0x08, 0x09f4 }, /* Index: 0xb6, char: \xb7 */ - { 0x08, 0x0a02 }, /* Index: 0xb7, char: \xb8 */ - { 0x08, 0x0a10 }, /* Index: 0xb8, char: \xb9 */ - { 0x08, 0x0a1e }, /* Index: 0xb9, char: \xba */ - { 0x08, 0x0a2c }, /* Index: 0xba, char: \xbb */ - { 0x08, 0x0a3a }, /* Index: 0xbb, char: \xbc */ - { 0x08, 0x0a48 }, /* Index: 0xbc, char: \xbd */ - { 0x08, 0x0a56 }, /* Index: 0xbd, char: \xbe */ - { 0x08, 0x0a64 }, /* Index: 0xbe, char: \xbf */ - { 0x08, 0x0a72 }, /* Index: 0xbf, char: \xc0 */ - { 0x08, 0x0a80 }, /* Index: 0xc0, char: \xc1 */ - { 0x08, 0x0a8e }, /* Index: 0xc1, char: \xc2 */ - { 0x08, 0x0a9c }, /* Index: 0xc2, char: \xc3 */ - { 0x08, 0x0aaa }, /* Index: 0xc3, char: \xc4 */ - { 0x08, 0x0ab8 }, /* Index: 0xc4, char: \xc5 */ - { 0x08, 0x0ac6 }, /* Index: 0xc5, char: \xc6 */ - { 0x08, 0x0ad4 }, /* Index: 0xc6, char: \xc7 */ - { 0x08, 0x0ae2 }, /* Index: 0xc7, char: \xc8 */ - { 0x08, 0x0af0 }, /* Index: 0xc8, char: \xc9 */ - { 0x08, 0x0afe }, /* Index: 0xc9, char: \xca */ - { 0x08, 0x0b0c }, /* Index: 0xca, char: \xcb */ - { 0x08, 0x0b1a }, /* Index: 0xcb, char: \xcc */ - { 0x08, 0x0b28 }, /* Index: 0xcc, char: \xcd */ - { 0x08, 0x0b36 }, /* Index: 0xcd, char: \xce */ - { 0x08, 0x0b44 }, /* Index: 0xce, char: \xcf */ - { 0x08, 0x0b52 }, /* Index: 0xcf, char: \xd0 */ - { 0x08, 0x0b60 }, /* Index: 0xd0, char: \xd1 */ - { 0x08, 0x0b6e }, /* Index: 0xd1, char: \xd2 */ - { 0x08, 0x0b7c }, /* Index: 0xd2, char: \xd3 */ - { 0x08, 0x0b8a }, /* Index: 0xd3, char: \xd4 */ - { 0x08, 0x0b98 }, /* Index: 0xd4, char: \xd5 */ - { 0x08, 0x0ba6 }, /* Index: 0xd5, char: \xd6 */ - { 0x08, 0x0bb4 }, /* Index: 0xd6, char: \xd7 */ - { 0x08, 0x0bc2 }, /* Index: 0xd7, char: \xd8 */ - { 0x08, 0x0bd0 }, /* Index: 0xd8, char: \xd9 */ - { 0x08, 0x0bde }, /* Index: 0xd9, char: \xda */ - { 0x08, 0x0bec }, /* Index: 0xda, char: \xdb */ - { 0x08, 0x0bfa }, /* Index: 0xdb, char: \xdc */ - { 0x08, 0x0c08 }, /* Index: 0xdc, char: \xdd */ - { 0x08, 0x0c16 }, /* Index: 0xdd, char: \xde */ - { 0x08, 0x0c24 }, /* Index: 0xde, char: \xdf */ - { 0x08, 0x0c32 }, /* Index: 0xdf, char: \xe0 */ - { 0x08, 0x0c40 }, /* Index: 0xe0, char: \xe1 */ - { 0x08, 0x0c4e }, /* Index: 0xe1, char: \xe2 */ - { 0x08, 0x0c5c }, /* Index: 0xe2, char: \xe3 */ - { 0x08, 0x0c6a }, /* Index: 0xe3, char: \xe4 */ - { 0x08, 0x0c78 }, /* Index: 0xe4, char: \xe5 */ - { 0x08, 0x0c86 }, /* Index: 0xe5, char: \xe6 */ - { 0x08, 0x0c94 }, /* Index: 0xe6, char: \xe7 */ - { 0x08, 0x0ca2 }, /* Index: 0xe7, char: \xe8 */ - { 0x08, 0x0cb0 }, /* Index: 0xe8, char: \xe9 */ - { 0x08, 0x0cbe }, /* Index: 0xe9, char: \xea */ - { 0x08, 0x0ccc }, /* Index: 0xea, char: \xeb */ - { 0x08, 0x0cda }, /* Index: 0xeb, char: \xec */ - { 0x08, 0x0ce8 }, /* Index: 0xec, char: \xed */ - { 0x08, 0x0cf6 }, /* Index: 0xed, char: \xee */ - { 0x08, 0x0d04 }, /* Index: 0xee, char: \xef */ - { 0x08, 0x0d12 }, /* Index: 0xef, char: \xf0 */ - { 0x08, 0x0d20 }, /* Index: 0xf0, char: \xf1 */ - { 0x08, 0x0d2e }, /* Index: 0xf1, char: \xf2 */ - { 0x08, 0x0d3c }, /* Index: 0xf2, char: \xf3 */ - { 0x08, 0x0d4a }, /* Index: 0xf3, char: \xf4 */ - { 0x08, 0x0d58 }, /* Index: 0xf4, char: \xf5 */ - { 0x08, 0x0d66 }, /* Index: 0xf5, char: \xf6 */ - { 0x08, 0x0d74 }, /* Index: 0xf6, char: \xf7 */ - { 0x08, 0x0d82 }, /* Index: 0xf7, char: \xf8 */ - { 0x08, 0x0d90 }, /* Index: 0xf8, char: \xf9 */ - { 0x08, 0x0d9e }, /* Index: 0xf9, char: \xfa */ - { 0x08, 0x0dac }, /* Index: 0xfa, char: \xfb */ - { 0x08, 0x0dba }, /* Index: 0xfb, char: \xfc */ - { 0x08, 0x0dc8 }, /* Index: 0xfc, char: \xfd */ - { 0x08, 0x0dd6 }, /* Index: 0xfd, char: \xfe */ - { 0x08, 0x0de4 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_8x14_koi8_r_info = -{ - .height = 14, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_8x14_koi8_r_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_8x14_koi8_r_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_8X14_KOI8_R_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_10x18_iso8859_1.h b/extras/fonts/data/font_terminus_bold_10x18_iso8859_1.h deleted file mode 100644 index cbfa9cf..0000000 --- a/extras/fonts/data/font_terminus_bold_10x18_iso8859_1.h +++ /dev/null @@ -1,5389 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 10x18 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 01:50:41 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_10X18_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_10X18_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_bold_10x18_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x3f, 0x00, /* ..######........ */ - 0x7f, 0x80, /* .########....... */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x7f, 0x80, /* .########....... */ - 0x3f, 0x00, /* ..######........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0024 */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0x80, /* #.#.#.#.#....... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - - /* Index: 0x02, char: \x03, offset: 0x0048 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xfc, 0x00, /* ######.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x006c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0x00, /* ######.......... */ - 0xc0, 0x00, /* ##.............. */ - 0xf0, 0x00, /* ####............ */ - 0xc0, 0x00, /* ##.............. */ - 0xc0, 0x00, /* ##.............. */ - 0xc0, 0x00, /* ##.............. */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x18, 0x00, /* ...##........... */ - 0x1e, 0x00, /* ...####......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x0090 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x78, 0x00, /* .####........... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xc0, 0x00, /* ##.............. */ - 0xc0, 0x00, /* ##.............. */ - 0xcc, 0x00, /* ##..##.......... */ - 0x78, 0x00, /* .####........... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x00b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc0, 0x00, /* ##.............. */ - 0xc0, 0x00, /* ##.............. */ - 0xc0, 0x00, /* ##.............. */ - 0xc0, 0x00, /* ##.............. */ - 0xc0, 0x00, /* ##.............. */ - 0xfc, 0x00, /* ######.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x18, 0x00, /* ...##........... */ - 0x1e, 0x00, /* ...####......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x00d8 */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x00fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0120 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xcc, 0x00, /* ##..##.......... */ - 0xec, 0x00, /* ###.##.......... */ - 0xfc, 0x00, /* ######.......... */ - 0xdc, 0x00, /* ##.###.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x0144 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0168 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xfc, 0x00, /* ######.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x018c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0x00, /* ######.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x0c, char: \x0d, offset: 0x01b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x0d, char: \x0e, offset: 0x01d4 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x01f8 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x0f, char: \x10, offset: 0x021c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x0264 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0288 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x02ac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x02d0 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x15, char: \x16, offset: 0x02f4 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xfc, 0x00, /* ######.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x16, char: \x17, offset: 0x0318 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x033c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x18, char: \x19, offset: 0x0360 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x19, char: \x1a, offset: 0x0384 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x03a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x03cc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x03f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x7f, 0x80, /* .########....... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0414 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x7e, 0x00, /* .######......... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x31, 0x80, /* ..##...##....... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0438 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x045c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x04a4 */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x04c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x7f, 0x80, /* .########....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x7f, 0x80, /* .########....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x04ec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x0510 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x00, /* .###..##........ */ - 0x53, 0x00, /* .#.#..##........ */ - 0x76, 0x00, /* .###.##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x37, 0x00, /* ..##.###........ */ - 0x65, 0x00, /* .##..#.#........ */ - 0x67, 0x00, /* .##..###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0534 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x00, /* ..####.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x39, 0x80, /* ..###..##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0xc7, 0x00, /* ##...###........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0x67, 0x80, /* .##..####....... */ - 0x3d, 0x80, /* ..####.##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0558 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x057c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x05a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x05c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0xff, 0x80, /* #########....... */ - 0x1c, 0x00, /* ...###.......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x05e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x060c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0630 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0654 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0678 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x069c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x80, /* .##...###....... */ - 0x67, 0x80, /* .##..####....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x79, 0x80, /* .####..##....... */ - 0x71, 0x80, /* .###...##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x06c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x06e4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0708 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x072c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0750 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0774 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0798 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x07bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x07e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0804 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0828 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x084c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0870 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0894 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x08b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x08dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xcf, 0x80, /* ##..#####....... */ - 0xd9, 0x80, /* ##.##..##....... */ - 0xd9, 0x80, /* ##.##..##....... */ - 0xd9, 0x80, /* ##.##..##....... */ - 0xd9, 0x80, /* ##.##..##....... */ - 0xcf, 0x80, /* ##..#####....... */ - 0xc0, 0x00, /* ##.............. */ - 0xc0, 0x00, /* ##.............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0924 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0948 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x096c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0990 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x09b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x09d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x67, 0x80, /* .##..####....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x09fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0a20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0a44 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x0a68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x0a8c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0ab0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x80, 0x80, /* #.......#....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xe3, 0x80, /* ###...###....... */ - 0xf7, 0x80, /* ####.####....... */ - 0xdd, 0x80, /* ##.###.##....... */ - 0xc9, 0x80, /* ##..#..##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0ad4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x71, 0x80, /* .###...##....... */ - 0x79, 0x80, /* .####..##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x67, 0x80, /* .##..####....... */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0af8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x0b1c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x0b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x67, 0x80, /* .##..####....... */ - 0x3f, 0x00, /* ..######........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x0b64 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x0b88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x0bac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x0bd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x0bf4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x0c18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc9, 0x80, /* ##..#..##....... */ - 0xdd, 0x80, /* ##.###.##....... */ - 0xf7, 0x80, /* ####.####....... */ - 0xe3, 0x80, /* ###...###....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0x80, 0x80, /* #.......#....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x0c3c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x0c60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x0c84 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x0ca8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x0ccc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0cf0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x0d14 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x0d38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x0d5c */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x0d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x0da4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x0dc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x0dec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x0e10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x0e34 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x0e58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ - - /* Index: 0x67, char: \x68, offset: 0x0e7c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x0ea0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x0ec4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - - /* Index: 0x6a, char: \x6b, offset: 0x0ee8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x0f0c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x0f30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x0f54 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x0f78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x0f9c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - - /* Index: 0x70, char: \x71, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - - /* Index: 0x71, char: \x72, offset: 0x0fe4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x6f, 0x80, /* .##.#####....... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1008 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x102c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x7e, 0x00, /* .######......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1050 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1074 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1098 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x10bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x10e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ - - /* Index: 0x79, char: \x7a, offset: 0x1104 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1128 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x38, 0x00, /* ..###........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x114c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1170 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x07, 0x00, /* .....###........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1194 */ - 0x00, 0x00, /* ................ */ - 0x39, 0x80, /* ..###..##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x67, 0x00, /* .##..###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x11b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x11dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x1224 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x1248 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x126c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x1290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x12b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x12d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x12fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x1320 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x1344 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x1368 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x138c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x13b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x13d4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x13f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x141c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x1440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x1464 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x1488 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x14ac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x14d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x14f4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x1518 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x153c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x1560 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x1584 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x15a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x15cc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x15f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x1614 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x1638 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x165c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x1680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x16a4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x16c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x7e, 0x00, /* .######......... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x31, 0x80, /* ..##...##....... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x16ec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc1, 0x80, /* ##.....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0xc1, 0x80, /* ##.....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x1710 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x1734 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x1758 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x30, 0x00, /* ..##............ */ - 0x1c, 0x00, /* ...###.......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x03, 0x00, /* ......##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x177c */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x17a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x9e, 0x40, /* #..####..#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0xb0, 0x40, /* #.##.....#...... */ - 0xb0, 0x40, /* #.##.....#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0x9e, 0x40, /* #..####..#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x17c4 */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x03, 0x00, /* ......##........ */ - 0x3f, 0x00, /* ..######........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x17e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x66, 0x00, /* .##..##......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x180c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x1830 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x1854 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x40, 0x80, /* .#......#....... */ - 0xbe, 0x40, /* #.#####..#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0xbe, 0x40, /* #.#####..#...... */ - 0xb6, 0x40, /* #.##.##..#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x1878 */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x189c */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x18e4 */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x1908 */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x03, 0x00, /* ......##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x192c */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x1950 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x80, /* .##...###....... */ - 0x7d, 0x80, /* .#####.##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - - /* Index: 0xb5, char: \xb6, offset: 0x1974 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x3d, 0x80, /* ..####.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x1998 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x19bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - - /* Index: 0xb8, char: \xb9, offset: 0x19e0 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x1a04 */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x1a28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xcc, 0x00, /* ##..##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x66, 0x00, /* .##..##......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x1a4c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x70, 0x00, /* .###............ */ - 0x30, 0x80, /* ..##....#....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x80, /* ..##..###....... */ - 0x67, 0x80, /* .##..####....... */ - 0xcd, 0x80, /* ##..##.##....... */ - 0x8f, 0x80, /* #...#####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x1a70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x70, 0x00, /* .###............ */ - 0x30, 0x80, /* ..##....#....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x37, 0x00, /* ..##.###........ */ - 0x6d, 0x80, /* .##.##.##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0x83, 0x00, /* #.....##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x1a94 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xf0, 0x00, /* ####............ */ - 0x18, 0x00, /* ...##........... */ - 0x70, 0x80, /* .###....#....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0xf6, 0x00, /* ####.##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x80, /* ..##..###....... */ - 0x67, 0x80, /* .##..####....... */ - 0xcd, 0x80, /* ##..##.##....... */ - 0x8f, 0x80, /* #...#####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x1ab8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x1adc */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x1b00 */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x1b24 */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x1b48 */ - 0x3b, 0x80, /* ..###.###....... */ - 0x6e, 0x00, /* .##.###......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x1b6c */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x1b90 */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x1bb4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xff, 0xc0, /* ##########...... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc7, 0xc0, /* ##...#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x1bd8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - - /* Index: 0xc7, char: \xc8, offset: 0x1bfc */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x1c20 */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x1c44 */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x1c68 */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x1c8c */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x1cb0 */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x1cd4 */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x1cf8 */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x1d1c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0xfd, 0x80, /* ######.##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x1d40 */ - 0x3b, 0x80, /* ..###.###....... */ - 0x6e, 0x00, /* .##.###......... */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x71, 0x80, /* .###...##....... */ - 0x79, 0x80, /* .####..##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x67, 0x80, /* .##..####....... */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x1d64 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x1d88 */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x1dac */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x1dd0 */ - 0x3b, 0x80, /* ..###.###....... */ - 0x6e, 0x00, /* .##.###......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x1df4 */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x1e18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x1e3c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0xc0, /* .##....###...... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x80, /* .##...###....... */ - 0x67, 0x80, /* .##..####....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x79, 0x80, /* .####..##....... */ - 0x71, 0x80, /* .###...##....... */ - 0x61, 0x80, /* .##....##....... */ - 0xe1, 0x80, /* ###....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x1e60 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x1e84 */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x1ea8 */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x1ecc */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x1ef0 */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x1f14 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x1f38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x62, 0x00, /* .##...#......... */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x71, 0x80, /* .###...##....... */ - 0x6f, 0x00, /* .##.####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x1f5c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x1fa4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x1fc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3b, 0x80, /* ..###.###....... */ - 0x6e, 0x00, /* .##.###......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x1fec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x2010 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x2034 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x77, 0x80, /* .###.####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x7c, 0xc0, /* .#####..##...... */ - 0xcf, 0xc0, /* ##..######...... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0x7b, 0x80, /* .####.###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x2058 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - - /* Index: 0xe7, char: \xe8, offset: 0x207c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x20a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x20c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x20e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x210c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x2130 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x2154 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x2178 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x219c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x36, 0x00, /* ..##.##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x21c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3b, 0x80, /* ..###.###....... */ - 0x6e, 0x00, /* .##.###......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x21e4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x2208 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x222c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x2250 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3b, 0x80, /* ..###.###....... */ - 0x6e, 0x00, /* .##.###......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x2274 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x2298 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x22bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x40, /* ..######.#...... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x80, /* .##...###....... */ - 0x67, 0x80, /* .##..####....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x79, 0x80, /* .####..##....... */ - 0x71, 0x80, /* .###...##....... */ - 0x61, 0x80, /* .##....##....... */ - 0xbf, 0x00, /* #.######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x22e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x2304 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x2328 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x234c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x2370 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ - - /* Index: 0xfd, char: \xfe, offset: 0x2394 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - - /* Index: 0xfe, char: \xff, offset: 0x23b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ -}; - -const font_char_desc_t _fonts_terminus_bold_10x18_iso8859_1_descriptors[] = { - { 0x0a, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0a, 0x0024 }, /* Index: 0x01, char: \x02 */ - { 0x0a, 0x0048 }, /* Index: 0x02, char: \x03 */ - { 0x0a, 0x006c }, /* Index: 0x03, char: \x04 */ - { 0x0a, 0x0090 }, /* Index: 0x04, char: \x05 */ - { 0x0a, 0x00b4 }, /* Index: 0x05, char: \x06 */ - { 0x0a, 0x00d8 }, /* Index: 0x06, char: \x07 */ - { 0x0a, 0x00fc }, /* Index: 0x07, char: \x08 */ - { 0x0a, 0x0120 }, /* Index: 0x08, char: \x09 */ - { 0x0a, 0x0144 }, /* Index: 0x09, char: \x0a */ - { 0x0a, 0x0168 }, /* Index: 0x0a, char: \x0b */ - { 0x0a, 0x018c }, /* Index: 0x0b, char: \x0c */ - { 0x0a, 0x01b0 }, /* Index: 0x0c, char: \x0d */ - { 0x0a, 0x01d4 }, /* Index: 0x0d, char: \x0e */ - { 0x0a, 0x01f8 }, /* Index: 0x0e, char: \x0f */ - { 0x0a, 0x021c }, /* Index: 0x0f, char: \x10 */ - { 0x0a, 0x0240 }, /* Index: 0x10, char: \x11 */ - { 0x0a, 0x0264 }, /* Index: 0x11, char: \x12 */ - { 0x0a, 0x0288 }, /* Index: 0x12, char: \x13 */ - { 0x0a, 0x02ac }, /* Index: 0x13, char: \x14 */ - { 0x0a, 0x02d0 }, /* Index: 0x14, char: \x15 */ - { 0x0a, 0x02f4 }, /* Index: 0x15, char: \x16 */ - { 0x0a, 0x0318 }, /* Index: 0x16, char: \x17 */ - { 0x0a, 0x033c }, /* Index: 0x17, char: \x18 */ - { 0x0a, 0x0360 }, /* Index: 0x18, char: \x19 */ - { 0x0a, 0x0384 }, /* Index: 0x19, char: \x1a */ - { 0x0a, 0x03a8 }, /* Index: 0x1a, char: \x1b */ - { 0x0a, 0x03cc }, /* Index: 0x1b, char: \x1c */ - { 0x0a, 0x03f0 }, /* Index: 0x1c, char: \x1d */ - { 0x0a, 0x0414 }, /* Index: 0x1d, char: \x1e */ - { 0x0a, 0x0438 }, /* Index: 0x1e, char: \x1f */ - { 0x0a, 0x045c }, /* Index: 0x1f, char: \x20 */ - { 0x0a, 0x0480 }, /* Index: 0x20, char: \x21 */ - { 0x0a, 0x04a4 }, /* Index: 0x21, char: \x22 */ - { 0x0a, 0x04c8 }, /* Index: 0x22, char: \x23 */ - { 0x0a, 0x04ec }, /* Index: 0x23, char: \x24 */ - { 0x0a, 0x0510 }, /* Index: 0x24, char: \x25 */ - { 0x0a, 0x0534 }, /* Index: 0x25, char: \x26 */ - { 0x0a, 0x0558 }, /* Index: 0x26, char: \x27 */ - { 0x0a, 0x057c }, /* Index: 0x27, char: \x28 */ - { 0x0a, 0x05a0 }, /* Index: 0x28, char: \x29 */ - { 0x0a, 0x05c4 }, /* Index: 0x29, char: \x2a */ - { 0x0a, 0x05e8 }, /* Index: 0x2a, char: \x2b */ - { 0x0a, 0x060c }, /* Index: 0x2b, char: \x2c */ - { 0x0a, 0x0630 }, /* Index: 0x2c, char: \x2d */ - { 0x0a, 0x0654 }, /* Index: 0x2d, char: \x2e */ - { 0x0a, 0x0678 }, /* Index: 0x2e, char: \x2f */ - { 0x0a, 0x069c }, /* Index: 0x2f, char: \x30 */ - { 0x0a, 0x06c0 }, /* Index: 0x30, char: \x31 */ - { 0x0a, 0x06e4 }, /* Index: 0x31, char: \x32 */ - { 0x0a, 0x0708 }, /* Index: 0x32, char: \x33 */ - { 0x0a, 0x072c }, /* Index: 0x33, char: \x34 */ - { 0x0a, 0x0750 }, /* Index: 0x34, char: \x35 */ - { 0x0a, 0x0774 }, /* Index: 0x35, char: \x36 */ - { 0x0a, 0x0798 }, /* Index: 0x36, char: \x37 */ - { 0x0a, 0x07bc }, /* Index: 0x37, char: \x38 */ - { 0x0a, 0x07e0 }, /* Index: 0x38, char: \x39 */ - { 0x0a, 0x0804 }, /* Index: 0x39, char: \x3a */ - { 0x0a, 0x0828 }, /* Index: 0x3a, char: \x3b */ - { 0x0a, 0x084c }, /* Index: 0x3b, char: \x3c */ - { 0x0a, 0x0870 }, /* Index: 0x3c, char: \x3d */ - { 0x0a, 0x0894 }, /* Index: 0x3d, char: \x3e */ - { 0x0a, 0x08b8 }, /* Index: 0x3e, char: \x3f */ - { 0x0a, 0x08dc }, /* Index: 0x3f, char: \x40 */ - { 0x0a, 0x0900 }, /* Index: 0x40, char: \x41 */ - { 0x0a, 0x0924 }, /* Index: 0x41, char: \x42 */ - { 0x0a, 0x0948 }, /* Index: 0x42, char: \x43 */ - { 0x0a, 0x096c }, /* Index: 0x43, char: \x44 */ - { 0x0a, 0x0990 }, /* Index: 0x44, char: \x45 */ - { 0x0a, 0x09b4 }, /* Index: 0x45, char: \x46 */ - { 0x0a, 0x09d8 }, /* Index: 0x46, char: \x47 */ - { 0x0a, 0x09fc }, /* Index: 0x47, char: \x48 */ - { 0x0a, 0x0a20 }, /* Index: 0x48, char: \x49 */ - { 0x0a, 0x0a44 }, /* Index: 0x49, char: \x4a */ - { 0x0a, 0x0a68 }, /* Index: 0x4a, char: \x4b */ - { 0x0a, 0x0a8c }, /* Index: 0x4b, char: \x4c */ - { 0x0a, 0x0ab0 }, /* Index: 0x4c, char: \x4d */ - { 0x0a, 0x0ad4 }, /* Index: 0x4d, char: \x4e */ - { 0x0a, 0x0af8 }, /* Index: 0x4e, char: \x4f */ - { 0x0a, 0x0b1c }, /* Index: 0x4f, char: \x50 */ - { 0x0a, 0x0b40 }, /* Index: 0x50, char: \x51 */ - { 0x0a, 0x0b64 }, /* Index: 0x51, char: \x52 */ - { 0x0a, 0x0b88 }, /* Index: 0x52, char: \x53 */ - { 0x0a, 0x0bac }, /* Index: 0x53, char: \x54 */ - { 0x0a, 0x0bd0 }, /* Index: 0x54, char: \x55 */ - { 0x0a, 0x0bf4 }, /* Index: 0x55, char: \x56 */ - { 0x0a, 0x0c18 }, /* Index: 0x56, char: \x57 */ - { 0x0a, 0x0c3c }, /* Index: 0x57, char: \x58 */ - { 0x0a, 0x0c60 }, /* Index: 0x58, char: \x59 */ - { 0x0a, 0x0c84 }, /* Index: 0x59, char: \x5a */ - { 0x0a, 0x0ca8 }, /* Index: 0x5a, char: \x5b */ - { 0x0a, 0x0ccc }, /* Index: 0x5b, char: \x5c */ - { 0x0a, 0x0cf0 }, /* Index: 0x5c, char: \x5d */ - { 0x0a, 0x0d14 }, /* Index: 0x5d, char: \x5e */ - { 0x0a, 0x0d38 }, /* Index: 0x5e, char: \x5f */ - { 0x0a, 0x0d5c }, /* Index: 0x5f, char: \x60 */ - { 0x0a, 0x0d80 }, /* Index: 0x60, char: \x61 */ - { 0x0a, 0x0da4 }, /* Index: 0x61, char: \x62 */ - { 0x0a, 0x0dc8 }, /* Index: 0x62, char: \x63 */ - { 0x0a, 0x0dec }, /* Index: 0x63, char: \x64 */ - { 0x0a, 0x0e10 }, /* Index: 0x64, char: \x65 */ - { 0x0a, 0x0e34 }, /* Index: 0x65, char: \x66 */ - { 0x0a, 0x0e58 }, /* Index: 0x66, char: \x67 */ - { 0x0a, 0x0e7c }, /* Index: 0x67, char: \x68 */ - { 0x0a, 0x0ea0 }, /* Index: 0x68, char: \x69 */ - { 0x0a, 0x0ec4 }, /* Index: 0x69, char: \x6a */ - { 0x0a, 0x0ee8 }, /* Index: 0x6a, char: \x6b */ - { 0x0a, 0x0f0c }, /* Index: 0x6b, char: \x6c */ - { 0x0a, 0x0f30 }, /* Index: 0x6c, char: \x6d */ - { 0x0a, 0x0f54 }, /* Index: 0x6d, char: \x6e */ - { 0x0a, 0x0f78 }, /* Index: 0x6e, char: \x6f */ - { 0x0a, 0x0f9c }, /* Index: 0x6f, char: \x70 */ - { 0x0a, 0x0fc0 }, /* Index: 0x70, char: \x71 */ - { 0x0a, 0x0fe4 }, /* Index: 0x71, char: \x72 */ - { 0x0a, 0x1008 }, /* Index: 0x72, char: \x73 */ - { 0x0a, 0x102c }, /* Index: 0x73, char: \x74 */ - { 0x0a, 0x1050 }, /* Index: 0x74, char: \x75 */ - { 0x0a, 0x1074 }, /* Index: 0x75, char: \x76 */ - { 0x0a, 0x1098 }, /* Index: 0x76, char: \x77 */ - { 0x0a, 0x10bc }, /* Index: 0x77, char: \x78 */ - { 0x0a, 0x10e0 }, /* Index: 0x78, char: \x79 */ - { 0x0a, 0x1104 }, /* Index: 0x79, char: \x7a */ - { 0x0a, 0x1128 }, /* Index: 0x7a, char: \x7b */ - { 0x0a, 0x114c }, /* Index: 0x7b, char: \x7c */ - { 0x0a, 0x1170 }, /* Index: 0x7c, char: \x7d */ - { 0x0a, 0x1194 }, /* Index: 0x7d, char: \x7e */ - { 0x0a, 0x11b8 }, /* Index: 0x7e, char: \x7f */ - { 0x0a, 0x11dc }, /* Index: 0x7f, char: \x80 */ - { 0x0a, 0x1200 }, /* Index: 0x80, char: \x81 */ - { 0x0a, 0x1224 }, /* Index: 0x81, char: \x82 */ - { 0x0a, 0x1248 }, /* Index: 0x82, char: \x83 */ - { 0x0a, 0x126c }, /* Index: 0x83, char: \x84 */ - { 0x0a, 0x1290 }, /* Index: 0x84, char: \x85 */ - { 0x0a, 0x12b4 }, /* Index: 0x85, char: \x86 */ - { 0x0a, 0x12d8 }, /* Index: 0x86, char: \x87 */ - { 0x0a, 0x12fc }, /* Index: 0x87, char: \x88 */ - { 0x0a, 0x1320 }, /* Index: 0x88, char: \x89 */ - { 0x0a, 0x1344 }, /* Index: 0x89, char: \x8a */ - { 0x0a, 0x1368 }, /* Index: 0x8a, char: \x8b */ - { 0x0a, 0x138c }, /* Index: 0x8b, char: \x8c */ - { 0x0a, 0x13b0 }, /* Index: 0x8c, char: \x8d */ - { 0x0a, 0x13d4 }, /* Index: 0x8d, char: \x8e */ - { 0x0a, 0x13f8 }, /* Index: 0x8e, char: \x8f */ - { 0x0a, 0x141c }, /* Index: 0x8f, char: \x90 */ - { 0x0a, 0x1440 }, /* Index: 0x90, char: \x91 */ - { 0x0a, 0x1464 }, /* Index: 0x91, char: \x92 */ - { 0x0a, 0x1488 }, /* Index: 0x92, char: \x93 */ - { 0x0a, 0x14ac }, /* Index: 0x93, char: \x94 */ - { 0x0a, 0x14d0 }, /* Index: 0x94, char: \x95 */ - { 0x0a, 0x14f4 }, /* Index: 0x95, char: \x96 */ - { 0x0a, 0x1518 }, /* Index: 0x96, char: \x97 */ - { 0x0a, 0x153c }, /* Index: 0x97, char: \x98 */ - { 0x0a, 0x1560 }, /* Index: 0x98, char: \x99 */ - { 0x0a, 0x1584 }, /* Index: 0x99, char: \x9a */ - { 0x0a, 0x15a8 }, /* Index: 0x9a, char: \x9b */ - { 0x0a, 0x15cc }, /* Index: 0x9b, char: \x9c */ - { 0x0a, 0x15f0 }, /* Index: 0x9c, char: \x9d */ - { 0x0a, 0x1614 }, /* Index: 0x9d, char: \x9e */ - { 0x0a, 0x1638 }, /* Index: 0x9e, char: \x9f */ - { 0x0a, 0x165c }, /* Index: 0x9f, char: \xa0 */ - { 0x0a, 0x1680 }, /* Index: 0xa0, char: \xa1 */ - { 0x0a, 0x16a4 }, /* Index: 0xa1, char: \xa2 */ - { 0x0a, 0x16c8 }, /* Index: 0xa2, char: \xa3 */ - { 0x0a, 0x16ec }, /* Index: 0xa3, char: \xa4 */ - { 0x0a, 0x1710 }, /* Index: 0xa4, char: \xa5 */ - { 0x0a, 0x1734 }, /* Index: 0xa5, char: \xa6 */ - { 0x0a, 0x1758 }, /* Index: 0xa6, char: \xa7 */ - { 0x0a, 0x177c }, /* Index: 0xa7, char: \xa8 */ - { 0x0a, 0x17a0 }, /* Index: 0xa8, char: \xa9 */ - { 0x0a, 0x17c4 }, /* Index: 0xa9, char: \xaa */ - { 0x0a, 0x17e8 }, /* Index: 0xaa, char: \xab */ - { 0x0a, 0x180c }, /* Index: 0xab, char: \xac */ - { 0x0a, 0x1830 }, /* Index: 0xac, char: \xad */ - { 0x0a, 0x1854 }, /* Index: 0xad, char: \xae */ - { 0x0a, 0x1878 }, /* Index: 0xae, char: \xaf */ - { 0x0a, 0x189c }, /* Index: 0xaf, char: \xb0 */ - { 0x0a, 0x18c0 }, /* Index: 0xb0, char: \xb1 */ - { 0x0a, 0x18e4 }, /* Index: 0xb1, char: \xb2 */ - { 0x0a, 0x1908 }, /* Index: 0xb2, char: \xb3 */ - { 0x0a, 0x192c }, /* Index: 0xb3, char: \xb4 */ - { 0x0a, 0x1950 }, /* Index: 0xb4, char: \xb5 */ - { 0x0a, 0x1974 }, /* Index: 0xb5, char: \xb6 */ - { 0x0a, 0x1998 }, /* Index: 0xb6, char: \xb7 */ - { 0x0a, 0x19bc }, /* Index: 0xb7, char: \xb8 */ - { 0x0a, 0x19e0 }, /* Index: 0xb8, char: \xb9 */ - { 0x0a, 0x1a04 }, /* Index: 0xb9, char: \xba */ - { 0x0a, 0x1a28 }, /* Index: 0xba, char: \xbb */ - { 0x0a, 0x1a4c }, /* Index: 0xbb, char: \xbc */ - { 0x0a, 0x1a70 }, /* Index: 0xbc, char: \xbd */ - { 0x0a, 0x1a94 }, /* Index: 0xbd, char: \xbe */ - { 0x0a, 0x1ab8 }, /* Index: 0xbe, char: \xbf */ - { 0x0a, 0x1adc }, /* Index: 0xbf, char: \xc0 */ - { 0x0a, 0x1b00 }, /* Index: 0xc0, char: \xc1 */ - { 0x0a, 0x1b24 }, /* Index: 0xc1, char: \xc2 */ - { 0x0a, 0x1b48 }, /* Index: 0xc2, char: \xc3 */ - { 0x0a, 0x1b6c }, /* Index: 0xc3, char: \xc4 */ - { 0x0a, 0x1b90 }, /* Index: 0xc4, char: \xc5 */ - { 0x0a, 0x1bb4 }, /* Index: 0xc5, char: \xc6 */ - { 0x0a, 0x1bd8 }, /* Index: 0xc6, char: \xc7 */ - { 0x0a, 0x1bfc }, /* Index: 0xc7, char: \xc8 */ - { 0x0a, 0x1c20 }, /* Index: 0xc8, char: \xc9 */ - { 0x0a, 0x1c44 }, /* Index: 0xc9, char: \xca */ - { 0x0a, 0x1c68 }, /* Index: 0xca, char: \xcb */ - { 0x0a, 0x1c8c }, /* Index: 0xcb, char: \xcc */ - { 0x0a, 0x1cb0 }, /* Index: 0xcc, char: \xcd */ - { 0x0a, 0x1cd4 }, /* Index: 0xcd, char: \xce */ - { 0x0a, 0x1cf8 }, /* Index: 0xce, char: \xcf */ - { 0x0a, 0x1d1c }, /* Index: 0xcf, char: \xd0 */ - { 0x0a, 0x1d40 }, /* Index: 0xd0, char: \xd1 */ - { 0x0a, 0x1d64 }, /* Index: 0xd1, char: \xd2 */ - { 0x0a, 0x1d88 }, /* Index: 0xd2, char: \xd3 */ - { 0x0a, 0x1dac }, /* Index: 0xd3, char: \xd4 */ - { 0x0a, 0x1dd0 }, /* Index: 0xd4, char: \xd5 */ - { 0x0a, 0x1df4 }, /* Index: 0xd5, char: \xd6 */ - { 0x0a, 0x1e18 }, /* Index: 0xd6, char: \xd7 */ - { 0x0a, 0x1e3c }, /* Index: 0xd7, char: \xd8 */ - { 0x0a, 0x1e60 }, /* Index: 0xd8, char: \xd9 */ - { 0x0a, 0x1e84 }, /* Index: 0xd9, char: \xda */ - { 0x0a, 0x1ea8 }, /* Index: 0xda, char: \xdb */ - { 0x0a, 0x1ecc }, /* Index: 0xdb, char: \xdc */ - { 0x0a, 0x1ef0 }, /* Index: 0xdc, char: \xdd */ - { 0x0a, 0x1f14 }, /* Index: 0xdd, char: \xde */ - { 0x0a, 0x1f38 }, /* Index: 0xde, char: \xdf */ - { 0x0a, 0x1f5c }, /* Index: 0xdf, char: \xe0 */ - { 0x0a, 0x1f80 }, /* Index: 0xe0, char: \xe1 */ - { 0x0a, 0x1fa4 }, /* Index: 0xe1, char: \xe2 */ - { 0x0a, 0x1fc8 }, /* Index: 0xe2, char: \xe3 */ - { 0x0a, 0x1fec }, /* Index: 0xe3, char: \xe4 */ - { 0x0a, 0x2010 }, /* Index: 0xe4, char: \xe5 */ - { 0x0a, 0x2034 }, /* Index: 0xe5, char: \xe6 */ - { 0x0a, 0x2058 }, /* Index: 0xe6, char: \xe7 */ - { 0x0a, 0x207c }, /* Index: 0xe7, char: \xe8 */ - { 0x0a, 0x20a0 }, /* Index: 0xe8, char: \xe9 */ - { 0x0a, 0x20c4 }, /* Index: 0xe9, char: \xea */ - { 0x0a, 0x20e8 }, /* Index: 0xea, char: \xeb */ - { 0x0a, 0x210c }, /* Index: 0xeb, char: \xec */ - { 0x0a, 0x2130 }, /* Index: 0xec, char: \xed */ - { 0x0a, 0x2154 }, /* Index: 0xed, char: \xee */ - { 0x0a, 0x2178 }, /* Index: 0xee, char: \xef */ - { 0x0a, 0x219c }, /* Index: 0xef, char: \xf0 */ - { 0x0a, 0x21c0 }, /* Index: 0xf0, char: \xf1 */ - { 0x0a, 0x21e4 }, /* Index: 0xf1, char: \xf2 */ - { 0x0a, 0x2208 }, /* Index: 0xf2, char: \xf3 */ - { 0x0a, 0x222c }, /* Index: 0xf3, char: \xf4 */ - { 0x0a, 0x2250 }, /* Index: 0xf4, char: \xf5 */ - { 0x0a, 0x2274 }, /* Index: 0xf5, char: \xf6 */ - { 0x0a, 0x2298 }, /* Index: 0xf6, char: \xf7 */ - { 0x0a, 0x22bc }, /* Index: 0xf7, char: \xf8 */ - { 0x0a, 0x22e0 }, /* Index: 0xf8, char: \xf9 */ - { 0x0a, 0x2304 }, /* Index: 0xf9, char: \xfa */ - { 0x0a, 0x2328 }, /* Index: 0xfa, char: \xfb */ - { 0x0a, 0x234c }, /* Index: 0xfb, char: \xfc */ - { 0x0a, 0x2370 }, /* Index: 0xfc, char: \xfd */ - { 0x0a, 0x2394 }, /* Index: 0xfd, char: \xfe */ - { 0x0a, 0x23b8 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_10x18_iso8859_1_info = -{ - .height = 18, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_10x18_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_10x18_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_10X18_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_11x22_iso8859_1.h b/extras/fonts/data/font_terminus_bold_11x22_iso8859_1.h deleted file mode 100644 index bcdfb73..0000000 --- a/extras/fonts/data/font_terminus_bold_11x22_iso8859_1.h +++ /dev/null @@ -1,6409 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 11x22 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 01:52:46 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_11X22_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_11X22_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_bold_11x22_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x3f, 0x00, /* ..######........ */ - 0x7f, 0x80, /* .########....... */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x7f, 0x80, /* .########....... */ - 0x3f, 0x00, /* ..######........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x002c */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x40, /* .#.#.#.#.#...... */ - - /* Index: 0x02, char: \x03, offset: 0x0058 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x7e, 0x00, /* .######......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x0084 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x78, 0x00, /* .####........... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0x00, /* ....####........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x00b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x00, /* ..####.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x66, 0x00, /* .##..##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x00dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0x00, /* ....####........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0108 */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x0134 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0160 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x76, 0x00, /* .###.##......... */ - 0x7e, 0x00, /* .######......... */ - 0x6e, 0x00, /* .##.###......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x018c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x01b8 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xfc, 0x00, /* ######.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x01e4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0x00, /* ######.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0210 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x0d, char: \x0e, offset: 0x023c */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0268 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xff, 0xe0, /* ###########..... */ - 0xff, 0xe0, /* ###########..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x0f, char: \x10, offset: 0x0294 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x02c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x02ec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xe0, /* ###########..... */ - 0xff, 0xe0, /* ###########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0318 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x0344 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0370 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x15, char: \x16, offset: 0x039c */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xfc, 0x00, /* ######.......... */ - 0xfc, 0x00, /* ######.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x16, char: \x17, offset: 0x03c8 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xff, 0xe0, /* ###########..... */ - 0xff, 0xe0, /* ###########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x03f4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xe0, /* ###########..... */ - 0xff, 0xe0, /* ###########..... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x18, char: \x19, offset: 0x0420 */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - - /* Index: 0x19, char: \x1a, offset: 0x044c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x0478 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x04a4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x04d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xc0, /* ........##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x04fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x7e, 0x00, /* .######......... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0528 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x0554 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x05ac */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x05d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0xff, 0xc0, /* ##########...... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0xff, 0xc0, /* ##########...... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x0604 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x6d, 0x80, /* .##.##.##....... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x0630 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x71, 0x80, /* .###...##....... */ - 0xd9, 0x80, /* ##.##..##....... */ - 0xdb, 0x00, /* ##.##.##........ */ - 0x73, 0x00, /* .###..##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x33, 0x80, /* ..##..###....... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x63, 0x80, /* .##...###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x065c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0xc3, 0xc0, /* ##....####...... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0xc1, 0x80, /* ##.....##....... */ - 0x63, 0xc0, /* .##...####...... */ - 0x3e, 0xc0, /* ..#####.##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0688 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x06b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x06e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x070c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0738 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0764 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0790 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x07bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x07e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0814 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0xc0, /* .##....###...... */ - 0x63, 0xc0, /* .##...####...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x6c, 0xc0, /* .##.##..##...... */ - 0x78, 0xc0, /* .####...##...... */ - 0x70, 0xc0, /* .###....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1e, 0x00, /* ...####......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x086c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0898 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x08c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0xc0, /* ......####...... */ - 0x06, 0xc0, /* .....##.##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x08f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x091c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0948 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0974 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x09a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x09cc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x09f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0a24 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0a50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0a7c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0aa8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0ad4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc7, 0xc0, /* ##...#####...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xd8, 0xc0, /* ##.##...##...... */ - 0xd8, 0xc0, /* ##.##...##...... */ - 0xd8, 0xc0, /* ##.##...##...... */ - 0xd8, 0xc0, /* ##.##...##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xc7, 0xc0, /* ##...#####...... */ - 0xc0, 0x00, /* ##.............. */ - 0x60, 0x00, /* .##............. */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0b2c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0b58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x0b84 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0bb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x0bdc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x0c08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x67, 0xc0, /* .##..#####...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x0c34 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0c60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0c8c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x0cb8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x0ce4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0d10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x80, 0x40, /* #........#...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xf3, 0xc0, /* ####..####...... */ - 0xde, 0xc0, /* ##.####.##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0d3c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x70, 0xc0, /* .###....##...... */ - 0x78, 0xc0, /* .####...##...... */ - 0x6c, 0xc0, /* .##.##..##...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x63, 0xc0, /* .##...####...... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0d68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x0d94 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x0dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x37, 0x80, /* ..##.####....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x0dec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x0e18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x1f, 0x00, /* ...#####........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x0e44 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x0e70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x0e9c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x0ec8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xde, 0xc0, /* ##.####.##...... */ - 0xf3, 0xc0, /* ####..####...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0x80, 0x40, /* #........#...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x0ef4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x0f20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x0f4c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x0f78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x0fa4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0fd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x0ffc */ - 0x00, 0x00, /* ................ */ - 0x04, 0x00, /* .....#.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1028 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x1054 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x10ac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x10d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x1104 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x1130 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x115c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1188 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x11b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x11e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x120c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1238 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0xc0, /* ..##....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1264 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x1290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xcd, 0x80, /* ##..##.##....... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x12bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x12e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1314 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x136c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x67, 0xc0, /* .##..#####...... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1398 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x13c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x13f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x141c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1448 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1474 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x14a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x14cc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x14f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x38, 0x00, /* ..###........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1524 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1550 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x80, /* ......###....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x157c */ - 0x00, 0x00, /* ................ */ - 0x38, 0xc0, /* ..###...##...... */ - 0x6c, 0xc0, /* .##.##..##...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x63, 0x80, /* .##...###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x15a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x15d4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x162c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x1658 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x1684 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x16b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x16dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x1708 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x1734 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x1760 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x178c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x17b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x17e4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x1810 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x183c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x1868 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x1894 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x18ec */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x1918 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x1944 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x1970 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x199c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x19c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x19f4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x1a20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x1a4c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x1a78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x1aa4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x1ad0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x1afc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x1b28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x1b54 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x1b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x1bac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x6d, 0x80, /* .##.##.##....... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x1bd8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x7e, 0x00, /* .######......... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x1c04 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc0, 0xc0, /* ##......##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0xc0, 0xc0, /* ##......##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x1c30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x1c5c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x1c88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x1cb4 */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x1ce0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x40, 0x80, /* .#......#....... */ - 0x9e, 0x40, /* #..####..#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0xb0, 0x40, /* #.##.....#...... */ - 0xb0, 0x40, /* #.##.....#...... */ - 0xb0, 0x40, /* #.##.....#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0x9e, 0x40, /* #..####..#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x1d0c */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x1d38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x66, 0x00, /* .##..##......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x1d64 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x1d90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x1dbc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x40, 0x80, /* .#......#....... */ - 0xbe, 0x40, /* #.#####..#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0xbe, 0x40, /* #.#####..#...... */ - 0xbc, 0x40, /* #.####...#...... */ - 0xb6, 0x40, /* #.##.##..#...... */ - 0xb3, 0x40, /* #.##..##.#...... */ - 0x40, 0x80, /* .#......#....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x1de8 */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x1e14 */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x1e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x1e6c */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x1e98 */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x1ec4 */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x1ef0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0xc0, /* .##....###...... */ - 0x63, 0xc0, /* .##...####...... */ - 0x7e, 0xc0, /* .######.##...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb5, char: \xb6, offset: 0x1f1c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0x7c, 0xc0, /* .#####..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x1f48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x1f74 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb8, char: \xb9, offset: 0x1fa0 */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x1fcc */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x1ff8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xcc, 0x00, /* ##..##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x66, 0x00, /* .##..##......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x2024 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x70, 0x00, /* .###............ */ - 0xf0, 0x00, /* ####............ */ - 0x30, 0x40, /* ..##.....#...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x33, 0xc0, /* ..##..####...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x4c, 0xc0, /* .#..##..##...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2050 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x70, 0x00, /* .###............ */ - 0xf0, 0x40, /* ####.....#...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x37, 0x80, /* ..##.####....... */ - 0x6c, 0xc0, /* .##.##..##...... */ - 0x4c, 0xc0, /* .#..##..##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x207c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x78, 0x00, /* .####........... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x38, 0x40, /* ..###....#...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xcd, 0x80, /* ##..##.##....... */ - 0x7b, 0x00, /* .####.##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x33, 0xc0, /* ..##..####...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x4c, 0xc0, /* .#..##..##...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x20a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x20d4 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x2100 */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x212c */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x2158 */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x2184 */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x21b0 */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x21dc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x66, 0x00, /* .##..##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xff, 0xe0, /* ###########..... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc7, 0xe0, /* ##...######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x2208 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x2234 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x2260 */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x228c */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x22b8 */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x22e4 */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x2310 */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x233c */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x2368 */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x2394 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x23c0 */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x70, 0xc0, /* .###....##...... */ - 0x78, 0xc0, /* .####...##...... */ - 0x6c, 0xc0, /* .##.##..##...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x63, 0xc0, /* .##...####...... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x23ec */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x2418 */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x2444 */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x2470 */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x249c */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x24c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x24f4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0xc0, /* .##....###...... */ - 0x63, 0xc0, /* .##...####...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x6c, 0xc0, /* .##.##..##...... */ - 0x78, 0xc0, /* .####...##...... */ - 0x70, 0xc0, /* .###....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0xe0, 0xc0, /* ###.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x2520 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x254c */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x2578 */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x25a4 */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x25d0 */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0xc0, 0xc0, /* ##......##...... */ - 0xc0, 0xc0, /* ##......##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1e, 0x00, /* ...####......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x25fc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x2628 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x71, 0x80, /* .###...##....... */ - 0x6f, 0x00, /* .##.####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x2654 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x2680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x26ac */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x26d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x2704 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x2730 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x3f, 0x00, /* ..######........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x275c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7b, 0x80, /* .####.###....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0xcc, 0xc0, /* ##..##..##...... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x2788 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x27b4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x27e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x280c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x2838 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x2864 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x2890 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x28bc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x28e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x2914 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x36, 0x00, /* ..##.##......... */ - 0x18, 0x00, /* ...##........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x2940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x39, 0x80, /* ..###..##....... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x67, 0x00, /* .##..###........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x296c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x2998 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x29c4 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x29f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x2a1c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x2a48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x2a74 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x60, /* ...#####.##..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x61, 0xc0, /* .##....###...... */ - 0x63, 0xc0, /* .##...####...... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x6c, 0xc0, /* .##.##..##...... */ - 0x78, 0xc0, /* .####...##...... */ - 0x70, 0xc0, /* .###....##...... */ - 0x71, 0x80, /* .###...##....... */ - 0xdf, 0x00, /* ##.#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x2aa0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x2acc */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x2af8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x2b24 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x2b50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x2b7c */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x2ba8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_bold_11x22_iso8859_1_descriptors[] = { - { 0x0b, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0b, 0x002c }, /* Index: 0x01, char: \x02 */ - { 0x0b, 0x0058 }, /* Index: 0x02, char: \x03 */ - { 0x0b, 0x0084 }, /* Index: 0x03, char: \x04 */ - { 0x0b, 0x00b0 }, /* Index: 0x04, char: \x05 */ - { 0x0b, 0x00dc }, /* Index: 0x05, char: \x06 */ - { 0x0b, 0x0108 }, /* Index: 0x06, char: \x07 */ - { 0x0b, 0x0134 }, /* Index: 0x07, char: \x08 */ - { 0x0b, 0x0160 }, /* Index: 0x08, char: \x09 */ - { 0x0b, 0x018c }, /* Index: 0x09, char: \x0a */ - { 0x0b, 0x01b8 }, /* Index: 0x0a, char: \x0b */ - { 0x0b, 0x01e4 }, /* Index: 0x0b, char: \x0c */ - { 0x0b, 0x0210 }, /* Index: 0x0c, char: \x0d */ - { 0x0b, 0x023c }, /* Index: 0x0d, char: \x0e */ - { 0x0b, 0x0268 }, /* Index: 0x0e, char: \x0f */ - { 0x0b, 0x0294 }, /* Index: 0x0f, char: \x10 */ - { 0x0b, 0x02c0 }, /* Index: 0x10, char: \x11 */ - { 0x0b, 0x02ec }, /* Index: 0x11, char: \x12 */ - { 0x0b, 0x0318 }, /* Index: 0x12, char: \x13 */ - { 0x0b, 0x0344 }, /* Index: 0x13, char: \x14 */ - { 0x0b, 0x0370 }, /* Index: 0x14, char: \x15 */ - { 0x0b, 0x039c }, /* Index: 0x15, char: \x16 */ - { 0x0b, 0x03c8 }, /* Index: 0x16, char: \x17 */ - { 0x0b, 0x03f4 }, /* Index: 0x17, char: \x18 */ - { 0x0b, 0x0420 }, /* Index: 0x18, char: \x19 */ - { 0x0b, 0x044c }, /* Index: 0x19, char: \x1a */ - { 0x0b, 0x0478 }, /* Index: 0x1a, char: \x1b */ - { 0x0b, 0x04a4 }, /* Index: 0x1b, char: \x1c */ - { 0x0b, 0x04d0 }, /* Index: 0x1c, char: \x1d */ - { 0x0b, 0x04fc }, /* Index: 0x1d, char: \x1e */ - { 0x0b, 0x0528 }, /* Index: 0x1e, char: \x1f */ - { 0x0b, 0x0554 }, /* Index: 0x1f, char: \x20 */ - { 0x0b, 0x0580 }, /* Index: 0x20, char: \x21 */ - { 0x0b, 0x05ac }, /* Index: 0x21, char: \x22 */ - { 0x0b, 0x05d8 }, /* Index: 0x22, char: \x23 */ - { 0x0b, 0x0604 }, /* Index: 0x23, char: \x24 */ - { 0x0b, 0x0630 }, /* Index: 0x24, char: \x25 */ - { 0x0b, 0x065c }, /* Index: 0x25, char: \x26 */ - { 0x0b, 0x0688 }, /* Index: 0x26, char: \x27 */ - { 0x0b, 0x06b4 }, /* Index: 0x27, char: \x28 */ - { 0x0b, 0x06e0 }, /* Index: 0x28, char: \x29 */ - { 0x0b, 0x070c }, /* Index: 0x29, char: \x2a */ - { 0x0b, 0x0738 }, /* Index: 0x2a, char: \x2b */ - { 0x0b, 0x0764 }, /* Index: 0x2b, char: \x2c */ - { 0x0b, 0x0790 }, /* Index: 0x2c, char: \x2d */ - { 0x0b, 0x07bc }, /* Index: 0x2d, char: \x2e */ - { 0x0b, 0x07e8 }, /* Index: 0x2e, char: \x2f */ - { 0x0b, 0x0814 }, /* Index: 0x2f, char: \x30 */ - { 0x0b, 0x0840 }, /* Index: 0x30, char: \x31 */ - { 0x0b, 0x086c }, /* Index: 0x31, char: \x32 */ - { 0x0b, 0x0898 }, /* Index: 0x32, char: \x33 */ - { 0x0b, 0x08c4 }, /* Index: 0x33, char: \x34 */ - { 0x0b, 0x08f0 }, /* Index: 0x34, char: \x35 */ - { 0x0b, 0x091c }, /* Index: 0x35, char: \x36 */ - { 0x0b, 0x0948 }, /* Index: 0x36, char: \x37 */ - { 0x0b, 0x0974 }, /* Index: 0x37, char: \x38 */ - { 0x0b, 0x09a0 }, /* Index: 0x38, char: \x39 */ - { 0x0b, 0x09cc }, /* Index: 0x39, char: \x3a */ - { 0x0b, 0x09f8 }, /* Index: 0x3a, char: \x3b */ - { 0x0b, 0x0a24 }, /* Index: 0x3b, char: \x3c */ - { 0x0b, 0x0a50 }, /* Index: 0x3c, char: \x3d */ - { 0x0b, 0x0a7c }, /* Index: 0x3d, char: \x3e */ - { 0x0b, 0x0aa8 }, /* Index: 0x3e, char: \x3f */ - { 0x0b, 0x0ad4 }, /* Index: 0x3f, char: \x40 */ - { 0x0b, 0x0b00 }, /* Index: 0x40, char: \x41 */ - { 0x0b, 0x0b2c }, /* Index: 0x41, char: \x42 */ - { 0x0b, 0x0b58 }, /* Index: 0x42, char: \x43 */ - { 0x0b, 0x0b84 }, /* Index: 0x43, char: \x44 */ - { 0x0b, 0x0bb0 }, /* Index: 0x44, char: \x45 */ - { 0x0b, 0x0bdc }, /* Index: 0x45, char: \x46 */ - { 0x0b, 0x0c08 }, /* Index: 0x46, char: \x47 */ - { 0x0b, 0x0c34 }, /* Index: 0x47, char: \x48 */ - { 0x0b, 0x0c60 }, /* Index: 0x48, char: \x49 */ - { 0x0b, 0x0c8c }, /* Index: 0x49, char: \x4a */ - { 0x0b, 0x0cb8 }, /* Index: 0x4a, char: \x4b */ - { 0x0b, 0x0ce4 }, /* Index: 0x4b, char: \x4c */ - { 0x0b, 0x0d10 }, /* Index: 0x4c, char: \x4d */ - { 0x0b, 0x0d3c }, /* Index: 0x4d, char: \x4e */ - { 0x0b, 0x0d68 }, /* Index: 0x4e, char: \x4f */ - { 0x0b, 0x0d94 }, /* Index: 0x4f, char: \x50 */ - { 0x0b, 0x0dc0 }, /* Index: 0x50, char: \x51 */ - { 0x0b, 0x0dec }, /* Index: 0x51, char: \x52 */ - { 0x0b, 0x0e18 }, /* Index: 0x52, char: \x53 */ - { 0x0b, 0x0e44 }, /* Index: 0x53, char: \x54 */ - { 0x0b, 0x0e70 }, /* Index: 0x54, char: \x55 */ - { 0x0b, 0x0e9c }, /* Index: 0x55, char: \x56 */ - { 0x0b, 0x0ec8 }, /* Index: 0x56, char: \x57 */ - { 0x0b, 0x0ef4 }, /* Index: 0x57, char: \x58 */ - { 0x0b, 0x0f20 }, /* Index: 0x58, char: \x59 */ - { 0x0b, 0x0f4c }, /* Index: 0x59, char: \x5a */ - { 0x0b, 0x0f78 }, /* Index: 0x5a, char: \x5b */ - { 0x0b, 0x0fa4 }, /* Index: 0x5b, char: \x5c */ - { 0x0b, 0x0fd0 }, /* Index: 0x5c, char: \x5d */ - { 0x0b, 0x0ffc }, /* Index: 0x5d, char: \x5e */ - { 0x0b, 0x1028 }, /* Index: 0x5e, char: \x5f */ - { 0x0b, 0x1054 }, /* Index: 0x5f, char: \x60 */ - { 0x0b, 0x1080 }, /* Index: 0x60, char: \x61 */ - { 0x0b, 0x10ac }, /* Index: 0x61, char: \x62 */ - { 0x0b, 0x10d8 }, /* Index: 0x62, char: \x63 */ - { 0x0b, 0x1104 }, /* Index: 0x63, char: \x64 */ - { 0x0b, 0x1130 }, /* Index: 0x64, char: \x65 */ - { 0x0b, 0x115c }, /* Index: 0x65, char: \x66 */ - { 0x0b, 0x1188 }, /* Index: 0x66, char: \x67 */ - { 0x0b, 0x11b4 }, /* Index: 0x67, char: \x68 */ - { 0x0b, 0x11e0 }, /* Index: 0x68, char: \x69 */ - { 0x0b, 0x120c }, /* Index: 0x69, char: \x6a */ - { 0x0b, 0x1238 }, /* Index: 0x6a, char: \x6b */ - { 0x0b, 0x1264 }, /* Index: 0x6b, char: \x6c */ - { 0x0b, 0x1290 }, /* Index: 0x6c, char: \x6d */ - { 0x0b, 0x12bc }, /* Index: 0x6d, char: \x6e */ - { 0x0b, 0x12e8 }, /* Index: 0x6e, char: \x6f */ - { 0x0b, 0x1314 }, /* Index: 0x6f, char: \x70 */ - { 0x0b, 0x1340 }, /* Index: 0x70, char: \x71 */ - { 0x0b, 0x136c }, /* Index: 0x71, char: \x72 */ - { 0x0b, 0x1398 }, /* Index: 0x72, char: \x73 */ - { 0x0b, 0x13c4 }, /* Index: 0x73, char: \x74 */ - { 0x0b, 0x13f0 }, /* Index: 0x74, char: \x75 */ - { 0x0b, 0x141c }, /* Index: 0x75, char: \x76 */ - { 0x0b, 0x1448 }, /* Index: 0x76, char: \x77 */ - { 0x0b, 0x1474 }, /* Index: 0x77, char: \x78 */ - { 0x0b, 0x14a0 }, /* Index: 0x78, char: \x79 */ - { 0x0b, 0x14cc }, /* Index: 0x79, char: \x7a */ - { 0x0b, 0x14f8 }, /* Index: 0x7a, char: \x7b */ - { 0x0b, 0x1524 }, /* Index: 0x7b, char: \x7c */ - { 0x0b, 0x1550 }, /* Index: 0x7c, char: \x7d */ - { 0x0b, 0x157c }, /* Index: 0x7d, char: \x7e */ - { 0x0b, 0x15a8 }, /* Index: 0x7e, char: \x7f */ - { 0x0b, 0x15d4 }, /* Index: 0x7f, char: \x80 */ - { 0x0b, 0x1600 }, /* Index: 0x80, char: \x81 */ - { 0x0b, 0x162c }, /* Index: 0x81, char: \x82 */ - { 0x0b, 0x1658 }, /* Index: 0x82, char: \x83 */ - { 0x0b, 0x1684 }, /* Index: 0x83, char: \x84 */ - { 0x0b, 0x16b0 }, /* Index: 0x84, char: \x85 */ - { 0x0b, 0x16dc }, /* Index: 0x85, char: \x86 */ - { 0x0b, 0x1708 }, /* Index: 0x86, char: \x87 */ - { 0x0b, 0x1734 }, /* Index: 0x87, char: \x88 */ - { 0x0b, 0x1760 }, /* Index: 0x88, char: \x89 */ - { 0x0b, 0x178c }, /* Index: 0x89, char: \x8a */ - { 0x0b, 0x17b8 }, /* Index: 0x8a, char: \x8b */ - { 0x0b, 0x17e4 }, /* Index: 0x8b, char: \x8c */ - { 0x0b, 0x1810 }, /* Index: 0x8c, char: \x8d */ - { 0x0b, 0x183c }, /* Index: 0x8d, char: \x8e */ - { 0x0b, 0x1868 }, /* Index: 0x8e, char: \x8f */ - { 0x0b, 0x1894 }, /* Index: 0x8f, char: \x90 */ - { 0x0b, 0x18c0 }, /* Index: 0x90, char: \x91 */ - { 0x0b, 0x18ec }, /* Index: 0x91, char: \x92 */ - { 0x0b, 0x1918 }, /* Index: 0x92, char: \x93 */ - { 0x0b, 0x1944 }, /* Index: 0x93, char: \x94 */ - { 0x0b, 0x1970 }, /* Index: 0x94, char: \x95 */ - { 0x0b, 0x199c }, /* Index: 0x95, char: \x96 */ - { 0x0b, 0x19c8 }, /* Index: 0x96, char: \x97 */ - { 0x0b, 0x19f4 }, /* Index: 0x97, char: \x98 */ - { 0x0b, 0x1a20 }, /* Index: 0x98, char: \x99 */ - { 0x0b, 0x1a4c }, /* Index: 0x99, char: \x9a */ - { 0x0b, 0x1a78 }, /* Index: 0x9a, char: \x9b */ - { 0x0b, 0x1aa4 }, /* Index: 0x9b, char: \x9c */ - { 0x0b, 0x1ad0 }, /* Index: 0x9c, char: \x9d */ - { 0x0b, 0x1afc }, /* Index: 0x9d, char: \x9e */ - { 0x0b, 0x1b28 }, /* Index: 0x9e, char: \x9f */ - { 0x0b, 0x1b54 }, /* Index: 0x9f, char: \xa0 */ - { 0x0b, 0x1b80 }, /* Index: 0xa0, char: \xa1 */ - { 0x0b, 0x1bac }, /* Index: 0xa1, char: \xa2 */ - { 0x0b, 0x1bd8 }, /* Index: 0xa2, char: \xa3 */ - { 0x0b, 0x1c04 }, /* Index: 0xa3, char: \xa4 */ - { 0x0b, 0x1c30 }, /* Index: 0xa4, char: \xa5 */ - { 0x0b, 0x1c5c }, /* Index: 0xa5, char: \xa6 */ - { 0x0b, 0x1c88 }, /* Index: 0xa6, char: \xa7 */ - { 0x0b, 0x1cb4 }, /* Index: 0xa7, char: \xa8 */ - { 0x0b, 0x1ce0 }, /* Index: 0xa8, char: \xa9 */ - { 0x0b, 0x1d0c }, /* Index: 0xa9, char: \xaa */ - { 0x0b, 0x1d38 }, /* Index: 0xaa, char: \xab */ - { 0x0b, 0x1d64 }, /* Index: 0xab, char: \xac */ - { 0x0b, 0x1d90 }, /* Index: 0xac, char: \xad */ - { 0x0b, 0x1dbc }, /* Index: 0xad, char: \xae */ - { 0x0b, 0x1de8 }, /* Index: 0xae, char: \xaf */ - { 0x0b, 0x1e14 }, /* Index: 0xaf, char: \xb0 */ - { 0x0b, 0x1e40 }, /* Index: 0xb0, char: \xb1 */ - { 0x0b, 0x1e6c }, /* Index: 0xb1, char: \xb2 */ - { 0x0b, 0x1e98 }, /* Index: 0xb2, char: \xb3 */ - { 0x0b, 0x1ec4 }, /* Index: 0xb3, char: \xb4 */ - { 0x0b, 0x1ef0 }, /* Index: 0xb4, char: \xb5 */ - { 0x0b, 0x1f1c }, /* Index: 0xb5, char: \xb6 */ - { 0x0b, 0x1f48 }, /* Index: 0xb6, char: \xb7 */ - { 0x0b, 0x1f74 }, /* Index: 0xb7, char: \xb8 */ - { 0x0b, 0x1fa0 }, /* Index: 0xb8, char: \xb9 */ - { 0x0b, 0x1fcc }, /* Index: 0xb9, char: \xba */ - { 0x0b, 0x1ff8 }, /* Index: 0xba, char: \xbb */ - { 0x0b, 0x2024 }, /* Index: 0xbb, char: \xbc */ - { 0x0b, 0x2050 }, /* Index: 0xbc, char: \xbd */ - { 0x0b, 0x207c }, /* Index: 0xbd, char: \xbe */ - { 0x0b, 0x20a8 }, /* Index: 0xbe, char: \xbf */ - { 0x0b, 0x20d4 }, /* Index: 0xbf, char: \xc0 */ - { 0x0b, 0x2100 }, /* Index: 0xc0, char: \xc1 */ - { 0x0b, 0x212c }, /* Index: 0xc1, char: \xc2 */ - { 0x0b, 0x2158 }, /* Index: 0xc2, char: \xc3 */ - { 0x0b, 0x2184 }, /* Index: 0xc3, char: \xc4 */ - { 0x0b, 0x21b0 }, /* Index: 0xc4, char: \xc5 */ - { 0x0b, 0x21dc }, /* Index: 0xc5, char: \xc6 */ - { 0x0b, 0x2208 }, /* Index: 0xc6, char: \xc7 */ - { 0x0b, 0x2234 }, /* Index: 0xc7, char: \xc8 */ - { 0x0b, 0x2260 }, /* Index: 0xc8, char: \xc9 */ - { 0x0b, 0x228c }, /* Index: 0xc9, char: \xca */ - { 0x0b, 0x22b8 }, /* Index: 0xca, char: \xcb */ - { 0x0b, 0x22e4 }, /* Index: 0xcb, char: \xcc */ - { 0x0b, 0x2310 }, /* Index: 0xcc, char: \xcd */ - { 0x0b, 0x233c }, /* Index: 0xcd, char: \xce */ - { 0x0b, 0x2368 }, /* Index: 0xce, char: \xcf */ - { 0x0b, 0x2394 }, /* Index: 0xcf, char: \xd0 */ - { 0x0b, 0x23c0 }, /* Index: 0xd0, char: \xd1 */ - { 0x0b, 0x23ec }, /* Index: 0xd1, char: \xd2 */ - { 0x0b, 0x2418 }, /* Index: 0xd2, char: \xd3 */ - { 0x0b, 0x2444 }, /* Index: 0xd3, char: \xd4 */ - { 0x0b, 0x2470 }, /* Index: 0xd4, char: \xd5 */ - { 0x0b, 0x249c }, /* Index: 0xd5, char: \xd6 */ - { 0x0b, 0x24c8 }, /* Index: 0xd6, char: \xd7 */ - { 0x0b, 0x24f4 }, /* Index: 0xd7, char: \xd8 */ - { 0x0b, 0x2520 }, /* Index: 0xd8, char: \xd9 */ - { 0x0b, 0x254c }, /* Index: 0xd9, char: \xda */ - { 0x0b, 0x2578 }, /* Index: 0xda, char: \xdb */ - { 0x0b, 0x25a4 }, /* Index: 0xdb, char: \xdc */ - { 0x0b, 0x25d0 }, /* Index: 0xdc, char: \xdd */ - { 0x0b, 0x25fc }, /* Index: 0xdd, char: \xde */ - { 0x0b, 0x2628 }, /* Index: 0xde, char: \xdf */ - { 0x0b, 0x2654 }, /* Index: 0xdf, char: \xe0 */ - { 0x0b, 0x2680 }, /* Index: 0xe0, char: \xe1 */ - { 0x0b, 0x26ac }, /* Index: 0xe1, char: \xe2 */ - { 0x0b, 0x26d8 }, /* Index: 0xe2, char: \xe3 */ - { 0x0b, 0x2704 }, /* Index: 0xe3, char: \xe4 */ - { 0x0b, 0x2730 }, /* Index: 0xe4, char: \xe5 */ - { 0x0b, 0x275c }, /* Index: 0xe5, char: \xe6 */ - { 0x0b, 0x2788 }, /* Index: 0xe6, char: \xe7 */ - { 0x0b, 0x27b4 }, /* Index: 0xe7, char: \xe8 */ - { 0x0b, 0x27e0 }, /* Index: 0xe8, char: \xe9 */ - { 0x0b, 0x280c }, /* Index: 0xe9, char: \xea */ - { 0x0b, 0x2838 }, /* Index: 0xea, char: \xeb */ - { 0x0b, 0x2864 }, /* Index: 0xeb, char: \xec */ - { 0x0b, 0x2890 }, /* Index: 0xec, char: \xed */ - { 0x0b, 0x28bc }, /* Index: 0xed, char: \xee */ - { 0x0b, 0x28e8 }, /* Index: 0xee, char: \xef */ - { 0x0b, 0x2914 }, /* Index: 0xef, char: \xf0 */ - { 0x0b, 0x2940 }, /* Index: 0xf0, char: \xf1 */ - { 0x0b, 0x296c }, /* Index: 0xf1, char: \xf2 */ - { 0x0b, 0x2998 }, /* Index: 0xf2, char: \xf3 */ - { 0x0b, 0x29c4 }, /* Index: 0xf3, char: \xf4 */ - { 0x0b, 0x29f0 }, /* Index: 0xf4, char: \xf5 */ - { 0x0b, 0x2a1c }, /* Index: 0xf5, char: \xf6 */ - { 0x0b, 0x2a48 }, /* Index: 0xf6, char: \xf7 */ - { 0x0b, 0x2a74 }, /* Index: 0xf7, char: \xf8 */ - { 0x0b, 0x2aa0 }, /* Index: 0xf8, char: \xf9 */ - { 0x0b, 0x2acc }, /* Index: 0xf9, char: \xfa */ - { 0x0b, 0x2af8 }, /* Index: 0xfa, char: \xfb */ - { 0x0b, 0x2b24 }, /* Index: 0xfb, char: \xfc */ - { 0x0b, 0x2b50 }, /* Index: 0xfc, char: \xfd */ - { 0x0b, 0x2b7c }, /* Index: 0xfd, char: \xfe */ - { 0x0b, 0x2ba8 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_11x22_iso8859_1_info = -{ - .height = 22, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_11x22_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_11x22_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_11X22_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_12x24_iso8859_1.h b/extras/fonts/data/font_terminus_bold_12x24_iso8859_1.h deleted file mode 100644 index 4821b29..0000000 --- a/extras/fonts/data/font_terminus_bold_12x24_iso8859_1.h +++ /dev/null @@ -1,6919 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 12x24 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 02:35:39 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_12X24_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_12X24_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_bold_12x24_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x1f, 0x80, /* ...######....... */ - 0x3f, 0xc0, /* ..########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x1f, 0x80, /* ...######....... */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0030 */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - 0xaa, 0xa0, /* #.#.#.#.#.#..... */ - 0x55, 0x50, /* .#.#.#.#.#.#.... */ - - /* Index: 0x02, char: \x03, offset: 0x0060 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x7e, 0x00, /* .######......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x0090 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7e, 0x00, /* .######......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x78, 0x00, /* .####........... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0x80, /* .....####....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x00c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x00, /* ..####.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x66, 0x00, /* .##..##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0x80, /* .....####....... */ - 0x06, 0xc0, /* .....##.##...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x00f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7e, 0x00, /* .######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0x80, /* .....####....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0120 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x0150 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x7f, 0xe0, /* .##########..... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x76, 0x00, /* .###.##......... */ - 0x7e, 0x00, /* .######......... */ - 0x6e, 0x00, /* .##.###......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x01b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x01e0 */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x0210 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf0, /* .....#######.... */ - 0x07, 0xf0, /* .....#######.... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - - /* Index: 0x0d, char: \x0e, offset: 0x0270 */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0xf0, /* .....#######.... */ - 0x07, 0xf0, /* .....#######.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x02a0 */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - - /* Index: 0x0f, char: \x10, offset: 0x02d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x0330 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0360 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x0390 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x03c0 */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0xf0, /* .....#######.... */ - 0x07, 0xf0, /* .....#######.... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - - /* Index: 0x15, char: \x16, offset: 0x03f0 */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - - /* Index: 0x16, char: \x17, offset: 0x0420 */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x0450 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - - /* Index: 0x18, char: \x19, offset: 0x0480 */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - - /* Index: 0x19, char: \x1a, offset: 0x04b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x04e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x0510 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0570 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x7f, 0x00, /* .#######........ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x05a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x05d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0630 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0660 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x7f, 0xe0, /* .##########..... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x7f, 0xe0, /* .##########..... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x0690 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0xc0, /* .....##.##...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x06c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0xc0, /* ..###...##...... */ - 0x6c, 0xc0, /* .##.##..##...... */ - 0x6d, 0x80, /* .##.##.##....... */ - 0x39, 0x80, /* ..###..##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x1b, 0x60, /* ...##.##.##..... */ - 0x33, 0x60, /* ..##..##.##..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x06f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1e, 0x60, /* ...####..##..... */ - 0x33, 0x60, /* ..##..##.##..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0xc0, /* .##....###...... */ - 0x33, 0x60, /* ..##..##.##..... */ - 0x1e, 0x60, /* ...####..##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0720 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x0750 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x0780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x07b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x0e, 0x00, /* ....###......... */ - 0xff, 0xe0, /* ###########..... */ - 0x0e, 0x00, /* ....###......... */ - 0x1b, 0x00, /* ...##.##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x07e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x7f, 0xe0, /* .##########..... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0810 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0870 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x08a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x08d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x61, 0xe0, /* .##....####..... */ - 0x63, 0x60, /* .##...##.##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x6c, 0x60, /* .##.##...##..... */ - 0x78, 0x60, /* .####....##..... */ - 0x70, 0x60, /* .###.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1e, 0x00, /* ...####......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0930 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0960 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0990 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xe0, /* .......####..... */ - 0x03, 0x60, /* ......##.##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0x60, /* ....##...##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x09c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x09f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0a20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0a50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0ab0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0ae0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0b10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0b70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0ba0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0bd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc3, 0xe0, /* ##....#####..... */ - 0xc6, 0x60, /* ##...##..##..... */ - 0xcc, 0x60, /* ##..##...##..... */ - 0xcc, 0x60, /* ##..##...##..... */ - 0xcc, 0x60, /* ##..##...##..... */ - 0xcc, 0x60, /* ##..##...##..... */ - 0xcc, 0x60, /* ##..##...##..... */ - 0xc6, 0x60, /* ##...##..##..... */ - 0xc3, 0xe0, /* ##....#####..... */ - 0xc0, 0x00, /* ##.............. */ - 0x60, 0x00, /* .##............. */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0c30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0c60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x0c90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x0cf0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x0d20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0xe0, /* .##...#####..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x0d50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0db0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x0de0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x63, 0x00, /* .##...##........ */ - 0x66, 0x00, /* .##..##......... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x0e10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x80, 0x20, /* #.........#..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xe0, 0xe0, /* ###.....###..... */ - 0xf1, 0xe0, /* ####...####..... */ - 0xdb, 0x60, /* ##.##.##.##..... */ - 0xce, 0x60, /* ##..###..##..... */ - 0xc4, 0x60, /* ##...#...##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0e70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x70, 0x60, /* .###.....##..... */ - 0x78, 0x60, /* .####....##..... */ - 0x6c, 0x60, /* .##.##...##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x63, 0x60, /* .##...##.##..... */ - 0x61, 0xe0, /* .##....####..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0ea0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x0ed0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x0f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x33, 0xc0, /* ..##..####...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x0f30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x78, 0x00, /* .####........... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x63, 0x00, /* .##...##........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x0f60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x00, /* ..##............ */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x0f90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x0ff0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x1020 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0xc4, 0x60, /* ##...#...##..... */ - 0xce, 0x60, /* ##..###..##..... */ - 0xdb, 0x60, /* ##.##.##.##..... */ - 0xf1, 0xe0, /* ####...####..... */ - 0xe0, 0xe0, /* ###.....###..... */ - 0xc0, 0x60, /* ##.......##..... */ - 0x80, 0x20, /* #.........#..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x1050 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x10b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x10e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x1110 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1170 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x11a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x11d0 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1230 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1260 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x1290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x12c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x12f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xe0, /* ......#####..... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1320 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x1350 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x1380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x13b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x13e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x36, 0x00, /* ..##.##......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1410 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x1440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x66, 0xc0, /* .##..##.##...... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x1470 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x14a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x14d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x1530 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x67, 0xe0, /* .##..######..... */ - 0x6c, 0x00, /* .##.##.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1560 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1590 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x7f, 0x80, /* .########....... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x15c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x15f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1620 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1650 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x16b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x16e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x38, 0x00, /* ..###........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1710 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x80, /* ......###....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1770 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x60, /* ..####...##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x63, 0xc0, /* .##...####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x17a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x17d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x1830 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x1860 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x1890 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x18f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x1920 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x1950 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x1980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x19b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x19e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x1a10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x1a70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x1aa0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x1ad0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x1b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x1b30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x1b60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x1b90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x1bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x1bf0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x1c20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x1c50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x1c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x1cb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x1ce0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x1d10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x1d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x1d70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x1da0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x1dd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x1e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x1e30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x00, /* .##..##......... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x1e60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x7f, 0x00, /* .#######........ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x1e90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xc0, 0x60, /* ##.......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0xc0, 0x60, /* ##.......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x1ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x1ef0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x1f20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x1e, 0x00, /* ...####......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x1f50 */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x40, /* .#.......#...... */ - 0x9f, 0x20, /* #..#####..#..... */ - 0xb1, 0xa0, /* #.##...##.#..... */ - 0xb1, 0xa0, /* #.##...##.#..... */ - 0xb0, 0x20, /* #.##......#..... */ - 0xb0, 0x20, /* #.##......#..... */ - 0xb1, 0xa0, /* #.##...##.#..... */ - 0xb1, 0xa0, /* #.##...##.#..... */ - 0x9f, 0x20, /* #..#####..#..... */ - 0x40, 0x40, /* .#.......#...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x1fb0 */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x1fe0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x66, 0x00, /* .##..##......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2010 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x2040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x2070 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x40, 0x40, /* .#.......#...... */ - 0xbf, 0x20, /* #.######..#..... */ - 0xb1, 0xa0, /* #.##...##.#..... */ - 0xb1, 0xa0, /* #.##...##.#..... */ - 0xb1, 0xa0, /* #.##...##.#..... */ - 0xbf, 0x20, /* #.######..#..... */ - 0xb6, 0x20, /* #.##.##...#..... */ - 0xb3, 0x20, /* #.##..##..#..... */ - 0xb1, 0xa0, /* #.##...##.#..... */ - 0x40, 0x40, /* .#.......#...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x20a0 */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x20d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x2100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x7f, 0xe0, /* .##########..... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x2130 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x2160 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2190 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x21c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x61, 0xe0, /* .##....####..... */ - 0x7f, 0x60, /* .#######.##..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb5, char: \xb6, offset: 0x21f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x3e, 0x60, /* ..#####..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x06, 0x60, /* .....##..##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x2220 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x2250 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb8, char: \xb9, offset: 0x2280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x22b0 */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x00, /* ...#####........ */ - 0x31, 0x80, /* ..##...##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x31, 0x80, /* ..##...##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x22e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xcc, 0x00, /* ##..##.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x33, 0x00, /* ..##..##........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x33, 0x00, /* ..##..##........ */ - 0x66, 0x00, /* .##..##......... */ - 0xcc, 0x00, /* ##..##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x2310 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x20, /* ....##....#..... */ - 0x0c, 0x60, /* ....##...##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0xe0, /* ....##..###..... */ - 0x19, 0xe0, /* ...##..####..... */ - 0x33, 0x60, /* ..##..##.##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x47, 0xe0, /* .#...######..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x0c, 0x20, /* ....##....#..... */ - 0x0c, 0x60, /* ....##...##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x1b, 0xc0, /* ...##.####...... */ - 0x36, 0x60, /* ..##.##..##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x40, 0xc0, /* .#......##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x2370 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x00, /* ..####.......... */ - 0x66, 0x00, /* .##..##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x06, 0x20, /* .....##...#..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x3c, 0xc0, /* ..####..##...... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x60, /* .....##..##..... */ - 0x0c, 0xe0, /* ....##..###..... */ - 0x19, 0xe0, /* ...##..####..... */ - 0x33, 0x60, /* ..##..##.##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x47, 0xe0, /* .#...######..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x23a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x23d0 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x2400 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x2430 */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x2460 */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x2490 */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x24c0 */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x24f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x63, 0x00, /* .##...##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xff, 0xf0, /* ############.... */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0xf0, /* ##....######.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x2520 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x2550 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x2580 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x25b0 */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x25e0 */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x2610 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x2640 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x2670 */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x26a0 */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x26d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0xfe, 0x60, /* #######..##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x2700 */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x70, 0x60, /* .###.....##..... */ - 0x78, 0x60, /* .####....##..... */ - 0x6c, 0x60, /* .##.##...##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x63, 0x60, /* .##...##.##..... */ - 0x61, 0xe0, /* .##....####..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x2730 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x2760 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x2790 */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x27c0 */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x27f0 */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x2820 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x2850 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x61, 0xe0, /* .##....####..... */ - 0x63, 0x60, /* .##...##.##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x6c, 0x60, /* .##.##...##..... */ - 0x78, 0x60, /* .####....##..... */ - 0x70, 0x60, /* .###.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0xe0, 0x60, /* ###......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x2880 */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x28b0 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x28e0 */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x2910 */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x2940 */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x2970 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x29a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x61, 0x80, /* .##....##....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x70, 0x60, /* .###.....##..... */ - 0x68, 0xc0, /* .##.#...##...... */ - 0x6f, 0x80, /* .##.#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x29d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x2a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x2a30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x2a60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x2a90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x2ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x0f, 0x00, /* ....####........ */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x2af0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7b, 0xe0, /* .####.#####..... */ - 0x0e, 0x30, /* ....###...##.... */ - 0x06, 0x30, /* .....##...##.... */ - 0x06, 0x30, /* .....##...##.... */ - 0x7e, 0x30, /* .######...##.... */ - 0xc7, 0xf0, /* ##...#######.... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc6, 0x00, /* ##...##......... */ - 0xc7, 0x30, /* ##...###..##.... */ - 0x7d, 0xe0, /* .#####.####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x2b20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x2b50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x2b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x2bb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x2be0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x2c10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x2c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x2c70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x2ca0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x00, /* ...####......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x2cd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x36, 0x00, /* ..##.##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x36, 0x00, /* ..##.##......... */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x2d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x2d30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x2d60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x2d90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x2dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0xc0, /* ...###..##...... */ - 0x36, 0xc0, /* ..##.##.##...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x2df0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x80, /* ...######....... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x2e20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x2e50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xa0, /* ...######.#..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x61, 0xe0, /* .##....####..... */ - 0x63, 0x60, /* .##...##.##..... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x6c, 0x60, /* .##.##...##..... */ - 0x78, 0x60, /* .####....##..... */ - 0x70, 0x60, /* .###.....##..... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x5f, 0x80, /* .#.######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x2e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x2eb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x2ee0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x0f, 0x00, /* ....####........ */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x2f10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x2f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x2f70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x2fa0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x19, 0x80, /* ...##..##....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_bold_12x24_iso8859_1_descriptors[] = { - { 0x0c, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0c, 0x0030 }, /* Index: 0x01, char: \x02 */ - { 0x0c, 0x0060 }, /* Index: 0x02, char: \x03 */ - { 0x0c, 0x0090 }, /* Index: 0x03, char: \x04 */ - { 0x0c, 0x00c0 }, /* Index: 0x04, char: \x05 */ - { 0x0c, 0x00f0 }, /* Index: 0x05, char: \x06 */ - { 0x0c, 0x0120 }, /* Index: 0x06, char: \x07 */ - { 0x0c, 0x0150 }, /* Index: 0x07, char: \x08 */ - { 0x0c, 0x0180 }, /* Index: 0x08, char: \x09 */ - { 0x0c, 0x01b0 }, /* Index: 0x09, char: \x0a */ - { 0x0c, 0x01e0 }, /* Index: 0x0a, char: \x0b */ - { 0x0c, 0x0210 }, /* Index: 0x0b, char: \x0c */ - { 0x0c, 0x0240 }, /* Index: 0x0c, char: \x0d */ - { 0x0c, 0x0270 }, /* Index: 0x0d, char: \x0e */ - { 0x0c, 0x02a0 }, /* Index: 0x0e, char: \x0f */ - { 0x0c, 0x02d0 }, /* Index: 0x0f, char: \x10 */ - { 0x0c, 0x0300 }, /* Index: 0x10, char: \x11 */ - { 0x0c, 0x0330 }, /* Index: 0x11, char: \x12 */ - { 0x0c, 0x0360 }, /* Index: 0x12, char: \x13 */ - { 0x0c, 0x0390 }, /* Index: 0x13, char: \x14 */ - { 0x0c, 0x03c0 }, /* Index: 0x14, char: \x15 */ - { 0x0c, 0x03f0 }, /* Index: 0x15, char: \x16 */ - { 0x0c, 0x0420 }, /* Index: 0x16, char: \x17 */ - { 0x0c, 0x0450 }, /* Index: 0x17, char: \x18 */ - { 0x0c, 0x0480 }, /* Index: 0x18, char: \x19 */ - { 0x0c, 0x04b0 }, /* Index: 0x19, char: \x1a */ - { 0x0c, 0x04e0 }, /* Index: 0x1a, char: \x1b */ - { 0x0c, 0x0510 }, /* Index: 0x1b, char: \x1c */ - { 0x0c, 0x0540 }, /* Index: 0x1c, char: \x1d */ - { 0x0c, 0x0570 }, /* Index: 0x1d, char: \x1e */ - { 0x0c, 0x05a0 }, /* Index: 0x1e, char: \x1f */ - { 0x0c, 0x05d0 }, /* Index: 0x1f, char: \x20 */ - { 0x0c, 0x0600 }, /* Index: 0x20, char: \x21 */ - { 0x0c, 0x0630 }, /* Index: 0x21, char: \x22 */ - { 0x0c, 0x0660 }, /* Index: 0x22, char: \x23 */ - { 0x0c, 0x0690 }, /* Index: 0x23, char: \x24 */ - { 0x0c, 0x06c0 }, /* Index: 0x24, char: \x25 */ - { 0x0c, 0x06f0 }, /* Index: 0x25, char: \x26 */ - { 0x0c, 0x0720 }, /* Index: 0x26, char: \x27 */ - { 0x0c, 0x0750 }, /* Index: 0x27, char: \x28 */ - { 0x0c, 0x0780 }, /* Index: 0x28, char: \x29 */ - { 0x0c, 0x07b0 }, /* Index: 0x29, char: \x2a */ - { 0x0c, 0x07e0 }, /* Index: 0x2a, char: \x2b */ - { 0x0c, 0x0810 }, /* Index: 0x2b, char: \x2c */ - { 0x0c, 0x0840 }, /* Index: 0x2c, char: \x2d */ - { 0x0c, 0x0870 }, /* Index: 0x2d, char: \x2e */ - { 0x0c, 0x08a0 }, /* Index: 0x2e, char: \x2f */ - { 0x0c, 0x08d0 }, /* Index: 0x2f, char: \x30 */ - { 0x0c, 0x0900 }, /* Index: 0x30, char: \x31 */ - { 0x0c, 0x0930 }, /* Index: 0x31, char: \x32 */ - { 0x0c, 0x0960 }, /* Index: 0x32, char: \x33 */ - { 0x0c, 0x0990 }, /* Index: 0x33, char: \x34 */ - { 0x0c, 0x09c0 }, /* Index: 0x34, char: \x35 */ - { 0x0c, 0x09f0 }, /* Index: 0x35, char: \x36 */ - { 0x0c, 0x0a20 }, /* Index: 0x36, char: \x37 */ - { 0x0c, 0x0a50 }, /* Index: 0x37, char: \x38 */ - { 0x0c, 0x0a80 }, /* Index: 0x38, char: \x39 */ - { 0x0c, 0x0ab0 }, /* Index: 0x39, char: \x3a */ - { 0x0c, 0x0ae0 }, /* Index: 0x3a, char: \x3b */ - { 0x0c, 0x0b10 }, /* Index: 0x3b, char: \x3c */ - { 0x0c, 0x0b40 }, /* Index: 0x3c, char: \x3d */ - { 0x0c, 0x0b70 }, /* Index: 0x3d, char: \x3e */ - { 0x0c, 0x0ba0 }, /* Index: 0x3e, char: \x3f */ - { 0x0c, 0x0bd0 }, /* Index: 0x3f, char: \x40 */ - { 0x0c, 0x0c00 }, /* Index: 0x40, char: \x41 */ - { 0x0c, 0x0c30 }, /* Index: 0x41, char: \x42 */ - { 0x0c, 0x0c60 }, /* Index: 0x42, char: \x43 */ - { 0x0c, 0x0c90 }, /* Index: 0x43, char: \x44 */ - { 0x0c, 0x0cc0 }, /* Index: 0x44, char: \x45 */ - { 0x0c, 0x0cf0 }, /* Index: 0x45, char: \x46 */ - { 0x0c, 0x0d20 }, /* Index: 0x46, char: \x47 */ - { 0x0c, 0x0d50 }, /* Index: 0x47, char: \x48 */ - { 0x0c, 0x0d80 }, /* Index: 0x48, char: \x49 */ - { 0x0c, 0x0db0 }, /* Index: 0x49, char: \x4a */ - { 0x0c, 0x0de0 }, /* Index: 0x4a, char: \x4b */ - { 0x0c, 0x0e10 }, /* Index: 0x4b, char: \x4c */ - { 0x0c, 0x0e40 }, /* Index: 0x4c, char: \x4d */ - { 0x0c, 0x0e70 }, /* Index: 0x4d, char: \x4e */ - { 0x0c, 0x0ea0 }, /* Index: 0x4e, char: \x4f */ - { 0x0c, 0x0ed0 }, /* Index: 0x4f, char: \x50 */ - { 0x0c, 0x0f00 }, /* Index: 0x50, char: \x51 */ - { 0x0c, 0x0f30 }, /* Index: 0x51, char: \x52 */ - { 0x0c, 0x0f60 }, /* Index: 0x52, char: \x53 */ - { 0x0c, 0x0f90 }, /* Index: 0x53, char: \x54 */ - { 0x0c, 0x0fc0 }, /* Index: 0x54, char: \x55 */ - { 0x0c, 0x0ff0 }, /* Index: 0x55, char: \x56 */ - { 0x0c, 0x1020 }, /* Index: 0x56, char: \x57 */ - { 0x0c, 0x1050 }, /* Index: 0x57, char: \x58 */ - { 0x0c, 0x1080 }, /* Index: 0x58, char: \x59 */ - { 0x0c, 0x10b0 }, /* Index: 0x59, char: \x5a */ - { 0x0c, 0x10e0 }, /* Index: 0x5a, char: \x5b */ - { 0x0c, 0x1110 }, /* Index: 0x5b, char: \x5c */ - { 0x0c, 0x1140 }, /* Index: 0x5c, char: \x5d */ - { 0x0c, 0x1170 }, /* Index: 0x5d, char: \x5e */ - { 0x0c, 0x11a0 }, /* Index: 0x5e, char: \x5f */ - { 0x0c, 0x11d0 }, /* Index: 0x5f, char: \x60 */ - { 0x0c, 0x1200 }, /* Index: 0x60, char: \x61 */ - { 0x0c, 0x1230 }, /* Index: 0x61, char: \x62 */ - { 0x0c, 0x1260 }, /* Index: 0x62, char: \x63 */ - { 0x0c, 0x1290 }, /* Index: 0x63, char: \x64 */ - { 0x0c, 0x12c0 }, /* Index: 0x64, char: \x65 */ - { 0x0c, 0x12f0 }, /* Index: 0x65, char: \x66 */ - { 0x0c, 0x1320 }, /* Index: 0x66, char: \x67 */ - { 0x0c, 0x1350 }, /* Index: 0x67, char: \x68 */ - { 0x0c, 0x1380 }, /* Index: 0x68, char: \x69 */ - { 0x0c, 0x13b0 }, /* Index: 0x69, char: \x6a */ - { 0x0c, 0x13e0 }, /* Index: 0x6a, char: \x6b */ - { 0x0c, 0x1410 }, /* Index: 0x6b, char: \x6c */ - { 0x0c, 0x1440 }, /* Index: 0x6c, char: \x6d */ - { 0x0c, 0x1470 }, /* Index: 0x6d, char: \x6e */ - { 0x0c, 0x14a0 }, /* Index: 0x6e, char: \x6f */ - { 0x0c, 0x14d0 }, /* Index: 0x6f, char: \x70 */ - { 0x0c, 0x1500 }, /* Index: 0x70, char: \x71 */ - { 0x0c, 0x1530 }, /* Index: 0x71, char: \x72 */ - { 0x0c, 0x1560 }, /* Index: 0x72, char: \x73 */ - { 0x0c, 0x1590 }, /* Index: 0x73, char: \x74 */ - { 0x0c, 0x15c0 }, /* Index: 0x74, char: \x75 */ - { 0x0c, 0x15f0 }, /* Index: 0x75, char: \x76 */ - { 0x0c, 0x1620 }, /* Index: 0x76, char: \x77 */ - { 0x0c, 0x1650 }, /* Index: 0x77, char: \x78 */ - { 0x0c, 0x1680 }, /* Index: 0x78, char: \x79 */ - { 0x0c, 0x16b0 }, /* Index: 0x79, char: \x7a */ - { 0x0c, 0x16e0 }, /* Index: 0x7a, char: \x7b */ - { 0x0c, 0x1710 }, /* Index: 0x7b, char: \x7c */ - { 0x0c, 0x1740 }, /* Index: 0x7c, char: \x7d */ - { 0x0c, 0x1770 }, /* Index: 0x7d, char: \x7e */ - { 0x0c, 0x17a0 }, /* Index: 0x7e, char: \x7f */ - { 0x0c, 0x17d0 }, /* Index: 0x7f, char: \x80 */ - { 0x0c, 0x1800 }, /* Index: 0x80, char: \x81 */ - { 0x0c, 0x1830 }, /* Index: 0x81, char: \x82 */ - { 0x0c, 0x1860 }, /* Index: 0x82, char: \x83 */ - { 0x0c, 0x1890 }, /* Index: 0x83, char: \x84 */ - { 0x0c, 0x18c0 }, /* Index: 0x84, char: \x85 */ - { 0x0c, 0x18f0 }, /* Index: 0x85, char: \x86 */ - { 0x0c, 0x1920 }, /* Index: 0x86, char: \x87 */ - { 0x0c, 0x1950 }, /* Index: 0x87, char: \x88 */ - { 0x0c, 0x1980 }, /* Index: 0x88, char: \x89 */ - { 0x0c, 0x19b0 }, /* Index: 0x89, char: \x8a */ - { 0x0c, 0x19e0 }, /* Index: 0x8a, char: \x8b */ - { 0x0c, 0x1a10 }, /* Index: 0x8b, char: \x8c */ - { 0x0c, 0x1a40 }, /* Index: 0x8c, char: \x8d */ - { 0x0c, 0x1a70 }, /* Index: 0x8d, char: \x8e */ - { 0x0c, 0x1aa0 }, /* Index: 0x8e, char: \x8f */ - { 0x0c, 0x1ad0 }, /* Index: 0x8f, char: \x90 */ - { 0x0c, 0x1b00 }, /* Index: 0x90, char: \x91 */ - { 0x0c, 0x1b30 }, /* Index: 0x91, char: \x92 */ - { 0x0c, 0x1b60 }, /* Index: 0x92, char: \x93 */ - { 0x0c, 0x1b90 }, /* Index: 0x93, char: \x94 */ - { 0x0c, 0x1bc0 }, /* Index: 0x94, char: \x95 */ - { 0x0c, 0x1bf0 }, /* Index: 0x95, char: \x96 */ - { 0x0c, 0x1c20 }, /* Index: 0x96, char: \x97 */ - { 0x0c, 0x1c50 }, /* Index: 0x97, char: \x98 */ - { 0x0c, 0x1c80 }, /* Index: 0x98, char: \x99 */ - { 0x0c, 0x1cb0 }, /* Index: 0x99, char: \x9a */ - { 0x0c, 0x1ce0 }, /* Index: 0x9a, char: \x9b */ - { 0x0c, 0x1d10 }, /* Index: 0x9b, char: \x9c */ - { 0x0c, 0x1d40 }, /* Index: 0x9c, char: \x9d */ - { 0x0c, 0x1d70 }, /* Index: 0x9d, char: \x9e */ - { 0x0c, 0x1da0 }, /* Index: 0x9e, char: \x9f */ - { 0x0c, 0x1dd0 }, /* Index: 0x9f, char: \xa0 */ - { 0x0c, 0x1e00 }, /* Index: 0xa0, char: \xa1 */ - { 0x0c, 0x1e30 }, /* Index: 0xa1, char: \xa2 */ - { 0x0c, 0x1e60 }, /* Index: 0xa2, char: \xa3 */ - { 0x0c, 0x1e90 }, /* Index: 0xa3, char: \xa4 */ - { 0x0c, 0x1ec0 }, /* Index: 0xa4, char: \xa5 */ - { 0x0c, 0x1ef0 }, /* Index: 0xa5, char: \xa6 */ - { 0x0c, 0x1f20 }, /* Index: 0xa6, char: \xa7 */ - { 0x0c, 0x1f50 }, /* Index: 0xa7, char: \xa8 */ - { 0x0c, 0x1f80 }, /* Index: 0xa8, char: \xa9 */ - { 0x0c, 0x1fb0 }, /* Index: 0xa9, char: \xaa */ - { 0x0c, 0x1fe0 }, /* Index: 0xaa, char: \xab */ - { 0x0c, 0x2010 }, /* Index: 0xab, char: \xac */ - { 0x0c, 0x2040 }, /* Index: 0xac, char: \xad */ - { 0x0c, 0x2070 }, /* Index: 0xad, char: \xae */ - { 0x0c, 0x20a0 }, /* Index: 0xae, char: \xaf */ - { 0x0c, 0x20d0 }, /* Index: 0xaf, char: \xb0 */ - { 0x0c, 0x2100 }, /* Index: 0xb0, char: \xb1 */ - { 0x0c, 0x2130 }, /* Index: 0xb1, char: \xb2 */ - { 0x0c, 0x2160 }, /* Index: 0xb2, char: \xb3 */ - { 0x0c, 0x2190 }, /* Index: 0xb3, char: \xb4 */ - { 0x0c, 0x21c0 }, /* Index: 0xb4, char: \xb5 */ - { 0x0c, 0x21f0 }, /* Index: 0xb5, char: \xb6 */ - { 0x0c, 0x2220 }, /* Index: 0xb6, char: \xb7 */ - { 0x0c, 0x2250 }, /* Index: 0xb7, char: \xb8 */ - { 0x0c, 0x2280 }, /* Index: 0xb8, char: \xb9 */ - { 0x0c, 0x22b0 }, /* Index: 0xb9, char: \xba */ - { 0x0c, 0x22e0 }, /* Index: 0xba, char: \xbb */ - { 0x0c, 0x2310 }, /* Index: 0xbb, char: \xbc */ - { 0x0c, 0x2340 }, /* Index: 0xbc, char: \xbd */ - { 0x0c, 0x2370 }, /* Index: 0xbd, char: \xbe */ - { 0x0c, 0x23a0 }, /* Index: 0xbe, char: \xbf */ - { 0x0c, 0x23d0 }, /* Index: 0xbf, char: \xc0 */ - { 0x0c, 0x2400 }, /* Index: 0xc0, char: \xc1 */ - { 0x0c, 0x2430 }, /* Index: 0xc1, char: \xc2 */ - { 0x0c, 0x2460 }, /* Index: 0xc2, char: \xc3 */ - { 0x0c, 0x2490 }, /* Index: 0xc3, char: \xc4 */ - { 0x0c, 0x24c0 }, /* Index: 0xc4, char: \xc5 */ - { 0x0c, 0x24f0 }, /* Index: 0xc5, char: \xc6 */ - { 0x0c, 0x2520 }, /* Index: 0xc6, char: \xc7 */ - { 0x0c, 0x2550 }, /* Index: 0xc7, char: \xc8 */ - { 0x0c, 0x2580 }, /* Index: 0xc8, char: \xc9 */ - { 0x0c, 0x25b0 }, /* Index: 0xc9, char: \xca */ - { 0x0c, 0x25e0 }, /* Index: 0xca, char: \xcb */ - { 0x0c, 0x2610 }, /* Index: 0xcb, char: \xcc */ - { 0x0c, 0x2640 }, /* Index: 0xcc, char: \xcd */ - { 0x0c, 0x2670 }, /* Index: 0xcd, char: \xce */ - { 0x0c, 0x26a0 }, /* Index: 0xce, char: \xcf */ - { 0x0c, 0x26d0 }, /* Index: 0xcf, char: \xd0 */ - { 0x0c, 0x2700 }, /* Index: 0xd0, char: \xd1 */ - { 0x0c, 0x2730 }, /* Index: 0xd1, char: \xd2 */ - { 0x0c, 0x2760 }, /* Index: 0xd2, char: \xd3 */ - { 0x0c, 0x2790 }, /* Index: 0xd3, char: \xd4 */ - { 0x0c, 0x27c0 }, /* Index: 0xd4, char: \xd5 */ - { 0x0c, 0x27f0 }, /* Index: 0xd5, char: \xd6 */ - { 0x0c, 0x2820 }, /* Index: 0xd6, char: \xd7 */ - { 0x0c, 0x2850 }, /* Index: 0xd7, char: \xd8 */ - { 0x0c, 0x2880 }, /* Index: 0xd8, char: \xd9 */ - { 0x0c, 0x28b0 }, /* Index: 0xd9, char: \xda */ - { 0x0c, 0x28e0 }, /* Index: 0xda, char: \xdb */ - { 0x0c, 0x2910 }, /* Index: 0xdb, char: \xdc */ - { 0x0c, 0x2940 }, /* Index: 0xdc, char: \xdd */ - { 0x0c, 0x2970 }, /* Index: 0xdd, char: \xde */ - { 0x0c, 0x29a0 }, /* Index: 0xde, char: \xdf */ - { 0x0c, 0x29d0 }, /* Index: 0xdf, char: \xe0 */ - { 0x0c, 0x2a00 }, /* Index: 0xe0, char: \xe1 */ - { 0x0c, 0x2a30 }, /* Index: 0xe1, char: \xe2 */ - { 0x0c, 0x2a60 }, /* Index: 0xe2, char: \xe3 */ - { 0x0c, 0x2a90 }, /* Index: 0xe3, char: \xe4 */ - { 0x0c, 0x2ac0 }, /* Index: 0xe4, char: \xe5 */ - { 0x0c, 0x2af0 }, /* Index: 0xe5, char: \xe6 */ - { 0x0c, 0x2b20 }, /* Index: 0xe6, char: \xe7 */ - { 0x0c, 0x2b50 }, /* Index: 0xe7, char: \xe8 */ - { 0x0c, 0x2b80 }, /* Index: 0xe8, char: \xe9 */ - { 0x0c, 0x2bb0 }, /* Index: 0xe9, char: \xea */ - { 0x0c, 0x2be0 }, /* Index: 0xea, char: \xeb */ - { 0x0c, 0x2c10 }, /* Index: 0xeb, char: \xec */ - { 0x0c, 0x2c40 }, /* Index: 0xec, char: \xed */ - { 0x0c, 0x2c70 }, /* Index: 0xed, char: \xee */ - { 0x0c, 0x2ca0 }, /* Index: 0xee, char: \xef */ - { 0x0c, 0x2cd0 }, /* Index: 0xef, char: \xf0 */ - { 0x0c, 0x2d00 }, /* Index: 0xf0, char: \xf1 */ - { 0x0c, 0x2d30 }, /* Index: 0xf1, char: \xf2 */ - { 0x0c, 0x2d60 }, /* Index: 0xf2, char: \xf3 */ - { 0x0c, 0x2d90 }, /* Index: 0xf3, char: \xf4 */ - { 0x0c, 0x2dc0 }, /* Index: 0xf4, char: \xf5 */ - { 0x0c, 0x2df0 }, /* Index: 0xf5, char: \xf6 */ - { 0x0c, 0x2e20 }, /* Index: 0xf6, char: \xf7 */ - { 0x0c, 0x2e50 }, /* Index: 0xf7, char: \xf8 */ - { 0x0c, 0x2e80 }, /* Index: 0xf8, char: \xf9 */ - { 0x0c, 0x2eb0 }, /* Index: 0xf9, char: \xfa */ - { 0x0c, 0x2ee0 }, /* Index: 0xfa, char: \xfb */ - { 0x0c, 0x2f10 }, /* Index: 0xfb, char: \xfc */ - { 0x0c, 0x2f40 }, /* Index: 0xfc, char: \xfd */ - { 0x0c, 0x2f70 }, /* Index: 0xfd, char: \xfe */ - { 0x0c, 0x2fa0 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_12x24_iso8859_1_info = -{ - .height = 24, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_12x24_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_12x24_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_12X24_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_14x28_iso8859_1.h b/extras/fonts/data/font_terminus_bold_14x28_iso8859_1.h deleted file mode 100644 index 3c8232e..0000000 --- a/extras/fonts/data/font_terminus_bold_14x28_iso8859_1.h +++ /dev/null @@ -1,7939 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 14x28 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 02:37:16 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_14X28_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_14X28_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_bold_14x28_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0xff, 0xf8, /* #############... */ - 0xff, 0xf8, /* #############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0038 */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - - /* Index: 0x02, char: \x03, offset: 0x0070 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0x00, /* .#######........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf8, /* .....########... */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x00a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x00e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x7f, 0x00, /* .#######........ */ - 0x63, 0x00, /* .##...##........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0x00, /* .##...##........ */ - 0x7f, 0x00, /* .#######........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x30, /* ......##..##.... */ - 0x03, 0x18, /* ......##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x0118 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0150 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x0188 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x01c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x73, 0x00, /* .###..##........ */ - 0x7b, 0x00, /* .####.##........ */ - 0x6f, 0x00, /* .##.####........ */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x01f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0230 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x0268 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0c, char: \x0d, offset: 0x02a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0d, char: \x0e, offset: 0x02d8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0310 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0f, char: \x10, offset: 0x0348 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x03b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x03f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x0428 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0460 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x15, char: \x16, offset: 0x0498 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x16, char: \x17, offset: 0x04d0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x0508 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x18, char: \x19, offset: 0x0540 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x19, char: \x1a, offset: 0x0578 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x05b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x05e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0620 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0658 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0xc0, /* ....######...... */ - 0x1c, 0x60, /* ...###...##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x80, /* ..#######....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0690 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x06c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0738 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0770 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x07a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x73, 0x38, /* .###..##..###... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x73, 0x00, /* .###..##........ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x38, /* ......##..###... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x38, /* .###..##..###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x07e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x30, /* ..####....##.... */ - 0x7e, 0x30, /* .######...##.... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x7e, 0x60, /* .######..##..... */ - 0x3c, 0xc0, /* ..####..##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0xf0, /* ....##..####.... */ - 0x19, 0xf8, /* ...##..######... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x31, 0xf8, /* ..##...######... */ - 0x30, 0xf0, /* ..##....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0818 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x1f, 0x80, /* ...######....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x1f, 0x80, /* ...######....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0x18, /* ...#####...##... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x71, 0xf0, /* .###...#####.... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x71, 0xf0, /* .###...#####.... */ - 0x3f, 0xb8, /* ..#######.###... */ - 0x1f, 0x18, /* ...#####...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0850 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x0888 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x08c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x08f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0930 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0968 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x09a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x09d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0a10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0a48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x00, /* ....####........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0ab8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0af0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0b28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0xb0, /* ......###.##.... */ - 0x07, 0x30, /* .....###..##.... */ - 0x0e, 0x30, /* ....###...##.... */ - 0x1c, 0x30, /* ...###....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0b60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0b98 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0bd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0c08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0c78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0cb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0ce8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0d20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0d58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0d90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0dc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x38, /* .###......###... */ - 0x60, 0x18, /* .##........##... */ - 0x61, 0xf8, /* .##....######... */ - 0x63, 0xf8, /* .##...#######... */ - 0x67, 0x18, /* .##..###...##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x67, 0x18, /* .##..###...##... */ - 0x63, 0xf8, /* .##...#######... */ - 0x61, 0xe8, /* .##....####.#... */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x00, /* .###............ */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0e38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0e70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x0ea8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0ee0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x0f18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x0f50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0xf0, /* .##...######.... */ - 0x63, 0xf0, /* .##...######.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x0f88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0ff8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf8, /* .......######... */ - 0x01, 0xf8, /* .......######... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x70, 0xe0, /* .###....###..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x1030 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x63, 0x80, /* .##...###....... */ - 0x67, 0x00, /* .##..###........ */ - 0x6e, 0x00, /* .##.###......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x78, 0x00, /* .####........... */ - 0x78, 0x00, /* .####........... */ - 0x7c, 0x00, /* .#####.......... */ - 0x6e, 0x00, /* .##.###......... */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x1068 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x10a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x7c, 0xf8, /* .#####..#####... */ - 0x6f, 0xd8, /* .##.######.##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x10d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x1110 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x1148 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x1180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x71, 0xf0, /* .###...#####.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x11b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7c, 0x00, /* .#####.......... */ - 0x6e, 0x00, /* .##.###......... */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x70, /* .##......###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x11f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x00, /* .###............ */ - 0x3f, 0xc0, /* ..########...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x1228 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x1260 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x1298 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x12d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x6f, 0xd8, /* .##.######.##... */ - 0x7c, 0xf8, /* .#####..#####... */ - 0x78, 0x78, /* .####....####... */ - 0x70, 0x38, /* .###......###... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x1308 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x1378 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x13b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x13e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1420 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1458 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1490 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x14c8 */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1538 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1570 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x15a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x15e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x1618 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x07, 0xf0, /* .....#######.... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1650 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x1688 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x16c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x16f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xe0, /* .......####..... */ - 0x01, 0xe0, /* .......####..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1730 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x37, 0x00, /* ..##.###........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x37, 0x00, /* ..##.###........ */ - 0x33, 0x80, /* ..##..###....... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1768 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x17a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0x63, 0x38, /* .##...##..###... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x17d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x1810 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1848 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x18b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x67, 0xf0, /* .##..#######.... */ - 0x6f, 0xf0, /* .##.########.... */ - 0x7c, 0x00, /* .#####.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x18f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x00, /* .###............ */ - 0x3f, 0xc0, /* ..########...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1928 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1960 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1998 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x19d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x38, /* .###..##..###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1a08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x1a78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1ab0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0x00, /* .....###........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0xc0, /* ......####...... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1ae8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1b20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1b58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x30, /* ..####....##.... */ - 0x7e, 0x30, /* .######...##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x63, 0xf0, /* .##...######.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x1b90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x1bc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x1c38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x1c70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x1ca8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x1ce0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x1d18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x1d50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x1d88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x1dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x1df8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x1e30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x1e68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x1ea0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x1ed8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x1f10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x1f48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x1fb8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x1ff0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x2028 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x2060 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x2098 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x20d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x2108 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x2140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x2178 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x21b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x21e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x2220 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x2258 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x2290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x22c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x2300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x2338 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x00, /* ..##..##........ */ - 0x33, 0x30, /* ..##..##..##.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x2370 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0xc0, /* ....######...... */ - 0x1c, 0x60, /* ...###...##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x80, /* ..#######....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x23a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x38, 0x70, /* ..###....###.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x38, /* .###......###... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x23e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x2418 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x2450 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0xc0, /* ....######...... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x18, 0x00, /* ...##........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x1c, 0x60, /* ...###...##..... */ - 0x0e, 0x60, /* ....###..##..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x60, /* .........##..... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x07, 0x80, /* .....####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x2488 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x24c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0xe0, 0x38, /* ###.......###... */ - 0xcf, 0x98, /* ##..#####..##... */ - 0xdf, 0xd8, /* ##.#######.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xdf, 0xd8, /* ##.#######.##... */ - 0xcf, 0x98, /* ##..#####..##... */ - 0xe0, 0x38, /* ###.......###... */ - 0x7f, 0xf0, /* .###########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x24f8 */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x2530 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x38, /* .....###..###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x73, 0x80, /* .###..###....... */ - 0xe7, 0x00, /* ###..###........ */ - 0x73, 0x80, /* .###..###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0x38, /* .....###..###... */ - 0x03, 0x9c, /* ......###..###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2568 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x25a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x25d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0xe0, 0x38, /* ###.......###... */ - 0xdf, 0x98, /* ##.######..##... */ - 0xdf, 0xd8, /* ##.#######.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xdf, 0x98, /* ##.######..##... */ - 0xdf, 0x18, /* ##.#####...##... */ - 0xd9, 0x98, /* ##.##..##..##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xe0, 0x38, /* ###.......###... */ - 0x7f, 0xf0, /* .###########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x2610 */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x2648 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x2680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x26b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x26f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2728 */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x2760 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x7f, 0xb0, /* .########.##.... */ - 0x7f, 0x30, /* .#######..##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb5, char: \xb6, offset: 0x2798 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf8, /* ..###########... */ - 0x7f, 0xf8, /* .############... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x3f, 0x18, /* ..######...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x27d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x2808 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb8, char: \xb9, offset: 0x2840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x2878 */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x38, 0x70, /* ..###....###.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x28b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xe7, 0x00, /* ###..###........ */ - 0x73, 0x80, /* .###..###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0x38, /* .....###..###... */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x38, /* .....###..###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x73, 0x80, /* .###..###....... */ - 0xe7, 0x00, /* ###..###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x28e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x38, 0x00, /* ..###........... */ - 0x78, 0x00, /* .####........... */ - 0x18, 0x18, /* ...##......##... */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x30, /* .....###..##.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0xf0, /* ...###..####.... */ - 0x39, 0xb0, /* ..###..##.##.... */ - 0x73, 0x30, /* .###..##..##.... */ - 0x67, 0xf0, /* .##..#######.... */ - 0x07, 0xf0, /* .....#######.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2920 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0x00, /* ...##........... */ - 0x38, 0x00, /* ..###........... */ - 0x78, 0x18, /* .####......##... */ - 0x18, 0x38, /* ...##.....###... */ - 0x18, 0x70, /* ...##....###.... */ - 0x18, 0xe0, /* ...##...###..... */ - 0x19, 0xc0, /* ...##..###...... */ - 0x1b, 0x80, /* ...##.###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1d, 0xf0, /* ...###.#####.... */ - 0x3b, 0xf8, /* ..###.#######... */ - 0x73, 0x18, /* .###..##...##... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0xf8, /* .......######... */ - 0x03, 0xf8, /* ......#######... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x2958 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x7f, 0x00, /* .#######........ */ - 0x03, 0x00, /* ......##........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1f, 0x18, /* ...#####...##... */ - 0x03, 0x38, /* ......##..###... */ - 0x7f, 0x70, /* .#######.###.... */ - 0x3e, 0xe0, /* ..#####.###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x98, /* ......###..##... */ - 0x07, 0x38, /* .....###..###... */ - 0x0e, 0x78, /* ....###..####... */ - 0x1c, 0xd8, /* ...###..##.##... */ - 0x39, 0x98, /* ..###..##..##... */ - 0x73, 0xf8, /* .###..#######... */ - 0x63, 0xf8, /* .##...#######... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x2990 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x29c8 */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x2a00 */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x2a38 */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x2a70 */ - 0x1e, 0x60, /* ...####..##..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x33, 0xc0, /* ..##..####...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x2aa8 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x2ae0 */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x2b18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf8, /* ..###########... */ - 0x7f, 0xf8, /* .############... */ - 0xe3, 0x00, /* ###...##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0xf8, /* ##....#######... */ - 0xc3, 0xf8, /* ##....#######... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x2b50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x2b88 */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x2bc0 */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x2bf8 */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x2c30 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x2c68 */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x2ca0 */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x2cd8 */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x2d10 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x2d48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0xfe, 0x30, /* #######...##.... */ - 0xfe, 0x30, /* #######...##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x2d80 */ - 0x1e, 0x60, /* ...####..##..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x33, 0xc0, /* ..##..####...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x2db8 */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x2df0 */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x2e28 */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x2e60 */ - 0x1e, 0x60, /* ...####..##..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x33, 0xc0, /* ..##..####...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x2e98 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x2ed0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x2f08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x38, /* .##.......###... */ - 0x60, 0x78, /* .##......####... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0xe0, 0x30, /* ###.......##.... */ - 0xe0, 0x30, /* ###.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x2f40 */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x2f78 */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x2fb0 */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x2fe8 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x3020 */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x3058 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x3090 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x78, 0x70, /* .####....###.... */ - 0x6f, 0xe0, /* .##.#######..... */ - 0x67, 0xc0, /* .##..#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x30c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x3100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x3138 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x3170 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x60, /* ...####..##..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x33, 0xc0, /* ..##..####...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x31a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x31e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x3218 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7d, 0xe0, /* .#####.####..... */ - 0x7f, 0xf0, /* .###########.... */ - 0x07, 0x38, /* .....###..###... */ - 0x03, 0x18, /* ......##...##... */ - 0x3f, 0x18, /* ..######...##... */ - 0x7f, 0xf8, /* .############... */ - 0xe3, 0xf8, /* ###...#######... */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xc3, 0x00, /* ##....##........ */ - 0xe3, 0x98, /* ###...###..##... */ - 0x7f, 0xf8, /* .############... */ - 0x3e, 0xf0, /* ..#####.####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x3250 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x3288 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x32c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x32f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x3330 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x3368 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x33a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x33d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x3410 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x3448 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x39, 0x80, /* ..###..##....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x1e, 0x00, /* ...####......... */ - 0x37, 0x00, /* ..##.###........ */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x3480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x60, /* ..####...##..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x63, 0xc0, /* .##...####...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x34b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x34f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x3528 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x3560 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x60, /* ...####..##..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x33, 0xc0, /* ..##..####...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x3598 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x35d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x3608 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xd8, /* ...#######.##... */ - 0x3f, 0xf8, /* ..###########... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0xff, 0xe0, /* ###########..... */ - 0xdf, 0xc0, /* ##.#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x3640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x3678 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x36b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x36e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x3720 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x3758 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x3790 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_bold_14x28_iso8859_1_descriptors[] = { - { 0x0e, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0e, 0x0038 }, /* Index: 0x01, char: \x02 */ - { 0x0e, 0x0070 }, /* Index: 0x02, char: \x03 */ - { 0x0e, 0x00a8 }, /* Index: 0x03, char: \x04 */ - { 0x0e, 0x00e0 }, /* Index: 0x04, char: \x05 */ - { 0x0e, 0x0118 }, /* Index: 0x05, char: \x06 */ - { 0x0e, 0x0150 }, /* Index: 0x06, char: \x07 */ - { 0x0e, 0x0188 }, /* Index: 0x07, char: \x08 */ - { 0x0e, 0x01c0 }, /* Index: 0x08, char: \x09 */ - { 0x0e, 0x01f8 }, /* Index: 0x09, char: \x0a */ - { 0x0e, 0x0230 }, /* Index: 0x0a, char: \x0b */ - { 0x0e, 0x0268 }, /* Index: 0x0b, char: \x0c */ - { 0x0e, 0x02a0 }, /* Index: 0x0c, char: \x0d */ - { 0x0e, 0x02d8 }, /* Index: 0x0d, char: \x0e */ - { 0x0e, 0x0310 }, /* Index: 0x0e, char: \x0f */ - { 0x0e, 0x0348 }, /* Index: 0x0f, char: \x10 */ - { 0x0e, 0x0380 }, /* Index: 0x10, char: \x11 */ - { 0x0e, 0x03b8 }, /* Index: 0x11, char: \x12 */ - { 0x0e, 0x03f0 }, /* Index: 0x12, char: \x13 */ - { 0x0e, 0x0428 }, /* Index: 0x13, char: \x14 */ - { 0x0e, 0x0460 }, /* Index: 0x14, char: \x15 */ - { 0x0e, 0x0498 }, /* Index: 0x15, char: \x16 */ - { 0x0e, 0x04d0 }, /* Index: 0x16, char: \x17 */ - { 0x0e, 0x0508 }, /* Index: 0x17, char: \x18 */ - { 0x0e, 0x0540 }, /* Index: 0x18, char: \x19 */ - { 0x0e, 0x0578 }, /* Index: 0x19, char: \x1a */ - { 0x0e, 0x05b0 }, /* Index: 0x1a, char: \x1b */ - { 0x0e, 0x05e8 }, /* Index: 0x1b, char: \x1c */ - { 0x0e, 0x0620 }, /* Index: 0x1c, char: \x1d */ - { 0x0e, 0x0658 }, /* Index: 0x1d, char: \x1e */ - { 0x0e, 0x0690 }, /* Index: 0x1e, char: \x1f */ - { 0x0e, 0x06c8 }, /* Index: 0x1f, char: \x20 */ - { 0x0e, 0x0700 }, /* Index: 0x20, char: \x21 */ - { 0x0e, 0x0738 }, /* Index: 0x21, char: \x22 */ - { 0x0e, 0x0770 }, /* Index: 0x22, char: \x23 */ - { 0x0e, 0x07a8 }, /* Index: 0x23, char: \x24 */ - { 0x0e, 0x07e0 }, /* Index: 0x24, char: \x25 */ - { 0x0e, 0x0818 }, /* Index: 0x25, char: \x26 */ - { 0x0e, 0x0850 }, /* Index: 0x26, char: \x27 */ - { 0x0e, 0x0888 }, /* Index: 0x27, char: \x28 */ - { 0x0e, 0x08c0 }, /* Index: 0x28, char: \x29 */ - { 0x0e, 0x08f8 }, /* Index: 0x29, char: \x2a */ - { 0x0e, 0x0930 }, /* Index: 0x2a, char: \x2b */ - { 0x0e, 0x0968 }, /* Index: 0x2b, char: \x2c */ - { 0x0e, 0x09a0 }, /* Index: 0x2c, char: \x2d */ - { 0x0e, 0x09d8 }, /* Index: 0x2d, char: \x2e */ - { 0x0e, 0x0a10 }, /* Index: 0x2e, char: \x2f */ - { 0x0e, 0x0a48 }, /* Index: 0x2f, char: \x30 */ - { 0x0e, 0x0a80 }, /* Index: 0x30, char: \x31 */ - { 0x0e, 0x0ab8 }, /* Index: 0x31, char: \x32 */ - { 0x0e, 0x0af0 }, /* Index: 0x32, char: \x33 */ - { 0x0e, 0x0b28 }, /* Index: 0x33, char: \x34 */ - { 0x0e, 0x0b60 }, /* Index: 0x34, char: \x35 */ - { 0x0e, 0x0b98 }, /* Index: 0x35, char: \x36 */ - { 0x0e, 0x0bd0 }, /* Index: 0x36, char: \x37 */ - { 0x0e, 0x0c08 }, /* Index: 0x37, char: \x38 */ - { 0x0e, 0x0c40 }, /* Index: 0x38, char: \x39 */ - { 0x0e, 0x0c78 }, /* Index: 0x39, char: \x3a */ - { 0x0e, 0x0cb0 }, /* Index: 0x3a, char: \x3b */ - { 0x0e, 0x0ce8 }, /* Index: 0x3b, char: \x3c */ - { 0x0e, 0x0d20 }, /* Index: 0x3c, char: \x3d */ - { 0x0e, 0x0d58 }, /* Index: 0x3d, char: \x3e */ - { 0x0e, 0x0d90 }, /* Index: 0x3e, char: \x3f */ - { 0x0e, 0x0dc8 }, /* Index: 0x3f, char: \x40 */ - { 0x0e, 0x0e00 }, /* Index: 0x40, char: \x41 */ - { 0x0e, 0x0e38 }, /* Index: 0x41, char: \x42 */ - { 0x0e, 0x0e70 }, /* Index: 0x42, char: \x43 */ - { 0x0e, 0x0ea8 }, /* Index: 0x43, char: \x44 */ - { 0x0e, 0x0ee0 }, /* Index: 0x44, char: \x45 */ - { 0x0e, 0x0f18 }, /* Index: 0x45, char: \x46 */ - { 0x0e, 0x0f50 }, /* Index: 0x46, char: \x47 */ - { 0x0e, 0x0f88 }, /* Index: 0x47, char: \x48 */ - { 0x0e, 0x0fc0 }, /* Index: 0x48, char: \x49 */ - { 0x0e, 0x0ff8 }, /* Index: 0x49, char: \x4a */ - { 0x0e, 0x1030 }, /* Index: 0x4a, char: \x4b */ - { 0x0e, 0x1068 }, /* Index: 0x4b, char: \x4c */ - { 0x0e, 0x10a0 }, /* Index: 0x4c, char: \x4d */ - { 0x0e, 0x10d8 }, /* Index: 0x4d, char: \x4e */ - { 0x0e, 0x1110 }, /* Index: 0x4e, char: \x4f */ - { 0x0e, 0x1148 }, /* Index: 0x4f, char: \x50 */ - { 0x0e, 0x1180 }, /* Index: 0x50, char: \x51 */ - { 0x0e, 0x11b8 }, /* Index: 0x51, char: \x52 */ - { 0x0e, 0x11f0 }, /* Index: 0x52, char: \x53 */ - { 0x0e, 0x1228 }, /* Index: 0x53, char: \x54 */ - { 0x0e, 0x1260 }, /* Index: 0x54, char: \x55 */ - { 0x0e, 0x1298 }, /* Index: 0x55, char: \x56 */ - { 0x0e, 0x12d0 }, /* Index: 0x56, char: \x57 */ - { 0x0e, 0x1308 }, /* Index: 0x57, char: \x58 */ - { 0x0e, 0x1340 }, /* Index: 0x58, char: \x59 */ - { 0x0e, 0x1378 }, /* Index: 0x59, char: \x5a */ - { 0x0e, 0x13b0 }, /* Index: 0x5a, char: \x5b */ - { 0x0e, 0x13e8 }, /* Index: 0x5b, char: \x5c */ - { 0x0e, 0x1420 }, /* Index: 0x5c, char: \x5d */ - { 0x0e, 0x1458 }, /* Index: 0x5d, char: \x5e */ - { 0x0e, 0x1490 }, /* Index: 0x5e, char: \x5f */ - { 0x0e, 0x14c8 }, /* Index: 0x5f, char: \x60 */ - { 0x0e, 0x1500 }, /* Index: 0x60, char: \x61 */ - { 0x0e, 0x1538 }, /* Index: 0x61, char: \x62 */ - { 0x0e, 0x1570 }, /* Index: 0x62, char: \x63 */ - { 0x0e, 0x15a8 }, /* Index: 0x63, char: \x64 */ - { 0x0e, 0x15e0 }, /* Index: 0x64, char: \x65 */ - { 0x0e, 0x1618 }, /* Index: 0x65, char: \x66 */ - { 0x0e, 0x1650 }, /* Index: 0x66, char: \x67 */ - { 0x0e, 0x1688 }, /* Index: 0x67, char: \x68 */ - { 0x0e, 0x16c0 }, /* Index: 0x68, char: \x69 */ - { 0x0e, 0x16f8 }, /* Index: 0x69, char: \x6a */ - { 0x0e, 0x1730 }, /* Index: 0x6a, char: \x6b */ - { 0x0e, 0x1768 }, /* Index: 0x6b, char: \x6c */ - { 0x0e, 0x17a0 }, /* Index: 0x6c, char: \x6d */ - { 0x0e, 0x17d8 }, /* Index: 0x6d, char: \x6e */ - { 0x0e, 0x1810 }, /* Index: 0x6e, char: \x6f */ - { 0x0e, 0x1848 }, /* Index: 0x6f, char: \x70 */ - { 0x0e, 0x1880 }, /* Index: 0x70, char: \x71 */ - { 0x0e, 0x18b8 }, /* Index: 0x71, char: \x72 */ - { 0x0e, 0x18f0 }, /* Index: 0x72, char: \x73 */ - { 0x0e, 0x1928 }, /* Index: 0x73, char: \x74 */ - { 0x0e, 0x1960 }, /* Index: 0x74, char: \x75 */ - { 0x0e, 0x1998 }, /* Index: 0x75, char: \x76 */ - { 0x0e, 0x19d0 }, /* Index: 0x76, char: \x77 */ - { 0x0e, 0x1a08 }, /* Index: 0x77, char: \x78 */ - { 0x0e, 0x1a40 }, /* Index: 0x78, char: \x79 */ - { 0x0e, 0x1a78 }, /* Index: 0x79, char: \x7a */ - { 0x0e, 0x1ab0 }, /* Index: 0x7a, char: \x7b */ - { 0x0e, 0x1ae8 }, /* Index: 0x7b, char: \x7c */ - { 0x0e, 0x1b20 }, /* Index: 0x7c, char: \x7d */ - { 0x0e, 0x1b58 }, /* Index: 0x7d, char: \x7e */ - { 0x0e, 0x1b90 }, /* Index: 0x7e, char: \x7f */ - { 0x0e, 0x1bc8 }, /* Index: 0x7f, char: \x80 */ - { 0x0e, 0x1c00 }, /* Index: 0x80, char: \x81 */ - { 0x0e, 0x1c38 }, /* Index: 0x81, char: \x82 */ - { 0x0e, 0x1c70 }, /* Index: 0x82, char: \x83 */ - { 0x0e, 0x1ca8 }, /* Index: 0x83, char: \x84 */ - { 0x0e, 0x1ce0 }, /* Index: 0x84, char: \x85 */ - { 0x0e, 0x1d18 }, /* Index: 0x85, char: \x86 */ - { 0x0e, 0x1d50 }, /* Index: 0x86, char: \x87 */ - { 0x0e, 0x1d88 }, /* Index: 0x87, char: \x88 */ - { 0x0e, 0x1dc0 }, /* Index: 0x88, char: \x89 */ - { 0x0e, 0x1df8 }, /* Index: 0x89, char: \x8a */ - { 0x0e, 0x1e30 }, /* Index: 0x8a, char: \x8b */ - { 0x0e, 0x1e68 }, /* Index: 0x8b, char: \x8c */ - { 0x0e, 0x1ea0 }, /* Index: 0x8c, char: \x8d */ - { 0x0e, 0x1ed8 }, /* Index: 0x8d, char: \x8e */ - { 0x0e, 0x1f10 }, /* Index: 0x8e, char: \x8f */ - { 0x0e, 0x1f48 }, /* Index: 0x8f, char: \x90 */ - { 0x0e, 0x1f80 }, /* Index: 0x90, char: \x91 */ - { 0x0e, 0x1fb8 }, /* Index: 0x91, char: \x92 */ - { 0x0e, 0x1ff0 }, /* Index: 0x92, char: \x93 */ - { 0x0e, 0x2028 }, /* Index: 0x93, char: \x94 */ - { 0x0e, 0x2060 }, /* Index: 0x94, char: \x95 */ - { 0x0e, 0x2098 }, /* Index: 0x95, char: \x96 */ - { 0x0e, 0x20d0 }, /* Index: 0x96, char: \x97 */ - { 0x0e, 0x2108 }, /* Index: 0x97, char: \x98 */ - { 0x0e, 0x2140 }, /* Index: 0x98, char: \x99 */ - { 0x0e, 0x2178 }, /* Index: 0x99, char: \x9a */ - { 0x0e, 0x21b0 }, /* Index: 0x9a, char: \x9b */ - { 0x0e, 0x21e8 }, /* Index: 0x9b, char: \x9c */ - { 0x0e, 0x2220 }, /* Index: 0x9c, char: \x9d */ - { 0x0e, 0x2258 }, /* Index: 0x9d, char: \x9e */ - { 0x0e, 0x2290 }, /* Index: 0x9e, char: \x9f */ - { 0x0e, 0x22c8 }, /* Index: 0x9f, char: \xa0 */ - { 0x0e, 0x2300 }, /* Index: 0xa0, char: \xa1 */ - { 0x0e, 0x2338 }, /* Index: 0xa1, char: \xa2 */ - { 0x0e, 0x2370 }, /* Index: 0xa2, char: \xa3 */ - { 0x0e, 0x23a8 }, /* Index: 0xa3, char: \xa4 */ - { 0x0e, 0x23e0 }, /* Index: 0xa4, char: \xa5 */ - { 0x0e, 0x2418 }, /* Index: 0xa5, char: \xa6 */ - { 0x0e, 0x2450 }, /* Index: 0xa6, char: \xa7 */ - { 0x0e, 0x2488 }, /* Index: 0xa7, char: \xa8 */ - { 0x0e, 0x24c0 }, /* Index: 0xa8, char: \xa9 */ - { 0x0e, 0x24f8 }, /* Index: 0xa9, char: \xaa */ - { 0x0e, 0x2530 }, /* Index: 0xaa, char: \xab */ - { 0x0e, 0x2568 }, /* Index: 0xab, char: \xac */ - { 0x0e, 0x25a0 }, /* Index: 0xac, char: \xad */ - { 0x0e, 0x25d8 }, /* Index: 0xad, char: \xae */ - { 0x0e, 0x2610 }, /* Index: 0xae, char: \xaf */ - { 0x0e, 0x2648 }, /* Index: 0xaf, char: \xb0 */ - { 0x0e, 0x2680 }, /* Index: 0xb0, char: \xb1 */ - { 0x0e, 0x26b8 }, /* Index: 0xb1, char: \xb2 */ - { 0x0e, 0x26f0 }, /* Index: 0xb2, char: \xb3 */ - { 0x0e, 0x2728 }, /* Index: 0xb3, char: \xb4 */ - { 0x0e, 0x2760 }, /* Index: 0xb4, char: \xb5 */ - { 0x0e, 0x2798 }, /* Index: 0xb5, char: \xb6 */ - { 0x0e, 0x27d0 }, /* Index: 0xb6, char: \xb7 */ - { 0x0e, 0x2808 }, /* Index: 0xb7, char: \xb8 */ - { 0x0e, 0x2840 }, /* Index: 0xb8, char: \xb9 */ - { 0x0e, 0x2878 }, /* Index: 0xb9, char: \xba */ - { 0x0e, 0x28b0 }, /* Index: 0xba, char: \xbb */ - { 0x0e, 0x28e8 }, /* Index: 0xbb, char: \xbc */ - { 0x0e, 0x2920 }, /* Index: 0xbc, char: \xbd */ - { 0x0e, 0x2958 }, /* Index: 0xbd, char: \xbe */ - { 0x0e, 0x2990 }, /* Index: 0xbe, char: \xbf */ - { 0x0e, 0x29c8 }, /* Index: 0xbf, char: \xc0 */ - { 0x0e, 0x2a00 }, /* Index: 0xc0, char: \xc1 */ - { 0x0e, 0x2a38 }, /* Index: 0xc1, char: \xc2 */ - { 0x0e, 0x2a70 }, /* Index: 0xc2, char: \xc3 */ - { 0x0e, 0x2aa8 }, /* Index: 0xc3, char: \xc4 */ - { 0x0e, 0x2ae0 }, /* Index: 0xc4, char: \xc5 */ - { 0x0e, 0x2b18 }, /* Index: 0xc5, char: \xc6 */ - { 0x0e, 0x2b50 }, /* Index: 0xc6, char: \xc7 */ - { 0x0e, 0x2b88 }, /* Index: 0xc7, char: \xc8 */ - { 0x0e, 0x2bc0 }, /* Index: 0xc8, char: \xc9 */ - { 0x0e, 0x2bf8 }, /* Index: 0xc9, char: \xca */ - { 0x0e, 0x2c30 }, /* Index: 0xca, char: \xcb */ - { 0x0e, 0x2c68 }, /* Index: 0xcb, char: \xcc */ - { 0x0e, 0x2ca0 }, /* Index: 0xcc, char: \xcd */ - { 0x0e, 0x2cd8 }, /* Index: 0xcd, char: \xce */ - { 0x0e, 0x2d10 }, /* Index: 0xce, char: \xcf */ - { 0x0e, 0x2d48 }, /* Index: 0xcf, char: \xd0 */ - { 0x0e, 0x2d80 }, /* Index: 0xd0, char: \xd1 */ - { 0x0e, 0x2db8 }, /* Index: 0xd1, char: \xd2 */ - { 0x0e, 0x2df0 }, /* Index: 0xd2, char: \xd3 */ - { 0x0e, 0x2e28 }, /* Index: 0xd3, char: \xd4 */ - { 0x0e, 0x2e60 }, /* Index: 0xd4, char: \xd5 */ - { 0x0e, 0x2e98 }, /* Index: 0xd5, char: \xd6 */ - { 0x0e, 0x2ed0 }, /* Index: 0xd6, char: \xd7 */ - { 0x0e, 0x2f08 }, /* Index: 0xd7, char: \xd8 */ - { 0x0e, 0x2f40 }, /* Index: 0xd8, char: \xd9 */ - { 0x0e, 0x2f78 }, /* Index: 0xd9, char: \xda */ - { 0x0e, 0x2fb0 }, /* Index: 0xda, char: \xdb */ - { 0x0e, 0x2fe8 }, /* Index: 0xdb, char: \xdc */ - { 0x0e, 0x3020 }, /* Index: 0xdc, char: \xdd */ - { 0x0e, 0x3058 }, /* Index: 0xdd, char: \xde */ - { 0x0e, 0x3090 }, /* Index: 0xde, char: \xdf */ - { 0x0e, 0x30c8 }, /* Index: 0xdf, char: \xe0 */ - { 0x0e, 0x3100 }, /* Index: 0xe0, char: \xe1 */ - { 0x0e, 0x3138 }, /* Index: 0xe1, char: \xe2 */ - { 0x0e, 0x3170 }, /* Index: 0xe2, char: \xe3 */ - { 0x0e, 0x31a8 }, /* Index: 0xe3, char: \xe4 */ - { 0x0e, 0x31e0 }, /* Index: 0xe4, char: \xe5 */ - { 0x0e, 0x3218 }, /* Index: 0xe5, char: \xe6 */ - { 0x0e, 0x3250 }, /* Index: 0xe6, char: \xe7 */ - { 0x0e, 0x3288 }, /* Index: 0xe7, char: \xe8 */ - { 0x0e, 0x32c0 }, /* Index: 0xe8, char: \xe9 */ - { 0x0e, 0x32f8 }, /* Index: 0xe9, char: \xea */ - { 0x0e, 0x3330 }, /* Index: 0xea, char: \xeb */ - { 0x0e, 0x3368 }, /* Index: 0xeb, char: \xec */ - { 0x0e, 0x33a0 }, /* Index: 0xec, char: \xed */ - { 0x0e, 0x33d8 }, /* Index: 0xed, char: \xee */ - { 0x0e, 0x3410 }, /* Index: 0xee, char: \xef */ - { 0x0e, 0x3448 }, /* Index: 0xef, char: \xf0 */ - { 0x0e, 0x3480 }, /* Index: 0xf0, char: \xf1 */ - { 0x0e, 0x34b8 }, /* Index: 0xf1, char: \xf2 */ - { 0x0e, 0x34f0 }, /* Index: 0xf2, char: \xf3 */ - { 0x0e, 0x3528 }, /* Index: 0xf3, char: \xf4 */ - { 0x0e, 0x3560 }, /* Index: 0xf4, char: \xf5 */ - { 0x0e, 0x3598 }, /* Index: 0xf5, char: \xf6 */ - { 0x0e, 0x35d0 }, /* Index: 0xf6, char: \xf7 */ - { 0x0e, 0x3608 }, /* Index: 0xf7, char: \xf8 */ - { 0x0e, 0x3640 }, /* Index: 0xf8, char: \xf9 */ - { 0x0e, 0x3678 }, /* Index: 0xf9, char: \xfa */ - { 0x0e, 0x36b0 }, /* Index: 0xfa, char: \xfb */ - { 0x0e, 0x36e8 }, /* Index: 0xfb, char: \xfc */ - { 0x0e, 0x3720 }, /* Index: 0xfc, char: \xfd */ - { 0x0e, 0x3758 }, /* Index: 0xfd, char: \xfe */ - { 0x0e, 0x3790 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_14x28_iso8859_1_info = -{ - .height = 28, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_14x28_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_14x28_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_14X28_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_14x28_koi8_r.h b/extras/fonts/data/font_terminus_bold_14x28_koi8_r.h deleted file mode 100644 index 0e43aff..0000000 --- a/extras/fonts/data/font_terminus_bold_14x28_koi8_r.h +++ /dev/null @@ -1,7939 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 14x28 - * Charset: koi8_r - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_14X28_KOI8_R_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_14X28_KOI8_R_H_ - -static const uint8_t _fonts_terminus_bold_14x28_koi8_r_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0xff, 0xf8, /* #############... */ - 0xff, 0xf8, /* #############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x02, 0x00, /* ......#......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0038 */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - - /* Index: 0x02, char: \x03, offset: 0x0070 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0x00, /* .#######........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf8, /* .....########... */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x00a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0x00, /* .#######........ */ - 0x60, 0x00, /* .##............. */ - 0x7c, 0x00, /* .#####.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x00e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x7f, 0x00, /* .#######........ */ - 0x63, 0x00, /* .##...##........ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0x00, /* .##...##........ */ - 0x7f, 0x00, /* .#######........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x30, /* ......##..##.... */ - 0x03, 0x18, /* ......##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x0118 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0150 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x0188 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x01c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x73, 0x00, /* .###..##........ */ - 0x7b, 0x00, /* .####.##........ */ - 0x6f, 0x00, /* .##.####........ */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x01f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0230 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x0268 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0c, char: \x0d, offset: 0x02a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0d, char: \x0e, offset: 0x02d8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0310 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x0f, char: \x10, offset: 0x0348 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x03b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x03f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x0428 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0460 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x15, char: \x16, offset: 0x0498 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x16, char: \x17, offset: 0x04d0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x0508 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x18, char: \x19, offset: 0x0540 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x19, char: \x1a, offset: 0x0578 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x05b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x05e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0620 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0658 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0xc0, /* ....######...... */ - 0x1c, 0x60, /* ...###...##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x3f, 0x80, /* ..#######....... */ - 0x3f, 0x80, /* ..#######....... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0690 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x06c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0738 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0770 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x07a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x73, 0x38, /* .###..##..###... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x73, 0x00, /* .###..##........ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x38, /* ......##..###... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x38, /* .###..##..###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x07e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x30, /* ..####....##.... */ - 0x7e, 0x30, /* .######...##.... */ - 0x66, 0x60, /* .##..##..##..... */ - 0x7e, 0x60, /* .######..##..... */ - 0x3c, 0xc0, /* ..####..##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0xf0, /* ....##..####.... */ - 0x19, 0xf8, /* ...##..######... */ - 0x19, 0x98, /* ...##..##..##... */ - 0x31, 0xf8, /* ..##...######... */ - 0x30, 0xf0, /* ..##....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0818 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x1f, 0x80, /* ...######....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x30, 0xc0, /* ..##....##...... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x1f, 0x80, /* ...######....... */ - 0x0f, 0x00, /* ....####........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0x18, /* ...#####...##... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x71, 0xf0, /* .###...#####.... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x71, 0xf0, /* .###...#####.... */ - 0x3f, 0xb8, /* ..#######.###... */ - 0x1f, 0x18, /* ...#####...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0850 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x0888 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x08c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x08f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0930 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0968 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x09a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x09d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0a10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0a48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x00, /* ....####........ */ - 0x1f, 0x00, /* ...#####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0ab8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0af0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0b28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xf0, /* ........####.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0xb0, /* ......###.##.... */ - 0x07, 0x30, /* .....###..##.... */ - 0x0e, 0x30, /* ....###...##.... */ - 0x1c, 0x30, /* ...###....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0b60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0b98 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0bd0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0c08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0c78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0cb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x06, 0x00, /* .....##......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0ce8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0d20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0d58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0d90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0dc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x38, /* .###......###... */ - 0x60, 0x18, /* .##........##... */ - 0x61, 0xf8, /* .##....######... */ - 0x63, 0xf8, /* .##...#######... */ - 0x67, 0x18, /* .##..###...##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x67, 0x18, /* .##..###...##... */ - 0x63, 0xf8, /* .##...#######... */ - 0x61, 0xe8, /* .##....####.#... */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x00, /* .###............ */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x0e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x0e38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x0e70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x0ea8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0x00, /* .#######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x0ee0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x0f18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x0f50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x63, 0xf0, /* .##...######.... */ - 0x63, 0xf0, /* .##...######.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x0f88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x0ff8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf8, /* .......######... */ - 0x01, 0xf8, /* .......######... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x70, 0xe0, /* .###....###..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x1f, 0x80, /* ...######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x1030 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x63, 0x80, /* .##...###....... */ - 0x67, 0x00, /* .##..###........ */ - 0x6e, 0x00, /* .##.###......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x78, 0x00, /* .####........... */ - 0x78, 0x00, /* .####........... */ - 0x7c, 0x00, /* .#####.......... */ - 0x6e, 0x00, /* .##.###......... */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x1068 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x10a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x7c, 0xf8, /* .#####..#####... */ - 0x6f, 0xd8, /* .##.######.##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x10d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x1110 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x1148 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x1180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x71, 0xf0, /* .###...#####.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x11b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7c, 0x00, /* .#####.......... */ - 0x6e, 0x00, /* .##.###......... */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x70, /* .##......###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x11f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x00, /* .###............ */ - 0x3f, 0xc0, /* ..########...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x1228 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x1260 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x1298 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x12d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x6f, 0xd8, /* .##.######.##... */ - 0x7c, 0xf8, /* .#####..#####... */ - 0x78, 0x78, /* .####....####... */ - 0x70, 0x38, /* .###......###... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x1308 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x18, 0x60, /* ...##....##..... */ - 0x18, 0x60, /* ...##....##..... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x1378 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x13b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x13e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x18, 0x00, /* ...##........... */ - 0x18, 0x00, /* ...##........... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0x80, /* .......##....... */ - 0x01, 0x80, /* .......##....... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1420 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1458 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x02, 0x00, /* ......#......... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1490 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x14c8 */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1538 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1570 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x15a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x15e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x1618 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xf0, /* ......######.... */ - 0x07, 0xf0, /* .....#######.... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1650 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x1688 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x16c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x16f8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xe0, /* .......####..... */ - 0x01, 0xe0, /* .......####..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1730 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x37, 0x00, /* ..##.###........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x37, 0x00, /* ..##.###........ */ - 0x33, 0x80, /* ..##..###....... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1768 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x00, /* ....####........ */ - 0x0f, 0x00, /* ....####........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xc0, /* ....######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x17a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0x63, 0x38, /* .##...##..###... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x17d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x1810 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1848 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x18b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x67, 0xf0, /* .##..#######.... */ - 0x6f, 0xf0, /* .##.########.... */ - 0x7c, 0x00, /* .#####.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x18f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x00, /* .###............ */ - 0x3f, 0xc0, /* ..########...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1928 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1960 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1998 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x19d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x38, /* .###..##..###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1a08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x1a78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1ab0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0x00, /* .....###........ */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x06, 0x00, /* .....##......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0xc0, /* ......####...... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1ae8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1b20 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x07, 0x00, /* .....###........ */ - 0x1e, 0x00, /* ...####......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1b58 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3c, 0x30, /* ..####....##.... */ - 0x7e, 0x30, /* .######...##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x63, 0xf0, /* .##...######.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x1b90 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x1bc8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x1c00 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x81, char: \x82, offset: 0x1c38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x82, char: \x83, offset: 0x1c70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x83, char: \x84, offset: 0x1ca8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x1ce0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x1d18 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x86, char: \x87, offset: 0x1d50 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x87, char: \x88, offset: 0x1d88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x88, char: \x89, offset: 0x1dc0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x1df8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x8a, char: \x8b, offset: 0x1e30 */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x1e68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - - /* Index: 0x8c, char: \x8d, offset: 0x1ea0 */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - - /* Index: 0x8d, char: \x8e, offset: 0x1ed8 */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - 0xfe, 0x00, /* #######......... */ - - /* Index: 0x8e, char: \x8f, offset: 0x1f10 */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x01, 0xfc, /* .......#######.. */ - - /* Index: 0x8f, char: \x90, offset: 0x1f48 */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x1f80 */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0x55, 0x54, /* .#.#.#.#.#.#.#.. */ - - /* Index: 0x91, char: \x92, offset: 0x1fb8 */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - 0xff, 0xfc, /* ##############.. */ - 0xaa, 0xa8, /* #.#.#.#.#.#.#... */ - - /* Index: 0x92, char: \x93, offset: 0x1ff0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x18, /* ......##...##... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0x93, char: \x94, offset: 0x2028 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x2060 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x2098 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x00, 0x60, /* .........##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x60, /* .##......##..... */ - 0x70, 0x60, /* .###.....##..... */ - 0x38, 0x60, /* ..###....##..... */ - 0x1c, 0x60, /* ...###...##..... */ - 0x0e, 0x60, /* ....###..##..... */ - 0x07, 0x60, /* .....###.##..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x01, 0xe0, /* .......####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x20d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x18, /* ...####....##... */ - 0x3f, 0x38, /* ..######..###... */ - 0x73, 0xf0, /* .###..######.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x18, /* ...####....##... */ - 0x3f, 0x38, /* ..######..###... */ - 0x73, 0xf0, /* .###..######.... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x2108 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x2140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x2178 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x21b0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x63, 0x00, /* .##...##........ */ - 0x7f, 0x00, /* .#######........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x21e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x2220 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x2258 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x2290 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x22c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x2300 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa1, char: \xa2, offset: 0x2338 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xa2, char: \xa3, offset: 0x2370 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x23a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa4, char: \xa5, offset: 0x23e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa5, char: \xa6, offset: 0x2418 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xa6, char: \xa7, offset: 0x2450 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa7, char: \xa8, offset: 0x2488 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xa8, char: \xa9, offset: 0x24c0 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x24f8 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x2530 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2568 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x25a0 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x25d8 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0xff, 0xc0, /* ##########...... */ - 0xff, 0xc0, /* ##########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x2610 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xaf, char: \xb0, offset: 0x2648 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb0, char: \xb1, offset: 0x2680 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0x00, /* ....##.......... */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xfc, /* ....##..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb1, char: \xb2, offset: 0x26b8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xb2, char: \xb3, offset: 0x26f0 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2728 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb4, char: \xb5, offset: 0x2760 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x00, 0xc0, /* ........##...... */ - 0x00, 0xc0, /* ........##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0xfc, 0xc0, /* ######..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb5, char: \xb6, offset: 0x2798 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xb6, char: \xb7, offset: 0x27d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb7, char: \xb8, offset: 0x2808 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0xfc, /* ######..######.. */ - 0xfc, 0xfc, /* ######..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xb8, char: \xb9, offset: 0x2840 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x2878 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x28b0 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xfc, /* ######..######.. */ - 0xfc, 0xfc, /* ######..######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x28e8 */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2920 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xff, 0xfc, /* ##############.. */ - 0xff, 0xfc, /* ##############.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xbd, char: \xbe, offset: 0x2958 */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0xfc, 0xfc, /* ######..######.. */ - 0xfc, 0xfc, /* ######..######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfc, 0xfc, /* ######..######.. */ - 0xfc, 0xfc, /* ######..######.. */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - 0x0c, 0xc0, /* ....##..##...... */ - - /* Index: 0xbe, char: \xbf, offset: 0x2990 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0xe0, 0x38, /* ###.......###... */ - 0xcf, 0x98, /* ##..#####..##... */ - 0xdf, 0xd8, /* ##.#######.##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0x18, /* ##.##......##... */ - 0xd8, 0xd8, /* ##.##...##.##... */ - 0xdf, 0xd8, /* ##.#######.##... */ - 0xcf, 0x98, /* ##..#####..##... */ - 0xe0, 0x38, /* ###.......###... */ - 0x7f, 0xf0, /* .###########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x29c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0xe0, /* .##....####..... */ - 0x63, 0xf0, /* .##...######.... */ - 0x67, 0x38, /* .##..###..###... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x7e, 0x18, /* .######....##... */ - 0x7e, 0x18, /* .######....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x67, 0x38, /* .##..###..###... */ - 0x63, 0xf0, /* .##...######.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x2a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x2a38 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xc0, /* ..########...... */ - 0x70, 0x00, /* .###............ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x2a70 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x2aa8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x2ae0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x2b18 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x73, 0x38, /* .###..##..###... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x38, /* .###..##..###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x2b50 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x2b88 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x07, 0x00, /* .....###........ */ - 0x0f, 0x80, /* ....#####....... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x2bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x2bf8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x18, 0xc0, /* ...##...##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x2c30 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x33, 0x80, /* ..##..###....... */ - 0x37, 0x00, /* ..##.###........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x37, 0x00, /* ..##.###........ */ - 0x33, 0x80, /* ..##..###....... */ - 0x31, 0xc0, /* ..##...###...... */ - 0x30, 0xe0, /* ..##....###..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x2c68 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf0, /* .....#######.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1c, 0x30, /* ...###....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x2ca0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x7c, 0xf8, /* .#####..#####... */ - 0x6f, 0xd8, /* .##.######.##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x2cd8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x2d10 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x2d48 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x2d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0xb0, /* ......###.##.... */ - 0x07, 0x30, /* .....###..##.... */ - 0x0e, 0x30, /* ....###...##.... */ - 0x1c, 0x30, /* ...###....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x2db8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x2df0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x2e28 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x2e60 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x2e98 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x38, /* .###..##..###... */ - 0x3b, 0x70, /* ..###.##.###.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x3b, 0x70, /* ..###.##.###.... */ - 0x73, 0x38, /* .###..##..###... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x2ed0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x00, /* ..######........ */ - 0x7f, 0x80, /* .########....... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x60, 0xc0, /* .##.....##...... */ - 0x61, 0x80, /* .##....##....... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x2f08 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x2f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x7f, 0x98, /* .########..##... */ - 0x61, 0xd8, /* .##....###.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x61, 0xd8, /* .##....###.##... */ - 0x7f, 0x98, /* .########..##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x2f78 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x2fb0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x18, /* .###..##...##... */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x2fe8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x3020 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x18, /* .###..##...##... */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x3058 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x3090 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xf0, 0x00, /* ####............ */ - 0xf0, 0x00, /* ####............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xc0, /* ..########...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x30, /* ..##......##.... */ - 0x30, 0x70, /* ..##.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x30c8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x61, 0xe0, /* .##....####..... */ - 0x63, 0xf0, /* .##...######.... */ - 0x67, 0x38, /* .##..###..###... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x7e, 0x18, /* .######....##... */ - 0x7e, 0x18, /* .######....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x66, 0x18, /* .##..##....##... */ - 0x67, 0x38, /* .##..###..###... */ - 0x63, 0xf0, /* .##...######.... */ - 0x61, 0xe0, /* .##....####..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x3100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x3138 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x3170 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x18, /* ...........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x31a8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf0, /* .....#######.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1c, 0x30, /* ...###....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x7f, 0xf8, /* .############... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x31e0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0x80, /* .########....... */ - 0x7f, 0x80, /* .########....... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x3218 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x1f, 0xe0, /* ...########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x73, 0x38, /* .###..##..###... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x38, /* .###..##..###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x3250 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x3288 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0d, 0x80, /* ....##.##....... */ - 0x0d, 0x80, /* ....##.##....... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x18, 0xc0, /* ...##...##...... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x30, 0x60, /* ..##.....##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x32c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x32f8 */ - 0x18, 0xc0, /* ...##...##...... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xf0, /* .##.....####.... */ - 0x61, 0xf0, /* .##....#####.... */ - 0x63, 0xb0, /* .##...###.##.... */ - 0x67, 0x30, /* .##..###..##.... */ - 0x6e, 0x30, /* .##.###...##.... */ - 0x7c, 0x30, /* .#####....##.... */ - 0x78, 0x30, /* .####.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x3330 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x61, 0xc0, /* .##....###...... */ - 0x63, 0x80, /* .##...###....... */ - 0x67, 0x00, /* .##..###........ */ - 0x6e, 0x00, /* .##.###......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x78, 0x00, /* .####........... */ - 0x78, 0x00, /* .####........... */ - 0x7c, 0x00, /* .#####.......... */ - 0x6e, 0x00, /* .##.###......... */ - 0x67, 0x00, /* .##..###........ */ - 0x63, 0x80, /* .##...###....... */ - 0x61, 0xc0, /* .##....###...... */ - 0x60, 0xe0, /* .##.....###..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x3368 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xf0, /* .....#######.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1c, 0x30, /* ...###....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x18, 0x30, /* ...##.....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x33a0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x7c, 0xf8, /* .#####..#####... */ - 0x6f, 0xd8, /* .##.######.##... */ - 0x67, 0x98, /* .##..####..##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x33d8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x3410 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x3448 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x3480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x70, 0x30, /* .###......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0xb0, /* ......###.##.... */ - 0x07, 0x30, /* .....###..##.... */ - 0x0e, 0x30, /* ....###...##.... */ - 0x1c, 0x30, /* ...###....##.... */ - 0x38, 0x30, /* ..###.....##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x34b8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x34f0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x3528 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x03, 0x00, /* ......##........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x3560 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xc0, /* ..########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x3598 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x38, /* .###..##..###... */ - 0x3b, 0x70, /* ..###.##.###.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x3b, 0x70, /* ..###.##.###.... */ - 0x73, 0x38, /* .###..##..###... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x35d0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x60, /* .##......##..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x60, 0x60, /* .##......##..... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x3608 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x60, 0x00, /* .##............. */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x60, 0x70, /* .##......###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x70, /* .##......###.... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x3640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x60, 0x18, /* .##........##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x7f, 0x98, /* .########..##... */ - 0x61, 0xd8, /* .##....###.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x60, 0xd8, /* .##.....##.##... */ - 0x61, 0xd8, /* .##....###.##... */ - 0x7f, 0x98, /* .########..##... */ - 0x7f, 0x18, /* .#######...##... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x3678 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x70, /* .........###.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x36b0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x18, /* .###..##...##... */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x36e8 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xc0, /* ...#######...... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x1f, 0xc0, /* ...#######...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x3720 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x63, 0x18, /* .##...##...##... */ - 0x73, 0x18, /* .###..##...##... */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x0c, /* ............##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x3758 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x60, 0x30, /* .##.......##.... */ - 0x70, 0x30, /* .###......##.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x30, /* ..........##.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x3790 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xf0, 0x00, /* ####............ */ - 0xf0, 0x00, /* ####............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x30, 0x00, /* ..##............ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x30, 0x38, /* ..##......###... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x18, /* ..##.......##... */ - 0x30, 0x38, /* ..##......###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_bold_14x28_koi8_r_descriptors[] = { - { 0x0e, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x0e, 0x0038 }, /* Index: 0x01, char: \x02 */ - { 0x0e, 0x0070 }, /* Index: 0x02, char: \x03 */ - { 0x0e, 0x00a8 }, /* Index: 0x03, char: \x04 */ - { 0x0e, 0x00e0 }, /* Index: 0x04, char: \x05 */ - { 0x0e, 0x0118 }, /* Index: 0x05, char: \x06 */ - { 0x0e, 0x0150 }, /* Index: 0x06, char: \x07 */ - { 0x0e, 0x0188 }, /* Index: 0x07, char: \x08 */ - { 0x0e, 0x01c0 }, /* Index: 0x08, char: \x09 */ - { 0x0e, 0x01f8 }, /* Index: 0x09, char: \x0a */ - { 0x0e, 0x0230 }, /* Index: 0x0a, char: \x0b */ - { 0x0e, 0x0268 }, /* Index: 0x0b, char: \x0c */ - { 0x0e, 0x02a0 }, /* Index: 0x0c, char: \x0d */ - { 0x0e, 0x02d8 }, /* Index: 0x0d, char: \x0e */ - { 0x0e, 0x0310 }, /* Index: 0x0e, char: \x0f */ - { 0x0e, 0x0348 }, /* Index: 0x0f, char: \x10 */ - { 0x0e, 0x0380 }, /* Index: 0x10, char: \x11 */ - { 0x0e, 0x03b8 }, /* Index: 0x11, char: \x12 */ - { 0x0e, 0x03f0 }, /* Index: 0x12, char: \x13 */ - { 0x0e, 0x0428 }, /* Index: 0x13, char: \x14 */ - { 0x0e, 0x0460 }, /* Index: 0x14, char: \x15 */ - { 0x0e, 0x0498 }, /* Index: 0x15, char: \x16 */ - { 0x0e, 0x04d0 }, /* Index: 0x16, char: \x17 */ - { 0x0e, 0x0508 }, /* Index: 0x17, char: \x18 */ - { 0x0e, 0x0540 }, /* Index: 0x18, char: \x19 */ - { 0x0e, 0x0578 }, /* Index: 0x19, char: \x1a */ - { 0x0e, 0x05b0 }, /* Index: 0x1a, char: \x1b */ - { 0x0e, 0x05e8 }, /* Index: 0x1b, char: \x1c */ - { 0x0e, 0x0620 }, /* Index: 0x1c, char: \x1d */ - { 0x0e, 0x0658 }, /* Index: 0x1d, char: \x1e */ - { 0x0e, 0x0690 }, /* Index: 0x1e, char: \x1f */ - { 0x0e, 0x06c8 }, /* Index: 0x1f, char: \x20 */ - { 0x0e, 0x0700 }, /* Index: 0x20, char: \x21 */ - { 0x0e, 0x0738 }, /* Index: 0x21, char: \x22 */ - { 0x0e, 0x0770 }, /* Index: 0x22, char: \x23 */ - { 0x0e, 0x07a8 }, /* Index: 0x23, char: \x24 */ - { 0x0e, 0x07e0 }, /* Index: 0x24, char: \x25 */ - { 0x0e, 0x0818 }, /* Index: 0x25, char: \x26 */ - { 0x0e, 0x0850 }, /* Index: 0x26, char: \x27 */ - { 0x0e, 0x0888 }, /* Index: 0x27, char: \x28 */ - { 0x0e, 0x08c0 }, /* Index: 0x28, char: \x29 */ - { 0x0e, 0x08f8 }, /* Index: 0x29, char: \x2a */ - { 0x0e, 0x0930 }, /* Index: 0x2a, char: \x2b */ - { 0x0e, 0x0968 }, /* Index: 0x2b, char: \x2c */ - { 0x0e, 0x09a0 }, /* Index: 0x2c, char: \x2d */ - { 0x0e, 0x09d8 }, /* Index: 0x2d, char: \x2e */ - { 0x0e, 0x0a10 }, /* Index: 0x2e, char: \x2f */ - { 0x0e, 0x0a48 }, /* Index: 0x2f, char: \x30 */ - { 0x0e, 0x0a80 }, /* Index: 0x30, char: \x31 */ - { 0x0e, 0x0ab8 }, /* Index: 0x31, char: \x32 */ - { 0x0e, 0x0af0 }, /* Index: 0x32, char: \x33 */ - { 0x0e, 0x0b28 }, /* Index: 0x33, char: \x34 */ - { 0x0e, 0x0b60 }, /* Index: 0x34, char: \x35 */ - { 0x0e, 0x0b98 }, /* Index: 0x35, char: \x36 */ - { 0x0e, 0x0bd0 }, /* Index: 0x36, char: \x37 */ - { 0x0e, 0x0c08 }, /* Index: 0x37, char: \x38 */ - { 0x0e, 0x0c40 }, /* Index: 0x38, char: \x39 */ - { 0x0e, 0x0c78 }, /* Index: 0x39, char: \x3a */ - { 0x0e, 0x0cb0 }, /* Index: 0x3a, char: \x3b */ - { 0x0e, 0x0ce8 }, /* Index: 0x3b, char: \x3c */ - { 0x0e, 0x0d20 }, /* Index: 0x3c, char: \x3d */ - { 0x0e, 0x0d58 }, /* Index: 0x3d, char: \x3e */ - { 0x0e, 0x0d90 }, /* Index: 0x3e, char: \x3f */ - { 0x0e, 0x0dc8 }, /* Index: 0x3f, char: \x40 */ - { 0x0e, 0x0e00 }, /* Index: 0x40, char: \x41 */ - { 0x0e, 0x0e38 }, /* Index: 0x41, char: \x42 */ - { 0x0e, 0x0e70 }, /* Index: 0x42, char: \x43 */ - { 0x0e, 0x0ea8 }, /* Index: 0x43, char: \x44 */ - { 0x0e, 0x0ee0 }, /* Index: 0x44, char: \x45 */ - { 0x0e, 0x0f18 }, /* Index: 0x45, char: \x46 */ - { 0x0e, 0x0f50 }, /* Index: 0x46, char: \x47 */ - { 0x0e, 0x0f88 }, /* Index: 0x47, char: \x48 */ - { 0x0e, 0x0fc0 }, /* Index: 0x48, char: \x49 */ - { 0x0e, 0x0ff8 }, /* Index: 0x49, char: \x4a */ - { 0x0e, 0x1030 }, /* Index: 0x4a, char: \x4b */ - { 0x0e, 0x1068 }, /* Index: 0x4b, char: \x4c */ - { 0x0e, 0x10a0 }, /* Index: 0x4c, char: \x4d */ - { 0x0e, 0x10d8 }, /* Index: 0x4d, char: \x4e */ - { 0x0e, 0x1110 }, /* Index: 0x4e, char: \x4f */ - { 0x0e, 0x1148 }, /* Index: 0x4f, char: \x50 */ - { 0x0e, 0x1180 }, /* Index: 0x50, char: \x51 */ - { 0x0e, 0x11b8 }, /* Index: 0x51, char: \x52 */ - { 0x0e, 0x11f0 }, /* Index: 0x52, char: \x53 */ - { 0x0e, 0x1228 }, /* Index: 0x53, char: \x54 */ - { 0x0e, 0x1260 }, /* Index: 0x54, char: \x55 */ - { 0x0e, 0x1298 }, /* Index: 0x55, char: \x56 */ - { 0x0e, 0x12d0 }, /* Index: 0x56, char: \x57 */ - { 0x0e, 0x1308 }, /* Index: 0x57, char: \x58 */ - { 0x0e, 0x1340 }, /* Index: 0x58, char: \x59 */ - { 0x0e, 0x1378 }, /* Index: 0x59, char: \x5a */ - { 0x0e, 0x13b0 }, /* Index: 0x5a, char: \x5b */ - { 0x0e, 0x13e8 }, /* Index: 0x5b, char: \x5c */ - { 0x0e, 0x1420 }, /* Index: 0x5c, char: \x5d */ - { 0x0e, 0x1458 }, /* Index: 0x5d, char: \x5e */ - { 0x0e, 0x1490 }, /* Index: 0x5e, char: \x5f */ - { 0x0e, 0x14c8 }, /* Index: 0x5f, char: \x60 */ - { 0x0e, 0x1500 }, /* Index: 0x60, char: \x61 */ - { 0x0e, 0x1538 }, /* Index: 0x61, char: \x62 */ - { 0x0e, 0x1570 }, /* Index: 0x62, char: \x63 */ - { 0x0e, 0x15a8 }, /* Index: 0x63, char: \x64 */ - { 0x0e, 0x15e0 }, /* Index: 0x64, char: \x65 */ - { 0x0e, 0x1618 }, /* Index: 0x65, char: \x66 */ - { 0x0e, 0x1650 }, /* Index: 0x66, char: \x67 */ - { 0x0e, 0x1688 }, /* Index: 0x67, char: \x68 */ - { 0x0e, 0x16c0 }, /* Index: 0x68, char: \x69 */ - { 0x0e, 0x16f8 }, /* Index: 0x69, char: \x6a */ - { 0x0e, 0x1730 }, /* Index: 0x6a, char: \x6b */ - { 0x0e, 0x1768 }, /* Index: 0x6b, char: \x6c */ - { 0x0e, 0x17a0 }, /* Index: 0x6c, char: \x6d */ - { 0x0e, 0x17d8 }, /* Index: 0x6d, char: \x6e */ - { 0x0e, 0x1810 }, /* Index: 0x6e, char: \x6f */ - { 0x0e, 0x1848 }, /* Index: 0x6f, char: \x70 */ - { 0x0e, 0x1880 }, /* Index: 0x70, char: \x71 */ - { 0x0e, 0x18b8 }, /* Index: 0x71, char: \x72 */ - { 0x0e, 0x18f0 }, /* Index: 0x72, char: \x73 */ - { 0x0e, 0x1928 }, /* Index: 0x73, char: \x74 */ - { 0x0e, 0x1960 }, /* Index: 0x74, char: \x75 */ - { 0x0e, 0x1998 }, /* Index: 0x75, char: \x76 */ - { 0x0e, 0x19d0 }, /* Index: 0x76, char: \x77 */ - { 0x0e, 0x1a08 }, /* Index: 0x77, char: \x78 */ - { 0x0e, 0x1a40 }, /* Index: 0x78, char: \x79 */ - { 0x0e, 0x1a78 }, /* Index: 0x79, char: \x7a */ - { 0x0e, 0x1ab0 }, /* Index: 0x7a, char: \x7b */ - { 0x0e, 0x1ae8 }, /* Index: 0x7b, char: \x7c */ - { 0x0e, 0x1b20 }, /* Index: 0x7c, char: \x7d */ - { 0x0e, 0x1b58 }, /* Index: 0x7d, char: \x7e */ - { 0x0e, 0x1b90 }, /* Index: 0x7e, char: \x7f */ - { 0x0e, 0x1bc8 }, /* Index: 0x7f, char: \x80 */ - { 0x0e, 0x1c00 }, /* Index: 0x80, char: \x81 */ - { 0x0e, 0x1c38 }, /* Index: 0x81, char: \x82 */ - { 0x0e, 0x1c70 }, /* Index: 0x82, char: \x83 */ - { 0x0e, 0x1ca8 }, /* Index: 0x83, char: \x84 */ - { 0x0e, 0x1ce0 }, /* Index: 0x84, char: \x85 */ - { 0x0e, 0x1d18 }, /* Index: 0x85, char: \x86 */ - { 0x0e, 0x1d50 }, /* Index: 0x86, char: \x87 */ - { 0x0e, 0x1d88 }, /* Index: 0x87, char: \x88 */ - { 0x0e, 0x1dc0 }, /* Index: 0x88, char: \x89 */ - { 0x0e, 0x1df8 }, /* Index: 0x89, char: \x8a */ - { 0x0e, 0x1e30 }, /* Index: 0x8a, char: \x8b */ - { 0x0e, 0x1e68 }, /* Index: 0x8b, char: \x8c */ - { 0x0e, 0x1ea0 }, /* Index: 0x8c, char: \x8d */ - { 0x0e, 0x1ed8 }, /* Index: 0x8d, char: \x8e */ - { 0x0e, 0x1f10 }, /* Index: 0x8e, char: \x8f */ - { 0x0e, 0x1f48 }, /* Index: 0x8f, char: \x90 */ - { 0x0e, 0x1f80 }, /* Index: 0x90, char: \x91 */ - { 0x0e, 0x1fb8 }, /* Index: 0x91, char: \x92 */ - { 0x0e, 0x1ff0 }, /* Index: 0x92, char: \x93 */ - { 0x0e, 0x2028 }, /* Index: 0x93, char: \x94 */ - { 0x0e, 0x2060 }, /* Index: 0x94, char: \x95 */ - { 0x0e, 0x2098 }, /* Index: 0x95, char: \x96 */ - { 0x0e, 0x20d0 }, /* Index: 0x96, char: \x97 */ - { 0x0e, 0x2108 }, /* Index: 0x97, char: \x98 */ - { 0x0e, 0x2140 }, /* Index: 0x98, char: \x99 */ - { 0x0e, 0x2178 }, /* Index: 0x99, char: \x9a */ - { 0x0e, 0x21b0 }, /* Index: 0x9a, char: \x9b */ - { 0x0e, 0x21e8 }, /* Index: 0x9b, char: \x9c */ - { 0x0e, 0x2220 }, /* Index: 0x9c, char: \x9d */ - { 0x0e, 0x2258 }, /* Index: 0x9d, char: \x9e */ - { 0x0e, 0x2290 }, /* Index: 0x9e, char: \x9f */ - { 0x0e, 0x22c8 }, /* Index: 0x9f, char: \xa0 */ - { 0x0e, 0x2300 }, /* Index: 0xa0, char: \xa1 */ - { 0x0e, 0x2338 }, /* Index: 0xa1, char: \xa2 */ - { 0x0e, 0x2370 }, /* Index: 0xa2, char: \xa3 */ - { 0x0e, 0x23a8 }, /* Index: 0xa3, char: \xa4 */ - { 0x0e, 0x23e0 }, /* Index: 0xa4, char: \xa5 */ - { 0x0e, 0x2418 }, /* Index: 0xa5, char: \xa6 */ - { 0x0e, 0x2450 }, /* Index: 0xa6, char: \xa7 */ - { 0x0e, 0x2488 }, /* Index: 0xa7, char: \xa8 */ - { 0x0e, 0x24c0 }, /* Index: 0xa8, char: \xa9 */ - { 0x0e, 0x24f8 }, /* Index: 0xa9, char: \xaa */ - { 0x0e, 0x2530 }, /* Index: 0xaa, char: \xab */ - { 0x0e, 0x2568 }, /* Index: 0xab, char: \xac */ - { 0x0e, 0x25a0 }, /* Index: 0xac, char: \xad */ - { 0x0e, 0x25d8 }, /* Index: 0xad, char: \xae */ - { 0x0e, 0x2610 }, /* Index: 0xae, char: \xaf */ - { 0x0e, 0x2648 }, /* Index: 0xaf, char: \xb0 */ - { 0x0e, 0x2680 }, /* Index: 0xb0, char: \xb1 */ - { 0x0e, 0x26b8 }, /* Index: 0xb1, char: \xb2 */ - { 0x0e, 0x26f0 }, /* Index: 0xb2, char: \xb3 */ - { 0x0e, 0x2728 }, /* Index: 0xb3, char: \xb4 */ - { 0x0e, 0x2760 }, /* Index: 0xb4, char: \xb5 */ - { 0x0e, 0x2798 }, /* Index: 0xb5, char: \xb6 */ - { 0x0e, 0x27d0 }, /* Index: 0xb6, char: \xb7 */ - { 0x0e, 0x2808 }, /* Index: 0xb7, char: \xb8 */ - { 0x0e, 0x2840 }, /* Index: 0xb8, char: \xb9 */ - { 0x0e, 0x2878 }, /* Index: 0xb9, char: \xba */ - { 0x0e, 0x28b0 }, /* Index: 0xba, char: \xbb */ - { 0x0e, 0x28e8 }, /* Index: 0xbb, char: \xbc */ - { 0x0e, 0x2920 }, /* Index: 0xbc, char: \xbd */ - { 0x0e, 0x2958 }, /* Index: 0xbd, char: \xbe */ - { 0x0e, 0x2990 }, /* Index: 0xbe, char: \xbf */ - { 0x0e, 0x29c8 }, /* Index: 0xbf, char: \xc0 */ - { 0x0e, 0x2a00 }, /* Index: 0xc0, char: \xc1 */ - { 0x0e, 0x2a38 }, /* Index: 0xc1, char: \xc2 */ - { 0x0e, 0x2a70 }, /* Index: 0xc2, char: \xc3 */ - { 0x0e, 0x2aa8 }, /* Index: 0xc3, char: \xc4 */ - { 0x0e, 0x2ae0 }, /* Index: 0xc4, char: \xc5 */ - { 0x0e, 0x2b18 }, /* Index: 0xc5, char: \xc6 */ - { 0x0e, 0x2b50 }, /* Index: 0xc6, char: \xc7 */ - { 0x0e, 0x2b88 }, /* Index: 0xc7, char: \xc8 */ - { 0x0e, 0x2bc0 }, /* Index: 0xc8, char: \xc9 */ - { 0x0e, 0x2bf8 }, /* Index: 0xc9, char: \xca */ - { 0x0e, 0x2c30 }, /* Index: 0xca, char: \xcb */ - { 0x0e, 0x2c68 }, /* Index: 0xcb, char: \xcc */ - { 0x0e, 0x2ca0 }, /* Index: 0xcc, char: \xcd */ - { 0x0e, 0x2cd8 }, /* Index: 0xcd, char: \xce */ - { 0x0e, 0x2d10 }, /* Index: 0xce, char: \xcf */ - { 0x0e, 0x2d48 }, /* Index: 0xcf, char: \xd0 */ - { 0x0e, 0x2d80 }, /* Index: 0xd0, char: \xd1 */ - { 0x0e, 0x2db8 }, /* Index: 0xd1, char: \xd2 */ - { 0x0e, 0x2df0 }, /* Index: 0xd2, char: \xd3 */ - { 0x0e, 0x2e28 }, /* Index: 0xd3, char: \xd4 */ - { 0x0e, 0x2e60 }, /* Index: 0xd4, char: \xd5 */ - { 0x0e, 0x2e98 }, /* Index: 0xd5, char: \xd6 */ - { 0x0e, 0x2ed0 }, /* Index: 0xd6, char: \xd7 */ - { 0x0e, 0x2f08 }, /* Index: 0xd7, char: \xd8 */ - { 0x0e, 0x2f40 }, /* Index: 0xd8, char: \xd9 */ - { 0x0e, 0x2f78 }, /* Index: 0xd9, char: \xda */ - { 0x0e, 0x2fb0 }, /* Index: 0xda, char: \xdb */ - { 0x0e, 0x2fe8 }, /* Index: 0xdb, char: \xdc */ - { 0x0e, 0x3020 }, /* Index: 0xdc, char: \xdd */ - { 0x0e, 0x3058 }, /* Index: 0xdd, char: \xde */ - { 0x0e, 0x3090 }, /* Index: 0xde, char: \xdf */ - { 0x0e, 0x30c8 }, /* Index: 0xdf, char: \xe0 */ - { 0x0e, 0x3100 }, /* Index: 0xe0, char: \xe1 */ - { 0x0e, 0x3138 }, /* Index: 0xe1, char: \xe2 */ - { 0x0e, 0x3170 }, /* Index: 0xe2, char: \xe3 */ - { 0x0e, 0x31a8 }, /* Index: 0xe3, char: \xe4 */ - { 0x0e, 0x31e0 }, /* Index: 0xe4, char: \xe5 */ - { 0x0e, 0x3218 }, /* Index: 0xe5, char: \xe6 */ - { 0x0e, 0x3250 }, /* Index: 0xe6, char: \xe7 */ - { 0x0e, 0x3288 }, /* Index: 0xe7, char: \xe8 */ - { 0x0e, 0x32c0 }, /* Index: 0xe8, char: \xe9 */ - { 0x0e, 0x32f8 }, /* Index: 0xe9, char: \xea */ - { 0x0e, 0x3330 }, /* Index: 0xea, char: \xeb */ - { 0x0e, 0x3368 }, /* Index: 0xeb, char: \xec */ - { 0x0e, 0x33a0 }, /* Index: 0xec, char: \xed */ - { 0x0e, 0x33d8 }, /* Index: 0xed, char: \xee */ - { 0x0e, 0x3410 }, /* Index: 0xee, char: \xef */ - { 0x0e, 0x3448 }, /* Index: 0xef, char: \xf0 */ - { 0x0e, 0x3480 }, /* Index: 0xf0, char: \xf1 */ - { 0x0e, 0x34b8 }, /* Index: 0xf1, char: \xf2 */ - { 0x0e, 0x34f0 }, /* Index: 0xf2, char: \xf3 */ - { 0x0e, 0x3528 }, /* Index: 0xf3, char: \xf4 */ - { 0x0e, 0x3560 }, /* Index: 0xf4, char: \xf5 */ - { 0x0e, 0x3598 }, /* Index: 0xf5, char: \xf6 */ - { 0x0e, 0x35d0 }, /* Index: 0xf6, char: \xf7 */ - { 0x0e, 0x3608 }, /* Index: 0xf7, char: \xf8 */ - { 0x0e, 0x3640 }, /* Index: 0xf8, char: \xf9 */ - { 0x0e, 0x3678 }, /* Index: 0xf9, char: \xfa */ - { 0x0e, 0x36b0 }, /* Index: 0xfa, char: \xfb */ - { 0x0e, 0x36e8 }, /* Index: 0xfb, char: \xfc */ - { 0x0e, 0x3720 }, /* Index: 0xfc, char: \xfd */ - { 0x0e, 0x3758 }, /* Index: 0xfd, char: \xfe */ - { 0x0e, 0x3790 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_14x28_koi8_r_info = -{ - .height = 28, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_14x28_koi8_r_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_14x28_koi8_r_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_14X28_KOI8_R_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_16x32_iso8859_1.h b/extras/fonts/data/font_terminus_bold_16x32_iso8859_1.h deleted file mode 100644 index 0f7333a..0000000 --- a/extras/fonts/data/font_terminus_bold_16x32_iso8859_1.h +++ /dev/null @@ -1,8959 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 16x32 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 02:38:29 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_16X32_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_16X32_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_bold_16x32_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x7f, 0xfc, /* .#############.. */ - 0xff, 0xfe, /* ###############. */ - 0xff, 0xfe, /* ###############. */ - 0x7f, 0xfc, /* .#############.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0040 */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - - /* Index: 0x02, char: \x03, offset: 0x0080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0xfe, /* ......#########. */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x00c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0x00, /* .#######........ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x0100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x7f, 0xc0, /* .#########...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x71, 0xc0, /* .###...###...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0x8e, /* ......###...###. */ - 0x03, 0x8e, /* ......###...###. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xb8, /* ......###.###... */ - 0x03, 0x9c, /* ......###..###.. */ - 0x03, 0x8e, /* ......###...###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x0140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x01c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x79, 0xc0, /* .####..###...... */ - 0x7d, 0xc0, /* .#####.###...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x77, 0xc0, /* .###.#####...... */ - 0x73, 0xc0, /* .###..####...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0xfe, /* ......#########. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x0240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0280 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x02c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x0d, char: \x0e, offset: 0x0340 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0380 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x0f, char: \x10, offset: 0x03c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x0440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x04c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0500 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x15, char: \x16, offset: 0x0540 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x16, char: \x17, offset: 0x0580 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x05c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x18, char: \x19, offset: 0x0600 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x19, char: \x1a, offset: 0x0640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x0680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x06c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x0e, /* ............###. */ - 0x00, 0x1c, /* ...........###.. */ - 0x7f, 0xfe, /* .##############. */ - 0x7f, 0xfe, /* .##############. */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x7f, 0xfe, /* .##############. */ - 0x7f, 0xfe, /* .##############. */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1e, 0x78, /* ...####..####... */ - 0x1c, 0x38, /* ...###....###... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x07c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x08c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x7b, 0x80, /* .####.###....... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x03, 0xbc, /* ......###.####.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x0900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x1c, /* ...#####...###.. */ - 0x3f, 0x9c, /* ..#######..###.. */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0x70, /* ...#####.###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0xf8, /* ....###.#####... */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1d, 0xdc, /* ...###.###.###.. */ - 0x1d, 0xdc, /* ...###.###.###.. */ - 0x39, 0xfc, /* ..###..#######.. */ - 0x38, 0xf8, /* ..###...#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xce, /* ...#######..###. */ - 0x38, 0xee, /* ..###...###.###. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x7c, /* .####....#####.. */ - 0x3f, 0xee, /* ..#########.###. */ - 0x1f, 0xce, /* ...#######..###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x09c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x0a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x0a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0x80, /* ...######....... */ - 0x1f, 0x80, /* ...######....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x7c, /* .........#####.. */ - 0x00, 0xfc, /* ........######.. */ - 0x01, 0xdc, /* .......###.###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x1c, /* .....###...###.. */ - 0x0e, 0x1c, /* ....###....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x0e, /* .####.......###. */ - 0x70, 0x06, /* .###.........##. */ - 0x71, 0xfe, /* .###...########. */ - 0x73, 0xfe, /* .###..#########. */ - 0x77, 0x8e, /* .###.####...###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x9e, /* .###.####..####. */ - 0x73, 0xfe, /* .###..#########. */ - 0x71, 0xf6, /* .###...#####.##. */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x3f, 0xfe, /* ..#############. */ - 0x1f, 0xfe, /* ...############. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x1000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x1040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x1080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x10c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x78, /* .###.....####... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x78, /* .###.....####... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x1100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x1140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x1180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x71, 0xfc, /* .###...#######.. */ - 0x71, 0xfc, /* .###...#######.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x11c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x1200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x1240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xfe, /* ........#######. */ - 0x00, 0xfe, /* ........#######. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x1280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0c, /* .###........##.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0xe0, /* .###....###..... */ - 0x71, 0xc0, /* .###...###...... */ - 0x73, 0x80, /* .###..###....... */ - 0x77, 0x00, /* .###.###........ */ - 0x7e, 0x00, /* .######......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x7e, 0x00, /* .######......... */ - 0x77, 0x00, /* .###.###........ */ - 0x73, 0x80, /* .###..###....... */ - 0x71, 0xc0, /* .###...###...... */ - 0x70, 0xe0, /* .###....###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x0c, /* .###........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x12c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x1300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x78, 0x1e, /* .####......####. */ - 0x7c, 0x3e, /* .#####....#####. */ - 0x7e, 0x7e, /* .######..######. */ - 0x7e, 0x7e, /* .######..######. */ - 0x77, 0xee, /* .###.######.###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x71, 0x8e, /* .###...##...###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x1380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x13c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x1400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x79, 0xfc, /* .####..#######.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x1440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7e, 0x00, /* .######......... */ - 0x77, 0x00, /* .###.###........ */ - 0x73, 0x80, /* .###..###....... */ - 0x71, 0xc0, /* .###...###...... */ - 0x70, 0xe0, /* .###....###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x1480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x14c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x1540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x1580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x71, 0x8e, /* .###...##...###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x77, 0xee, /* .###.######.###. */ - 0x7e, 0x7e, /* .######..######. */ - 0x7e, 0x7e, /* .######..######. */ - 0x7c, 0x3e, /* .#####....#####. */ - 0x78, 0x1e, /* .####......####. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x15c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x1640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x1680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x16c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x17c0 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x1900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x1940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xfe, /* ........#######. */ - 0x01, 0xfe, /* .......########. */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x19c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x1a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xf8, /* ........#####... */ - 0x00, 0xf8, /* ........#####... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x3c, 0x78, /* ..####...####... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x3b, 0x80, /* ..###.###....... */ - 0x3f, 0x00, /* ..######........ */ - 0x3f, 0x00, /* ..######........ */ - 0x3b, 0x80, /* ..###.###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x1b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x73, 0xbc, /* .###..###.####.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x1b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x1b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x1c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0xfc, /* .###..########.. */ - 0x77, 0xfc, /* .###.#########.. */ - 0x7e, 0x00, /* .######......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0xfc, /* ......########.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x1e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0xf0, /* ......######.... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0xf0, /* ......######.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3f, 0x00, /* ..######........ */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xf0, /* .......#####.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x3f, 0x00, /* ..######........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x1c, /* ...####....###.. */ - 0x3f, 0x1c, /* ..######...###.. */ - 0x77, 0x9c, /* .###.####..###.. */ - 0x73, 0xdc, /* .###..####.###.. */ - 0x71, 0xf8, /* .###...######... */ - 0x70, 0xf0, /* .###....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x1fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x2000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x81, char: \x82, offset: 0x2040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x82, char: \x83, offset: 0x2080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x83, char: \x84, offset: 0x20c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x2100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x2140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x86, char: \x87, offset: 0x2180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x87, char: \x88, offset: 0x21c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x88, char: \x89, offset: 0x2200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x2240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8a, char: \x8b, offset: 0x2280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x22c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8c, char: \x8d, offset: 0x2300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8d, char: \x8e, offset: 0x2340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8e, char: \x8f, offset: 0x2380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8f, char: \x90, offset: 0x23c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x2400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x91, char: \x92, offset: 0x2440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x92, char: \x93, offset: 0x2480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x93, char: \x94, offset: 0x24c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x2500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x2540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x2580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x25c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x2600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x2640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x2680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x26c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x2700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x2740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x2780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x27c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x2800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa1, char: \xa2, offset: 0x2840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa2, char: \xa3, offset: 0x2880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1e, 0x78, /* ...####..####... */ - 0x1c, 0x38, /* ...###....###... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x28c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa4, char: \xa5, offset: 0x2900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa5, char: \xa6, offset: 0x2940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa6, char: \xa7, offset: 0x2980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1e, 0x78, /* ...####..####... */ - 0x1c, 0x38, /* ...###....###... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1e, 0x00, /* ...####......... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1c, 0xf0, /* ...###..####.... */ - 0x1c, 0x78, /* ...###...####... */ - 0x1c, 0x38, /* ...###....###... */ - 0x1c, 0x38, /* ...###....###... */ - 0x1c, 0x38, /* ...###....###... */ - 0x1e, 0x38, /* ...####...###... */ - 0x0f, 0x38, /* ....####..###... */ - 0x07, 0xf0, /* .....#######.... */ - 0x03, 0xf0, /* ......######.... */ - 0x00, 0x78, /* .........####... */ - 0x00, 0x38, /* ..........###... */ - 0x1c, 0x38, /* ...###....###... */ - 0x1e, 0x78, /* ...####..####... */ - 0x0f, 0xf0, /* ....########.... */ - 0x07, 0xe0, /* .....######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa7, char: \xa8, offset: 0x29c0 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa8, char: \xa9, offset: 0x2a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x70, 0x0e, /* .###........###. */ - 0x67, 0xe6, /* .##..######..##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x6e, 0x76, /* .##.###..###.##. */ - 0x6e, 0x06, /* .##.###......##. */ - 0x6e, 0x06, /* .##.###......##. */ - 0x6e, 0x06, /* .##.###......##. */ - 0x6e, 0x06, /* .##.###......##. */ - 0x6e, 0x76, /* .##.###..###.##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x67, 0xe6, /* .##..######..##. */ - 0x70, 0x0e, /* .###........###. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x2a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xe0, /* ...########..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x0f, 0xf8, /* ....#########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1f, 0xf8, /* ...##########... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x2a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xce, /* .......###..###. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x38, /* .....###..###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0x38, /* .....###..###... */ - 0x03, 0x9c, /* ......###..###.. */ - 0x01, 0xce, /* .......###..###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x2b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x2b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x70, 0x0e, /* .###........###. */ - 0x6f, 0xe6, /* .##.#######..##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x6e, 0x76, /* .##.###..###.##. */ - 0x6e, 0x76, /* .##.###..###.##. */ - 0x6e, 0x76, /* .##.###..###.##. */ - 0x6f, 0xe6, /* .##.#######..##. */ - 0x6f, 0xc6, /* .##.######...##. */ - 0x6f, 0xc6, /* .##.######...##. */ - 0x6e, 0xe6, /* .##.###.###..##. */ - 0x6e, 0x76, /* .##.###..###.##. */ - 0x70, 0x0e, /* .###........###. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x2b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaf, char: \xb0, offset: 0x2bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb0, char: \xb1, offset: 0x2c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb1, char: \xb2, offset: 0x2c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb2, char: \xb3, offset: 0x2c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x70, /* .........###.... */ - 0x03, 0xe0, /* ......#####..... */ - 0x03, 0xe0, /* ......#####..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb4, char: \xb5, offset: 0x2d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x7f, 0xdc, /* .#########.###.. */ - 0x7f, 0x9c, /* .########..###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb5, char: \xb6, offset: 0x2d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfe, /* ...############. */ - 0x3f, 0xfe, /* ..#############. */ - 0x79, 0xce, /* .####..###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x79, 0xce, /* .####..###..###. */ - 0x3f, 0xce, /* ..########..###. */ - 0x1f, 0xce, /* ...#######..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb6, char: \xb7, offset: 0x2d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb7, char: \xb8, offset: 0x2dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb8, char: \xb9, offset: 0x2e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x2e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x2e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x80, /* .###..###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0x38, /* .....###..###... */ - 0x03, 0x9c, /* ......###..###.. */ - 0x01, 0xce, /* .......###..###. */ - 0x01, 0xce, /* .......###..###. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x38, /* .....###..###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x73, 0x80, /* .###..###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x2ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x1e, 0x00, /* ...####......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x06, /* ....###......##. */ - 0x0e, 0x0e, /* ....###.....###. */ - 0x0e, 0x1c, /* ....###....###.. */ - 0x0e, 0x38, /* ....###...###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xce, /* .......###..###. */ - 0x03, 0x9e, /* ......###..####. */ - 0x07, 0x3e, /* .....###..#####. */ - 0x0e, 0x7e, /* ....###..######. */ - 0x1c, 0xee, /* ...###..###.###. */ - 0x39, 0xce, /* ..###..###..###. */ - 0x73, 0xfe, /* .###..#########. */ - 0x63, 0xfe, /* .##...#########. */ - 0x00, 0x0e, /* ............###. */ - 0x00, 0x0e, /* ............###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbc, char: \xbd, offset: 0x2f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x3c, 0x00, /* ..####.......... */ - 0x7c, 0x06, /* .#####.......##. */ - 0x1c, 0x0e, /* ...###......###. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x38, /* ...###....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0xfc, /* ....###.######.. */ - 0x1d, 0xfe, /* ...###.########. */ - 0x39, 0xce, /* ..###..###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x60, 0x1c, /* .##........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xfe, /* ........#######. */ - 0x01, 0xfe, /* .......########. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbd, char: \xbe, offset: 0x2f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x7f, 0xc0, /* .#########...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x01, 0xc6, /* .......###...##. */ - 0x71, 0xce, /* .###...###..###. */ - 0x7f, 0xdc, /* .#########.###.. */ - 0x3f, 0xb8, /* ..#######.###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xee, /* ........###.###. */ - 0x01, 0xde, /* .......###.####. */ - 0x03, 0xbe, /* ......###.#####. */ - 0x07, 0x7e, /* .....###.######. */ - 0x0e, 0xee, /* ....###.###.###. */ - 0x1d, 0xce, /* ...###.###..###. */ - 0x3b, 0xfe, /* ..###.#########. */ - 0x73, 0xfe, /* .###..#########. */ - 0x60, 0x0e, /* .##.........###. */ - 0x00, 0x0e, /* ............###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbe, char: \xbf, offset: 0x2f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x2fc0 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x3000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x3040 */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x3080 */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x38, /* ...#####..###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x39, 0xf0, /* ..###..#####.... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x30c0 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x3100 */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x3140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfe, /* ..#############. */ - 0x7f, 0xfe, /* .##############. */ - 0xf1, 0xc0, /* ####...###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xff, 0xfe, /* ###############. */ - 0xff, 0xfe, /* ###############. */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xc0, /* ###....###...... */ - 0xe1, 0xfe, /* ###....########. */ - 0xe1, 0xfe, /* ###....########. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x3180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x31c0 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x3200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x3240 */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x3280 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x32c0 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x3300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x3340 */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x3380 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x33c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x78, /* .###.....####... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0xff, 0x9c, /* #########..###.. */ - 0xff, 0x9c, /* #########..###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x78, /* .###.....####... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x3400 */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x38, /* ...#####..###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x39, 0xf0, /* ..###..#####.... */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x3440 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x3480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x34c0 */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x3500 */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x38, /* ...#####..###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x39, 0xf0, /* ..###..#####.... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x3540 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x3580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0e, /* .###........###. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x1c, 0x38, /* ...###....###... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x1c, 0x38, /* ...###....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x70, 0x0e, /* .###........###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x35c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3e, /* .####.....#####. */ - 0x70, 0x1e, /* .###.......####. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0xf0, 0x1c, /* ####.......###.. */ - 0xf0, 0x1c, /* ####.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x3600 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x3640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x3680 */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x36c0 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x3700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x3740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x3780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xe0, /* ..#########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x78, /* .###.....####... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x70, /* .###.....###.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x7c, 0x3c, /* .#####....####.. */ - 0x77, 0xf8, /* .###.########... */ - 0x73, 0xf0, /* .###..######.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x37c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x3800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x3840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x3880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x38, /* ...#####..###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x39, 0xf0, /* ..###..#####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x38c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x3900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x3940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x9e, /* ......###..####. */ - 0x03, 0x8e, /* ......###...###. */ - 0x03, 0x8e, /* ......###...###. */ - 0x3f, 0x8e, /* ..#######...###. */ - 0x7f, 0xfe, /* .##############. */ - 0xf3, 0xfe, /* ####..#########. */ - 0xe3, 0x80, /* ###...###....... */ - 0xe3, 0x80, /* ###...###....... */ - 0xe3, 0x80, /* ###...###....... */ - 0xf3, 0xce, /* ####..####..###. */ - 0x7f, 0xfe, /* .##############. */ - 0x3e, 0xfc, /* ..#####.######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x3980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x39c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x3a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x3a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x3a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x3ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x3b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x3b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x3b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x3bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1d, 0xc0, /* ...###.###...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0x00, /* ...#####........ */ - 0x3b, 0x80, /* ..###.###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x3c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x38, /* ...#####..###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x39, 0xf0, /* ..###..#####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x3c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x3c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x3cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x3d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x38, /* ...#####..###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x39, 0xf0, /* ..###..#####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x3d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x3d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x3dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf6, /* ...#########.##. */ - 0x3f, 0xfe, /* ..#############. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0xff, 0xf8, /* #############... */ - 0xdf, 0xf0, /* ##.#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x3e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x3e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x3e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x3ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x3f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x3f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x3f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_bold_16x32_iso8859_1_descriptors[] = { - { 0x10, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x10, 0x0040 }, /* Index: 0x01, char: \x02 */ - { 0x10, 0x0080 }, /* Index: 0x02, char: \x03 */ - { 0x10, 0x00c0 }, /* Index: 0x03, char: \x04 */ - { 0x10, 0x0100 }, /* Index: 0x04, char: \x05 */ - { 0x10, 0x0140 }, /* Index: 0x05, char: \x06 */ - { 0x10, 0x0180 }, /* Index: 0x06, char: \x07 */ - { 0x10, 0x01c0 }, /* Index: 0x07, char: \x08 */ - { 0x10, 0x0200 }, /* Index: 0x08, char: \x09 */ - { 0x10, 0x0240 }, /* Index: 0x09, char: \x0a */ - { 0x10, 0x0280 }, /* Index: 0x0a, char: \x0b */ - { 0x10, 0x02c0 }, /* Index: 0x0b, char: \x0c */ - { 0x10, 0x0300 }, /* Index: 0x0c, char: \x0d */ - { 0x10, 0x0340 }, /* Index: 0x0d, char: \x0e */ - { 0x10, 0x0380 }, /* Index: 0x0e, char: \x0f */ - { 0x10, 0x03c0 }, /* Index: 0x0f, char: \x10 */ - { 0x10, 0x0400 }, /* Index: 0x10, char: \x11 */ - { 0x10, 0x0440 }, /* Index: 0x11, char: \x12 */ - { 0x10, 0x0480 }, /* Index: 0x12, char: \x13 */ - { 0x10, 0x04c0 }, /* Index: 0x13, char: \x14 */ - { 0x10, 0x0500 }, /* Index: 0x14, char: \x15 */ - { 0x10, 0x0540 }, /* Index: 0x15, char: \x16 */ - { 0x10, 0x0580 }, /* Index: 0x16, char: \x17 */ - { 0x10, 0x05c0 }, /* Index: 0x17, char: \x18 */ - { 0x10, 0x0600 }, /* Index: 0x18, char: \x19 */ - { 0x10, 0x0640 }, /* Index: 0x19, char: \x1a */ - { 0x10, 0x0680 }, /* Index: 0x1a, char: \x1b */ - { 0x10, 0x06c0 }, /* Index: 0x1b, char: \x1c */ - { 0x10, 0x0700 }, /* Index: 0x1c, char: \x1d */ - { 0x10, 0x0740 }, /* Index: 0x1d, char: \x1e */ - { 0x10, 0x0780 }, /* Index: 0x1e, char: \x1f */ - { 0x10, 0x07c0 }, /* Index: 0x1f, char: \x20 */ - { 0x10, 0x0800 }, /* Index: 0x20, char: \x21 */ - { 0x10, 0x0840 }, /* Index: 0x21, char: \x22 */ - { 0x10, 0x0880 }, /* Index: 0x22, char: \x23 */ - { 0x10, 0x08c0 }, /* Index: 0x23, char: \x24 */ - { 0x10, 0x0900 }, /* Index: 0x24, char: \x25 */ - { 0x10, 0x0940 }, /* Index: 0x25, char: \x26 */ - { 0x10, 0x0980 }, /* Index: 0x26, char: \x27 */ - { 0x10, 0x09c0 }, /* Index: 0x27, char: \x28 */ - { 0x10, 0x0a00 }, /* Index: 0x28, char: \x29 */ - { 0x10, 0x0a40 }, /* Index: 0x29, char: \x2a */ - { 0x10, 0x0a80 }, /* Index: 0x2a, char: \x2b */ - { 0x10, 0x0ac0 }, /* Index: 0x2b, char: \x2c */ - { 0x10, 0x0b00 }, /* Index: 0x2c, char: \x2d */ - { 0x10, 0x0b40 }, /* Index: 0x2d, char: \x2e */ - { 0x10, 0x0b80 }, /* Index: 0x2e, char: \x2f */ - { 0x10, 0x0bc0 }, /* Index: 0x2f, char: \x30 */ - { 0x10, 0x0c00 }, /* Index: 0x30, char: \x31 */ - { 0x10, 0x0c40 }, /* Index: 0x31, char: \x32 */ - { 0x10, 0x0c80 }, /* Index: 0x32, char: \x33 */ - { 0x10, 0x0cc0 }, /* Index: 0x33, char: \x34 */ - { 0x10, 0x0d00 }, /* Index: 0x34, char: \x35 */ - { 0x10, 0x0d40 }, /* Index: 0x35, char: \x36 */ - { 0x10, 0x0d80 }, /* Index: 0x36, char: \x37 */ - { 0x10, 0x0dc0 }, /* Index: 0x37, char: \x38 */ - { 0x10, 0x0e00 }, /* Index: 0x38, char: \x39 */ - { 0x10, 0x0e40 }, /* Index: 0x39, char: \x3a */ - { 0x10, 0x0e80 }, /* Index: 0x3a, char: \x3b */ - { 0x10, 0x0ec0 }, /* Index: 0x3b, char: \x3c */ - { 0x10, 0x0f00 }, /* Index: 0x3c, char: \x3d */ - { 0x10, 0x0f40 }, /* Index: 0x3d, char: \x3e */ - { 0x10, 0x0f80 }, /* Index: 0x3e, char: \x3f */ - { 0x10, 0x0fc0 }, /* Index: 0x3f, char: \x40 */ - { 0x10, 0x1000 }, /* Index: 0x40, char: \x41 */ - { 0x10, 0x1040 }, /* Index: 0x41, char: \x42 */ - { 0x10, 0x1080 }, /* Index: 0x42, char: \x43 */ - { 0x10, 0x10c0 }, /* Index: 0x43, char: \x44 */ - { 0x10, 0x1100 }, /* Index: 0x44, char: \x45 */ - { 0x10, 0x1140 }, /* Index: 0x45, char: \x46 */ - { 0x10, 0x1180 }, /* Index: 0x46, char: \x47 */ - { 0x10, 0x11c0 }, /* Index: 0x47, char: \x48 */ - { 0x10, 0x1200 }, /* Index: 0x48, char: \x49 */ - { 0x10, 0x1240 }, /* Index: 0x49, char: \x4a */ - { 0x10, 0x1280 }, /* Index: 0x4a, char: \x4b */ - { 0x10, 0x12c0 }, /* Index: 0x4b, char: \x4c */ - { 0x10, 0x1300 }, /* Index: 0x4c, char: \x4d */ - { 0x10, 0x1340 }, /* Index: 0x4d, char: \x4e */ - { 0x10, 0x1380 }, /* Index: 0x4e, char: \x4f */ - { 0x10, 0x13c0 }, /* Index: 0x4f, char: \x50 */ - { 0x10, 0x1400 }, /* Index: 0x50, char: \x51 */ - { 0x10, 0x1440 }, /* Index: 0x51, char: \x52 */ - { 0x10, 0x1480 }, /* Index: 0x52, char: \x53 */ - { 0x10, 0x14c0 }, /* Index: 0x53, char: \x54 */ - { 0x10, 0x1500 }, /* Index: 0x54, char: \x55 */ - { 0x10, 0x1540 }, /* Index: 0x55, char: \x56 */ - { 0x10, 0x1580 }, /* Index: 0x56, char: \x57 */ - { 0x10, 0x15c0 }, /* Index: 0x57, char: \x58 */ - { 0x10, 0x1600 }, /* Index: 0x58, char: \x59 */ - { 0x10, 0x1640 }, /* Index: 0x59, char: \x5a */ - { 0x10, 0x1680 }, /* Index: 0x5a, char: \x5b */ - { 0x10, 0x16c0 }, /* Index: 0x5b, char: \x5c */ - { 0x10, 0x1700 }, /* Index: 0x5c, char: \x5d */ - { 0x10, 0x1740 }, /* Index: 0x5d, char: \x5e */ - { 0x10, 0x1780 }, /* Index: 0x5e, char: \x5f */ - { 0x10, 0x17c0 }, /* Index: 0x5f, char: \x60 */ - { 0x10, 0x1800 }, /* Index: 0x60, char: \x61 */ - { 0x10, 0x1840 }, /* Index: 0x61, char: \x62 */ - { 0x10, 0x1880 }, /* Index: 0x62, char: \x63 */ - { 0x10, 0x18c0 }, /* Index: 0x63, char: \x64 */ - { 0x10, 0x1900 }, /* Index: 0x64, char: \x65 */ - { 0x10, 0x1940 }, /* Index: 0x65, char: \x66 */ - { 0x10, 0x1980 }, /* Index: 0x66, char: \x67 */ - { 0x10, 0x19c0 }, /* Index: 0x67, char: \x68 */ - { 0x10, 0x1a00 }, /* Index: 0x68, char: \x69 */ - { 0x10, 0x1a40 }, /* Index: 0x69, char: \x6a */ - { 0x10, 0x1a80 }, /* Index: 0x6a, char: \x6b */ - { 0x10, 0x1ac0 }, /* Index: 0x6b, char: \x6c */ - { 0x10, 0x1b00 }, /* Index: 0x6c, char: \x6d */ - { 0x10, 0x1b40 }, /* Index: 0x6d, char: \x6e */ - { 0x10, 0x1b80 }, /* Index: 0x6e, char: \x6f */ - { 0x10, 0x1bc0 }, /* Index: 0x6f, char: \x70 */ - { 0x10, 0x1c00 }, /* Index: 0x70, char: \x71 */ - { 0x10, 0x1c40 }, /* Index: 0x71, char: \x72 */ - { 0x10, 0x1c80 }, /* Index: 0x72, char: \x73 */ - { 0x10, 0x1cc0 }, /* Index: 0x73, char: \x74 */ - { 0x10, 0x1d00 }, /* Index: 0x74, char: \x75 */ - { 0x10, 0x1d40 }, /* Index: 0x75, char: \x76 */ - { 0x10, 0x1d80 }, /* Index: 0x76, char: \x77 */ - { 0x10, 0x1dc0 }, /* Index: 0x77, char: \x78 */ - { 0x10, 0x1e00 }, /* Index: 0x78, char: \x79 */ - { 0x10, 0x1e40 }, /* Index: 0x79, char: \x7a */ - { 0x10, 0x1e80 }, /* Index: 0x7a, char: \x7b */ - { 0x10, 0x1ec0 }, /* Index: 0x7b, char: \x7c */ - { 0x10, 0x1f00 }, /* Index: 0x7c, char: \x7d */ - { 0x10, 0x1f40 }, /* Index: 0x7d, char: \x7e */ - { 0x10, 0x1f80 }, /* Index: 0x7e, char: \x7f */ - { 0x10, 0x1fc0 }, /* Index: 0x7f, char: \x80 */ - { 0x10, 0x2000 }, /* Index: 0x80, char: \x81 */ - { 0x10, 0x2040 }, /* Index: 0x81, char: \x82 */ - { 0x10, 0x2080 }, /* Index: 0x82, char: \x83 */ - { 0x10, 0x20c0 }, /* Index: 0x83, char: \x84 */ - { 0x10, 0x2100 }, /* Index: 0x84, char: \x85 */ - { 0x10, 0x2140 }, /* Index: 0x85, char: \x86 */ - { 0x10, 0x2180 }, /* Index: 0x86, char: \x87 */ - { 0x10, 0x21c0 }, /* Index: 0x87, char: \x88 */ - { 0x10, 0x2200 }, /* Index: 0x88, char: \x89 */ - { 0x10, 0x2240 }, /* Index: 0x89, char: \x8a */ - { 0x10, 0x2280 }, /* Index: 0x8a, char: \x8b */ - { 0x10, 0x22c0 }, /* Index: 0x8b, char: \x8c */ - { 0x10, 0x2300 }, /* Index: 0x8c, char: \x8d */ - { 0x10, 0x2340 }, /* Index: 0x8d, char: \x8e */ - { 0x10, 0x2380 }, /* Index: 0x8e, char: \x8f */ - { 0x10, 0x23c0 }, /* Index: 0x8f, char: \x90 */ - { 0x10, 0x2400 }, /* Index: 0x90, char: \x91 */ - { 0x10, 0x2440 }, /* Index: 0x91, char: \x92 */ - { 0x10, 0x2480 }, /* Index: 0x92, char: \x93 */ - { 0x10, 0x24c0 }, /* Index: 0x93, char: \x94 */ - { 0x10, 0x2500 }, /* Index: 0x94, char: \x95 */ - { 0x10, 0x2540 }, /* Index: 0x95, char: \x96 */ - { 0x10, 0x2580 }, /* Index: 0x96, char: \x97 */ - { 0x10, 0x25c0 }, /* Index: 0x97, char: \x98 */ - { 0x10, 0x2600 }, /* Index: 0x98, char: \x99 */ - { 0x10, 0x2640 }, /* Index: 0x99, char: \x9a */ - { 0x10, 0x2680 }, /* Index: 0x9a, char: \x9b */ - { 0x10, 0x26c0 }, /* Index: 0x9b, char: \x9c */ - { 0x10, 0x2700 }, /* Index: 0x9c, char: \x9d */ - { 0x10, 0x2740 }, /* Index: 0x9d, char: \x9e */ - { 0x10, 0x2780 }, /* Index: 0x9e, char: \x9f */ - { 0x10, 0x27c0 }, /* Index: 0x9f, char: \xa0 */ - { 0x10, 0x2800 }, /* Index: 0xa0, char: \xa1 */ - { 0x10, 0x2840 }, /* Index: 0xa1, char: \xa2 */ - { 0x10, 0x2880 }, /* Index: 0xa2, char: \xa3 */ - { 0x10, 0x28c0 }, /* Index: 0xa3, char: \xa4 */ - { 0x10, 0x2900 }, /* Index: 0xa4, char: \xa5 */ - { 0x10, 0x2940 }, /* Index: 0xa5, char: \xa6 */ - { 0x10, 0x2980 }, /* Index: 0xa6, char: \xa7 */ - { 0x10, 0x29c0 }, /* Index: 0xa7, char: \xa8 */ - { 0x10, 0x2a00 }, /* Index: 0xa8, char: \xa9 */ - { 0x10, 0x2a40 }, /* Index: 0xa9, char: \xaa */ - { 0x10, 0x2a80 }, /* Index: 0xaa, char: \xab */ - { 0x10, 0x2ac0 }, /* Index: 0xab, char: \xac */ - { 0x10, 0x2b00 }, /* Index: 0xac, char: \xad */ - { 0x10, 0x2b40 }, /* Index: 0xad, char: \xae */ - { 0x10, 0x2b80 }, /* Index: 0xae, char: \xaf */ - { 0x10, 0x2bc0 }, /* Index: 0xaf, char: \xb0 */ - { 0x10, 0x2c00 }, /* Index: 0xb0, char: \xb1 */ - { 0x10, 0x2c40 }, /* Index: 0xb1, char: \xb2 */ - { 0x10, 0x2c80 }, /* Index: 0xb2, char: \xb3 */ - { 0x10, 0x2cc0 }, /* Index: 0xb3, char: \xb4 */ - { 0x10, 0x2d00 }, /* Index: 0xb4, char: \xb5 */ - { 0x10, 0x2d40 }, /* Index: 0xb5, char: \xb6 */ - { 0x10, 0x2d80 }, /* Index: 0xb6, char: \xb7 */ - { 0x10, 0x2dc0 }, /* Index: 0xb7, char: \xb8 */ - { 0x10, 0x2e00 }, /* Index: 0xb8, char: \xb9 */ - { 0x10, 0x2e40 }, /* Index: 0xb9, char: \xba */ - { 0x10, 0x2e80 }, /* Index: 0xba, char: \xbb */ - { 0x10, 0x2ec0 }, /* Index: 0xbb, char: \xbc */ - { 0x10, 0x2f00 }, /* Index: 0xbc, char: \xbd */ - { 0x10, 0x2f40 }, /* Index: 0xbd, char: \xbe */ - { 0x10, 0x2f80 }, /* Index: 0xbe, char: \xbf */ - { 0x10, 0x2fc0 }, /* Index: 0xbf, char: \xc0 */ - { 0x10, 0x3000 }, /* Index: 0xc0, char: \xc1 */ - { 0x10, 0x3040 }, /* Index: 0xc1, char: \xc2 */ - { 0x10, 0x3080 }, /* Index: 0xc2, char: \xc3 */ - { 0x10, 0x30c0 }, /* Index: 0xc3, char: \xc4 */ - { 0x10, 0x3100 }, /* Index: 0xc4, char: \xc5 */ - { 0x10, 0x3140 }, /* Index: 0xc5, char: \xc6 */ - { 0x10, 0x3180 }, /* Index: 0xc6, char: \xc7 */ - { 0x10, 0x31c0 }, /* Index: 0xc7, char: \xc8 */ - { 0x10, 0x3200 }, /* Index: 0xc8, char: \xc9 */ - { 0x10, 0x3240 }, /* Index: 0xc9, char: \xca */ - { 0x10, 0x3280 }, /* Index: 0xca, char: \xcb */ - { 0x10, 0x32c0 }, /* Index: 0xcb, char: \xcc */ - { 0x10, 0x3300 }, /* Index: 0xcc, char: \xcd */ - { 0x10, 0x3340 }, /* Index: 0xcd, char: \xce */ - { 0x10, 0x3380 }, /* Index: 0xce, char: \xcf */ - { 0x10, 0x33c0 }, /* Index: 0xcf, char: \xd0 */ - { 0x10, 0x3400 }, /* Index: 0xd0, char: \xd1 */ - { 0x10, 0x3440 }, /* Index: 0xd1, char: \xd2 */ - { 0x10, 0x3480 }, /* Index: 0xd2, char: \xd3 */ - { 0x10, 0x34c0 }, /* Index: 0xd3, char: \xd4 */ - { 0x10, 0x3500 }, /* Index: 0xd4, char: \xd5 */ - { 0x10, 0x3540 }, /* Index: 0xd5, char: \xd6 */ - { 0x10, 0x3580 }, /* Index: 0xd6, char: \xd7 */ - { 0x10, 0x35c0 }, /* Index: 0xd7, char: \xd8 */ - { 0x10, 0x3600 }, /* Index: 0xd8, char: \xd9 */ - { 0x10, 0x3640 }, /* Index: 0xd9, char: \xda */ - { 0x10, 0x3680 }, /* Index: 0xda, char: \xdb */ - { 0x10, 0x36c0 }, /* Index: 0xdb, char: \xdc */ - { 0x10, 0x3700 }, /* Index: 0xdc, char: \xdd */ - { 0x10, 0x3740 }, /* Index: 0xdd, char: \xde */ - { 0x10, 0x3780 }, /* Index: 0xde, char: \xdf */ - { 0x10, 0x37c0 }, /* Index: 0xdf, char: \xe0 */ - { 0x10, 0x3800 }, /* Index: 0xe0, char: \xe1 */ - { 0x10, 0x3840 }, /* Index: 0xe1, char: \xe2 */ - { 0x10, 0x3880 }, /* Index: 0xe2, char: \xe3 */ - { 0x10, 0x38c0 }, /* Index: 0xe3, char: \xe4 */ - { 0x10, 0x3900 }, /* Index: 0xe4, char: \xe5 */ - { 0x10, 0x3940 }, /* Index: 0xe5, char: \xe6 */ - { 0x10, 0x3980 }, /* Index: 0xe6, char: \xe7 */ - { 0x10, 0x39c0 }, /* Index: 0xe7, char: \xe8 */ - { 0x10, 0x3a00 }, /* Index: 0xe8, char: \xe9 */ - { 0x10, 0x3a40 }, /* Index: 0xe9, char: \xea */ - { 0x10, 0x3a80 }, /* Index: 0xea, char: \xeb */ - { 0x10, 0x3ac0 }, /* Index: 0xeb, char: \xec */ - { 0x10, 0x3b00 }, /* Index: 0xec, char: \xed */ - { 0x10, 0x3b40 }, /* Index: 0xed, char: \xee */ - { 0x10, 0x3b80 }, /* Index: 0xee, char: \xef */ - { 0x10, 0x3bc0 }, /* Index: 0xef, char: \xf0 */ - { 0x10, 0x3c00 }, /* Index: 0xf0, char: \xf1 */ - { 0x10, 0x3c40 }, /* Index: 0xf1, char: \xf2 */ - { 0x10, 0x3c80 }, /* Index: 0xf2, char: \xf3 */ - { 0x10, 0x3cc0 }, /* Index: 0xf3, char: \xf4 */ - { 0x10, 0x3d00 }, /* Index: 0xf4, char: \xf5 */ - { 0x10, 0x3d40 }, /* Index: 0xf5, char: \xf6 */ - { 0x10, 0x3d80 }, /* Index: 0xf6, char: \xf7 */ - { 0x10, 0x3dc0 }, /* Index: 0xf7, char: \xf8 */ - { 0x10, 0x3e00 }, /* Index: 0xf8, char: \xf9 */ - { 0x10, 0x3e40 }, /* Index: 0xf9, char: \xfa */ - { 0x10, 0x3e80 }, /* Index: 0xfa, char: \xfb */ - { 0x10, 0x3ec0 }, /* Index: 0xfb, char: \xfc */ - { 0x10, 0x3f00 }, /* Index: 0xfc, char: \xfd */ - { 0x10, 0x3f40 }, /* Index: 0xfd, char: \xfe */ - { 0x10, 0x3f80 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_16x32_iso8859_1_info = -{ - .height = 32, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_16x32_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_16x32_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_16X32_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_16x32_koi8_r.h b/extras/fonts/data/font_terminus_bold_16x32_koi8_r.h deleted file mode 100644 index 13014a2..0000000 --- a/extras/fonts/data/font_terminus_bold_16x32_koi8_r.h +++ /dev/null @@ -1,8959 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 16x32 - * Charset: koi8_r - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_16X32_KOI8_R_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_16X32_KOI8_R_H_ - -static const uint8_t _fonts_terminus_bold_16x32_koi8_r_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x7f, 0xfc, /* .#############.. */ - 0xff, 0xfe, /* ###############. */ - 0xff, 0xfe, /* ###############. */ - 0x7f, 0xfc, /* .#############.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x01, char: \x02, offset: 0x0040 */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - - /* Index: 0x02, char: \x03, offset: 0x0080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0xfe, /* ......#########. */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x03, char: \x04, offset: 0x00c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0x00, /* .#######........ */ - 0x7f, 0x00, /* .#######........ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x04, char: \x05, offset: 0x0100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0x80, /* ..#######....... */ - 0x7f, 0xc0, /* .#########...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x71, 0xc0, /* .###...###...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x3f, 0x80, /* ..#######....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0x8e, /* ......###...###. */ - 0x03, 0x8e, /* ......###...###. */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0xf0, /* ......######.... */ - 0x03, 0xb8, /* ......###.###... */ - 0x03, 0x9c, /* ......###..###.. */ - 0x03, 0x8e, /* ......###...###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x05, char: \x06, offset: 0x0140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0xf8, /* ......#######... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x06, char: \x07, offset: 0x0180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x07, char: \x08, offset: 0x01c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x08, char: \x09, offset: 0x0200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x79, 0xc0, /* .####..###...... */ - 0x7d, 0xc0, /* .#####.###...... */ - 0x7f, 0xc0, /* .#########...... */ - 0x77, 0xc0, /* .###.#####...... */ - 0x73, 0xc0, /* .###..####...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x71, 0xc0, /* .###...###...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xfe, /* ......#########. */ - 0x03, 0xfe, /* ......#########. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x09, char: \x0a, offset: 0x0240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0a, char: \x0b, offset: 0x0280 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0b, char: \x0c, offset: 0x02c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x0c, char: \x0d, offset: 0x0300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x0d, char: \x0e, offset: 0x0340 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x0e, char: \x0f, offset: 0x0380 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x0f, char: \x10, offset: 0x03c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x10, char: \x11, offset: 0x0400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x11, char: \x12, offset: 0x0440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x12, char: \x13, offset: 0x0480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x13, char: \x14, offset: 0x04c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x14, char: \x15, offset: 0x0500 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x15, char: \x16, offset: 0x0540 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x16, char: \x17, offset: 0x0580 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x17, char: \x18, offset: 0x05c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x18, char: \x19, offset: 0x0600 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x19, char: \x1a, offset: 0x0640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1a, char: \x1b, offset: 0x0680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1b, char: \x1c, offset: 0x06c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x0e, /* ............###. */ - 0x00, 0x1c, /* ...........###.. */ - 0x7f, 0xfe, /* .##############. */ - 0x7f, 0xfe, /* .##############. */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x7f, 0xfe, /* .##############. */ - 0x7f, 0xfe, /* .##############. */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xe0, /* .....######..... */ - 0x0f, 0xf0, /* ....########.... */ - 0x1e, 0x78, /* ...####..####... */ - 0x1c, 0x38, /* ...###....###... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1e, char: \x1f, offset: 0x0780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x1f, char: \x20, offset: 0x07c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x20, char: \x21, offset: 0x0800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x21, char: \x22, offset: 0x0840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x22, char: \x23, offset: 0x0880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x23, char: \x24, offset: 0x08c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x7b, 0x80, /* .####.###....... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x03, 0xbc, /* ......###.####.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x24, char: \x25, offset: 0x0900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0x1c, /* ...#####...###.. */ - 0x3f, 0x9c, /* ..#######..###.. */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0x70, /* ...#####.###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0xf8, /* ....###.#####... */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1d, 0xdc, /* ...###.###.###.. */ - 0x1d, 0xdc, /* ...###.###.###.. */ - 0x39, 0xfc, /* ..###..#######.. */ - 0x38, 0xf8, /* ..###...#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x25, char: \x26, offset: 0x0940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xc0, /* ....######...... */ - 0x1f, 0xe0, /* ...########..... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x70, /* ..###....###.... */ - 0x1c, 0xe0, /* ...###..###..... */ - 0x0f, 0xc0, /* ....######...... */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0xce, /* ...#######..###. */ - 0x38, 0xee, /* ..###...###.###. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x7c, /* .####....#####.. */ - 0x3f, 0xee, /* ..#########.###. */ - 0x1f, 0xce, /* ...#######..###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x26, char: \x27, offset: 0x0980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x27, char: \x28, offset: 0x09c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x28, char: \x29, offset: 0x0a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x29, char: \x2a, offset: 0x0a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2a, char: \x2b, offset: 0x0a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2b, char: \x2c, offset: 0x0ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x2f, char: \x30, offset: 0x0bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x30, char: \x31, offset: 0x0c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x1f, 0x80, /* ...######....... */ - 0x1f, 0x80, /* ...######....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x31, char: \x32, offset: 0x0c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x32, char: \x33, offset: 0x0c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x33, char: \x34, offset: 0x0cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x7c, /* .........#####.. */ - 0x00, 0xfc, /* ........######.. */ - 0x01, 0xdc, /* .......###.###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x1c, /* .....###...###.. */ - 0x0e, 0x1c, /* ....###....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x34, char: \x35, offset: 0x0d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x35, char: \x36, offset: 0x0d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x36, char: \x37, offset: 0x0d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x37, char: \x38, offset: 0x0dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x38, char: \x39, offset: 0x0e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x39, char: \x3a, offset: 0x0e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3a, char: \x3b, offset: 0x0e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3b, char: \x3c, offset: 0x0ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x3f, char: \x40, offset: 0x0fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x0e, /* .####.......###. */ - 0x70, 0x06, /* .###.........##. */ - 0x71, 0xfe, /* .###...########. */ - 0x73, 0xfe, /* .###..#########. */ - 0x77, 0x8e, /* .###.####...###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x0e, /* .###.###....###. */ - 0x77, 0x9e, /* .###.####..####. */ - 0x73, 0xfe, /* .###..#########. */ - 0x71, 0xf6, /* .###...#####.##. */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x3f, 0xfe, /* ..#############. */ - 0x1f, 0xfe, /* ...############. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x40, char: \x41, offset: 0x1000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x41, char: \x42, offset: 0x1040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x42, char: \x43, offset: 0x1080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x43, char: \x44, offset: 0x10c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xc0, /* .#########...... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x78, /* .###.....####... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x78, /* .###.....####... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xc0, /* .#########...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x44, char: \x45, offset: 0x1100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x45, char: \x46, offset: 0x1140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x46, char: \x47, offset: 0x1180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x71, 0xfc, /* .###...#######.. */ - 0x71, 0xfc, /* .###...#######.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x47, char: \x48, offset: 0x11c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x48, char: \x49, offset: 0x1200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x49, char: \x4a, offset: 0x1240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xfe, /* ........#######. */ - 0x00, 0xfe, /* ........#######. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x78, /* .####....####... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xe0, /* ...########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4a, char: \x4b, offset: 0x1280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0c, /* .###........##.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0xe0, /* .###....###..... */ - 0x71, 0xc0, /* .###...###...... */ - 0x73, 0x80, /* .###..###....... */ - 0x77, 0x00, /* .###.###........ */ - 0x7e, 0x00, /* .######......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x7e, 0x00, /* .######......... */ - 0x77, 0x00, /* .###.###........ */ - 0x73, 0x80, /* .###..###....... */ - 0x71, 0xc0, /* .###...###...... */ - 0x70, 0xe0, /* .###....###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x0c, /* .###........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4b, char: \x4c, offset: 0x12c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4c, char: \x4d, offset: 0x1300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x78, 0x1e, /* .####......####. */ - 0x7c, 0x3e, /* .#####....#####. */ - 0x7e, 0x7e, /* .######..######. */ - 0x7e, 0x7e, /* .######..######. */ - 0x77, 0xee, /* .###.######.###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x71, 0x8e, /* .###...##...###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4d, char: \x4e, offset: 0x1340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4e, char: \x4f, offset: 0x1380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x4f, char: \x50, offset: 0x13c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x50, char: \x51, offset: 0x1400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x79, 0xfc, /* .####..#######.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x51, char: \x52, offset: 0x1440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7e, 0x00, /* .######......... */ - 0x77, 0x00, /* .###.###........ */ - 0x73, 0x80, /* .###..###....... */ - 0x71, 0xc0, /* .###...###...... */ - 0x70, 0xe0, /* .###....###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x52, char: \x53, offset: 0x1480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x53, char: \x54, offset: 0x14c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x54, char: \x55, offset: 0x1500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x55, char: \x56, offset: 0x1540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x56, char: \x57, offset: 0x1580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x71, 0x8e, /* .###...##...###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x77, 0xee, /* .###.######.###. */ - 0x7e, 0x7e, /* .######..######. */ - 0x7e, 0x7e, /* .######..######. */ - 0x7c, 0x3e, /* .#####....#####. */ - 0x78, 0x1e, /* .####......####. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x57, char: \x58, offset: 0x15c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x58, char: \x59, offset: 0x1600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x59, char: \x5a, offset: 0x1640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5a, char: \x5b, offset: 0x1680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5b, char: \x5c, offset: 0x16c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5c, char: \x5d, offset: 0x1700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x0f, 0xf0, /* ....########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5d, char: \x5e, offset: 0x1740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5e, char: \x5f, offset: 0x1780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x5f, char: \x60, offset: 0x17c0 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x60, char: \x61, offset: 0x1800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x61, char: \x62, offset: 0x1840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x62, char: \x63, offset: 0x1880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x63, char: \x64, offset: 0x18c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x64, char: \x65, offset: 0x1900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x65, char: \x66, offset: 0x1940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xfe, /* ........#######. */ - 0x01, 0xfe, /* .......########. */ - 0x03, 0xc0, /* ......####...... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf8, /* ..###########... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x66, char: \x67, offset: 0x1980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x67, char: \x68, offset: 0x19c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x68, char: \x69, offset: 0x1a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x69, char: \x6a, offset: 0x1a40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0xf8, /* ........#####... */ - 0x00, 0xf8, /* ........#####... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x3c, 0x78, /* ..####...####... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6a, char: \x6b, offset: 0x1a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x3b, 0x80, /* ..###.###....... */ - 0x3f, 0x00, /* ..######........ */ - 0x3f, 0x00, /* ..######........ */ - 0x3b, 0x80, /* ..###.###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6b, char: \x6c, offset: 0x1ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0x80, /* ....#####....... */ - 0x0f, 0x80, /* ....#####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6c, char: \x6d, offset: 0x1b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x73, 0xbc, /* .###..###.####.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6d, char: \x6e, offset: 0x1b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6e, char: \x6f, offset: 0x1b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x6f, char: \x70, offset: 0x1bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x70, char: \x71, offset: 0x1c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x71, char: \x72, offset: 0x1c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0xfc, /* .###..########.. */ - 0x77, 0xfc, /* .###.#########.. */ - 0x7e, 0x00, /* .######......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x72, char: \x73, offset: 0x1c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x00, /* .####........... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x73, char: \x74, offset: 0x1cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0xfc, /* ......########.. */ - 0x01, 0xfc, /* .......#######.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x74, char: \x75, offset: 0x1d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x75, char: \x76, offset: 0x1d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x76, char: \x77, offset: 0x1d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x77, char: \x78, offset: 0x1dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x78, char: \x79, offset: 0x1e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x79, char: \x7a, offset: 0x1e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x38, 0x00, /* ..###........... */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7a, char: \x7b, offset: 0x1e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0xf0, /* ......######.... */ - 0x07, 0x80, /* .....####....... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3e, 0x00, /* ..#####......... */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x00, /* .....###........ */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0xf0, /* ......######.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7b, char: \x7c, offset: 0x1ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7c, char: \x7d, offset: 0x1f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x00, /* ..#####......... */ - 0x3f, 0x00, /* ..######........ */ - 0x07, 0x80, /* .....####....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xf0, /* .......#####.... */ - 0x01, 0xf0, /* .......#####.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x80, /* .....####....... */ - 0x3f, 0x00, /* ..######........ */ - 0x3e, 0x00, /* ..#####......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7d, char: \x7e, offset: 0x1f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1e, 0x1c, /* ...####....###.. */ - 0x3f, 0x1c, /* ..######...###.. */ - 0x77, 0x9c, /* .###.####..###.. */ - 0x73, 0xdc, /* .###..####.###.. */ - 0x71, 0xf8, /* .###...######... */ - 0x70, 0xf0, /* .###....####.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7e, char: \x7f, offset: 0x1f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x7f, char: \x80, offset: 0x1fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x80, char: \x81, offset: 0x2000 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x81, char: \x82, offset: 0x2040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x82, char: \x83, offset: 0x2080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x83, char: \x84, offset: 0x20c0 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x84, char: \x85, offset: 0x2100 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x85, char: \x86, offset: 0x2140 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x86, char: \x87, offset: 0x2180 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x87, char: \x88, offset: 0x21c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x88, char: \x89, offset: 0x2200 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x89, char: \x8a, offset: 0x2240 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x8a, char: \x8b, offset: 0x2280 */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x8b, char: \x8c, offset: 0x22c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - - /* Index: 0x8c, char: \x8d, offset: 0x2300 */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - - /* Index: 0x8d, char: \x8e, offset: 0x2340 */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - 0xff, 0x00, /* ########........ */ - - /* Index: 0x8e, char: \x8f, offset: 0x2380 */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - 0x00, 0xff, /* ........######## */ - - /* Index: 0x8f, char: \x90, offset: 0x23c0 */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x90, char: \x91, offset: 0x2400 */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0x55, 0x55, /* .#.#.#.#.#.#.#.# */ - - /* Index: 0x91, char: \x92, offset: 0x2440 */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - 0xff, 0xff, /* ################ */ - 0xaa, 0xaa, /* #.#.#.#.#.#.#.#. */ - - /* Index: 0x92, char: \x93, offset: 0x2480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x01, 0xf8, /* .......######... */ - 0x03, 0xfc, /* ......########.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0x93, char: \x94, offset: 0x24c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x94, char: \x95, offset: 0x2500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xc0, /* ......####...... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x07, 0xe0, /* .....######..... */ - 0x03, 0xc0, /* ......####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x95, char: \x96, offset: 0x2540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x3e, /* ..........#####. */ - 0x00, 0x3e, /* ..........#####. */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x38, /* .###......###... */ - 0x78, 0x38, /* .####.....###... */ - 0x3c, 0x38, /* ..####....###... */ - 0x1e, 0x38, /* ...####...###... */ - 0x0f, 0x38, /* ....####..###... */ - 0x07, 0xb8, /* .....####.###... */ - 0x03, 0xf8, /* ......#######... */ - 0x01, 0xf8, /* .......######... */ - 0x00, 0xf8, /* ........#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x96, char: \x97, offset: 0x2580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x1c, /* ..#####....###.. */ - 0x7f, 0xbc, /* .########.####.. */ - 0x7b, 0xfc, /* .####.########.. */ - 0x70, 0xf8, /* .###....#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3e, 0x1c, /* ..#####....###.. */ - 0x7f, 0xbc, /* .########.####.. */ - 0x7b, 0xfc, /* .####.########.. */ - 0x70, 0xf8, /* .###....#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x97, char: \x98, offset: 0x25c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x98, char: \x99, offset: 0x2600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x00, /* ...###.......... */ - 0x0e, 0x00, /* ....###......... */ - 0x07, 0x00, /* .....###........ */ - 0x03, 0x80, /* ......###....... */ - 0x01, 0xc0, /* .......###...... */ - 0x00, 0xe0, /* ........###..... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x38, /* ..........###... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xfc, /* ..############.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x99, char: \x9a, offset: 0x2640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9a, char: \x9b, offset: 0x2680 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x73, 0x80, /* .###..###....... */ - 0x7f, 0x80, /* .########....... */ - 0x3f, 0x00, /* ..######........ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9b, char: \x9c, offset: 0x26c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9c, char: \x9d, offset: 0x2700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0xe0, /* ........###..... */ - 0x01, 0xc0, /* .......###...... */ - 0x03, 0x80, /* ......###....... */ - 0x07, 0x00, /* .....###........ */ - 0x0e, 0x00, /* ....###......... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9d, char: \x9e, offset: 0x2740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9e, char: \x9f, offset: 0x2780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0x9f, char: \xa0, offset: 0x27c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa0, char: \xa1, offset: 0x2800 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xa1, char: \xa2, offset: 0x2840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0xa2, char: \xa3, offset: 0x2880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa3, char: \xa4, offset: 0x28c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xff, /* ....############ */ - 0x0f, 0xff, /* ....############ */ - 0x0f, 0xff, /* ....############ */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xa4, char: \xa5, offset: 0x2900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xff, /* ....############ */ - 0x0f, 0xff, /* ....############ */ - 0x0f, 0xff, /* ....############ */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xa5, char: \xa6, offset: 0x2940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0xa6, char: \xa7, offset: 0x2980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xa7, char: \xa8, offset: 0x29c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xa8, char: \xa9, offset: 0x2a00 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xa9, char: \xaa, offset: 0x2a40 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0f, 0xff, /* ....############ */ - 0x0f, 0xff, /* ....############ */ - 0x0f, 0xff, /* ....############ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xaa, char: \xab, offset: 0x2a80 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0f, 0xff, /* ....############ */ - 0x0f, 0xff, /* ....############ */ - 0x0f, 0xff, /* ....############ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xab, char: \xac, offset: 0x2ac0 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xac, char: \xad, offset: 0x2b00 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xad, char: \xae, offset: 0x2b40 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0xff, 0xf0, /* ############.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xae, char: \xaf, offset: 0x2b80 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0xff, /* ......########## */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0xaf, char: \xb0, offset: 0x2bc0 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xb0, char: \xb1, offset: 0x2c00 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x00, /* ....###......... */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x7f, /* ....###..####### */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xb1, char: \xb2, offset: 0x2c40 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0xff, 0x80, /* #########....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0xb2, char: \xb3, offset: 0x2c80 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb3, char: \xb4, offset: 0x2cc0 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xb4, char: \xb5, offset: 0x2d00 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0x00, 0x70, /* .........###.... */ - 0x00, 0x70, /* .........###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0xfe, 0x70, /* #######..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xb5, char: \xb6, offset: 0x2d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0xb6, char: \xb7, offset: 0x2d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xb7, char: \xb8, offset: 0x2dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xb8, char: \xb9, offset: 0x2e00 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xb9, char: \xba, offset: 0x2e40 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xba, char: \xbb, offset: 0x2e80 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbb, char: \xbc, offset: 0x2ec0 */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - - /* Index: 0xbc, char: \xbd, offset: 0x2f00 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0xff, 0xff, /* ################ */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xbd, char: \xbe, offset: 0x2f40 */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0xfe, 0x7f, /* #######..####### */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - 0x0e, 0x70, /* ....###..###.... */ - - /* Index: 0xbe, char: \xbf, offset: 0x2f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf8, /* ...##########... */ - 0x3f, 0xfc, /* ..############.. */ - 0x70, 0x0e, /* .###........###. */ - 0x67, 0xe6, /* .##..######..##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x6e, 0x76, /* .##.###..###.##. */ - 0x6e, 0x06, /* .##.###......##. */ - 0x6e, 0x06, /* .##.###......##. */ - 0x6e, 0x06, /* .##.###......##. */ - 0x6e, 0x06, /* .##.###......##. */ - 0x6e, 0x76, /* .##.###..###.##. */ - 0x6f, 0xf6, /* .##.########.##. */ - 0x67, 0xe6, /* .##..######..##. */ - 0x70, 0x0e, /* .###........###. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xbf, char: \xc0, offset: 0x2fc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0xf8, /* .###....#####... */ - 0x71, 0xfc, /* .###...#######.. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x7f, 0x8e, /* .########...###. */ - 0x7f, 0x8e, /* .########...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x71, 0xfc, /* .###...#######.. */ - 0x70, 0xf8, /* .###....#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc0, char: \xc1, offset: 0x3000 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc1, char: \xc2, offset: 0x3040 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x78, 0x00, /* .####........... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc2, char: \xc3, offset: 0x3080 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfe, /* ..#############. */ - 0x1f, 0xff, /* ...############# */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc3, char: \xc4, offset: 0x30c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc4, char: \xc5, offset: 0x3100 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc5, char: \xc6, offset: 0x3140 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc6, char: \xc7, offset: 0x3180 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc7, char: \xc8, offset: 0x31c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc8, char: \xc9, offset: 0x3200 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xc9, char: \xca, offset: 0x3240 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xca, char: \xcb, offset: 0x3280 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x3b, 0x80, /* ..###.###....... */ - 0x3f, 0x00, /* ..######........ */ - 0x3f, 0x00, /* ..######........ */ - 0x3b, 0x80, /* ..###.###....... */ - 0x39, 0xc0, /* ..###..###...... */ - 0x38, 0xe0, /* ..###...###..... */ - 0x38, 0x70, /* ..###....###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x1c, /* ..###......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcb, char: \xcc, offset: 0x32c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xfc, /* .....#########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1e, 0x1c, /* ...####....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcc, char: \xcd, offset: 0x3300 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x60, 0x06, /* .##..........##. */ - 0x70, 0x0e, /* .###........###. */ - 0x78, 0x1e, /* .####......####. */ - 0x7c, 0x3e, /* .#####....#####. */ - 0x7e, 0x7e, /* .######..######. */ - 0x77, 0xee, /* .###.######.###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x71, 0x8e, /* .###...##...###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcd, char: \xce, offset: 0x3340 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xce, char: \xcf, offset: 0x3380 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xcf, char: \xd0, offset: 0x33c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd0, char: \xd1, offset: 0x3400 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x01, 0xdc, /* .......###.###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x1c, /* .....###...###.. */ - 0x0e, 0x1c, /* ....###....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd1, char: \xd2, offset: 0x3440 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd2, char: \xd3, offset: 0x3480 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd3, char: \xd4, offset: 0x34c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd4, char: \xd5, offset: 0x3500 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd5, char: \xd6, offset: 0x3540 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd6, char: \xd7, offset: 0x3580 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x3f, 0xc0, /* ..########...... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0xf0, /* .###....####.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0xe0, /* .###....###..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd7, char: \xd8, offset: 0x35c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x38, 0x78, /* ..###....####... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x78, /* ..###....####... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xe0, /* ..#########..... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd8, char: \xd9, offset: 0x3600 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x7f, 0x0e, /* .#######....###. */ - 0x7f, 0x8e, /* .########...###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x7f, 0x8e, /* .########...###. */ - 0x7f, 0x0e, /* .#######....###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xd9, char: \xda, offset: 0x3640 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x07, 0xf8, /* .....########... */ - 0x07, 0xf8, /* .....########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xda, char: \xdb, offset: 0x3680 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0x9c, /* .####.###..###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdb, char: \xdc, offset: 0x36c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x07, 0xfc, /* .....#########.. */ - 0x07, 0xfc, /* .....#########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdc, char: \xdd, offset: 0x3700 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0x9c, /* .####.###..###.. */ - 0x3f, 0xfe, /* ..#############. */ - 0x1f, 0xff, /* ...############# */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdd, char: \xde, offset: 0x3740 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xde, char: \xdf, offset: 0x3780 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7c, 0x00, /* .#####.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1c, 0x00, /* ...###.......... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x1f, 0xf8, /* ...##########... */ - 0x1c, 0x3c, /* ...###....####.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x3c, /* ...###....####.. */ - 0x1f, 0xf8, /* ...##########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xdf, char: \xe0, offset: 0x37c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0xf8, /* .###....#####... */ - 0x71, 0xfc, /* .###...#######.. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x7f, 0x8e, /* .########...###. */ - 0x7f, 0x8e, /* .########...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x73, 0x8e, /* .###..###...###. */ - 0x71, 0xfc, /* .###...#######.. */ - 0x70, 0xf8, /* .###....#####... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe0, char: \xe1, offset: 0x3800 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe1, char: \xe2, offset: 0x3840 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe2, char: \xe3, offset: 0x3880 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1e, /* .####......####. */ - 0x3f, 0xff, /* ..############## */ - 0x1f, 0xff, /* ...############# */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe3, char: \xe4, offset: 0x38c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x0f, 0xf8, /* ....#########... */ - 0x1f, 0xf8, /* ...##########... */ - 0x3c, 0x38, /* ..####....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x7f, 0xfc, /* .#############.. */ - 0xff, 0xfe, /* ###############. */ - 0xe0, 0x0e, /* ###.........###. */ - 0xe0, 0x0e, /* ###.........###. */ - 0xe0, 0x0e, /* ###.........###. */ - 0xe0, 0x0e, /* ###.........###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe4, char: \xe5, offset: 0x3900 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xe0, /* .##########..... */ - 0x7f, 0xe0, /* .##########..... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe5, char: \xe6, offset: 0x3940 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0xbc, /* .####.###.####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe6, char: \xe7, offset: 0x3980 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe7, char: \xe8, offset: 0x39c0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x07, 0xc0, /* .....#####...... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x0e, 0xe0, /* ....###.###..... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x38, 0x38, /* ..###.....###... */ - 0x38, 0x38, /* ..###.....###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe8, char: \xe9, offset: 0x3a00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xe9, char: \xea, offset: 0x3a40 */ - 0x00, 0x00, /* ................ */ - 0x1c, 0x70, /* ...###...###.... */ - 0x1c, 0x70, /* ...###...###.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x07, 0xc0, /* .....#####...... */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x7c, /* .###.....#####.. */ - 0x70, 0xfc, /* .###....######.. */ - 0x71, 0xdc, /* .###...###.###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x77, 0x1c, /* .###.###...###.. */ - 0x7e, 0x1c, /* .######....###.. */ - 0x7c, 0x1c, /* .#####.....###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xea, char: \xeb, offset: 0x3a80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0c, /* .###........##.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0xe0, /* .###....###..... */ - 0x71, 0xc0, /* .###...###...... */ - 0x73, 0x80, /* .###..###....... */ - 0x77, 0x00, /* .###.###........ */ - 0x7e, 0x00, /* .######......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x7c, 0x00, /* .#####.......... */ - 0x7e, 0x00, /* .######......... */ - 0x77, 0x00, /* .###.###........ */ - 0x73, 0x80, /* .###..###....... */ - 0x71, 0xc0, /* .###...###...... */ - 0x70, 0xe0, /* .###....###..... */ - 0x70, 0x70, /* .###.....###.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x0c, /* .###........##.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xeb, char: \xec, offset: 0x3ac0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x07, 0xfc, /* .....#########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x1e, 0x1c, /* ...####....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xec, char: \xed, offset: 0x3b00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x78, 0x1e, /* .####......####. */ - 0x7c, 0x3e, /* .#####....#####. */ - 0x7e, 0x7e, /* .######..######. */ - 0x7e, 0x7e, /* .######..######. */ - 0x77, 0xee, /* .###.######.###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x71, 0x8e, /* .###...##...###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xed, char: \xee, offset: 0x3b40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xee, char: \xef, offset: 0x3b80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xef, char: \xf0, offset: 0x3bc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf0, char: \xf1, offset: 0x3c00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xfc, /* ...###########.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0xfc, /* ........######.. */ - 0x01, 0xdc, /* .......###.###.. */ - 0x03, 0x9c, /* ......###..###.. */ - 0x07, 0x1c, /* .....###...###.. */ - 0x0e, 0x1c, /* ....###....###.. */ - 0x1c, 0x1c, /* ...###.....###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf1, char: \xf2, offset: 0x3c40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf2, char: \xf3, offset: 0x3c80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x00, /* .###............ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf3, char: \xf4, offset: 0x3cc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xfc, /* .#############.. */ - 0x7f, 0xfc, /* .#############.. */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x03, 0x80, /* ......###....... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf4, char: \xf5, offset: 0x3d00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf5, char: \xf6, offset: 0x3d40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x0f, 0xe0, /* ....#######..... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3b, 0xb8, /* ..###.###.###... */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf6, char: \xf7, offset: 0x3d80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf8, /* .############... */ - 0x70, 0x3c, /* .###......####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x38, /* .###......###... */ - 0x7f, 0xf0, /* .###########.... */ - 0x7f, 0xf0, /* .###########.... */ - 0x70, 0x38, /* .###......###... */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x3c, /* .###......####.. */ - 0x7f, 0xf8, /* .############... */ - 0x7f, 0xf0, /* .###########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf7, char: \xf8, offset: 0x3dc0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x38, 0x3c, /* ..###.....####.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x3c, /* ..###.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf8, char: \xf9, offset: 0x3e00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x70, 0x0e, /* .###........###. */ - 0x7f, 0x0e, /* .#######....###. */ - 0x7f, 0x8e, /* .########...###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x71, 0xce, /* .###...###..###. */ - 0x73, 0xce, /* .###..####..###. */ - 0x7f, 0x8e, /* .########...###. */ - 0x7f, 0x0e, /* .#######....###. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xf9, char: \xfa, offset: 0x3e40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x3c, /* ..........####.. */ - 0x0f, 0xf8, /* ....#########... */ - 0x0f, 0xf8, /* ....#########... */ - 0x00, 0x3c, /* ..........####.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfa, char: \xfb, offset: 0x3e80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0x9c, /* .####.###..###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfb, char: \xfc, offset: 0x3ec0 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x1f, 0xf0, /* ...#########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x78, 0x3c, /* .####.....####.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x0f, 0xfc, /* ....##########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x3c, /* .####.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x1f, 0xf0, /* ...#########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfc, char: \xfd, offset: 0x3f00 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x73, 0x9c, /* .###..###..###.. */ - 0x7b, 0x9c, /* .####.###..###.. */ - 0x3f, 0xfe, /* ..#############. */ - 0x1f, 0xff, /* ...############# */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x07, /* .............### */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfd, char: \xfe, offset: 0x3f40 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x70, 0x1c, /* .###.......###.. */ - 0x78, 0x1c, /* .####......###.. */ - 0x3f, 0xfc, /* ..############.. */ - 0x1f, 0xfc, /* ...###########.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x1c, /* ...........###.. */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - - /* Index: 0xfe, char: \xff, offset: 0x3f80 */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0xf8, 0x00, /* #####........... */ - 0xf8, 0x00, /* #####........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x38, 0x00, /* ..###........... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x3f, 0xf8, /* ..###########... */ - 0x38, 0x3c, /* ..###.....####.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x1c, /* ..###......###.. */ - 0x38, 0x3c, /* ..###.....####.. */ - 0x3f, 0xf8, /* ..###########... */ - 0x3f, 0xf0, /* ..##########.... */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ - 0x00, 0x00, /* ................ */ -}; - -const font_char_desc_t _fonts_terminus_bold_16x32_koi8_r_descriptors[] = { - { 0x10, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x10, 0x0040 }, /* Index: 0x01, char: \x02 */ - { 0x10, 0x0080 }, /* Index: 0x02, char: \x03 */ - { 0x10, 0x00c0 }, /* Index: 0x03, char: \x04 */ - { 0x10, 0x0100 }, /* Index: 0x04, char: \x05 */ - { 0x10, 0x0140 }, /* Index: 0x05, char: \x06 */ - { 0x10, 0x0180 }, /* Index: 0x06, char: \x07 */ - { 0x10, 0x01c0 }, /* Index: 0x07, char: \x08 */ - { 0x10, 0x0200 }, /* Index: 0x08, char: \x09 */ - { 0x10, 0x0240 }, /* Index: 0x09, char: \x0a */ - { 0x10, 0x0280 }, /* Index: 0x0a, char: \x0b */ - { 0x10, 0x02c0 }, /* Index: 0x0b, char: \x0c */ - { 0x10, 0x0300 }, /* Index: 0x0c, char: \x0d */ - { 0x10, 0x0340 }, /* Index: 0x0d, char: \x0e */ - { 0x10, 0x0380 }, /* Index: 0x0e, char: \x0f */ - { 0x10, 0x03c0 }, /* Index: 0x0f, char: \x10 */ - { 0x10, 0x0400 }, /* Index: 0x10, char: \x11 */ - { 0x10, 0x0440 }, /* Index: 0x11, char: \x12 */ - { 0x10, 0x0480 }, /* Index: 0x12, char: \x13 */ - { 0x10, 0x04c0 }, /* Index: 0x13, char: \x14 */ - { 0x10, 0x0500 }, /* Index: 0x14, char: \x15 */ - { 0x10, 0x0540 }, /* Index: 0x15, char: \x16 */ - { 0x10, 0x0580 }, /* Index: 0x16, char: \x17 */ - { 0x10, 0x05c0 }, /* Index: 0x17, char: \x18 */ - { 0x10, 0x0600 }, /* Index: 0x18, char: \x19 */ - { 0x10, 0x0640 }, /* Index: 0x19, char: \x1a */ - { 0x10, 0x0680 }, /* Index: 0x1a, char: \x1b */ - { 0x10, 0x06c0 }, /* Index: 0x1b, char: \x1c */ - { 0x10, 0x0700 }, /* Index: 0x1c, char: \x1d */ - { 0x10, 0x0740 }, /* Index: 0x1d, char: \x1e */ - { 0x10, 0x0780 }, /* Index: 0x1e, char: \x1f */ - { 0x10, 0x07c0 }, /* Index: 0x1f, char: \x20 */ - { 0x10, 0x0800 }, /* Index: 0x20, char: \x21 */ - { 0x10, 0x0840 }, /* Index: 0x21, char: \x22 */ - { 0x10, 0x0880 }, /* Index: 0x22, char: \x23 */ - { 0x10, 0x08c0 }, /* Index: 0x23, char: \x24 */ - { 0x10, 0x0900 }, /* Index: 0x24, char: \x25 */ - { 0x10, 0x0940 }, /* Index: 0x25, char: \x26 */ - { 0x10, 0x0980 }, /* Index: 0x26, char: \x27 */ - { 0x10, 0x09c0 }, /* Index: 0x27, char: \x28 */ - { 0x10, 0x0a00 }, /* Index: 0x28, char: \x29 */ - { 0x10, 0x0a40 }, /* Index: 0x29, char: \x2a */ - { 0x10, 0x0a80 }, /* Index: 0x2a, char: \x2b */ - { 0x10, 0x0ac0 }, /* Index: 0x2b, char: \x2c */ - { 0x10, 0x0b00 }, /* Index: 0x2c, char: \x2d */ - { 0x10, 0x0b40 }, /* Index: 0x2d, char: \x2e */ - { 0x10, 0x0b80 }, /* Index: 0x2e, char: \x2f */ - { 0x10, 0x0bc0 }, /* Index: 0x2f, char: \x30 */ - { 0x10, 0x0c00 }, /* Index: 0x30, char: \x31 */ - { 0x10, 0x0c40 }, /* Index: 0x31, char: \x32 */ - { 0x10, 0x0c80 }, /* Index: 0x32, char: \x33 */ - { 0x10, 0x0cc0 }, /* Index: 0x33, char: \x34 */ - { 0x10, 0x0d00 }, /* Index: 0x34, char: \x35 */ - { 0x10, 0x0d40 }, /* Index: 0x35, char: \x36 */ - { 0x10, 0x0d80 }, /* Index: 0x36, char: \x37 */ - { 0x10, 0x0dc0 }, /* Index: 0x37, char: \x38 */ - { 0x10, 0x0e00 }, /* Index: 0x38, char: \x39 */ - { 0x10, 0x0e40 }, /* Index: 0x39, char: \x3a */ - { 0x10, 0x0e80 }, /* Index: 0x3a, char: \x3b */ - { 0x10, 0x0ec0 }, /* Index: 0x3b, char: \x3c */ - { 0x10, 0x0f00 }, /* Index: 0x3c, char: \x3d */ - { 0x10, 0x0f40 }, /* Index: 0x3d, char: \x3e */ - { 0x10, 0x0f80 }, /* Index: 0x3e, char: \x3f */ - { 0x10, 0x0fc0 }, /* Index: 0x3f, char: \x40 */ - { 0x10, 0x1000 }, /* Index: 0x40, char: \x41 */ - { 0x10, 0x1040 }, /* Index: 0x41, char: \x42 */ - { 0x10, 0x1080 }, /* Index: 0x42, char: \x43 */ - { 0x10, 0x10c0 }, /* Index: 0x43, char: \x44 */ - { 0x10, 0x1100 }, /* Index: 0x44, char: \x45 */ - { 0x10, 0x1140 }, /* Index: 0x45, char: \x46 */ - { 0x10, 0x1180 }, /* Index: 0x46, char: \x47 */ - { 0x10, 0x11c0 }, /* Index: 0x47, char: \x48 */ - { 0x10, 0x1200 }, /* Index: 0x48, char: \x49 */ - { 0x10, 0x1240 }, /* Index: 0x49, char: \x4a */ - { 0x10, 0x1280 }, /* Index: 0x4a, char: \x4b */ - { 0x10, 0x12c0 }, /* Index: 0x4b, char: \x4c */ - { 0x10, 0x1300 }, /* Index: 0x4c, char: \x4d */ - { 0x10, 0x1340 }, /* Index: 0x4d, char: \x4e */ - { 0x10, 0x1380 }, /* Index: 0x4e, char: \x4f */ - { 0x10, 0x13c0 }, /* Index: 0x4f, char: \x50 */ - { 0x10, 0x1400 }, /* Index: 0x50, char: \x51 */ - { 0x10, 0x1440 }, /* Index: 0x51, char: \x52 */ - { 0x10, 0x1480 }, /* Index: 0x52, char: \x53 */ - { 0x10, 0x14c0 }, /* Index: 0x53, char: \x54 */ - { 0x10, 0x1500 }, /* Index: 0x54, char: \x55 */ - { 0x10, 0x1540 }, /* Index: 0x55, char: \x56 */ - { 0x10, 0x1580 }, /* Index: 0x56, char: \x57 */ - { 0x10, 0x15c0 }, /* Index: 0x57, char: \x58 */ - { 0x10, 0x1600 }, /* Index: 0x58, char: \x59 */ - { 0x10, 0x1640 }, /* Index: 0x59, char: \x5a */ - { 0x10, 0x1680 }, /* Index: 0x5a, char: \x5b */ - { 0x10, 0x16c0 }, /* Index: 0x5b, char: \x5c */ - { 0x10, 0x1700 }, /* Index: 0x5c, char: \x5d */ - { 0x10, 0x1740 }, /* Index: 0x5d, char: \x5e */ - { 0x10, 0x1780 }, /* Index: 0x5e, char: \x5f */ - { 0x10, 0x17c0 }, /* Index: 0x5f, char: \x60 */ - { 0x10, 0x1800 }, /* Index: 0x60, char: \x61 */ - { 0x10, 0x1840 }, /* Index: 0x61, char: \x62 */ - { 0x10, 0x1880 }, /* Index: 0x62, char: \x63 */ - { 0x10, 0x18c0 }, /* Index: 0x63, char: \x64 */ - { 0x10, 0x1900 }, /* Index: 0x64, char: \x65 */ - { 0x10, 0x1940 }, /* Index: 0x65, char: \x66 */ - { 0x10, 0x1980 }, /* Index: 0x66, char: \x67 */ - { 0x10, 0x19c0 }, /* Index: 0x67, char: \x68 */ - { 0x10, 0x1a00 }, /* Index: 0x68, char: \x69 */ - { 0x10, 0x1a40 }, /* Index: 0x69, char: \x6a */ - { 0x10, 0x1a80 }, /* Index: 0x6a, char: \x6b */ - { 0x10, 0x1ac0 }, /* Index: 0x6b, char: \x6c */ - { 0x10, 0x1b00 }, /* Index: 0x6c, char: \x6d */ - { 0x10, 0x1b40 }, /* Index: 0x6d, char: \x6e */ - { 0x10, 0x1b80 }, /* Index: 0x6e, char: \x6f */ - { 0x10, 0x1bc0 }, /* Index: 0x6f, char: \x70 */ - { 0x10, 0x1c00 }, /* Index: 0x70, char: \x71 */ - { 0x10, 0x1c40 }, /* Index: 0x71, char: \x72 */ - { 0x10, 0x1c80 }, /* Index: 0x72, char: \x73 */ - { 0x10, 0x1cc0 }, /* Index: 0x73, char: \x74 */ - { 0x10, 0x1d00 }, /* Index: 0x74, char: \x75 */ - { 0x10, 0x1d40 }, /* Index: 0x75, char: \x76 */ - { 0x10, 0x1d80 }, /* Index: 0x76, char: \x77 */ - { 0x10, 0x1dc0 }, /* Index: 0x77, char: \x78 */ - { 0x10, 0x1e00 }, /* Index: 0x78, char: \x79 */ - { 0x10, 0x1e40 }, /* Index: 0x79, char: \x7a */ - { 0x10, 0x1e80 }, /* Index: 0x7a, char: \x7b */ - { 0x10, 0x1ec0 }, /* Index: 0x7b, char: \x7c */ - { 0x10, 0x1f00 }, /* Index: 0x7c, char: \x7d */ - { 0x10, 0x1f40 }, /* Index: 0x7d, char: \x7e */ - { 0x10, 0x1f80 }, /* Index: 0x7e, char: \x7f */ - { 0x10, 0x1fc0 }, /* Index: 0x7f, char: \x80 */ - { 0x10, 0x2000 }, /* Index: 0x80, char: \x81 */ - { 0x10, 0x2040 }, /* Index: 0x81, char: \x82 */ - { 0x10, 0x2080 }, /* Index: 0x82, char: \x83 */ - { 0x10, 0x20c0 }, /* Index: 0x83, char: \x84 */ - { 0x10, 0x2100 }, /* Index: 0x84, char: \x85 */ - { 0x10, 0x2140 }, /* Index: 0x85, char: \x86 */ - { 0x10, 0x2180 }, /* Index: 0x86, char: \x87 */ - { 0x10, 0x21c0 }, /* Index: 0x87, char: \x88 */ - { 0x10, 0x2200 }, /* Index: 0x88, char: \x89 */ - { 0x10, 0x2240 }, /* Index: 0x89, char: \x8a */ - { 0x10, 0x2280 }, /* Index: 0x8a, char: \x8b */ - { 0x10, 0x22c0 }, /* Index: 0x8b, char: \x8c */ - { 0x10, 0x2300 }, /* Index: 0x8c, char: \x8d */ - { 0x10, 0x2340 }, /* Index: 0x8d, char: \x8e */ - { 0x10, 0x2380 }, /* Index: 0x8e, char: \x8f */ - { 0x10, 0x23c0 }, /* Index: 0x8f, char: \x90 */ - { 0x10, 0x2400 }, /* Index: 0x90, char: \x91 */ - { 0x10, 0x2440 }, /* Index: 0x91, char: \x92 */ - { 0x10, 0x2480 }, /* Index: 0x92, char: \x93 */ - { 0x10, 0x24c0 }, /* Index: 0x93, char: \x94 */ - { 0x10, 0x2500 }, /* Index: 0x94, char: \x95 */ - { 0x10, 0x2540 }, /* Index: 0x95, char: \x96 */ - { 0x10, 0x2580 }, /* Index: 0x96, char: \x97 */ - { 0x10, 0x25c0 }, /* Index: 0x97, char: \x98 */ - { 0x10, 0x2600 }, /* Index: 0x98, char: \x99 */ - { 0x10, 0x2640 }, /* Index: 0x99, char: \x9a */ - { 0x10, 0x2680 }, /* Index: 0x9a, char: \x9b */ - { 0x10, 0x26c0 }, /* Index: 0x9b, char: \x9c */ - { 0x10, 0x2700 }, /* Index: 0x9c, char: \x9d */ - { 0x10, 0x2740 }, /* Index: 0x9d, char: \x9e */ - { 0x10, 0x2780 }, /* Index: 0x9e, char: \x9f */ - { 0x10, 0x27c0 }, /* Index: 0x9f, char: \xa0 */ - { 0x10, 0x2800 }, /* Index: 0xa0, char: \xa1 */ - { 0x10, 0x2840 }, /* Index: 0xa1, char: \xa2 */ - { 0x10, 0x2880 }, /* Index: 0xa2, char: \xa3 */ - { 0x10, 0x28c0 }, /* Index: 0xa3, char: \xa4 */ - { 0x10, 0x2900 }, /* Index: 0xa4, char: \xa5 */ - { 0x10, 0x2940 }, /* Index: 0xa5, char: \xa6 */ - { 0x10, 0x2980 }, /* Index: 0xa6, char: \xa7 */ - { 0x10, 0x29c0 }, /* Index: 0xa7, char: \xa8 */ - { 0x10, 0x2a00 }, /* Index: 0xa8, char: \xa9 */ - { 0x10, 0x2a40 }, /* Index: 0xa9, char: \xaa */ - { 0x10, 0x2a80 }, /* Index: 0xaa, char: \xab */ - { 0x10, 0x2ac0 }, /* Index: 0xab, char: \xac */ - { 0x10, 0x2b00 }, /* Index: 0xac, char: \xad */ - { 0x10, 0x2b40 }, /* Index: 0xad, char: \xae */ - { 0x10, 0x2b80 }, /* Index: 0xae, char: \xaf */ - { 0x10, 0x2bc0 }, /* Index: 0xaf, char: \xb0 */ - { 0x10, 0x2c00 }, /* Index: 0xb0, char: \xb1 */ - { 0x10, 0x2c40 }, /* Index: 0xb1, char: \xb2 */ - { 0x10, 0x2c80 }, /* Index: 0xb2, char: \xb3 */ - { 0x10, 0x2cc0 }, /* Index: 0xb3, char: \xb4 */ - { 0x10, 0x2d00 }, /* Index: 0xb4, char: \xb5 */ - { 0x10, 0x2d40 }, /* Index: 0xb5, char: \xb6 */ - { 0x10, 0x2d80 }, /* Index: 0xb6, char: \xb7 */ - { 0x10, 0x2dc0 }, /* Index: 0xb7, char: \xb8 */ - { 0x10, 0x2e00 }, /* Index: 0xb8, char: \xb9 */ - { 0x10, 0x2e40 }, /* Index: 0xb9, char: \xba */ - { 0x10, 0x2e80 }, /* Index: 0xba, char: \xbb */ - { 0x10, 0x2ec0 }, /* Index: 0xbb, char: \xbc */ - { 0x10, 0x2f00 }, /* Index: 0xbc, char: \xbd */ - { 0x10, 0x2f40 }, /* Index: 0xbd, char: \xbe */ - { 0x10, 0x2f80 }, /* Index: 0xbe, char: \xbf */ - { 0x10, 0x2fc0 }, /* Index: 0xbf, char: \xc0 */ - { 0x10, 0x3000 }, /* Index: 0xc0, char: \xc1 */ - { 0x10, 0x3040 }, /* Index: 0xc1, char: \xc2 */ - { 0x10, 0x3080 }, /* Index: 0xc2, char: \xc3 */ - { 0x10, 0x30c0 }, /* Index: 0xc3, char: \xc4 */ - { 0x10, 0x3100 }, /* Index: 0xc4, char: \xc5 */ - { 0x10, 0x3140 }, /* Index: 0xc5, char: \xc6 */ - { 0x10, 0x3180 }, /* Index: 0xc6, char: \xc7 */ - { 0x10, 0x31c0 }, /* Index: 0xc7, char: \xc8 */ - { 0x10, 0x3200 }, /* Index: 0xc8, char: \xc9 */ - { 0x10, 0x3240 }, /* Index: 0xc9, char: \xca */ - { 0x10, 0x3280 }, /* Index: 0xca, char: \xcb */ - { 0x10, 0x32c0 }, /* Index: 0xcb, char: \xcc */ - { 0x10, 0x3300 }, /* Index: 0xcc, char: \xcd */ - { 0x10, 0x3340 }, /* Index: 0xcd, char: \xce */ - { 0x10, 0x3380 }, /* Index: 0xce, char: \xcf */ - { 0x10, 0x33c0 }, /* Index: 0xcf, char: \xd0 */ - { 0x10, 0x3400 }, /* Index: 0xd0, char: \xd1 */ - { 0x10, 0x3440 }, /* Index: 0xd1, char: \xd2 */ - { 0x10, 0x3480 }, /* Index: 0xd2, char: \xd3 */ - { 0x10, 0x34c0 }, /* Index: 0xd3, char: \xd4 */ - { 0x10, 0x3500 }, /* Index: 0xd4, char: \xd5 */ - { 0x10, 0x3540 }, /* Index: 0xd5, char: \xd6 */ - { 0x10, 0x3580 }, /* Index: 0xd6, char: \xd7 */ - { 0x10, 0x35c0 }, /* Index: 0xd7, char: \xd8 */ - { 0x10, 0x3600 }, /* Index: 0xd8, char: \xd9 */ - { 0x10, 0x3640 }, /* Index: 0xd9, char: \xda */ - { 0x10, 0x3680 }, /* Index: 0xda, char: \xdb */ - { 0x10, 0x36c0 }, /* Index: 0xdb, char: \xdc */ - { 0x10, 0x3700 }, /* Index: 0xdc, char: \xdd */ - { 0x10, 0x3740 }, /* Index: 0xdd, char: \xde */ - { 0x10, 0x3780 }, /* Index: 0xde, char: \xdf */ - { 0x10, 0x37c0 }, /* Index: 0xdf, char: \xe0 */ - { 0x10, 0x3800 }, /* Index: 0xe0, char: \xe1 */ - { 0x10, 0x3840 }, /* Index: 0xe1, char: \xe2 */ - { 0x10, 0x3880 }, /* Index: 0xe2, char: \xe3 */ - { 0x10, 0x38c0 }, /* Index: 0xe3, char: \xe4 */ - { 0x10, 0x3900 }, /* Index: 0xe4, char: \xe5 */ - { 0x10, 0x3940 }, /* Index: 0xe5, char: \xe6 */ - { 0x10, 0x3980 }, /* Index: 0xe6, char: \xe7 */ - { 0x10, 0x39c0 }, /* Index: 0xe7, char: \xe8 */ - { 0x10, 0x3a00 }, /* Index: 0xe8, char: \xe9 */ - { 0x10, 0x3a40 }, /* Index: 0xe9, char: \xea */ - { 0x10, 0x3a80 }, /* Index: 0xea, char: \xeb */ - { 0x10, 0x3ac0 }, /* Index: 0xeb, char: \xec */ - { 0x10, 0x3b00 }, /* Index: 0xec, char: \xed */ - { 0x10, 0x3b40 }, /* Index: 0xed, char: \xee */ - { 0x10, 0x3b80 }, /* Index: 0xee, char: \xef */ - { 0x10, 0x3bc0 }, /* Index: 0xef, char: \xf0 */ - { 0x10, 0x3c00 }, /* Index: 0xf0, char: \xf1 */ - { 0x10, 0x3c40 }, /* Index: 0xf1, char: \xf2 */ - { 0x10, 0x3c80 }, /* Index: 0xf2, char: \xf3 */ - { 0x10, 0x3cc0 }, /* Index: 0xf3, char: \xf4 */ - { 0x10, 0x3d00 }, /* Index: 0xf4, char: \xf5 */ - { 0x10, 0x3d40 }, /* Index: 0xf5, char: \xf6 */ - { 0x10, 0x3d80 }, /* Index: 0xf6, char: \xf7 */ - { 0x10, 0x3dc0 }, /* Index: 0xf7, char: \xf8 */ - { 0x10, 0x3e00 }, /* Index: 0xf8, char: \xf9 */ - { 0x10, 0x3e40 }, /* Index: 0xf9, char: \xfa */ - { 0x10, 0x3e80 }, /* Index: 0xfa, char: \xfb */ - { 0x10, 0x3ec0 }, /* Index: 0xfb, char: \xfc */ - { 0x10, 0x3f00 }, /* Index: 0xfc, char: \xfd */ - { 0x10, 0x3f40 }, /* Index: 0xfd, char: \xfe */ - { 0x10, 0x3f80 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_16x32_koi8_r_info = -{ - .height = 32, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_16x32_koi8_r_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_16x32_koi8_r_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_16X32_KOI8_R_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_8x14_iso8859_1.h b/extras/fonts/data/font_terminus_bold_8x14_iso8859_1.h deleted file mode 100644 index faa5213..0000000 --- a/extras/fonts/data/font_terminus_bold_8x14_iso8859_1.h +++ /dev/null @@ -1,4369 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 8x14 - * Charset: ISO8859-1 - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: Mon Dec 12 01:48:03 2016 - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_8X14_ISO8859_1_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_8X14_ISO8859_1_H_ - -static const uint8_t _fonts_terminus_bold_8x14_iso8859_1_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x7e, /* .######. */ - 0xff, /* ######## */ - 0x7e, /* .######. */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x02, offset: 0x000e */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - - /* Index: 0x02, char: \x03, offset: 0x001c */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xfc, /* ######.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0x00, /* ........ */ - 0x3f, /* ..###### */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x04, offset: 0x002a */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xf0, /* ####.... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x3f, /* ..###### */ - 0x30, /* ..##.... */ - 0x3c, /* ..####.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x05, offset: 0x0038 */ - 0x78, /* .####... */ - 0xcc, /* ##..##.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xcc, /* ##..##.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x33, /* ..##..## */ - 0x33, /* ..##..## */ - 0x3e, /* ..#####. */ - 0x36, /* ..##.##. */ - 0x33, /* ..##..## */ - 0x00, /* ........ */ - - /* Index: 0x05, char: \x06, offset: 0x0046 */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x3f, /* ..###### */ - 0x30, /* ..##.... */ - 0x3c, /* ..####.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x07, offset: 0x0054 */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x08, offset: 0x0062 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x09, offset: 0x0070 */ - 0xcc, /* ##..##.. */ - 0xec, /* ###.##.. */ - 0xfc, /* ######.. */ - 0xdc, /* ##.###.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x3f, /* ..###### */ - 0x00, /* ........ */ - - /* Index: 0x09, char: \x0a, offset: 0x007e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0a, char: \x0b, offset: 0x008c */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x0c, offset: 0x009a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x0c, char: \x0d, offset: 0x00a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x0d, char: \x0e, offset: 0x00b6 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x0f, offset: 0x00c4 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x0f, char: \x10, offset: 0x00d2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x10, char: \x11, offset: 0x00e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x12, offset: 0x00ee */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x13, offset: 0x00fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x14, offset: 0x010a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x15, offset: 0x0118 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x15, char: \x16, offset: 0x0126 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x16, char: \x17, offset: 0x0134 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x18, offset: 0x0142 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x18, char: \x19, offset: 0x0150 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x19, char: \x1a, offset: 0x015e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x1b, offset: 0x016c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x1c, offset: 0x017a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0188 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0xfe, /* #######. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0196 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0xf8, /* #####... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x66, /* .##..##. */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x1f, offset: 0x01a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x20, offset: 0x01b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x20, char: \x21, offset: 0x01c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x22, offset: 0x01ce */ - 0x00, /* ........ */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x23, offset: 0x01dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xfe, /* #######. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xfe, /* #######. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x24, offset: 0x01ea */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0xd6, /* ##.#.##. */ - 0xd0, /* ##.#.... */ - 0xd0, /* ##.#.... */ - 0x7c, /* .#####.. */ - 0x16, /* ...#.##. */ - 0x16, /* ...#.##. */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x24, char: \x25, offset: 0x01f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x66, /* .##..##. */ - 0xd6, /* ##.#.##. */ - 0x6c, /* .##.##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x36, /* ..##.##. */ - 0x6b, /* .##.#.## */ - 0x66, /* .##..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x26, offset: 0x0206 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xdc, /* ##.###.. */ - 0x76, /* .###.##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x27, offset: 0x0214 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x28, offset: 0x0222 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x29, offset: 0x0230 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x2a, offset: 0x023e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0xfe, /* #######. */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x2b, offset: 0x024c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x2c, offset: 0x025a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0268 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0276 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0284 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x30, offset: 0x0292 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xce, /* ##..###. */ - 0xde, /* ##.####. */ - 0xf6, /* ####.##. */ - 0xe6, /* ###..##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x31, offset: 0x02a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x38, /* ..###... */ - 0x78, /* .####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x32, offset: 0x02ae */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x32, char: \x33, offset: 0x02bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x06, /* .....##. */ - 0x3c, /* ..####.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x34, offset: 0x02ca */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x0e, /* ....###. */ - 0x1e, /* ...####. */ - 0x36, /* ..##.##. */ - 0x66, /* .##..##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x35, offset: 0x02d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x36, offset: 0x02e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x37, offset: 0x02f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x38, offset: 0x0302 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x39, offset: 0x0310 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x3a, offset: 0x031e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x3b, offset: 0x032c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x3c, offset: 0x033a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0348 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0356 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0364 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x40, offset: 0x0372 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xce, /* ##..###. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xce, /* ##..###. */ - 0xc0, /* ##...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x40, char: \x41, offset: 0x0380 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x42, offset: 0x038e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x43, offset: 0x039c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x44, offset: 0x03aa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xcc, /* ##..##.. */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x45, offset: 0x03b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x46, offset: 0x03c6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x47, offset: 0x03d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xde, /* ##.####. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x48, offset: 0x03e2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x48, char: \x49, offset: 0x03f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x4a, offset: 0x03fe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1e, /* ...####. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x4b, offset: 0x040c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xcc, /* ##..##.. */ - 0xd8, /* ##.##... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xd8, /* ##.##... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4b, char: \x4c, offset: 0x041a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0428 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0xc6, /* ##...##. */ - 0xee, /* ###.###. */ - 0xfe, /* #######. */ - 0xd6, /* ##.#.##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0436 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xe6, /* ###..##. */ - 0xf6, /* ####.##. */ - 0xde, /* ##.####. */ - 0xce, /* ##..###. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0444 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x50, offset: 0x0452 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x51, offset: 0x0460 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xde, /* ##.####. */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - - /* Index: 0x51, char: \x52, offset: 0x046e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xf0, /* ####.... */ - 0xd8, /* ##.##... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x52, char: \x53, offset: 0x047c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x54, offset: 0x048a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x55, offset: 0x0498 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x56, offset: 0x04a6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x57, offset: 0x04b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xd6, /* ##.#.##. */ - 0xfe, /* #######. */ - 0xee, /* ###.###. */ - 0xc6, /* ##...##. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x58, offset: 0x04c2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x59, offset: 0x04d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc3, /* ##....## */ - 0xc3, /* ##....## */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x5a, offset: 0x04de */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5a, char: \x5b, offset: 0x04ec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x5c, offset: 0x04fa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0508 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x5e, offset: 0x0516 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x66, /* .##..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5e, char: \x5f, offset: 0x0524 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x60, offset: 0x0532 */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x60, char: \x61, offset: 0x0540 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x61, char: \x62, offset: 0x054e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x62, char: \x63, offset: 0x055c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x63, char: \x64, offset: 0x056a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x64, char: \x65, offset: 0x0578 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x65, char: \x66, offset: 0x0586 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1e, /* ...####. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0xfc, /* ######.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x66, char: \x67, offset: 0x0594 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ - - /* Index: 0x67, char: \x68, offset: 0x05a2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x68, char: \x69, offset: 0x05b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x69, char: \x6a, offset: 0x05be */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - - /* Index: 0x6a, char: \x6b, offset: 0x05cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0xcc, /* ##..##.. */ - 0xd8, /* ##.##... */ - 0xf0, /* ####.... */ - 0xd8, /* ##.##... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6b, char: \x6c, offset: 0x05da */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6c, char: \x6d, offset: 0x05e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6d, char: \x6e, offset: 0x05f6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6e, char: \x6f, offset: 0x0604 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6f, char: \x70, offset: 0x0612 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - - /* Index: 0x70, char: \x71, offset: 0x0620 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - - /* Index: 0x71, char: \x72, offset: 0x062e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xde, /* ##.####. */ - 0xf0, /* ####.... */ - 0xe0, /* ###..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x72, char: \x73, offset: 0x063c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x73, char: \x74, offset: 0x064a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0xfc, /* ######.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x1e, /* ...####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x74, char: \x75, offset: 0x0658 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x75, char: \x76, offset: 0x0666 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x76, char: \x77, offset: 0x0674 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x77, char: \x78, offset: 0x0682 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x78, char: \x79, offset: 0x0690 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ - - /* Index: 0x79, char: \x7a, offset: 0x069e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7a, char: \x7b, offset: 0x06ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1c, /* ...###.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x1c, /* ...###.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7b, char: \x7c, offset: 0x06ba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7c, char: \x7d, offset: 0x06c8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7d, char: \x7e, offset: 0x06d6 */ - 0x00, /* ........ */ - 0x73, /* .###..## */ - 0xdb, /* ##.##.## */ - 0xce, /* ##..###. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7e, char: \x7f, offset: 0x06e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7f, char: \x80, offset: 0x06f2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x80, char: \x81, offset: 0x0700 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x81, char: \x82, offset: 0x070e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x82, char: \x83, offset: 0x071c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x83, char: \x84, offset: 0x072a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x84, char: \x85, offset: 0x0738 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x85, char: \x86, offset: 0x0746 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x86, char: \x87, offset: 0x0754 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x87, char: \x88, offset: 0x0762 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x88, char: \x89, offset: 0x0770 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x89, char: \x8a, offset: 0x077e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8a, char: \x8b, offset: 0x078c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8b, char: \x8c, offset: 0x079a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8c, char: \x8d, offset: 0x07a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8d, char: \x8e, offset: 0x07b6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8e, char: \x8f, offset: 0x07c4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8f, char: \x90, offset: 0x07d2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x90, char: \x91, offset: 0x07e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x91, char: \x92, offset: 0x07ee */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x92, char: \x93, offset: 0x07fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x93, char: \x94, offset: 0x080a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x94, char: \x95, offset: 0x0818 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x95, char: \x96, offset: 0x0826 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x96, char: \x97, offset: 0x0834 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x97, char: \x98, offset: 0x0842 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x98, char: \x99, offset: 0x0850 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x99, char: \x9a, offset: 0x085e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9a, char: \x9b, offset: 0x086c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9b, char: \x9c, offset: 0x087a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9c, char: \x9d, offset: 0x0888 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9d, char: \x9e, offset: 0x0896 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9e, char: \x9f, offset: 0x08a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9f, char: \xa0, offset: 0x08b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa0, char: \xa1, offset: 0x08c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa1, char: \xa2, offset: 0x08ce */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0xd6, /* ##.#.##. */ - 0xd0, /* ##.#.... */ - 0xd0, /* ##.#.... */ - 0xd0, /* ##.#.... */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0xa2, char: \xa3, offset: 0x08dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0xf8, /* #####... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x66, /* .##..##. */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa3, char: \xa4, offset: 0x08ea */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - 0x66, /* .##..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa4, char: \xa5, offset: 0x08f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc3, /* ##....## */ - 0xc3, /* ##....## */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa5, char: \xa6, offset: 0x0906 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa6, char: \xa7, offset: 0x0914 */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x66, /* .##..##. */ - 0x60, /* .##..... */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x36, /* ..##.##. */ - 0x1c, /* ...###.. */ - 0x06, /* .....##. */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - - /* Index: 0xa7, char: \xa8, offset: 0x0922 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa8, char: \xa9, offset: 0x0930 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x81, /* #......# */ - 0x99, /* #..##..# */ - 0xa5, /* #.#..#.# */ - 0xa1, /* #.#....# */ - 0xa5, /* #.#..#.# */ - 0x99, /* #..##..# */ - 0x81, /* #......# */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa9, char: \xaa, offset: 0x093e */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x06, /* .....##. */ - 0x3e, /* ..#####. */ - 0x66, /* .##..##. */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaa, char: \xab, offset: 0x094c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1b, /* ...##.## */ - 0x36, /* ..##.##. */ - 0x6c, /* .##.##.. */ - 0xd8, /* ##.##... */ - 0x6c, /* .##.##.. */ - 0x36, /* ..##.##. */ - 0x1b, /* ...##.## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xab, char: \xac, offset: 0x095a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xac, char: \xad, offset: 0x0968 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xad, char: \xae, offset: 0x0976 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x81, /* #......# */ - 0xb9, /* #.###..# */ - 0xa5, /* #.#..#.# */ - 0xb9, /* #.###..# */ - 0xa9, /* #.#.#..# */ - 0xa5, /* #.#..#.# */ - 0x81, /* #......# */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xae, char: \xaf, offset: 0x0984 */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaf, char: \xb0, offset: 0x0992 */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb0, char: \xb1, offset: 0x09a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb1, char: \xb2, offset: 0x09ae */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb2, char: \xb3, offset: 0x09bc */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x0c, /* ....##.. */ - 0x38, /* ..###... */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb3, char: \xb4, offset: 0x09ca */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb4, char: \xb5, offset: 0x09d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xce, /* ##..###. */ - 0xf6, /* ####.##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - - /* Index: 0xb5, char: \xb6, offset: 0x09e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x76, /* .###.##. */ - 0x16, /* ...#.##. */ - 0x16, /* ...#.##. */ - 0x16, /* ...#.##. */ - 0x16, /* ...#.##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb6, char: \xb7, offset: 0x09f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb7, char: \xb8, offset: 0x0a02 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - - /* Index: 0xb8, char: \xb9, offset: 0x0a10 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb9, char: \xba, offset: 0x0a1e */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xba, char: \xbb, offset: 0x0a2c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xd8, /* ##.##... */ - 0x6c, /* .##.##.. */ - 0x36, /* ..##.##. */ - 0x1b, /* ...##.## */ - 0x36, /* ..##.##. */ - 0x6c, /* .##.##.. */ - 0xd8, /* ##.##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbb, char: \xbc, offset: 0x0a3a */ - 0x60, /* .##..... */ - 0xe0, /* ###..... */ - 0x62, /* .##...#. */ - 0x66, /* .##..##. */ - 0x6c, /* .##.##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x66, /* .##..##. */ - 0xce, /* ##..###. */ - 0x9a, /* #..##.#. */ - 0x3e, /* ..#####. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - - /* Index: 0xbc, char: \xbd, offset: 0x0a48 */ - 0x60, /* .##..... */ - 0xe0, /* ###..... */ - 0x62, /* .##...#. */ - 0x66, /* .##..##. */ - 0x6c, /* .##.##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xdc, /* ##.###.. */ - 0xb6, /* #.##.##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x3e, /* ..#####. */ - 0x00, /* ........ */ - - /* Index: 0xbd, char: \xbe, offset: 0x0a56 */ - 0xe0, /* ###..... */ - 0x30, /* ..##.... */ - 0x62, /* .##...#. */ - 0x36, /* ..##.##. */ - 0xec, /* ###.##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x66, /* .##..##. */ - 0xce, /* ##..###. */ - 0x9a, /* #..##.#. */ - 0x3e, /* ..#####. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - - /* Index: 0xbe, char: \xbf, offset: 0x0a64 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbf, char: \xc0, offset: 0x0a72 */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc0, char: \xc1, offset: 0x0a80 */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc1, char: \xc2, offset: 0x0a8e */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc2, char: \xc3, offset: 0x0a9c */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc3, char: \xc4, offset: 0x0aaa */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc4, char: \xc5, offset: 0x0ab8 */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc5, char: \xc6, offset: 0x0ac6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xd8, /* ##.##... */ - 0xd8, /* ##.##... */ - 0xd8, /* ##.##... */ - 0xfe, /* #######. */ - 0xd8, /* ##.##... */ - 0xd8, /* ##.##... */ - 0xd8, /* ##.##... */ - 0xd8, /* ##.##... */ - 0xde, /* ##.####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc6, char: \xc7, offset: 0x0ad4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - - /* Index: 0xc7, char: \xc8, offset: 0x0ae2 */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc8, char: \xc9, offset: 0x0af0 */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc9, char: \xca, offset: 0x0afe */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xca, char: \xcb, offset: 0x0b0c */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcb, char: \xcc, offset: 0x0b1a */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcc, char: \xcd, offset: 0x0b28 */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcd, char: \xce, offset: 0x0b36 */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xce, char: \xcf, offset: 0x0b44 */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcf, char: \xd0, offset: 0x0b52 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0x6c, /* .##.##.. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0xf6, /* ####.##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x6c, /* .##.##.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd0, char: \xd1, offset: 0x0b60 */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xe6, /* ###..##. */ - 0xf6, /* ####.##. */ - 0xde, /* ##.####. */ - 0xce, /* ##..###. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd1, char: \xd2, offset: 0x0b6e */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd2, char: \xd3, offset: 0x0b7c */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd3, char: \xd4, offset: 0x0b8a */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd4, char: \xd5, offset: 0x0b98 */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd5, char: \xd6, offset: 0x0ba6 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd6, char: \xd7, offset: 0x0bb4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd7, char: \xd8, offset: 0x0bc2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc7, /* ##...### */ - 0xc6, /* ##...##. */ - 0xce, /* ##..###. */ - 0xde, /* ##.####. */ - 0xf6, /* ####.##. */ - 0xe6, /* ###..##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd8, char: \xd9, offset: 0x0bd0 */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd9, char: \xda, offset: 0x0bde */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xda, char: \xdb, offset: 0x0bec */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdb, char: \xdc, offset: 0x0bfa */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdc, char: \xdd, offset: 0x0c08 */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0xc3, /* ##....## */ - 0xc3, /* ##....## */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdd, char: \xde, offset: 0x0c16 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xde, char: \xdf, offset: 0x0c24 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xc8, /* ##..#... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xe6, /* ###..##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdf, char: \xe0, offset: 0x0c32 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe0, char: \xe1, offset: 0x0c40 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe1, char: \xe2, offset: 0x0c4e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe2, char: \xe3, offset: 0x0c5c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe3, char: \xe4, offset: 0x0c6a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe4, char: \xe5, offset: 0x0c78 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe5, char: \xe6, offset: 0x0c86 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x16, /* ...#.##. */ - 0x16, /* ...#.##. */ - 0x7e, /* .######. */ - 0xd0, /* ##.#.... */ - 0xd0, /* ##.#.... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe6, char: \xe7, offset: 0x0c94 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - - /* Index: 0xe7, char: \xe8, offset: 0x0ca2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe8, char: \xe9, offset: 0x0cb0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe9, char: \xea, offset: 0x0cbe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xea, char: \xeb, offset: 0x0ccc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xeb, char: \xec, offset: 0x0cda */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xec, char: \xed, offset: 0x0ce8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xed, char: \xee, offset: 0x0cf6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xee, char: \xef, offset: 0x0d04 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xef, char: \xf0, offset: 0x0d12 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x68, /* .##.#... */ - 0x30, /* ..##.... */ - 0x58, /* .#.##... */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf0, char: \xf1, offset: 0x0d20 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf1, char: \xf2, offset: 0x0d2e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf2, char: \xf3, offset: 0x0d3c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf3, char: \xf4, offset: 0x0d4a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf4, char: \xf5, offset: 0x0d58 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf5, char: \xf6, offset: 0x0d66 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf6, char: \xf7, offset: 0x0d74 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf7, char: \xf8, offset: 0x0d82 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3d, /* ..####.# */ - 0x67, /* .##..### */ - 0x6e, /* .##.###. */ - 0x7e, /* .######. */ - 0x76, /* .###.##. */ - 0xe6, /* ###..##. */ - 0xbc, /* #.####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf8, char: \xf9, offset: 0x0d90 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf9, char: \xfa, offset: 0x0d9e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfa, char: \xfb, offset: 0x0dac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfb, char: \xfc, offset: 0x0dba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfc, char: \xfd, offset: 0x0dc8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ - - /* Index: 0xfd, char: \xfe, offset: 0x0dd6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - - /* Index: 0xfe, char: \xff, offset: 0x0de4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ -}; - -const font_char_desc_t _fonts_terminus_bold_8x14_iso8859_1_descriptors[] = { - { 0x08, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x08, 0x000e }, /* Index: 0x01, char: \x02 */ - { 0x08, 0x001c }, /* Index: 0x02, char: \x03 */ - { 0x08, 0x002a }, /* Index: 0x03, char: \x04 */ - { 0x08, 0x0038 }, /* Index: 0x04, char: \x05 */ - { 0x08, 0x0046 }, /* Index: 0x05, char: \x06 */ - { 0x08, 0x0054 }, /* Index: 0x06, char: \x07 */ - { 0x08, 0x0062 }, /* Index: 0x07, char: \x08 */ - { 0x08, 0x0070 }, /* Index: 0x08, char: \x09 */ - { 0x08, 0x007e }, /* Index: 0x09, char: \x0a */ - { 0x08, 0x008c }, /* Index: 0x0a, char: \x0b */ - { 0x08, 0x009a }, /* Index: 0x0b, char: \x0c */ - { 0x08, 0x00a8 }, /* Index: 0x0c, char: \x0d */ - { 0x08, 0x00b6 }, /* Index: 0x0d, char: \x0e */ - { 0x08, 0x00c4 }, /* Index: 0x0e, char: \x0f */ - { 0x08, 0x00d2 }, /* Index: 0x0f, char: \x10 */ - { 0x08, 0x00e0 }, /* Index: 0x10, char: \x11 */ - { 0x08, 0x00ee }, /* Index: 0x11, char: \x12 */ - { 0x08, 0x00fc }, /* Index: 0x12, char: \x13 */ - { 0x08, 0x010a }, /* Index: 0x13, char: \x14 */ - { 0x08, 0x0118 }, /* Index: 0x14, char: \x15 */ - { 0x08, 0x0126 }, /* Index: 0x15, char: \x16 */ - { 0x08, 0x0134 }, /* Index: 0x16, char: \x17 */ - { 0x08, 0x0142 }, /* Index: 0x17, char: \x18 */ - { 0x08, 0x0150 }, /* Index: 0x18, char: \x19 */ - { 0x08, 0x015e }, /* Index: 0x19, char: \x1a */ - { 0x08, 0x016c }, /* Index: 0x1a, char: \x1b */ - { 0x08, 0x017a }, /* Index: 0x1b, char: \x1c */ - { 0x08, 0x0188 }, /* Index: 0x1c, char: \x1d */ - { 0x08, 0x0196 }, /* Index: 0x1d, char: \x1e */ - { 0x08, 0x01a4 }, /* Index: 0x1e, char: \x1f */ - { 0x08, 0x01b2 }, /* Index: 0x1f, char: \x20 */ - { 0x08, 0x01c0 }, /* Index: 0x20, char: \x21 */ - { 0x08, 0x01ce }, /* Index: 0x21, char: \x22 */ - { 0x08, 0x01dc }, /* Index: 0x22, char: \x23 */ - { 0x08, 0x01ea }, /* Index: 0x23, char: \x24 */ - { 0x08, 0x01f8 }, /* Index: 0x24, char: \x25 */ - { 0x08, 0x0206 }, /* Index: 0x25, char: \x26 */ - { 0x08, 0x0214 }, /* Index: 0x26, char: \x27 */ - { 0x08, 0x0222 }, /* Index: 0x27, char: \x28 */ - { 0x08, 0x0230 }, /* Index: 0x28, char: \x29 */ - { 0x08, 0x023e }, /* Index: 0x29, char: \x2a */ - { 0x08, 0x024c }, /* Index: 0x2a, char: \x2b */ - { 0x08, 0x025a }, /* Index: 0x2b, char: \x2c */ - { 0x08, 0x0268 }, /* Index: 0x2c, char: \x2d */ - { 0x08, 0x0276 }, /* Index: 0x2d, char: \x2e */ - { 0x08, 0x0284 }, /* Index: 0x2e, char: \x2f */ - { 0x08, 0x0292 }, /* Index: 0x2f, char: \x30 */ - { 0x08, 0x02a0 }, /* Index: 0x30, char: \x31 */ - { 0x08, 0x02ae }, /* Index: 0x31, char: \x32 */ - { 0x08, 0x02bc }, /* Index: 0x32, char: \x33 */ - { 0x08, 0x02ca }, /* Index: 0x33, char: \x34 */ - { 0x08, 0x02d8 }, /* Index: 0x34, char: \x35 */ - { 0x08, 0x02e6 }, /* Index: 0x35, char: \x36 */ - { 0x08, 0x02f4 }, /* Index: 0x36, char: \x37 */ - { 0x08, 0x0302 }, /* Index: 0x37, char: \x38 */ - { 0x08, 0x0310 }, /* Index: 0x38, char: \x39 */ - { 0x08, 0x031e }, /* Index: 0x39, char: \x3a */ - { 0x08, 0x032c }, /* Index: 0x3a, char: \x3b */ - { 0x08, 0x033a }, /* Index: 0x3b, char: \x3c */ - { 0x08, 0x0348 }, /* Index: 0x3c, char: \x3d */ - { 0x08, 0x0356 }, /* Index: 0x3d, char: \x3e */ - { 0x08, 0x0364 }, /* Index: 0x3e, char: \x3f */ - { 0x08, 0x0372 }, /* Index: 0x3f, char: \x40 */ - { 0x08, 0x0380 }, /* Index: 0x40, char: \x41 */ - { 0x08, 0x038e }, /* Index: 0x41, char: \x42 */ - { 0x08, 0x039c }, /* Index: 0x42, char: \x43 */ - { 0x08, 0x03aa }, /* Index: 0x43, char: \x44 */ - { 0x08, 0x03b8 }, /* Index: 0x44, char: \x45 */ - { 0x08, 0x03c6 }, /* Index: 0x45, char: \x46 */ - { 0x08, 0x03d4 }, /* Index: 0x46, char: \x47 */ - { 0x08, 0x03e2 }, /* Index: 0x47, char: \x48 */ - { 0x08, 0x03f0 }, /* Index: 0x48, char: \x49 */ - { 0x08, 0x03fe }, /* Index: 0x49, char: \x4a */ - { 0x08, 0x040c }, /* Index: 0x4a, char: \x4b */ - { 0x08, 0x041a }, /* Index: 0x4b, char: \x4c */ - { 0x08, 0x0428 }, /* Index: 0x4c, char: \x4d */ - { 0x08, 0x0436 }, /* Index: 0x4d, char: \x4e */ - { 0x08, 0x0444 }, /* Index: 0x4e, char: \x4f */ - { 0x08, 0x0452 }, /* Index: 0x4f, char: \x50 */ - { 0x08, 0x0460 }, /* Index: 0x50, char: \x51 */ - { 0x08, 0x046e }, /* Index: 0x51, char: \x52 */ - { 0x08, 0x047c }, /* Index: 0x52, char: \x53 */ - { 0x08, 0x048a }, /* Index: 0x53, char: \x54 */ - { 0x08, 0x0498 }, /* Index: 0x54, char: \x55 */ - { 0x08, 0x04a6 }, /* Index: 0x55, char: \x56 */ - { 0x08, 0x04b4 }, /* Index: 0x56, char: \x57 */ - { 0x08, 0x04c2 }, /* Index: 0x57, char: \x58 */ - { 0x08, 0x04d0 }, /* Index: 0x58, char: \x59 */ - { 0x08, 0x04de }, /* Index: 0x59, char: \x5a */ - { 0x08, 0x04ec }, /* Index: 0x5a, char: \x5b */ - { 0x08, 0x04fa }, /* Index: 0x5b, char: \x5c */ - { 0x08, 0x0508 }, /* Index: 0x5c, char: \x5d */ - { 0x08, 0x0516 }, /* Index: 0x5d, char: \x5e */ - { 0x08, 0x0524 }, /* Index: 0x5e, char: \x5f */ - { 0x08, 0x0532 }, /* Index: 0x5f, char: \x60 */ - { 0x08, 0x0540 }, /* Index: 0x60, char: \x61 */ - { 0x08, 0x054e }, /* Index: 0x61, char: \x62 */ - { 0x08, 0x055c }, /* Index: 0x62, char: \x63 */ - { 0x08, 0x056a }, /* Index: 0x63, char: \x64 */ - { 0x08, 0x0578 }, /* Index: 0x64, char: \x65 */ - { 0x08, 0x0586 }, /* Index: 0x65, char: \x66 */ - { 0x08, 0x0594 }, /* Index: 0x66, char: \x67 */ - { 0x08, 0x05a2 }, /* Index: 0x67, char: \x68 */ - { 0x08, 0x05b0 }, /* Index: 0x68, char: \x69 */ - { 0x08, 0x05be }, /* Index: 0x69, char: \x6a */ - { 0x08, 0x05cc }, /* Index: 0x6a, char: \x6b */ - { 0x08, 0x05da }, /* Index: 0x6b, char: \x6c */ - { 0x08, 0x05e8 }, /* Index: 0x6c, char: \x6d */ - { 0x08, 0x05f6 }, /* Index: 0x6d, char: \x6e */ - { 0x08, 0x0604 }, /* Index: 0x6e, char: \x6f */ - { 0x08, 0x0612 }, /* Index: 0x6f, char: \x70 */ - { 0x08, 0x0620 }, /* Index: 0x70, char: \x71 */ - { 0x08, 0x062e }, /* Index: 0x71, char: \x72 */ - { 0x08, 0x063c }, /* Index: 0x72, char: \x73 */ - { 0x08, 0x064a }, /* Index: 0x73, char: \x74 */ - { 0x08, 0x0658 }, /* Index: 0x74, char: \x75 */ - { 0x08, 0x0666 }, /* Index: 0x75, char: \x76 */ - { 0x08, 0x0674 }, /* Index: 0x76, char: \x77 */ - { 0x08, 0x0682 }, /* Index: 0x77, char: \x78 */ - { 0x08, 0x0690 }, /* Index: 0x78, char: \x79 */ - { 0x08, 0x069e }, /* Index: 0x79, char: \x7a */ - { 0x08, 0x06ac }, /* Index: 0x7a, char: \x7b */ - { 0x08, 0x06ba }, /* Index: 0x7b, char: \x7c */ - { 0x08, 0x06c8 }, /* Index: 0x7c, char: \x7d */ - { 0x08, 0x06d6 }, /* Index: 0x7d, char: \x7e */ - { 0x08, 0x06e4 }, /* Index: 0x7e, char: \x7f */ - { 0x08, 0x06f2 }, /* Index: 0x7f, char: \x80 */ - { 0x08, 0x0700 }, /* Index: 0x80, char: \x81 */ - { 0x08, 0x070e }, /* Index: 0x81, char: \x82 */ - { 0x08, 0x071c }, /* Index: 0x82, char: \x83 */ - { 0x08, 0x072a }, /* Index: 0x83, char: \x84 */ - { 0x08, 0x0738 }, /* Index: 0x84, char: \x85 */ - { 0x08, 0x0746 }, /* Index: 0x85, char: \x86 */ - { 0x08, 0x0754 }, /* Index: 0x86, char: \x87 */ - { 0x08, 0x0762 }, /* Index: 0x87, char: \x88 */ - { 0x08, 0x0770 }, /* Index: 0x88, char: \x89 */ - { 0x08, 0x077e }, /* Index: 0x89, char: \x8a */ - { 0x08, 0x078c }, /* Index: 0x8a, char: \x8b */ - { 0x08, 0x079a }, /* Index: 0x8b, char: \x8c */ - { 0x08, 0x07a8 }, /* Index: 0x8c, char: \x8d */ - { 0x08, 0x07b6 }, /* Index: 0x8d, char: \x8e */ - { 0x08, 0x07c4 }, /* Index: 0x8e, char: \x8f */ - { 0x08, 0x07d2 }, /* Index: 0x8f, char: \x90 */ - { 0x08, 0x07e0 }, /* Index: 0x90, char: \x91 */ - { 0x08, 0x07ee }, /* Index: 0x91, char: \x92 */ - { 0x08, 0x07fc }, /* Index: 0x92, char: \x93 */ - { 0x08, 0x080a }, /* Index: 0x93, char: \x94 */ - { 0x08, 0x0818 }, /* Index: 0x94, char: \x95 */ - { 0x08, 0x0826 }, /* Index: 0x95, char: \x96 */ - { 0x08, 0x0834 }, /* Index: 0x96, char: \x97 */ - { 0x08, 0x0842 }, /* Index: 0x97, char: \x98 */ - { 0x08, 0x0850 }, /* Index: 0x98, char: \x99 */ - { 0x08, 0x085e }, /* Index: 0x99, char: \x9a */ - { 0x08, 0x086c }, /* Index: 0x9a, char: \x9b */ - { 0x08, 0x087a }, /* Index: 0x9b, char: \x9c */ - { 0x08, 0x0888 }, /* Index: 0x9c, char: \x9d */ - { 0x08, 0x0896 }, /* Index: 0x9d, char: \x9e */ - { 0x08, 0x08a4 }, /* Index: 0x9e, char: \x9f */ - { 0x08, 0x08b2 }, /* Index: 0x9f, char: \xa0 */ - { 0x08, 0x08c0 }, /* Index: 0xa0, char: \xa1 */ - { 0x08, 0x08ce }, /* Index: 0xa1, char: \xa2 */ - { 0x08, 0x08dc }, /* Index: 0xa2, char: \xa3 */ - { 0x08, 0x08ea }, /* Index: 0xa3, char: \xa4 */ - { 0x08, 0x08f8 }, /* Index: 0xa4, char: \xa5 */ - { 0x08, 0x0906 }, /* Index: 0xa5, char: \xa6 */ - { 0x08, 0x0914 }, /* Index: 0xa6, char: \xa7 */ - { 0x08, 0x0922 }, /* Index: 0xa7, char: \xa8 */ - { 0x08, 0x0930 }, /* Index: 0xa8, char: \xa9 */ - { 0x08, 0x093e }, /* Index: 0xa9, char: \xaa */ - { 0x08, 0x094c }, /* Index: 0xaa, char: \xab */ - { 0x08, 0x095a }, /* Index: 0xab, char: \xac */ - { 0x08, 0x0968 }, /* Index: 0xac, char: \xad */ - { 0x08, 0x0976 }, /* Index: 0xad, char: \xae */ - { 0x08, 0x0984 }, /* Index: 0xae, char: \xaf */ - { 0x08, 0x0992 }, /* Index: 0xaf, char: \xb0 */ - { 0x08, 0x09a0 }, /* Index: 0xb0, char: \xb1 */ - { 0x08, 0x09ae }, /* Index: 0xb1, char: \xb2 */ - { 0x08, 0x09bc }, /* Index: 0xb2, char: \xb3 */ - { 0x08, 0x09ca }, /* Index: 0xb3, char: \xb4 */ - { 0x08, 0x09d8 }, /* Index: 0xb4, char: \xb5 */ - { 0x08, 0x09e6 }, /* Index: 0xb5, char: \xb6 */ - { 0x08, 0x09f4 }, /* Index: 0xb6, char: \xb7 */ - { 0x08, 0x0a02 }, /* Index: 0xb7, char: \xb8 */ - { 0x08, 0x0a10 }, /* Index: 0xb8, char: \xb9 */ - { 0x08, 0x0a1e }, /* Index: 0xb9, char: \xba */ - { 0x08, 0x0a2c }, /* Index: 0xba, char: \xbb */ - { 0x08, 0x0a3a }, /* Index: 0xbb, char: \xbc */ - { 0x08, 0x0a48 }, /* Index: 0xbc, char: \xbd */ - { 0x08, 0x0a56 }, /* Index: 0xbd, char: \xbe */ - { 0x08, 0x0a64 }, /* Index: 0xbe, char: \xbf */ - { 0x08, 0x0a72 }, /* Index: 0xbf, char: \xc0 */ - { 0x08, 0x0a80 }, /* Index: 0xc0, char: \xc1 */ - { 0x08, 0x0a8e }, /* Index: 0xc1, char: \xc2 */ - { 0x08, 0x0a9c }, /* Index: 0xc2, char: \xc3 */ - { 0x08, 0x0aaa }, /* Index: 0xc3, char: \xc4 */ - { 0x08, 0x0ab8 }, /* Index: 0xc4, char: \xc5 */ - { 0x08, 0x0ac6 }, /* Index: 0xc5, char: \xc6 */ - { 0x08, 0x0ad4 }, /* Index: 0xc6, char: \xc7 */ - { 0x08, 0x0ae2 }, /* Index: 0xc7, char: \xc8 */ - { 0x08, 0x0af0 }, /* Index: 0xc8, char: \xc9 */ - { 0x08, 0x0afe }, /* Index: 0xc9, char: \xca */ - { 0x08, 0x0b0c }, /* Index: 0xca, char: \xcb */ - { 0x08, 0x0b1a }, /* Index: 0xcb, char: \xcc */ - { 0x08, 0x0b28 }, /* Index: 0xcc, char: \xcd */ - { 0x08, 0x0b36 }, /* Index: 0xcd, char: \xce */ - { 0x08, 0x0b44 }, /* Index: 0xce, char: \xcf */ - { 0x08, 0x0b52 }, /* Index: 0xcf, char: \xd0 */ - { 0x08, 0x0b60 }, /* Index: 0xd0, char: \xd1 */ - { 0x08, 0x0b6e }, /* Index: 0xd1, char: \xd2 */ - { 0x08, 0x0b7c }, /* Index: 0xd2, char: \xd3 */ - { 0x08, 0x0b8a }, /* Index: 0xd3, char: \xd4 */ - { 0x08, 0x0b98 }, /* Index: 0xd4, char: \xd5 */ - { 0x08, 0x0ba6 }, /* Index: 0xd5, char: \xd6 */ - { 0x08, 0x0bb4 }, /* Index: 0xd6, char: \xd7 */ - { 0x08, 0x0bc2 }, /* Index: 0xd7, char: \xd8 */ - { 0x08, 0x0bd0 }, /* Index: 0xd8, char: \xd9 */ - { 0x08, 0x0bde }, /* Index: 0xd9, char: \xda */ - { 0x08, 0x0bec }, /* Index: 0xda, char: \xdb */ - { 0x08, 0x0bfa }, /* Index: 0xdb, char: \xdc */ - { 0x08, 0x0c08 }, /* Index: 0xdc, char: \xdd */ - { 0x08, 0x0c16 }, /* Index: 0xdd, char: \xde */ - { 0x08, 0x0c24 }, /* Index: 0xde, char: \xdf */ - { 0x08, 0x0c32 }, /* Index: 0xdf, char: \xe0 */ - { 0x08, 0x0c40 }, /* Index: 0xe0, char: \xe1 */ - { 0x08, 0x0c4e }, /* Index: 0xe1, char: \xe2 */ - { 0x08, 0x0c5c }, /* Index: 0xe2, char: \xe3 */ - { 0x08, 0x0c6a }, /* Index: 0xe3, char: \xe4 */ - { 0x08, 0x0c78 }, /* Index: 0xe4, char: \xe5 */ - { 0x08, 0x0c86 }, /* Index: 0xe5, char: \xe6 */ - { 0x08, 0x0c94 }, /* Index: 0xe6, char: \xe7 */ - { 0x08, 0x0ca2 }, /* Index: 0xe7, char: \xe8 */ - { 0x08, 0x0cb0 }, /* Index: 0xe8, char: \xe9 */ - { 0x08, 0x0cbe }, /* Index: 0xe9, char: \xea */ - { 0x08, 0x0ccc }, /* Index: 0xea, char: \xeb */ - { 0x08, 0x0cda }, /* Index: 0xeb, char: \xec */ - { 0x08, 0x0ce8 }, /* Index: 0xec, char: \xed */ - { 0x08, 0x0cf6 }, /* Index: 0xed, char: \xee */ - { 0x08, 0x0d04 }, /* Index: 0xee, char: \xef */ - { 0x08, 0x0d12 }, /* Index: 0xef, char: \xf0 */ - { 0x08, 0x0d20 }, /* Index: 0xf0, char: \xf1 */ - { 0x08, 0x0d2e }, /* Index: 0xf1, char: \xf2 */ - { 0x08, 0x0d3c }, /* Index: 0xf2, char: \xf3 */ - { 0x08, 0x0d4a }, /* Index: 0xf3, char: \xf4 */ - { 0x08, 0x0d58 }, /* Index: 0xf4, char: \xf5 */ - { 0x08, 0x0d66 }, /* Index: 0xf5, char: \xf6 */ - { 0x08, 0x0d74 }, /* Index: 0xf6, char: \xf7 */ - { 0x08, 0x0d82 }, /* Index: 0xf7, char: \xf8 */ - { 0x08, 0x0d90 }, /* Index: 0xf8, char: \xf9 */ - { 0x08, 0x0d9e }, /* Index: 0xf9, char: \xfa */ - { 0x08, 0x0dac }, /* Index: 0xfa, char: \xfb */ - { 0x08, 0x0dba }, /* Index: 0xfb, char: \xfc */ - { 0x08, 0x0dc8 }, /* Index: 0xfc, char: \xfd */ - { 0x08, 0x0dd6 }, /* Index: 0xfd, char: \xfe */ - { 0x08, 0x0de4 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_8x14_iso8859_1_info = -{ - .height = 14, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_8x14_iso8859_1_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_8x14_iso8859_1_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_8X14_ISO8859_1_H_ */ diff --git a/extras/fonts/data/font_terminus_bold_8x14_koi8_r.h b/extras/fonts/data/font_terminus_bold_8x14_koi8_r.h deleted file mode 100644 index c1b249f..0000000 --- a/extras/fonts/data/font_terminus_bold_8x14_koi8_r.h +++ /dev/null @@ -1,4369 +0,0 @@ -/** - * This file contains generated binary font data. - * - * Font: Terminus_Bold - * Size: 8x14 - * Charset: koi8_r - * 255 characters (1..255) - * - * Copyright (c) 2015 Dimitar Toshkov Zhekov - * License: SIL Open Font License, Version 1.1. The license is included as OFL.TXT, and is - * also available with a FAQ at http://scripts.sil.org/OFL - * - * Generated: - */ -#ifndef _EXTRAS_FONTS_FONT_TERMINUS_BOLD_8X14_KOI8_R_H_ -#define _EXTRAS_FONTS_FONT_TERMINUS_BOLD_8X14_KOI8_R_H_ - -static const uint8_t _fonts_terminus_bold_8x14_koi8_r_bitmaps[] = { - - /* Index: 0x00, char: \x01, offset: 0x0000 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x7e, /* .######. */ - 0xff, /* ######## */ - 0x7e, /* .######. */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x01, char: \x02, offset: 0x000e */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - - /* Index: 0x02, char: \x03, offset: 0x001c */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xfc, /* ######.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0x00, /* ........ */ - 0x3f, /* ..###### */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - - /* Index: 0x03, char: \x04, offset: 0x002a */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xf0, /* ####.... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x3f, /* ..###### */ - 0x30, /* ..##.... */ - 0x3c, /* ..####.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x04, char: \x05, offset: 0x0038 */ - 0x78, /* .####... */ - 0xcc, /* ##..##.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xcc, /* ##..##.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x33, /* ..##..## */ - 0x33, /* ..##..## */ - 0x3e, /* ..#####. */ - 0x36, /* ..##.##. */ - 0x33, /* ..##..## */ - 0x00, /* ........ */ - - /* Index: 0x05, char: \x06, offset: 0x0046 */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x3f, /* ..###### */ - 0x30, /* ..##.... */ - 0x3c, /* ..####.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x06, char: \x07, offset: 0x0054 */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x07, char: \x08, offset: 0x0062 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x08, char: \x09, offset: 0x0070 */ - 0xcc, /* ##..##.. */ - 0xec, /* ###.##.. */ - 0xfc, /* ######.. */ - 0xdc, /* ##.###.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x3f, /* ..###### */ - 0x00, /* ........ */ - - /* Index: 0x09, char: \x0a, offset: 0x007e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0a, char: \x0b, offset: 0x008c */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0b, char: \x0c, offset: 0x009a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x0c, char: \x0d, offset: 0x00a8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x0d, char: \x0e, offset: 0x00b6 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x0e, char: \x0f, offset: 0x00c4 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x0f, char: \x10, offset: 0x00d2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x10, char: \x11, offset: 0x00e0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x11, char: \x12, offset: 0x00ee */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x12, char: \x13, offset: 0x00fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x13, char: \x14, offset: 0x010a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x14, char: \x15, offset: 0x0118 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x15, char: \x16, offset: 0x0126 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x16, char: \x17, offset: 0x0134 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x17, char: \x18, offset: 0x0142 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x18, char: \x19, offset: 0x0150 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x19, char: \x1a, offset: 0x015e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1a, char: \x1b, offset: 0x016c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1b, char: \x1c, offset: 0x017a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1c, char: \x1d, offset: 0x0188 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0xfe, /* #######. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1d, char: \x1e, offset: 0x0196 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0xf8, /* #####... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x66, /* .##..##. */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1e, char: \x1f, offset: 0x01a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x1f, char: \x20, offset: 0x01b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x20, char: \x21, offset: 0x01c0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x21, char: \x22, offset: 0x01ce */ - 0x00, /* ........ */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x22, char: \x23, offset: 0x01dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xfe, /* #######. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xfe, /* #######. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x23, char: \x24, offset: 0x01ea */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0xd6, /* ##.#.##. */ - 0xd0, /* ##.#.... */ - 0xd0, /* ##.#.... */ - 0x7c, /* .#####.. */ - 0x16, /* ...#.##. */ - 0x16, /* ...#.##. */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x10, /* ...#.... */ - - /* Index: 0x24, char: \x25, offset: 0x01f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x66, /* .##..##. */ - 0xd6, /* ##.#.##. */ - 0x6c, /* .##.##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x36, /* ..##.##. */ - 0x6b, /* .##.#.## */ - 0x66, /* .##..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x25, char: \x26, offset: 0x0206 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xdc, /* ##.###.. */ - 0x76, /* .###.##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x26, char: \x27, offset: 0x0214 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x27, char: \x28, offset: 0x0222 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x28, char: \x29, offset: 0x0230 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x29, char: \x2a, offset: 0x023e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0xfe, /* #######. */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2a, char: \x2b, offset: 0x024c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2b, char: \x2c, offset: 0x025a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x2c, char: \x2d, offset: 0x0268 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2d, char: \x2e, offset: 0x0276 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2e, char: \x2f, offset: 0x0284 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x2f, char: \x30, offset: 0x0292 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xce, /* ##..###. */ - 0xde, /* ##.####. */ - 0xf6, /* ####.##. */ - 0xe6, /* ###..##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x30, char: \x31, offset: 0x02a0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x38, /* ..###... */ - 0x78, /* .####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x31, char: \x32, offset: 0x02ae */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x32, char: \x33, offset: 0x02bc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x06, /* .....##. */ - 0x3c, /* ..####.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x33, char: \x34, offset: 0x02ca */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x0e, /* ....###. */ - 0x1e, /* ...####. */ - 0x36, /* ..##.##. */ - 0x66, /* .##..##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x34, char: \x35, offset: 0x02d8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x35, char: \x36, offset: 0x02e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x36, char: \x37, offset: 0x02f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x37, char: \x38, offset: 0x0302 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x38, char: \x39, offset: 0x0310 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x39, char: \x3a, offset: 0x031e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3a, char: \x3b, offset: 0x032c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - - /* Index: 0x3b, char: \x3c, offset: 0x033a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3c, char: \x3d, offset: 0x0348 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3d, char: \x3e, offset: 0x0356 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3e, char: \x3f, offset: 0x0364 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x3f, char: \x40, offset: 0x0372 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xce, /* ##..###. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xce, /* ##..###. */ - 0xc0, /* ##...... */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x40, char: \x41, offset: 0x0380 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x41, char: \x42, offset: 0x038e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x42, char: \x43, offset: 0x039c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x43, char: \x44, offset: 0x03aa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xcc, /* ##..##.. */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x44, char: \x45, offset: 0x03b8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x45, char: \x46, offset: 0x03c6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x46, char: \x47, offset: 0x03d4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xde, /* ##.####. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x47, char: \x48, offset: 0x03e2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x48, char: \x49, offset: 0x03f0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x49, char: \x4a, offset: 0x03fe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1e, /* ...####. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0x78, /* .####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4a, char: \x4b, offset: 0x040c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xcc, /* ##..##.. */ - 0xd8, /* ##.##... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xd8, /* ##.##... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4b, char: \x4c, offset: 0x041a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4c, char: \x4d, offset: 0x0428 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0xc6, /* ##...##. */ - 0xee, /* ###.###. */ - 0xfe, /* #######. */ - 0xd6, /* ##.#.##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4d, char: \x4e, offset: 0x0436 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xe6, /* ###..##. */ - 0xf6, /* ####.##. */ - 0xde, /* ##.####. */ - 0xce, /* ##..###. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4e, char: \x4f, offset: 0x0444 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x4f, char: \x50, offset: 0x0452 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x50, char: \x51, offset: 0x0460 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xde, /* ##.####. */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - - /* Index: 0x51, char: \x52, offset: 0x046e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xf0, /* ####.... */ - 0xd8, /* ##.##... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x52, char: \x53, offset: 0x047c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x53, char: \x54, offset: 0x048a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x54, char: \x55, offset: 0x0498 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x55, char: \x56, offset: 0x04a6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x56, char: \x57, offset: 0x04b4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xd6, /* ##.#.##. */ - 0xfe, /* #######. */ - 0xee, /* ###.###. */ - 0xc6, /* ##...##. */ - 0x82, /* #.....#. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x57, char: \x58, offset: 0x04c2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x58, char: \x59, offset: 0x04d0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc3, /* ##....## */ - 0xc3, /* ##....## */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x59, char: \x5a, offset: 0x04de */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5a, char: \x5b, offset: 0x04ec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5b, char: \x5c, offset: 0x04fa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5c, char: \x5d, offset: 0x0508 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3c, /* ..####.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5d, char: \x5e, offset: 0x0516 */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x66, /* .##..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x5e, char: \x5f, offset: 0x0524 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - - /* Index: 0x5f, char: \x60, offset: 0x0532 */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x60, char: \x61, offset: 0x0540 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x61, char: \x62, offset: 0x054e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x62, char: \x63, offset: 0x055c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x63, char: \x64, offset: 0x056a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x64, char: \x65, offset: 0x0578 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x65, char: \x66, offset: 0x0586 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1e, /* ...####. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0xfc, /* ######.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x66, char: \x67, offset: 0x0594 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ - - /* Index: 0x67, char: \x68, offset: 0x05a2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x68, char: \x69, offset: 0x05b0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x69, char: \x6a, offset: 0x05be */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x3c, /* ..####.. */ - - /* Index: 0x6a, char: \x6b, offset: 0x05cc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0xcc, /* ##..##.. */ - 0xd8, /* ##.##... */ - 0xf0, /* ####.... */ - 0xd8, /* ##.##... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6b, char: \x6c, offset: 0x05da */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x3c, /* ..####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6c, char: \x6d, offset: 0x05e8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6d, char: \x6e, offset: 0x05f6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6e, char: \x6f, offset: 0x0604 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x6f, char: \x70, offset: 0x0612 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - - /* Index: 0x70, char: \x71, offset: 0x0620 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - - /* Index: 0x71, char: \x72, offset: 0x062e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xde, /* ##.####. */ - 0xf0, /* ####.... */ - 0xe0, /* ###..... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x72, char: \x73, offset: 0x063c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x73, char: \x74, offset: 0x064a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0xfc, /* ######.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x1e, /* ...####. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x74, char: \x75, offset: 0x0658 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x75, char: \x76, offset: 0x0666 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x76, char: \x77, offset: 0x0674 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x77, char: \x78, offset: 0x0682 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x78, char: \x79, offset: 0x0690 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ - - /* Index: 0x79, char: \x7a, offset: 0x069e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7a, char: \x7b, offset: 0x06ac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1c, /* ...###.. */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x30, /* ..##.... */ - 0x1c, /* ...###.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7b, char: \x7c, offset: 0x06ba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7c, char: \x7d, offset: 0x06c8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x70, /* .###.... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7d, char: \x7e, offset: 0x06d6 */ - 0x00, /* ........ */ - 0x73, /* .###..## */ - 0xdb, /* ##.##.## */ - 0xce, /* ##..###. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7e, char: \x7f, offset: 0x06e4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x7f, char: \x80, offset: 0x06f2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x80, char: \x81, offset: 0x0700 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x81, char: \x82, offset: 0x070e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x82, char: \x83, offset: 0x071c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x83, char: \x84, offset: 0x072a */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x84, char: \x85, offset: 0x0738 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x85, char: \x86, offset: 0x0746 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x86, char: \x87, offset: 0x0754 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x87, char: \x88, offset: 0x0762 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x88, char: \x89, offset: 0x0770 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x89, char: \x8a, offset: 0x077e */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x8a, char: \x8b, offset: 0x078c */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x8b, char: \x8c, offset: 0x079a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - - /* Index: 0x8c, char: \x8d, offset: 0x07a8 */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0xff, /* ######## */ - - /* Index: 0x8d, char: \x8e, offset: 0x07b6 */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - - /* Index: 0x8e, char: \x8f, offset: 0x07c4 */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - 0x0f, /* ....#### */ - - /* Index: 0x8f, char: \x90, offset: 0x07d2 */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - 0x88, /* #...#... */ - 0x22, /* ..#...#. */ - - /* Index: 0x90, char: \x91, offset: 0x07e0 */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - 0xaa, /* #.#.#.#. */ - 0x55, /* .#.#.#.# */ - - /* Index: 0x91, char: \x92, offset: 0x07ee */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - 0xee, /* ###.###. */ - 0xbb, /* #.###.## */ - - /* Index: 0x92, char: \x93, offset: 0x07fc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x1b, /* ...##.## */ - 0x1b, /* ...##.## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0x93, char: \x94, offset: 0x080a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x7c, /* .#####.. */ - 0x7c, /* .#####.. */ - 0x7c, /* .#####.. */ - 0x7c, /* .#####.. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x94, char: \x95, offset: 0x0818 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x95, char: \x96, offset: 0x0826 */ - 0x00, /* ........ */ - 0x0e, /* ....###. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0x0c, /* ....##.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0x6c, /* .##.##.. */ - 0x3c, /* ..####.. */ - 0x1c, /* ...###.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x96, char: \x97, offset: 0x0834 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0x76, /* .###.##. */ - 0xdc, /* ##.###.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x97, char: \x98, offset: 0x0842 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x60, /* .##..... */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x98, char: \x99, offset: 0x0850 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x30, /* ..##.... */ - 0x18, /* ...##... */ - 0x0c, /* ....##.. */ - 0x06, /* .....##. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x99, char: \x9a, offset: 0x085e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9a, char: \x9b, offset: 0x086c */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xd8, /* ##.##... */ - 0xd8, /* ##.##... */ - 0x70, /* .###.... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9b, char: \x9c, offset: 0x087a */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9c, char: \x9d, offset: 0x0888 */ - 0x00, /* ........ */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x0c, /* ....##.. */ - 0x18, /* ...##... */ - 0x30, /* ..##.... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9d, char: \x9e, offset: 0x0896 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9e, char: \x9f, offset: 0x08a4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0x9f, char: \xa0, offset: 0x08b2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa0, char: \xa1, offset: 0x08c0 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xa1, char: \xa2, offset: 0x08ce */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0xa2, char: \xa3, offset: 0x08dc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa3, char: \xa4, offset: 0x08ea */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7f, /* .####### */ - 0x7f, /* .####### */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xa4, char: \xa5, offset: 0x08f8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7f, /* .####### */ - 0x7f, /* .####### */ - 0x60, /* .##..... */ - 0x6f, /* .##.#### */ - 0x6f, /* .##.#### */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xa5, char: \xa6, offset: 0x0906 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0xa6, char: \xa7, offset: 0x0914 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xa7, char: \xa8, offset: 0x0922 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0x0c, /* ....##.. */ - 0xec, /* ###.##.. */ - 0xec, /* ###.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xa8, char: \xa9, offset: 0x0930 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xa9, char: \xaa, offset: 0x093e */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x7f, /* .####### */ - 0x7f, /* .####### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xaa, char: \xab, offset: 0x094c */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6f, /* .##.#### */ - 0x6f, /* .##.#### */ - 0x60, /* .##..... */ - 0x7f, /* .####### */ - 0x7f, /* .####### */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xab, char: \xac, offset: 0x095a */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xac, char: \xad, offset: 0x0968 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xad, char: \xae, offset: 0x0976 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xec, /* ###.##.. */ - 0xec, /* ###.##.. */ - 0x0c, /* ....##.. */ - 0xfc, /* ######.. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xae, char: \xaf, offset: 0x0984 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x1f, /* ...##### */ - 0x1f, /* ...##### */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0xaf, char: \xb0, offset: 0x0992 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6f, /* .##.#### */ - 0x6f, /* .##.#### */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xb0, char: \xb1, offset: 0x09a0 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6f, /* .##.#### */ - 0x6f, /* .##.#### */ - 0x60, /* .##..... */ - 0x6f, /* .##.#### */ - 0x6f, /* .##.#### */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xb1, char: \xb2, offset: 0x09ae */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0xf8, /* #####... */ - 0xf8, /* #####... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0xb2, char: \xb3, offset: 0x09bc */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb3, char: \xb4, offset: 0x09ca */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xec, /* ###.##.. */ - 0xec, /* ###.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xb4, char: \xb5, offset: 0x09d8 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xec, /* ###.##.. */ - 0xec, /* ###.##.. */ - 0x0c, /* ....##.. */ - 0xec, /* ###.##.. */ - 0xec, /* ###.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xb5, char: \xb6, offset: 0x09e6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0xb6, char: \xb7, offset: 0x09f4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xb7, char: \xb8, offset: 0x0a02 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0xef, /* ###.#### */ - 0xef, /* ###.#### */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xb8, char: \xb9, offset: 0x0a10 */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xb9, char: \xba, offset: 0x0a1e */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xba, char: \xbb, offset: 0x0a2c */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xef, /* ###.#### */ - 0xef, /* ###.#### */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbb, char: \xbc, offset: 0x0a3a */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - - /* Index: 0xbc, char: \xbd, offset: 0x0a48 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xff, /* ######## */ - 0xff, /* ######## */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xbd, char: \xbe, offset: 0x0a56 */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xef, /* ###.#### */ - 0xef, /* ###.#### */ - 0x00, /* ........ */ - 0xef, /* ###.#### */ - 0xef, /* ###.#### */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - - /* Index: 0xbe, char: \xbf, offset: 0x0a64 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0x81, /* #......# */ - 0x99, /* #..##..# */ - 0xa5, /* #.#..#.# */ - 0xa1, /* #.#....# */ - 0xa5, /* #.#..#.# */ - 0x99, /* #..##..# */ - 0x81, /* #......# */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xbf, char: \xc0, offset: 0x0a72 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xcc, /* ##..##.. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xf6, /* ####.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xcc, /* ##..##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc0, char: \xc1, offset: 0x0a80 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0x06, /* .....##. */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc1, char: \xc2, offset: 0x0a8e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc2, char: \xc3, offset: 0x0a9c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7f, /* .####### */ - 0x03, /* ......## */ - 0x03, /* ......## */ - - /* Index: 0xc3, char: \xc4, offset: 0x0aaa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ - - /* Index: 0xc4, char: \xc5, offset: 0x0ab8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc5, char: \xc6, offset: 0x0ac6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0xc6, char: \xc7, offset: 0x0ad4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc7, char: \xc8, offset: 0x0ae2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc8, char: \xc9, offset: 0x0af0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xc9, char: \xca, offset: 0x0afe */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xca, char: \xcb, offset: 0x0b0c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xcc, /* ##..##.. */ - 0xd8, /* ##.##... */ - 0xf0, /* ####.... */ - 0xd8, /* ##.##... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcb, char: \xcc, offset: 0x0b1a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcc, char: \xcd, offset: 0x0b28 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xee, /* ###.###. */ - 0xfe, /* #######. */ - 0xd6, /* ##.#.##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcd, char: \xce, offset: 0x0b36 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xce, char: \xcf, offset: 0x0b44 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xcf, char: \xd0, offset: 0x0b52 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd0, char: \xd1, offset: 0x0b60 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x36, /* ..##.##. */ - 0x66, /* .##..##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd1, char: \xd2, offset: 0x0b6e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - - /* Index: 0xd2, char: \xd3, offset: 0x0b7c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd3, char: \xd4, offset: 0x0b8a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd4, char: \xd5, offset: 0x0b98 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ - - /* Index: 0xd5, char: \xd6, offset: 0x0ba6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x38, /* ..###... */ - 0x7c, /* .#####.. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd6, char: \xd7, offset: 0x0bb4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x78, /* .####... */ - 0xcc, /* ##..##.. */ - 0xcc, /* ##..##.. */ - 0xc8, /* ##..#... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd7, char: \xd8, offset: 0x0bc2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x7c, /* .#####.. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd8, char: \xd9, offset: 0x0bd0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xe6, /* ###..##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xe6, /* ###..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xd9, char: \xda, offset: 0x0bde */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0x06, /* .....##. */ - 0x3c, /* ..####.. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xda, char: \xdb, offset: 0x0bec */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdb, char: \xdc, offset: 0x0bfa */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0x06, /* .....##. */ - 0x3e, /* ..#####. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdc, char: \xdd, offset: 0x0c08 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7f, /* .####### */ - 0x03, /* ......## */ - 0x03, /* ......## */ - - /* Index: 0xdd, char: \xde, offset: 0x0c16 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xde, char: \xdf, offset: 0x0c24 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x60, /* .##..... */ - 0x7c, /* .#####.. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xdf, char: \xe0, offset: 0x0c32 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xcc, /* ##..##.. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xf6, /* ####.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xcc, /* ##..##.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe0, char: \xe1, offset: 0x0c40 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe1, char: \xe2, offset: 0x0c4e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe2, char: \xe3, offset: 0x0c5c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7f, /* .####### */ - 0x03, /* ......## */ - 0x03, /* ......## */ - - /* Index: 0xe3, char: \xe4, offset: 0x0c6a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x3e, /* ..#####. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0xff, /* ######## */ - 0xc3, /* ##....## */ - 0x00, /* ........ */ - - /* Index: 0xe4, char: \xe5, offset: 0x0c78 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xf8, /* #####... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xfe, /* #######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe5, char: \xe6, offset: 0x0c86 */ - 0x00, /* ........ */ - 0x10, /* ...#.... */ - 0x7c, /* .#####.. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x10, /* ...#.... */ - 0x00, /* ........ */ - - /* Index: 0xe6, char: \xe7, offset: 0x0c94 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe7, char: \xe8, offset: 0x0ca2 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0x38, /* ..###... */ - 0x6c, /* .##.##.. */ - 0x6c, /* .##.##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe8, char: \xe9, offset: 0x0cb0 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xce, /* ##..###. */ - 0xde, /* ##.####. */ - 0xf6, /* ####.##. */ - 0xe6, /* ###..##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xe9, char: \xea, offset: 0x0cbe */ - 0x6c, /* .##.##.. */ - 0x38, /* ..###... */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xce, /* ##..###. */ - 0xde, /* ##.####. */ - 0xf6, /* ####.##. */ - 0xe6, /* ###..##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xea, char: \xeb, offset: 0x0ccc */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xcc, /* ##..##.. */ - 0xd8, /* ##.##... */ - 0xf0, /* ####.... */ - 0xf0, /* ####.... */ - 0xd8, /* ##.##... */ - 0xcc, /* ##..##.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xeb, char: \xec, offset: 0x0cda */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x1e, /* ...####. */ - 0x36, /* ..##.##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xec, char: \xed, offset: 0x0ce8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x82, /* #.....#. */ - 0xc6, /* ##...##. */ - 0xee, /* ###.###. */ - 0xfe, /* #######. */ - 0xd6, /* ##.#.##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xed, char: \xee, offset: 0x0cf6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xee, char: \xef, offset: 0x0d04 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xef, char: \xf0, offset: 0x0d12 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfe, /* #######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf0, char: \xf1, offset: 0x0d20 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7e, /* .######. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x1e, /* ...####. */ - 0x36, /* ..##.##. */ - 0x66, /* .##..##. */ - 0xc6, /* ##...##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf1, char: \xf2, offset: 0x0d2e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf2, char: \xf3, offset: 0x0d3c */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc0, /* ##...... */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf3, char: \xf4, offset: 0x0d4a */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xff, /* ######## */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x18, /* ...##... */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf4, char: \xf5, offset: 0x0d58 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf5, char: \xf6, offset: 0x0d66 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7c, /* .#####.. */ - 0x38, /* ..###... */ - 0x7c, /* .#####.. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf6, char: \xf7, offset: 0x0d74 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xfc, /* ######.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf7, char: \xf8, offset: 0x0d82 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x7c, /* .#####.. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf8, char: \xf9, offset: 0x0d90 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xe6, /* ###..##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xe6, /* ###..##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xf9, char: \xfa, offset: 0x0d9e */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x06, /* .....##. */ - 0x3c, /* ..####.. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfa, char: \xfb, offset: 0x0dac */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7e, /* .######. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfb, char: \xfc, offset: 0x0dba */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0x7c, /* .#####.. */ - 0xc6, /* ##...##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x3e, /* ..#####. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0xc6, /* ##...##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfc, char: \xfd, offset: 0x0dc8 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0xd6, /* ##.#.##. */ - 0x7f, /* .####### */ - 0x03, /* ......## */ - 0x03, /* ......## */ - - /* Index: 0xfd, char: \xfe, offset: 0x0dd6 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0xc6, /* ##...##. */ - 0x7e, /* .######. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x06, /* .....##. */ - 0x00, /* ........ */ - 0x00, /* ........ */ - - /* Index: 0xfe, char: \xff, offset: 0x0de4 */ - 0x00, /* ........ */ - 0x00, /* ........ */ - 0xe0, /* ###..... */ - 0x60, /* .##..... */ - 0x60, /* .##..... */ - 0x7c, /* .#####.. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x66, /* .##..##. */ - 0x7c, /* .#####.. */ - 0x00, /* ........ */ - 0x00, /* ........ */ -}; - -const font_char_desc_t _fonts_terminus_bold_8x14_koi8_r_descriptors[] = { - { 0x08, 0x0000 }, /* Index: 0x00, char: \x01 */ - { 0x08, 0x000e }, /* Index: 0x01, char: \x02 */ - { 0x08, 0x001c }, /* Index: 0x02, char: \x03 */ - { 0x08, 0x002a }, /* Index: 0x03, char: \x04 */ - { 0x08, 0x0038 }, /* Index: 0x04, char: \x05 */ - { 0x08, 0x0046 }, /* Index: 0x05, char: \x06 */ - { 0x08, 0x0054 }, /* Index: 0x06, char: \x07 */ - { 0x08, 0x0062 }, /* Index: 0x07, char: \x08 */ - { 0x08, 0x0070 }, /* Index: 0x08, char: \x09 */ - { 0x08, 0x007e }, /* Index: 0x09, char: \x0a */ - { 0x08, 0x008c }, /* Index: 0x0a, char: \x0b */ - { 0x08, 0x009a }, /* Index: 0x0b, char: \x0c */ - { 0x08, 0x00a8 }, /* Index: 0x0c, char: \x0d */ - { 0x08, 0x00b6 }, /* Index: 0x0d, char: \x0e */ - { 0x08, 0x00c4 }, /* Index: 0x0e, char: \x0f */ - { 0x08, 0x00d2 }, /* Index: 0x0f, char: \x10 */ - { 0x08, 0x00e0 }, /* Index: 0x10, char: \x11 */ - { 0x08, 0x00ee }, /* Index: 0x11, char: \x12 */ - { 0x08, 0x00fc }, /* Index: 0x12, char: \x13 */ - { 0x08, 0x010a }, /* Index: 0x13, char: \x14 */ - { 0x08, 0x0118 }, /* Index: 0x14, char: \x15 */ - { 0x08, 0x0126 }, /* Index: 0x15, char: \x16 */ - { 0x08, 0x0134 }, /* Index: 0x16, char: \x17 */ - { 0x08, 0x0142 }, /* Index: 0x17, char: \x18 */ - { 0x08, 0x0150 }, /* Index: 0x18, char: \x19 */ - { 0x08, 0x015e }, /* Index: 0x19, char: \x1a */ - { 0x08, 0x016c }, /* Index: 0x1a, char: \x1b */ - { 0x08, 0x017a }, /* Index: 0x1b, char: \x1c */ - { 0x08, 0x0188 }, /* Index: 0x1c, char: \x1d */ - { 0x08, 0x0196 }, /* Index: 0x1d, char: \x1e */ - { 0x08, 0x01a4 }, /* Index: 0x1e, char: \x1f */ - { 0x08, 0x01b2 }, /* Index: 0x1f, char: \x20 */ - { 0x08, 0x01c0 }, /* Index: 0x20, char: \x21 */ - { 0x08, 0x01ce }, /* Index: 0x21, char: \x22 */ - { 0x08, 0x01dc }, /* Index: 0x22, char: \x23 */ - { 0x08, 0x01ea }, /* Index: 0x23, char: \x24 */ - { 0x08, 0x01f8 }, /* Index: 0x24, char: \x25 */ - { 0x08, 0x0206 }, /* Index: 0x25, char: \x26 */ - { 0x08, 0x0214 }, /* Index: 0x26, char: \x27 */ - { 0x08, 0x0222 }, /* Index: 0x27, char: \x28 */ - { 0x08, 0x0230 }, /* Index: 0x28, char: \x29 */ - { 0x08, 0x023e }, /* Index: 0x29, char: \x2a */ - { 0x08, 0x024c }, /* Index: 0x2a, char: \x2b */ - { 0x08, 0x025a }, /* Index: 0x2b, char: \x2c */ - { 0x08, 0x0268 }, /* Index: 0x2c, char: \x2d */ - { 0x08, 0x0276 }, /* Index: 0x2d, char: \x2e */ - { 0x08, 0x0284 }, /* Index: 0x2e, char: \x2f */ - { 0x08, 0x0292 }, /* Index: 0x2f, char: \x30 */ - { 0x08, 0x02a0 }, /* Index: 0x30, char: \x31 */ - { 0x08, 0x02ae }, /* Index: 0x31, char: \x32 */ - { 0x08, 0x02bc }, /* Index: 0x32, char: \x33 */ - { 0x08, 0x02ca }, /* Index: 0x33, char: \x34 */ - { 0x08, 0x02d8 }, /* Index: 0x34, char: \x35 */ - { 0x08, 0x02e6 }, /* Index: 0x35, char: \x36 */ - { 0x08, 0x02f4 }, /* Index: 0x36, char: \x37 */ - { 0x08, 0x0302 }, /* Index: 0x37, char: \x38 */ - { 0x08, 0x0310 }, /* Index: 0x38, char: \x39 */ - { 0x08, 0x031e }, /* Index: 0x39, char: \x3a */ - { 0x08, 0x032c }, /* Index: 0x3a, char: \x3b */ - { 0x08, 0x033a }, /* Index: 0x3b, char: \x3c */ - { 0x08, 0x0348 }, /* Index: 0x3c, char: \x3d */ - { 0x08, 0x0356 }, /* Index: 0x3d, char: \x3e */ - { 0x08, 0x0364 }, /* Index: 0x3e, char: \x3f */ - { 0x08, 0x0372 }, /* Index: 0x3f, char: \x40 */ - { 0x08, 0x0380 }, /* Index: 0x40, char: \x41 */ - { 0x08, 0x038e }, /* Index: 0x41, char: \x42 */ - { 0x08, 0x039c }, /* Index: 0x42, char: \x43 */ - { 0x08, 0x03aa }, /* Index: 0x43, char: \x44 */ - { 0x08, 0x03b8 }, /* Index: 0x44, char: \x45 */ - { 0x08, 0x03c6 }, /* Index: 0x45, char: \x46 */ - { 0x08, 0x03d4 }, /* Index: 0x46, char: \x47 */ - { 0x08, 0x03e2 }, /* Index: 0x47, char: \x48 */ - { 0x08, 0x03f0 }, /* Index: 0x48, char: \x49 */ - { 0x08, 0x03fe }, /* Index: 0x49, char: \x4a */ - { 0x08, 0x040c }, /* Index: 0x4a, char: \x4b */ - { 0x08, 0x041a }, /* Index: 0x4b, char: \x4c */ - { 0x08, 0x0428 }, /* Index: 0x4c, char: \x4d */ - { 0x08, 0x0436 }, /* Index: 0x4d, char: \x4e */ - { 0x08, 0x0444 }, /* Index: 0x4e, char: \x4f */ - { 0x08, 0x0452 }, /* Index: 0x4f, char: \x50 */ - { 0x08, 0x0460 }, /* Index: 0x50, char: \x51 */ - { 0x08, 0x046e }, /* Index: 0x51, char: \x52 */ - { 0x08, 0x047c }, /* Index: 0x52, char: \x53 */ - { 0x08, 0x048a }, /* Index: 0x53, char: \x54 */ - { 0x08, 0x0498 }, /* Index: 0x54, char: \x55 */ - { 0x08, 0x04a6 }, /* Index: 0x55, char: \x56 */ - { 0x08, 0x04b4 }, /* Index: 0x56, char: \x57 */ - { 0x08, 0x04c2 }, /* Index: 0x57, char: \x58 */ - { 0x08, 0x04d0 }, /* Index: 0x58, char: \x59 */ - { 0x08, 0x04de }, /* Index: 0x59, char: \x5a */ - { 0x08, 0x04ec }, /* Index: 0x5a, char: \x5b */ - { 0x08, 0x04fa }, /* Index: 0x5b, char: \x5c */ - { 0x08, 0x0508 }, /* Index: 0x5c, char: \x5d */ - { 0x08, 0x0516 }, /* Index: 0x5d, char: \x5e */ - { 0x08, 0x0524 }, /* Index: 0x5e, char: \x5f */ - { 0x08, 0x0532 }, /* Index: 0x5f, char: \x60 */ - { 0x08, 0x0540 }, /* Index: 0x60, char: \x61 */ - { 0x08, 0x054e }, /* Index: 0x61, char: \x62 */ - { 0x08, 0x055c }, /* Index: 0x62, char: \x63 */ - { 0x08, 0x056a }, /* Index: 0x63, char: \x64 */ - { 0x08, 0x0578 }, /* Index: 0x64, char: \x65 */ - { 0x08, 0x0586 }, /* Index: 0x65, char: \x66 */ - { 0x08, 0x0594 }, /* Index: 0x66, char: \x67 */ - { 0x08, 0x05a2 }, /* Index: 0x67, char: \x68 */ - { 0x08, 0x05b0 }, /* Index: 0x68, char: \x69 */ - { 0x08, 0x05be }, /* Index: 0x69, char: \x6a */ - { 0x08, 0x05cc }, /* Index: 0x6a, char: \x6b */ - { 0x08, 0x05da }, /* Index: 0x6b, char: \x6c */ - { 0x08, 0x05e8 }, /* Index: 0x6c, char: \x6d */ - { 0x08, 0x05f6 }, /* Index: 0x6d, char: \x6e */ - { 0x08, 0x0604 }, /* Index: 0x6e, char: \x6f */ - { 0x08, 0x0612 }, /* Index: 0x6f, char: \x70 */ - { 0x08, 0x0620 }, /* Index: 0x70, char: \x71 */ - { 0x08, 0x062e }, /* Index: 0x71, char: \x72 */ - { 0x08, 0x063c }, /* Index: 0x72, char: \x73 */ - { 0x08, 0x064a }, /* Index: 0x73, char: \x74 */ - { 0x08, 0x0658 }, /* Index: 0x74, char: \x75 */ - { 0x08, 0x0666 }, /* Index: 0x75, char: \x76 */ - { 0x08, 0x0674 }, /* Index: 0x76, char: \x77 */ - { 0x08, 0x0682 }, /* Index: 0x77, char: \x78 */ - { 0x08, 0x0690 }, /* Index: 0x78, char: \x79 */ - { 0x08, 0x069e }, /* Index: 0x79, char: \x7a */ - { 0x08, 0x06ac }, /* Index: 0x7a, char: \x7b */ - { 0x08, 0x06ba }, /* Index: 0x7b, char: \x7c */ - { 0x08, 0x06c8 }, /* Index: 0x7c, char: \x7d */ - { 0x08, 0x06d6 }, /* Index: 0x7d, char: \x7e */ - { 0x08, 0x06e4 }, /* Index: 0x7e, char: \x7f */ - { 0x08, 0x06f2 }, /* Index: 0x7f, char: \x80 */ - { 0x08, 0x0700 }, /* Index: 0x80, char: \x81 */ - { 0x08, 0x070e }, /* Index: 0x81, char: \x82 */ - { 0x08, 0x071c }, /* Index: 0x82, char: \x83 */ - { 0x08, 0x072a }, /* Index: 0x83, char: \x84 */ - { 0x08, 0x0738 }, /* Index: 0x84, char: \x85 */ - { 0x08, 0x0746 }, /* Index: 0x85, char: \x86 */ - { 0x08, 0x0754 }, /* Index: 0x86, char: \x87 */ - { 0x08, 0x0762 }, /* Index: 0x87, char: \x88 */ - { 0x08, 0x0770 }, /* Index: 0x88, char: \x89 */ - { 0x08, 0x077e }, /* Index: 0x89, char: \x8a */ - { 0x08, 0x078c }, /* Index: 0x8a, char: \x8b */ - { 0x08, 0x079a }, /* Index: 0x8b, char: \x8c */ - { 0x08, 0x07a8 }, /* Index: 0x8c, char: \x8d */ - { 0x08, 0x07b6 }, /* Index: 0x8d, char: \x8e */ - { 0x08, 0x07c4 }, /* Index: 0x8e, char: \x8f */ - { 0x08, 0x07d2 }, /* Index: 0x8f, char: \x90 */ - { 0x08, 0x07e0 }, /* Index: 0x90, char: \x91 */ - { 0x08, 0x07ee }, /* Index: 0x91, char: \x92 */ - { 0x08, 0x07fc }, /* Index: 0x92, char: \x93 */ - { 0x08, 0x080a }, /* Index: 0x93, char: \x94 */ - { 0x08, 0x0818 }, /* Index: 0x94, char: \x95 */ - { 0x08, 0x0826 }, /* Index: 0x95, char: \x96 */ - { 0x08, 0x0834 }, /* Index: 0x96, char: \x97 */ - { 0x08, 0x0842 }, /* Index: 0x97, char: \x98 */ - { 0x08, 0x0850 }, /* Index: 0x98, char: \x99 */ - { 0x08, 0x085e }, /* Index: 0x99, char: \x9a */ - { 0x08, 0x086c }, /* Index: 0x9a, char: \x9b */ - { 0x08, 0x087a }, /* Index: 0x9b, char: \x9c */ - { 0x08, 0x0888 }, /* Index: 0x9c, char: \x9d */ - { 0x08, 0x0896 }, /* Index: 0x9d, char: \x9e */ - { 0x08, 0x08a4 }, /* Index: 0x9e, char: \x9f */ - { 0x08, 0x08b2 }, /* Index: 0x9f, char: \xa0 */ - { 0x08, 0x08c0 }, /* Index: 0xa0, char: \xa1 */ - { 0x08, 0x08ce }, /* Index: 0xa1, char: \xa2 */ - { 0x08, 0x08dc }, /* Index: 0xa2, char: \xa3 */ - { 0x08, 0x08ea }, /* Index: 0xa3, char: \xa4 */ - { 0x08, 0x08f8 }, /* Index: 0xa4, char: \xa5 */ - { 0x08, 0x0906 }, /* Index: 0xa5, char: \xa6 */ - { 0x08, 0x0914 }, /* Index: 0xa6, char: \xa7 */ - { 0x08, 0x0922 }, /* Index: 0xa7, char: \xa8 */ - { 0x08, 0x0930 }, /* Index: 0xa8, char: \xa9 */ - { 0x08, 0x093e }, /* Index: 0xa9, char: \xaa */ - { 0x08, 0x094c }, /* Index: 0xaa, char: \xab */ - { 0x08, 0x095a }, /* Index: 0xab, char: \xac */ - { 0x08, 0x0968 }, /* Index: 0xac, char: \xad */ - { 0x08, 0x0976 }, /* Index: 0xad, char: \xae */ - { 0x08, 0x0984 }, /* Index: 0xae, char: \xaf */ - { 0x08, 0x0992 }, /* Index: 0xaf, char: \xb0 */ - { 0x08, 0x09a0 }, /* Index: 0xb0, char: \xb1 */ - { 0x08, 0x09ae }, /* Index: 0xb1, char: \xb2 */ - { 0x08, 0x09bc }, /* Index: 0xb2, char: \xb3 */ - { 0x08, 0x09ca }, /* Index: 0xb3, char: \xb4 */ - { 0x08, 0x09d8 }, /* Index: 0xb4, char: \xb5 */ - { 0x08, 0x09e6 }, /* Index: 0xb5, char: \xb6 */ - { 0x08, 0x09f4 }, /* Index: 0xb6, char: \xb7 */ - { 0x08, 0x0a02 }, /* Index: 0xb7, char: \xb8 */ - { 0x08, 0x0a10 }, /* Index: 0xb8, char: \xb9 */ - { 0x08, 0x0a1e }, /* Index: 0xb9, char: \xba */ - { 0x08, 0x0a2c }, /* Index: 0xba, char: \xbb */ - { 0x08, 0x0a3a }, /* Index: 0xbb, char: \xbc */ - { 0x08, 0x0a48 }, /* Index: 0xbc, char: \xbd */ - { 0x08, 0x0a56 }, /* Index: 0xbd, char: \xbe */ - { 0x08, 0x0a64 }, /* Index: 0xbe, char: \xbf */ - { 0x08, 0x0a72 }, /* Index: 0xbf, char: \xc0 */ - { 0x08, 0x0a80 }, /* Index: 0xc0, char: \xc1 */ - { 0x08, 0x0a8e }, /* Index: 0xc1, char: \xc2 */ - { 0x08, 0x0a9c }, /* Index: 0xc2, char: \xc3 */ - { 0x08, 0x0aaa }, /* Index: 0xc3, char: \xc4 */ - { 0x08, 0x0ab8 }, /* Index: 0xc4, char: \xc5 */ - { 0x08, 0x0ac6 }, /* Index: 0xc5, char: \xc6 */ - { 0x08, 0x0ad4 }, /* Index: 0xc6, char: \xc7 */ - { 0x08, 0x0ae2 }, /* Index: 0xc7, char: \xc8 */ - { 0x08, 0x0af0 }, /* Index: 0xc8, char: \xc9 */ - { 0x08, 0x0afe }, /* Index: 0xc9, char: \xca */ - { 0x08, 0x0b0c }, /* Index: 0xca, char: \xcb */ - { 0x08, 0x0b1a }, /* Index: 0xcb, char: \xcc */ - { 0x08, 0x0b28 }, /* Index: 0xcc, char: \xcd */ - { 0x08, 0x0b36 }, /* Index: 0xcd, char: \xce */ - { 0x08, 0x0b44 }, /* Index: 0xce, char: \xcf */ - { 0x08, 0x0b52 }, /* Index: 0xcf, char: \xd0 */ - { 0x08, 0x0b60 }, /* Index: 0xd0, char: \xd1 */ - { 0x08, 0x0b6e }, /* Index: 0xd1, char: \xd2 */ - { 0x08, 0x0b7c }, /* Index: 0xd2, char: \xd3 */ - { 0x08, 0x0b8a }, /* Index: 0xd3, char: \xd4 */ - { 0x08, 0x0b98 }, /* Index: 0xd4, char: \xd5 */ - { 0x08, 0x0ba6 }, /* Index: 0xd5, char: \xd6 */ - { 0x08, 0x0bb4 }, /* Index: 0xd6, char: \xd7 */ - { 0x08, 0x0bc2 }, /* Index: 0xd7, char: \xd8 */ - { 0x08, 0x0bd0 }, /* Index: 0xd8, char: \xd9 */ - { 0x08, 0x0bde }, /* Index: 0xd9, char: \xda */ - { 0x08, 0x0bec }, /* Index: 0xda, char: \xdb */ - { 0x08, 0x0bfa }, /* Index: 0xdb, char: \xdc */ - { 0x08, 0x0c08 }, /* Index: 0xdc, char: \xdd */ - { 0x08, 0x0c16 }, /* Index: 0xdd, char: \xde */ - { 0x08, 0x0c24 }, /* Index: 0xde, char: \xdf */ - { 0x08, 0x0c32 }, /* Index: 0xdf, char: \xe0 */ - { 0x08, 0x0c40 }, /* Index: 0xe0, char: \xe1 */ - { 0x08, 0x0c4e }, /* Index: 0xe1, char: \xe2 */ - { 0x08, 0x0c5c }, /* Index: 0xe2, char: \xe3 */ - { 0x08, 0x0c6a }, /* Index: 0xe3, char: \xe4 */ - { 0x08, 0x0c78 }, /* Index: 0xe4, char: \xe5 */ - { 0x08, 0x0c86 }, /* Index: 0xe5, char: \xe6 */ - { 0x08, 0x0c94 }, /* Index: 0xe6, char: \xe7 */ - { 0x08, 0x0ca2 }, /* Index: 0xe7, char: \xe8 */ - { 0x08, 0x0cb0 }, /* Index: 0xe8, char: \xe9 */ - { 0x08, 0x0cbe }, /* Index: 0xe9, char: \xea */ - { 0x08, 0x0ccc }, /* Index: 0xea, char: \xeb */ - { 0x08, 0x0cda }, /* Index: 0xeb, char: \xec */ - { 0x08, 0x0ce8 }, /* Index: 0xec, char: \xed */ - { 0x08, 0x0cf6 }, /* Index: 0xed, char: \xee */ - { 0x08, 0x0d04 }, /* Index: 0xee, char: \xef */ - { 0x08, 0x0d12 }, /* Index: 0xef, char: \xf0 */ - { 0x08, 0x0d20 }, /* Index: 0xf0, char: \xf1 */ - { 0x08, 0x0d2e }, /* Index: 0xf1, char: \xf2 */ - { 0x08, 0x0d3c }, /* Index: 0xf2, char: \xf3 */ - { 0x08, 0x0d4a }, /* Index: 0xf3, char: \xf4 */ - { 0x08, 0x0d58 }, /* Index: 0xf4, char: \xf5 */ - { 0x08, 0x0d66 }, /* Index: 0xf5, char: \xf6 */ - { 0x08, 0x0d74 }, /* Index: 0xf6, char: \xf7 */ - { 0x08, 0x0d82 }, /* Index: 0xf7, char: \xf8 */ - { 0x08, 0x0d90 }, /* Index: 0xf8, char: \xf9 */ - { 0x08, 0x0d9e }, /* Index: 0xf9, char: \xfa */ - { 0x08, 0x0dac }, /* Index: 0xfa, char: \xfb */ - { 0x08, 0x0dba }, /* Index: 0xfb, char: \xfc */ - { 0x08, 0x0dc8 }, /* Index: 0xfc, char: \xfd */ - { 0x08, 0x0dd6 }, /* Index: 0xfd, char: \xfe */ - { 0x08, 0x0de4 }, /* Index: 0xfe, char: \xff */ -}; - -const font_info_t _fonts_terminus_bold_8x14_koi8_r_info = -{ - .height = 14, /* Character height */ - .c = 0, /* C */ - .char_start = 1, /* Start character */ - .char_end = 255, /* End character */ - .char_descriptors = _fonts_terminus_bold_8x14_koi8_r_descriptors, /* Character descriptor array */ - .bitmap = _fonts_terminus_bold_8x14_koi8_r_bitmaps, /* Character bitmap array */ -}; - -#endif /* _EXTRAS_FONTS_FONT_TERMINUS_BOLD_8X14_KOI8_R_H_ */ diff --git a/extras/fonts/defaults.mk b/extras/fonts/defaults.mk deleted file mode 100644 index 98344af..0000000 --- a/extras/fonts/defaults.mk +++ /dev/null @@ -1,39 +0,0 @@ -######################################### -# Default built-in fonts -######################################### - -# FIXME - -FONTS_GLCD_5X7 ?= 1 - -FONTS_ROBOTO_8PT ?= 0 -FONTS_ROBOTO_10PT ?= 0 - -# BitOCRA -FONTS_BITOCRA_4X7 ?= 0 -FONTS_BITOCRA_6X11 ?= 0 -FONTS_BITOCRA_7X13 ?= 0 - -# Terminus, ISO8859-1 (Latin-1) -FONTS_TERMINUS_6X12_ISO8859_1 ?= 0 -FONTS_TERMINUS_8X14_ISO8859_1 ?= 0 -FONTS_TERMINUS_BOLD_8X14_ISO8859_1 ?= 0 -FONTS_TERMINUS_10X18_ISO8859_1 ?= 0 -FONTS_TERMINUS_BOLD_10X18_ISO8859_1 ?= 0 -FONTS_TERMINUS_11X22_ISO8859_1 ?= 0 -FONTS_TERMINUS_BOLD_11X22_ISO8859_1 ?= 0 -FONTS_TERMINUS_12X24_ISO8859_1 ?= 0 -FONTS_TERMINUS_BOLD_12X24_ISO8859_1 ?= 0 -FONTS_TERMINUS_14X28_ISO8859_1 ?= 0 -FONTS_TERMINUS_BOLD_14X28_ISO8859_1 ?= 0 -FONTS_TERMINUS_16X32_ISO8859_1 ?= 0 -FONTS_TERMINUS_BOLD_16X32_ISO8859_1 ?= 0 - -# Terminus, KOI8-R -FONTS_TERMINUS_6X12_KOI8_R ?= 0 -FONTS_TERMINUS_8X14_KOI8_R ?= 0 -FONTS_TERMINUS_BOLD_8X14_KOI8_R ?= 0 -FONTS_TERMINUS_14X28_KOI8_R ?= 0 -FONTS_TERMINUS_BOLD_14X28_KOI8_R ?= 0 -FONTS_TERMINUS_16X32_KOI8_R ?= 0 -FONTS_TERMINUS_BOLD_16X32_KOI8_R ?= 0 diff --git a/extras/fonts/fonts.c b/extras/fonts/fonts.c deleted file mode 100644 index fb6bcc3..0000000 --- a/extras/fonts/fonts.c +++ /dev/null @@ -1,259 +0,0 @@ -/** - * LCD/OLED fonts library - * - * FIXME: License? - * - * @date: 8 dec. 2016 - * Author: zaltora - */ -#include "fonts.h" - -#ifndef FONTS_GLCD_5X7 -#define FONTS_GLCD_5X7 1 -#endif - -#if FONTS_GLCD_5X7 - #include "data/font_glcd_5x7.h" -#endif - -#if FONTS_ROBOTO_8PT - #include "data/font_roboto_8pt.h" -#endif -#if FONTS_ROBOTO_10PT - #include "data/font_roboto_10pt.h" -#endif - -#if FONTS_BITOCRA_4X7 - #include "data/font_bitocra_4x7_ascii.h" -#endif -#if FONTS_BITOCRA_6X11 - #include "data/font_bitocra_6x11_iso8859_1.h" -#endif -#if FONTS_BITOCRA_7X13 - #include "data/font_bitocra_7x13_iso8859_1.h" -#endif - -#if FONTS_TERMINUS_6X12_ISO8859_1 - #include "data/font_terminus_6x12_iso8859_1.h" -#endif -#if FONTS_TERMINUS_8X14_ISO8859_1 - #include "data/font_terminus_8x14_iso8859_1.h" -#endif -#if FONTS_TERMINUS_BOLD_8X14_ISO8859_1 - #include "data/font_terminus_bold_8x14_iso8859_1.h" -#endif -#if FONTS_TERMINUS_10X18_ISO8859_1 - #include "data/font_terminus_10x18_iso8859_1.h" -#endif -#if FONTS_TERMINUS_BOLD_10X18_ISO8859_1 - #include "data/font_terminus_bold_10x18_iso8859_1.h" -#endif -#if FONTS_TERMINUS_11X22_ISO8859_1 - #include "data/font_terminus_11x22_iso8859_1.h" -#endif -#if FONTS_TERMINUS_BOLD_11X22_ISO8859_1 - #include "data/font_terminus_bold_11x22_iso8859_1.h" -#endif -#if FONTS_TERMINUS_12X24_ISO8859_1 - #include "data/font_terminus_12x24_iso8859_1.h" -#endif -#if FONTS_TERMINUS_BOLD_12X24_ISO8859_1 - #include "data/font_terminus_bold_12x24_iso8859_1.h" -#endif -#if FONTS_TERMINUS_14X28_ISO8859_1 - #include "data/font_terminus_14x28_iso8859_1.h" -#endif -#if FONTS_TERMINUS_BOLD_14X28_ISO8859_1 - #include "data/font_terminus_bold_14x28_iso8859_1.h" -#endif -#if FONTS_TERMINUS_16X32_ISO8859_1 - #include "data/font_terminus_16x32_iso8859_1.h" -#endif -#if FONTS_TERMINUS_BOLD_16X32_ISO8859_1 - #include "data/font_terminus_bold_16x32_iso8859_1.h" -#endif - -#if FONTS_TERMINUS_6X12_KOI8_R - #include "data/font_terminus_6x12_koi8_r.h" -#endif -#if FONTS_TERMINUS_8X14_KOI8_R - #include "data/font_terminus_8x14_koi8_r.h" -#endif -#if FONTS_TERMINUS_BOLD_8X14_KOI8_R - #include "data/font_terminus_bold_8x14_koi8_r.h" -#endif -#if FONTS_TERMINUS_14X28_KOI8_R - #include "data/font_terminus_14x28_koi8_r.h" -#endif -#if FONTS_TERMINUS_BOLD_14X28_KOI8_R - #include "data/font_terminus_bold_14x28_koi8_r.h" -#endif -#if FONTS_TERMINUS_16X32_KOI8_R - #include "data/font_terminus_16x32_koi8_r.h" -#endif -#if FONTS_TERMINUS_BOLD_16X32_KOI8_R - #include "data/font_terminus_bold_16x32_koi8_r.h" -#endif - -///////////////////////////////////////////// - -// FIXME: this declaration is noisy - -const font_info_t *font_builtin_fonts[] = -{ -#if FONTS_GLCD_5X7 - [FONT_FACE_GLCD5x7] = &_fonts_glcd_5x7_info, -#else - [FONT_FACE_GLCD5x7] = NULL, -#endif - -#if FONTS_ROBOTO_8PT - [FONT_FACE_ROBOTO_8PT] = &_fonts_roboto_8pt_info, -#else - [FONT_FACE_ROBOTO_8PT] = NULL, -#endif -#if FONTS_ROBOTO_10PT - [FONT_FACE_ROBOTO_10PT] = &_fonts_roboto_10pt_info, -#else - [FONT_FACE_ROBOTO_10PT] = NULL, -#endif - -#if FONTS_BITOCRA_4X7 - [FONT_FACE_BITOCRA_4X7] = &_fonts_bitocra_4x7_ascii_info, -#else - [FONT_FACE_BITOCRA_4X7] = NULL, -#endif -#if FONTS_BITOCRA_6X11 - [FONT_FACE_BITOCRA_6X11] = &_fonts_bitocra_6x11_iso8859_1_info, -#else - [FONT_FACE_BITOCRA_6X11] = NULL, -#endif -#if FONTS_BITOCRA_7X13 - [FONT_FACE_BITOCRA_7X13] = &_fonts_bitocra_7x13_iso8859_1_info, -#else - [FONT_FACE_BITOCRA_7X13] = NULL, -#endif - -#if FONTS_TERMINUS_6X12_ISO8859_1 - [FONT_FACE_TERMINUS_6X12_ISO8859_1] = &_fonts_terminus_6x12_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_6X12_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_8X14_ISO8859_1 - [FONT_FACE_TERMINUS_8X14_ISO8859_1] = &_fonts_terminus_8x14_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_8X14_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_8X14_ISO8859_1 - [FONT_FACE_TERMINUS_BOLD_8X14_ISO8859_1] = &_fonts_terminus_bold_8x14_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_BOLD_8X14_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_10X18_ISO8859_1 - [FONT_FACE_TERMINUS_10X18_ISO8859_1] = &_fonts_terminus_10x18_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_10X18_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_10X18_ISO8859_1 - [FONT_FACE_TERMINUS_BOLD_10X18_ISO8859_1] = &_fonts_terminus_bold_10x18_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_BOLD_10X18_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_11X22_ISO8859_1 - [FONT_FACE_TERMINUS_11X22_ISO8859_1] = &_fonts_terminus_11x22_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_11X22_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_11X22_ISO8859_1 - [FONT_FACE_TERMINUS_BOLD_11X22_ISO8859_1] = &_fonts_terminus_bold_11x22_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_BOLD_11X22_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_12X24_ISO8859_1 - [FONT_FACE_TERMINUS_12X24_ISO8859_1] = &_fonts_terminus_12x24_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_12X24_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_12X24_ISO8859_1 - [FONT_FACE_TERMINUS_BOLD_12X24_ISO8859_1] = &_fonts_terminus_bold_12x24_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_BOLD_12X24_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_14X28_ISO8859_1 - [FONT_FACE_TERMINUS_14X28_ISO8859_1] = &_fonts_terminus_14x28_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_14X28_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_14X28_ISO8859_1 - [FONT_FACE_TERMINUS_BOLD_14X28_ISO8859_1] = &_fonts_terminus_bold_14x28_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_BOLD_14X28_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_16X32_ISO8859_1 - [FONT_FACE_TERMINUS_16X32_ISO8859_1] = &_fonts_terminus_16x32_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_16X32_ISO8859_1] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_16X32_ISO8859_1 - [FONT_FACE_TERMINUS_BOLD_16X32_ISO8859_1] = &_fonts_terminus_bold_16x32_iso8859_1_info, -#else - [FONT_FACE_TERMINUS_BOLD_16X32_ISO8859_1] = NULL, -#endif - -#if FONTS_TERMINUS_6X12_KOI8_R - [FONT_FACE_TERMINUS_6X12_KOI8_R] = &_fonts_terminus_6x12_koi8_r_info, -#else - [FONT_FACE_TERMINUS_6X12_KOI8_R] = NULL, -#endif -#if FONTS_TERMINUS_8X14_KOI8_R - [FONT_FACE_TERMINUS_8X14_KOI8_R] = &_fonts_terminus_8x14_koi8_r_info, -#else - [FONT_FACE_TERMINUS_8X14_KOI8_R] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_8X14_KOI8_R - [FONT_FACE_TERMINUS_BOLD_8X14_KOI8_R] = &_fonts_terminus_bold_8x14_koi8_r_info, -#else - [FONT_FACE_TERMINUS_BOLD_8X14_KOI8_R] = NULL, -#endif -#if FONTS_TERMINUS_14X28_KOI8_R - [FONT_FACE_TERMINUS_14X28_KOI8_R] = &_fonts_terminus_14x28_koi8_r_info, -#else - [FONT_FACE_TERMINUS_14X28_KOI8_R] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_14X28_KOI8_R - [FONT_FACE_TERMINUS_BOLD_14X28_KOI8_R] = &_fonts_terminus_bold_14x28_koi8_r_info, -#else - [FONT_FACE_TERMINUS_BOLD_14X28_KOI8_R] = NULL, -#endif -#if FONTS_TERMINUS_16X32_KOI8_R - [FONT_FACE_TERMINUS_16X32_KOI8_R] = &_fonts_terminus_16x32_koi8_r_info, -#else - [FONT_FACE_TERMINUS_16X32_KOI8_R] = NULL, -#endif -#if FONTS_TERMINUS_BOLD_16X32_KOI8_R - [FONT_FACE_TERMINUS_BOLD_16X32_KOI8_R] = &_fonts_terminus_bold_16x32_koi8_r_info, -#else - [FONT_FACE_TERMINUS_BOLD_16X32_KOI8_R] = NULL, -#endif -}; - -const size_t font_builtin_fonts_count = (sizeof(font_builtin_fonts) / sizeof(font_info_t *)); - -///////////////////////////////////////////// - -uint16_t font_measure_string(const font_info_t *fnt, const char *s) -{ - if (!s || !fnt) return 0; - - uint16_t res = 0; - while (*s) - { - const font_char_desc_t *d = font_get_char_desc(fnt, *s); - if (d) - res += d->width + fnt->c; - s++; - } - - return res > 0 ? res - fnt->c : 0; -} - diff --git a/extras/fonts/fonts.h b/extras/fonts/fonts.h deleted file mode 100644 index e5856d9..0000000 --- a/extras/fonts/fonts.h +++ /dev/null @@ -1,105 +0,0 @@ -/** - * LCD/OLED fonts library - * - * Copyright (c) 2016 Ruslan V. Uss (https://github.com/UncleRus), - * Zaltora (https://github.com/Zaltora) - * MIT Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_FONTS_H_ -#define _EXTRAS_FONTS_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum -{ - FONT_FACE_GLCD5x7 = 0, - - FONT_FACE_ROBOTO_8PT, - FONT_FACE_ROBOTO_10PT, - - FONT_FACE_BITOCRA_4X7, - FONT_FACE_BITOCRA_6X11, - FONT_FACE_BITOCRA_7X13, - - FONT_FACE_TERMINUS_6X12_ISO8859_1, - FONT_FACE_TERMINUS_8X14_ISO8859_1, - FONT_FACE_TERMINUS_BOLD_8X14_ISO8859_1, - FONT_FACE_TERMINUS_10X18_ISO8859_1, - FONT_FACE_TERMINUS_BOLD_10X18_ISO8859_1, - FONT_FACE_TERMINUS_11X22_ISO8859_1, - FONT_FACE_TERMINUS_BOLD_11X22_ISO8859_1, - FONT_FACE_TERMINUS_12X24_ISO8859_1, - FONT_FACE_TERMINUS_BOLD_12X24_ISO8859_1, - FONT_FACE_TERMINUS_14X28_ISO8859_1, - FONT_FACE_TERMINUS_BOLD_14X28_ISO8859_1, - FONT_FACE_TERMINUS_16X32_ISO8859_1, - FONT_FACE_TERMINUS_BOLD_16X32_ISO8859_1, - - FONT_FACE_TERMINUS_6X12_KOI8_R, - FONT_FACE_TERMINUS_8X14_KOI8_R, - FONT_FACE_TERMINUS_BOLD_8X14_KOI8_R, - FONT_FACE_TERMINUS_14X28_KOI8_R, - FONT_FACE_TERMINUS_BOLD_14X28_KOI8_R, - FONT_FACE_TERMINUS_16X32_KOI8_R, - FONT_FACE_TERMINUS_BOLD_16X32_KOI8_R, -} font_face_t; - -/** - * Character descriptor - */ -typedef struct _font_char_desc -{ - uint8_t width; ///< Character width in pixel - uint16_t offset; ///< Offset of this character in bitmap -} font_char_desc_t; - -/** - * Font information - */ -typedef struct _font_info -{ - uint8_t height; ///< Character height in pixel, all characters have same height - uint8_t c; ///< Simulation of "C" width in TrueType term, the space between adjacent characters - char char_start; ///< First character - char char_end; ///< Last character - const font_char_desc_t *char_descriptors; ///< descriptor for each character - const uint8_t *bitmap; ///< Character bitmap -} font_info_t; - -/** - * Built-in fonts - */ -extern const font_info_t *font_builtin_fonts[]; -extern const size_t font_builtin_fonts_count; - -/** - * Find character decriptor in font - * @param fnt Poniter to font information struct - * @param c Character - * @return Character descriptor or NULL if no character found - */ -inline const font_char_desc_t *font_get_char_desc(const font_info_t *fnt, char c) -{ - return c < fnt->char_start || c > fnt->char_end - ? NULL - : fnt->char_descriptors + c - fnt->char_start; -} - -/** - * Calculate width of string in pixels - * @param fnt Poniter to font information struct - * @param s String - * @return String width - */ -uint16_t font_measure_string(const font_info_t *fnt, const char *s); - -#ifdef __cplusplus -} -#endif - -#endif /* _EXTRAS_FONTS_H_ */ diff --git a/extras/fonts/tools/create_font.py b/extras/fonts/tools/create_font.py deleted file mode 100755 index 1bb50fb..0000000 --- a/extras/fonts/tools/create_font.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import sys, os -from PIL import Image, ImageFont, ImageDraw -import argparse -import jinja2 -import re -import time - -def gen_char(index, c, im): - bw = (im.size[0] + 7) // 8 - res = { - 'index': index, - 'code': c, - 'offset': bw * im.size[1] * index, - 'rows': [] - } - - data = tuple(im.getdata()) - - for row in range(im.size[1]): - r = { - 'data': [], - 'asc': [], - } - for b in range(bw): - byte = 0 - for i in range(8): - idx = b * 8 + i - bit = data[row * im.size[0] + idx] if idx < im.size[0] else 0 - if bit: - byte |= 1 - r['asc'].append('#') - else: - r['asc'].append('.') - byte <<= 1 - r['data'].append(byte >> 1) - - r['asc'] = ''.join(r['asc']) - res['rows'].append(r) - - return res - - -def main(args): - if args.truetype == 0: - fnt = ImageFont.load(args.font) - else: - # use a truetype font - fnt = ImageFont.truetype(args.font, args.size) - - size = fnt.getsize('A') - - im = Image.new('RGB', size) - draw = ImageDraw.Draw(im) - - if args.last - args.first < 1: - raise ValueError('Invalid --first or --last') - - chars = [] - for idx in range(args.last - args.first + 1): - draw.rectangle(((0, 0), size), fill = 0) - draw.text((0, 0), chr(idx + args.first), font=fnt) - chars.append(gen_char(idx, idx + args.first, im.convert('1'))) - - env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(os.path.abspath(__file__))), finalize=lambda x: '' if x is None else x) - print(env.get_template(args.template).render({ - 'font': { - 'path': os.path.basename(args.font), - 'name': args.name, - 'size': size, - 'charset': args.charset, - 'first': args.first, - 'last': args.last, - }, - 'chars': chars, - 'created': time.ctime() - })) - - -_CLEAN_RE = re.compile(r'[^a-z0-9_]', re.I) - -def clean_str(s): - return _CLEAN_RE.sub('_', s) - -if __name__ == "__main__": - parser=argparse.ArgumentParser(description='Fixed fonts converter') - parser.add_argument('-f', '--font', type=str, required=True, help='PIL font filename') - parser.add_argument('-n', '--name', type=clean_str, required=True, help='Font name') - parser.add_argument('-c', '--charset', type=clean_str, help='Charset (default=unic)', default="unic") - parser.add_argument('--first', type=int, help='First character', default=1) - parser.add_argument('--last', type=int, help='Last character', default=255) - parser.add_argument('-s', '--size', type=int, help='Height for glyphs (default=8)', default=8) - parser.add_argument('-ttf', '--truetype', type=int, required=True, help='TrueType font (0=no|1=yes)') - parser.add_argument('-t', '--template', type=str, help='Template filename', default='template.c') - main(parser.parse_args(sys.argv[1:])) - diff --git a/extras/fonts/tools/template.c b/extras/fonts/tools/template.c deleted file mode 100644 index 763511a..0000000 --- a/extras/fonts/tools/template.c +++ /dev/null @@ -1,55 +0,0 @@ -{%- set header_id -%} -_EXTRAS_FONTS_FONT_{{ font.name|upper }}_{{ font.size[0] }}X{{ font.size[1] }}_{{ font.charset|upper }}_H_ -{%- endset -%} -{%- set font_size -%} -{{ font.size[0] }}x{{ font.size[1] }} -{%- endset -%} -{%- set font_prefix -%} -_fonts_{{ font.name|lower }}_{{ font_size }}_{{ font.charset|lower }} -{%- endset -%} -/** - * This file contains generated binary font data. * - * Generated from file: ({{ font.path }}) - * - * Font: {{ font.name }} - * Size: {{ font_size }} - * Charset: {{ font.charset }} - * {{ chars|length }} characters ({{ font.first }}..{{ font.last }}) - * - * License: FIXME - * - * Generated: {{ created }} - */ -#ifndef {{ header_id }} -#define {{ header_id }} - -#include -//#include // Uncomment this if you get error 'unknown type 'font_info_t'".. - -static const uint8_t {{ font_prefix }}_bitmaps[] = { - {%- for char in chars %} - - /* {{ 'Index: 0x%02x, char: \\x%02x, offset: 0x%04x'|format(char.index, char.code, char.offset) }} */ - {%- for row in char.rows %} - {% for byte in row.data %}{{ '0x%02x'|format(byte) }}, {% endfor -%} /* {{ row.asc }} */ - {%- endfor -%} - {%- endfor %} -}; - -const font_char_desc_t {{ font_prefix }}_descriptors[] = { - {%- for char in chars %} - { {{ '0x%02x'|format(font.size[0]) }}, {{ '0x%04x'|format(char.offset) }} }, /* {{ 'Index: 0x%02x, char: \\x%02x'|format(char.index, char.code) }} */ - {%- endfor %} -}; - -const font_info_t {{ font_prefix }}_info = -{ - .height = {{ font.size[1] }}, /* Character height */ - .c = 0, /* C */ - .char_start = {{ font.first }}, /* Start character */ - .char_end = {{ font.last }}, /* End character */ - .char_descriptors = {{ font_prefix }}_descriptors, /* Character descriptor array */ - .bitmap = {{ font_prefix }}_bitmaps, /* Character bitmap array */ -}; - -#endif /* {{ header_id }} */ diff --git a/extras/fram/component.mk b/extras/fram/component.mk deleted file mode 100644 index 3878e09..0000000 --- a/extras/fram/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/fram - -# expected anyone using ADC driver includes it as 'fram/fram.h' -INC_DIRS += $(fram_ROOT).. - -# args for passing into compile rule generation -fram_SRC_DIR = $(fram_ROOT) - -$(eval $(call component_compile_rules,fram)) diff --git a/extras/fram/fram.c b/extras/fram/fram.c deleted file mode 100644 index 2192bb1..0000000 --- a/extras/fram/fram.c +++ /dev/null @@ -1,183 +0,0 @@ -/** - * Driver for serial nonvolatile ferroelectric random access - * memory or F-RAM. - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "fram.h" - -#include - -#define CMD_WRSR 0x01 // 0b00000001 -#define CMD_WRITE 0x02 // 0b00000010 -#define CMD_READ 0x03 // 0b00000011 -#define CMD_WRDI 0x04 // 0b00000100 -#define CMD_RDSR 0x05 // 0b00000101 -#define CMD_WREN 0x06 // 0b00000110 -#define CMD_FSTRD 0x0b // 0b00001011 -#define CMD_RDID 0x9f // 0b10011111 -#define CMD_SLEEP 0xb9 // 0b10111001 -#define CMD_SNR 0xc3 // 0b11000011 - -#define SR_BIT_WEL 1 -#define SR_BIT_BP0 2 -#define SR_BIT_BP1 3 -#define SR_BIT_WPEN 7 - -#define SR_MASK_BP (0x03 << SR_BIT_BP0) - -static const spi_settings_t defaults = { - .endianness = SPI_BIG_ENDIAN, - .msb = true, - .mode = SPI_MODE0, - .minimal_pins = true, - .freq_divider = SPI_FREQ_DIV_40M -}; - -inline static void chip_select(const fram_t *dev) -{ - gpio_write(dev->cs_gpio, false); -} - -inline static void chip_unselect(const fram_t *dev) -{ - gpio_write(dev->cs_gpio, true); -} - -static uint8_t read_status_reg(const fram_t *dev) -{ - chip_select(dev); - spi_transfer_8(dev->spi_bus, CMD_RDSR); - uint8_t res = spi_transfer_8(dev->spi_bus, 0xff); - chip_unselect(dev); - return res; -} - -static void write_status_reg(const fram_t *dev, uint8_t val) -{ - chip_select(dev); - spi_transfer_8(dev->spi_bus, CMD_WREN); - chip_unselect(dev); - - chip_select(dev); - spi_transfer_8(dev->spi_bus, CMD_WRSR); - spi_transfer_8(dev->spi_bus, val); -} - -void fram_init(const fram_t *dev) -{ - gpio_enable(dev->cs_gpio, GPIO_OUTPUT); - gpio_set_pullup(dev->cs_gpio, true, true); - chip_unselect(dev); -} - -static void begin(const fram_t *dev, spi_settings_t *s, spi_settings_t *old) -{ - spi_get_settings(dev->spi_bus, &old); - memcpy(&s, &defaults, sizeof(spi_settings_t)); - s->freq_divider = dev->spi_freq_div; - spi_set_settings(dev->spi_bus, &s); - chip_select(dev); -} - -static void end(const fram_t *dev, spi_settings_t *old) -{ - chip_unselect(dev); - spi_set_settings(dev->spi_bus, &old); -} - -void fram_read(const fram_t *dev, void *to, void *from, size_t size) -{ - spi_settings_t s, old; - begin(dev, &s, &old); - - uint32_t header = ((uint32_t)CMD_READ << 24) | ((uint32_t)from & 0x00ffffff); - spi_transfer_32(dev->spi_bus, header); - - spi_set_endianness(dev->spi_bus, SPI_LITTLE_ENDIAN); - spi_read(dev->spi_bus, 0xff, to, size, SPI_8BIT); - - end(dev, &old); -} - -void fram_write(const fram_t *dev, void *from, void *to, size_t size) -{ - spi_settings_t s, old; - begin(dev, &s, &old); - - spi_transfer_8(dev->spi_bus, CMD_WREN); - chip_unselect(dev); - - chip_select(dev); - uint32_t header = ((uint32_t)CMD_WRITE << 24) | ((uint32_t)to & 0x00ffffff); - spi_transfer_32(dev->spi_bus, header); - - spi_set_endianness(dev->spi_bus, SPI_LITTLE_ENDIAN); - spi_transfer(dev->spi_bus, from, NULL, size, SPI_8BIT); - - end(dev, &old); -} - -void fram_sleep(const fram_t *dev, bool sleep) -{ - if (!sleep) - { - chip_select(dev); - chip_unselect(dev); - return; - } - - spi_settings_t s, old; - begin(dev, &s, &old); - - spi_transfer_8(dev->spi_bus, CMD_SLEEP); - - end(dev, &old); -} - -bool fram_busy(const fram_t *dev) -{ - gpio_enable(dev->cs_gpio, GPIO_INPUT); - bool res = !gpio_read(dev->cs_gpio); - fram_init(dev); - return res; -} - -void fram_id(const fram_t *dev, fram_id_t *id) -{ - spi_settings_t s, old; - begin(dev, &s, &old); - - spi_transfer_8(dev->spi_bus, CMD_RDID); - - for (uint8_t i = 0; i < FRAM_ID_LEN; i ++) - id->data[FRAM_ID_LEN - i - 1] = spi_transfer_8(dev->spi_bus, 0xff); - - end(dev, &old); -} - -void fram_set_wp_mode(const fram_t *dev, fram_wp_mode_t mode) -{ - spi_settings_t s, old; - begin(dev, &s, &old); - - write_status_reg(dev, (read_status_reg(dev) & ~SR_MASK_BP) | ((mode & 0x03) << SR_BIT_BP0)); - - end(dev, &old); -} - -fram_wp_mode_t fram_get_wp_mode(const fram_t *dev) -{ - spi_settings_t s, old; - begin(dev, &s, &old); - - fram_wp_mode_t res = (fram_wp_mode_t)((read_status_reg(dev) & SR_MASK_BP) >> SR_BIT_BP0); - - end(dev, &old); - - return res; -} - - diff --git a/extras/fram/fram.h b/extras/fram/fram.h deleted file mode 100644 index d0eb429..0000000 --- a/extras/fram/fram.h +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Driver for serial nonvolatile ferroelectric random access - * memory or F-RAM. - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_FRAM_H_ -#define EXTRAS_FRAM_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define FRAM_ID_LEN 9 - -/** - * F-RAM device descriptor - */ -typedef struct -{ - uint8_t spi_bus; //!< SPI bus - uint8_t cs_gpio; //!< chip select GPIO - uint32_t spi_freq_div; //!< SPI bus frequency divider -} fram_t; - -/** - * F-RAM device ID - */ -typedef struct -{ - uint8_t data[FRAM_ID_LEN]; - union - { - uint8_t rsvd: 3; - uint8_t rev: 3; - uint8_t sub: 2; - uint8_t density: 5; - uint8_t family: 3; - uint8_t manufacturer[FRAM_ID_LEN - 2]; - }; -} fram_id_t; - - -/** - * Write protection mode - */ -typedef enum -{ - FRAM_WP_NONE = 0, //!< No write protection - FRAM_WP_UPPER_QUARTER,//!< Upper 1/4 write protection - FRAM_WP_UPPER_HALF, //!< Upper 1/2 write protection - FRAM_WP_ALL //!< All memory write protection -} fram_wp_mode_t; - -/** - * Prepare to read/write F-RAM - * @param dev Pointer to device descriptor - */ -void fram_init(const fram_t *dev); - -/** - * Read data from F-RAM - * @param dev Pointer to device descriptor - * @param to Buffer to store data - * @param from F-RAM address - * @param size Bytes to read - */ -void fram_read(const fram_t *dev, void *to, void *from, size_t size); - -/** - * Write data to F-RAM - * @param dev Pointer to device descriptor - * @param from Data buffer - * @param to F-RAM address - * @param size Bytes to write - */ -void fram_write(const fram_t *dev, void *from, void *to, size_t size); - -/** - * Set device to sleep mode or wake up - * @param dev Pointer to device descriptor - * @param sleep Set to sleep mode when true, wake up otherwise - */ -void fram_sleep(const fram_t *dev, bool sleep); - -/** - * Check if F-RAM busy with another SPI master. - * To use this method of sharing F-RAM between two masters - * you'll need to pull up CS GPIO line - * @param dev Pointer to device descriptor - * @return true when device is busy - */ -bool fram_busy(const fram_t *dev); - -/** - * Read the device ID - * @param dev Pointer to device descriptor - * @param id Poiner to device ID structure - */ -void fram_id(const fram_t *dev, fram_id_t *id); - -/** - * Set block write protection mode - * @param dev Pointer to device descriptor - * @param mode Write protection mode - */ -void fram_set_wp_mode(const fram_t *dev, fram_wp_mode_t mode); - -/** - * Get current write protection mode - * @param dev Pointer to device descriptor - * @return Write protection mode - */ -fram_wp_mode_t fram_get_wp_mode(const fram_t *dev); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_FRAM_H_ */ diff --git a/extras/hd44780/README.md b/extras/hd44780/README.md deleted file mode 100644 index c8f6b22..0000000 --- a/extras/hd44780/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# HD44780 LCD display driver - -## Connection type - -Driver supports GPIO connections to module and I2C GPIO expanders as well. -Define `HD44780_I2C = 0` in application makefile for direct GPIO connection. - -See `examples/i2c_lcd_test` and `examples/hd44780_test` . - -## Display types - -### 8x1 - -#### Memory layout - -![0801 display](img/0801.png) - -#### Example - -```C -hd44780_t lcd = { - .addr = ADDR, - .font = HD44780_FONT_5X8, - .lines = 1, - .pins = { - .rs = 0, - .e = 2, - .d4 = 4, - .d5 = 5, - .d6 = 6, - .d7 = 7, - .bl = 3 - }, - .backlight = true -}; -``` - -### 16x1 - -#### Memory layout - -![1601 display](img/1601.png) - -#### Example - -```C -hd44780_t lcd = { - .addr = ADDR, - .font = HD44780_FONT_5X8, - .lines = 2, - .pins = { - .rs = 0, - .e = 2, - .d4 = 4, - .d5 = 5, - .d6 = 6, - .d7 = 7, - .bl = 3 - }, - .backlight = true -}; -hd44780_init(&lcd); -hd44780_gotoxy(&lcd, 0, 0); -hd44780_puts(&lcd, "Hello wo"); -hd44780_gotoxy(&lcd, 0, 1); -hd44780_puts(&lcd, "rld!"); -``` - -### 16x2, 20x2 - -#### Memory layout - -![1602 display](img/1602.png) - -#### Example - -```C -hd44780_t lcd = { - .addr = ADDR, - .font = HD44780_FONT_5X8, - .lines = 2, - .pins = { - .rs = 0, - .e = 2, - .d4 = 4, - .d5 = 5, - .d6 = 6, - .d7 = 7, - .bl = 3 - }, - .backlight = true -}; -``` - -### 16x4, 20x4 - -#### Memory layout - -![1604 display](img/1604.png) - -#### Example - -```C -hd44780_t lcd = { - .addr = ADDR, - .font = HD44780_FONT_5X8, - .lines = 4, - .pins = { - .rs = 0, - .e = 2, - .d4 = 4, - .d5 = 5, - .d6 = 6, - .d7 = 7, - .bl = 3 - }, - .backlight = true -}; -``` diff --git a/extras/hd44780/component.mk b/extras/hd44780/component.mk deleted file mode 100644 index 56f4b8a..0000000 --- a/extras/hd44780/component.mk +++ /dev/null @@ -1,8 +0,0 @@ -INC_DIRS += $(hd44780_ROOT).. -hd44780_SRC_DIR = $(hd44780_ROOT) - -HD44780_I2C ?= 1 - -hd44780_CFLAGS = -DHD44780_I2C=${HD44780_I2C} $(CFLAGS) - -$(eval $(call component_compile_rules,hd44780)) diff --git a/extras/hd44780/hd44780.c b/extras/hd44780/hd44780.c deleted file mode 100644 index d7bbc0a..0000000 --- a/extras/hd44780/hd44780.c +++ /dev/null @@ -1,189 +0,0 @@ -#include "hd44780.h" - -#if (HD44780_I2C) -#include -#else -#include -#endif -#include - -#define MS 1000 - -#define DELAY_CMD_LONG (3 * MS) // >1.53ms according to datasheet -#define DELAY_CMD_SHORT (60) // >39us according to datasheet -#define DELAY_TOGGLE (10) -#define DELAY_INIT (5 * MS) - -#define CMD_CLEAR 0x01 -#define CMD_RETURN_HOME 0x02 -#define CMD_ENTRY_MODE 0x04 -#define CMD_DISPLAY_CTRL 0x08 -#define CMD_SHIFT 0x10 -#define CMD_FUNC_SET 0x20 -#define CMD_CGRAM_ADDR 0x40 -#define CMD_DDRAM_ADDR 0x80 - -// CMD_ENTRY_MODE -#define ARG_EM_INCREMENT (1 << 1) -#define ARG_EM_SHIFT (1) - -// CMD_DISPLAY_CTRL -#define ARG_DC_DISPLAY_ON (1 << 2) -#define ARG_DC_CURSOR_ON (1 << 1) -#define ARG_DC_CURSOR_BLINK (1) - -// CMD_FUNC_SET -#define ARG_FS_8_BIT (1 << 4) -#define ARG_FS_2_LINES (1 << 3) -#define ARG_FS_FONT_5X10 (1 << 2) - -#if (HD44780_I2C) - #define init_delay() do { sdk_os_delay_us(DELAY_INIT); } while (0) - #define short_delay() - #define long_delay() do { sdk_os_delay_us(DELAY_CMD_LONG); } while (0) -#else - #define init_delay() do { sdk_os_delay_us(DELAY_INIT); } while (0) - #define short_delay() do { sdk_os_delay_us(DELAY_CMD_SHORT); } while (0) - #define long_delay() do { sdk_os_delay_us(DELAY_CMD_LONG); } while (0) - #define toggle_delay() do { sdk_os_delay_us(DELAY_TOGGLE); } while (0) -#endif - -static const uint8_t line_addr[] = { 0x00, 0x40, 0x14, 0x54 }; - -static void write_nibble(const hd44780_t *lcd, uint8_t b, bool rs) -{ -#if (HD44780_I2C) - uint8_t data = (((b >> 3) & 1) << lcd->pins.d7) - | (((b >> 2) & 1) << lcd->pins.d6) - | (((b >> 1) & 1) << lcd->pins.d5) - | ((b & 1) << lcd->pins.d4) - | (rs ? 1 << lcd->pins.rs : 0) - | (lcd->backlight ? 1 << lcd->pins.bl : 0); - - pcf8574_port_write(&lcd->i2c_dev, data | (1 << lcd->pins.e)); - pcf8574_port_write(&lcd->i2c_dev, data); -#else - gpio_write(lcd->pins.d7, (b >> 3) & 1); - gpio_write(lcd->pins.d6, (b >> 2) & 1); - gpio_write(lcd->pins.d5, (b >> 1) & 1); - gpio_write(lcd->pins.d4, b & 1); - gpio_write(lcd->pins.rs, rs); - gpio_write(lcd->pins.e, true); - toggle_delay(); - gpio_write(lcd->pins.e, false); -#endif -} - -static void write_byte(const hd44780_t *lcd, uint8_t b, bool rs) -{ - write_nibble(lcd, b >> 4, rs); - write_nibble(lcd, b, rs); -} - -void hd44780_init(const hd44780_t *lcd) -{ -#if (!HD44780_I2C) - gpio_enable(lcd->pins.rs, GPIO_OUTPUT); - gpio_enable(lcd->pins.e, GPIO_OUTPUT); - gpio_enable(lcd->pins.d4, GPIO_OUTPUT); - gpio_enable(lcd->pins.d5, GPIO_OUTPUT); - gpio_enable(lcd->pins.d6, GPIO_OUTPUT); - gpio_enable(lcd->pins.d7, GPIO_OUTPUT); - if (lcd->pins.bl != HD44780_NOT_USED) - gpio_enable(lcd->pins.bl, GPIO_OUTPUT); -#endif - // switch to 4 bit mode - for (uint8_t i = 0; i < 3; i ++) - { - write_nibble(lcd, (CMD_FUNC_SET | ARG_FS_8_BIT) >> 4, false); - init_delay(); - } - write_nibble(lcd, CMD_FUNC_SET >> 4, false); - - // Specify the number of display lines and character font - write_byte(lcd, - CMD_FUNC_SET - | (lcd->lines > 1 ? ARG_FS_2_LINES : 0) - | (lcd->font == HD44780_FONT_5X10 ? ARG_FS_FONT_5X10 : 0), - false); - short_delay(); - // Display off - hd44780_control(lcd, false, false, false); - // Clear - hd44780_clear(lcd); - // Entry mode set - write_byte(lcd, CMD_ENTRY_MODE | ARG_EM_INCREMENT, false); - short_delay(); - // Display on - hd44780_control(lcd, true, false, false); -} - -void hd44780_control(const hd44780_t *lcd, bool on, bool cursor, bool cursor_blink) -{ - write_byte(lcd, - CMD_DISPLAY_CTRL - | (on ? ARG_DC_DISPLAY_ON : 0) - | (cursor ? ARG_DC_CURSOR_ON : 0) - | (cursor_blink ? ARG_DC_CURSOR_BLINK : 0), - false); - short_delay(); -} - -void hd44780_clear(const hd44780_t *lcd) -{ - write_byte(lcd, CMD_CLEAR, false); - long_delay(); -} - -void hd44780_gotoxy(const hd44780_t *lcd, uint8_t col, uint8_t line) -{ - if (line >= lcd->lines) line = lcd->lines - 1; - uint8_t addr = line < sizeof(line_addr) ? line_addr[line] : 0; - write_byte(lcd, CMD_DDRAM_ADDR + addr + col, false); - short_delay(); -} - -void hd44780_putc(const hd44780_t *lcd, char c) -{ - write_byte(lcd, c, true); - short_delay(); -} - -void hd44780_puts(const hd44780_t *lcd, const char *s) -{ - while (*s) - { - hd44780_putc(lcd, *s); - s++; - } -} - -void hd44780_set_backlight(hd44780_t *lcd, bool on) -{ - if (lcd->pins.bl == HD44780_NOT_USED) - return; - -#if (HD44780_I2C) - pcf8574_gpio_write(&lcd->i2c_dev, lcd->pins.bl, on); -#else - gpio_write(lcd->pins.bl, on); -#endif - - lcd->backlight = on; -} - -void hd44780_upload_character(const hd44780_t *lcd, uint8_t num, const uint8_t *data) -{ - if (num > 7) return; - - uint8_t bytes = lcd->font == HD44780_FONT_5X8 ? 8 : 10; - write_byte(lcd, CMD_CGRAM_ADDR + num * bytes, false); - short_delay(); - for (uint8_t i = 0; i < bytes; i ++) - { - write_byte(lcd, data[i], true); - short_delay(); - } - - hd44780_gotoxy(lcd, 0, 0); -} diff --git a/extras/hd44780/hd44780.h b/extras/hd44780/hd44780.h deleted file mode 100644 index c5152de..0000000 --- a/extras/hd44780/hd44780.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Driver for LCD text displays on LCD connected to I2C by PCF8574 - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_HD44780_H_ -#define _EXTRAS_HD44780_H_ - -#include -#include - -#ifndef HD44780_I2C -#define HD44780_I2C 1 -#endif -#if (HD44780_I2C) -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define HD44780_NOT_USED 0xff - -/** - * LCD font type. Please refer to the datasheet - * of your module. - */ -typedef enum -{ - HD44780_FONT_5X8 = 0, - HD44780_FONT_5X10 -} hd44780_font_t; - -/** - * LCD descriptor. Fill it before use. - */ -typedef struct -{ -#if (HD44780_I2C) - i2c_dev_t i2c_dev; //!< PCF8574 device settings (0b0100) -#endif - struct - { - uint8_t rs; //!< gpio/register bit used for RS pin - uint8_t e; //!< register bit used for E pin - uint8_t d4; //!< register bit used for D4 pin - uint8_t d5; //!< register bit used for D5 pin - uint8_t d6; //!< register bit used for D5 pin - uint8_t d7; //!< register bit used for D5 pin - uint8_t bl; //!< register bit used for backlight, 0xFF if not used - } pins; - hd44780_font_t font; //!< LCD Font type - uint8_t lines; //!< Number of lines for LCD. Many 16x1 LCD has two lines (like 8x2) - bool backlight; //!< Current backlight state -} hd44780_t; - -/** - * Init LCD. Set poition to (0, 0) - * \param lcd Pointer to the LCD descriptor - */ -void hd44780_init(const hd44780_t *lcd); - -/** - * On/off LCD, show/hide cursor, set cursor blink - * \param lcd Pointer to the LCD descriptor - */ -void hd44780_control(const hd44780_t *lcd, bool on, bool cursor, bool cursor_blink); - -/** - * Clear LCD memory and move char position to (0, 0) - * \param lcd Pointer to the LCD descriptor - */ -void hd44780_clear(const hd44780_t *lcd); - -/** - * Set current char position - * \param lcd Pointer to the LCD descriptor - * \param col Column - * \param line Line - */ -void hd44780_gotoxy(const hd44780_t *lcd, uint8_t col, uint8_t line); - -/** - * Print character - * \param lcd Pointer to the LCD descriptor - * \param c Character - */ -void hd44780_putc(const hd44780_t *lcd, char c); - -/** - * Print string - * \param lcd Pointer to the LCD descriptor - * \param s String - */ -void hd44780_puts(const hd44780_t *lcd, const char *s); - -/** - * Switch backlight - * \param lcd Pointer to the LCD descriptor - * \param on Turn backlight on if true - */ -void hd44780_set_backlight(hd44780_t *lcd, bool on); - -/** - * Upload character data to the CGRAM. - * Current position will be set to (0, 0) after uploading - * \param lcd Pointer to the LCD descriptor - * \param num Character number (0..7) - * \param data Character data: 8 or 10 bytes depending on the font - */ -void hd44780_upload_character(const hd44780_t *lcd, uint8_t num, const uint8_t *data); - -#ifdef __cplusplus -} -#endif - -#endif /* _EXTRAS_HD44780_H_ */ diff --git a/extras/hd44780/img/0801.png b/extras/hd44780/img/0801.png deleted file mode 100644 index 0a81c09..0000000 Binary files a/extras/hd44780/img/0801.png and /dev/null differ diff --git a/extras/hd44780/img/1601.png b/extras/hd44780/img/1601.png deleted file mode 100644 index 429bdf6..0000000 Binary files a/extras/hd44780/img/1601.png and /dev/null differ diff --git a/extras/hd44780/img/1602.png b/extras/hd44780/img/1602.png deleted file mode 100644 index 8bdf7af..0000000 Binary files a/extras/hd44780/img/1602.png and /dev/null differ diff --git a/extras/hd44780/img/1604.png b/extras/hd44780/img/1604.png deleted file mode 100644 index ac17ba1..0000000 Binary files a/extras/hd44780/img/1604.png and /dev/null differ diff --git a/extras/hmc5883l/component.mk b/extras/hmc5883l/component.mk deleted file mode 100644 index c3fad9c..0000000 --- a/extras/hmc5883l/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/hmc5883l - -# expected anyone using this driver includes it as 'hmc5883l/hmc5883l.h' -INC_DIRS += $(hmc5883l_ROOT).. - -# args for passing into compile rule generation -hmc5883l_SRC_DIR = $(hmc5883l_ROOT) - -$(eval $(call component_compile_rules,hmc5883l)) diff --git a/extras/hmc5883l/hmc5883l.c b/extras/hmc5883l/hmc5883l.c deleted file mode 100644 index 2a95407..0000000 --- a/extras/hmc5883l/hmc5883l.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Driver for 3-axis digital compass HMC5883L - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "hmc5883l.h" -#include - - -#define REG_CR_A 0x00 -#define REG_CR_B 0x01 -#define REG_MODE 0x02 -#define REG_DX_H 0x03 -#define REG_DX_L 0x04 -#define REG_DZ_H 0x05 -#define REG_DZ_L 0x06 -#define REG_DY_H 0x07 -#define REG_DY_L 0x08 -#define REG_STAT 0x09 -#define REG_ID_A 0x0a -#define REG_ID_B 0x0b -#define REG_ID_C 0x0c - -#define BIT_MA 5 -#define BIT_DO 2 -#define BIT_GN 5 - -#define MASK_MD 0x03 -#define MASK_MA 0x60 -#define MASK_DO 0x1c -#define MASK_MS 0x03 -#define MASK_DR 0x01 -#define MASK_DL 0x02 - -#define MEASUREMENT_TIMEOUT 6000 - -#define timeout_expired(start, len) ((uint32_t)(sdk_system_get_time() - (start)) >= (len)) - -static const float gain_values [] = { - [HMC5883L_GAIN_1370] = 0.73, - [HMC5883L_GAIN_1090] = 0.92, - [HMC5883L_GAIN_820] = 1.22, - [HMC5883L_GAIN_660] = 1.52, - [HMC5883L_GAIN_440] = 2.27, - [HMC5883L_GAIN_390] = 2.56, - [HMC5883L_GAIN_330] = 3.03, - [HMC5883L_GAIN_230] = 4.35 -}; - -static float current_gain; -static hmc5883l_operating_mode_t current_mode; - -static inline void write_register(i2c_dev_t *dev, uint8_t reg, uint8_t val) -{ - i2c_slave_write(dev->bus, dev->addr, ®, &val, 1); -} - -static inline uint8_t read_register(i2c_dev_t *dev, uint8_t reg) -{ - uint8_t res; - i2c_slave_read(dev->bus, dev->addr, ®, &res, 1); - return res; -} - -static inline void update_register(i2c_dev_t *dev, uint8_t reg, uint8_t mask, uint8_t val) -{ - write_register(dev, reg, (read_register(dev, reg) & mask) | val); -} - -bool hmc5883l_init(i2c_dev_t *dev) -{ - if (hmc5883l_get_id(dev) != HMC5883L_ID) - return false; - current_gain = gain_values[hmc5883l_get_gain(dev)]; - current_mode = hmc5883l_get_operating_mode(dev); - return true; -} - -uint32_t hmc5883l_get_id(i2c_dev_t *dev) -{ - uint32_t res = 0; - uint8_t reg = REG_ID_A; - i2c_slave_read(dev->bus, dev->addr, ®, (uint8_t *)&res, 3); - return res; -} - -hmc5883l_operating_mode_t hmc5883l_get_operating_mode(i2c_dev_t *dev) -{ - uint8_t res = read_register(dev, REG_MODE) & MASK_MD; - return res == 0 ? HMC5883L_MODE_CONTINUOUS : HMC5883L_MODE_SINGLE; -} - -void hmc5883l_set_operating_mode(i2c_dev_t *dev, hmc5883l_operating_mode_t mode) -{ - write_register(dev, REG_MODE, mode); - current_mode = mode; -} - -hmc5883l_samples_averaged_t hmc5883l_get_samples_averaged(i2c_dev_t *dev) -{ - return (read_register(dev, REG_CR_A) & MASK_MA) >> BIT_MA; -} - -void hmc5883l_set_samples_averaged(i2c_dev_t *dev, hmc5883l_samples_averaged_t samples) -{ - update_register(dev, REG_CR_A, MASK_MA, samples << BIT_MA); -} - -hmc5883l_data_rate_t hmc5883l_get_data_rate(i2c_dev_t *dev) -{ - return (read_register(dev, REG_CR_A) & MASK_DO) >> BIT_DO; -} - -void hmc5883l_set_data_rate(i2c_dev_t *dev, hmc5883l_data_rate_t rate) -{ - update_register(dev, REG_CR_A, MASK_DO, rate << BIT_DO); -} - -hmc5883l_bias_t hmc5883l_get_bias(i2c_dev_t *dev) -{ - return read_register(dev, REG_CR_A) & MASK_MS; -} - -void hmc5883l_set_bias(i2c_dev_t *dev, hmc5883l_bias_t bias) -{ - update_register(dev, REG_CR_A, MASK_MS, bias); -} - -hmc5883l_gain_t hmc5883l_get_gain(i2c_dev_t *dev) -{ - return read_register(dev, REG_CR_B) >> BIT_GN; -} - -void hmc5883l_set_gain(i2c_dev_t *dev, hmc5883l_gain_t gain) -{ - write_register(dev, REG_CR_B, gain << BIT_GN); - current_gain = gain_values[gain]; -} - -bool hmc5883l_data_is_locked(i2c_dev_t *dev) -{ - return read_register(dev, REG_STAT) & MASK_DL; -} - -bool hmc5883l_data_is_ready(i2c_dev_t *dev) -{ - return read_register(dev, REG_STAT) & MASK_DR; -} - -bool hmc5883l_get_raw_data(i2c_dev_t *dev, hmc5883l_raw_data_t *data) -{ - if (current_mode == HMC5883L_MODE_SINGLE) - { - // overwrite mode register for measurement - hmc5883l_set_operating_mode(dev, current_mode); - // wait for data - uint32_t start = sdk_system_get_time(); - while (!hmc5883l_data_is_ready(dev)) - { - if (timeout_expired(start, MEASUREMENT_TIMEOUT)) - return false; - } - } - uint8_t buf[6]; - uint8_t reg = REG_DX_H; - i2c_slave_read(dev->bus, dev->addr, ®, buf, 6); - data->x = ((int16_t)buf[REG_DX_H - REG_DX_H] << 8) | buf[REG_DX_L - REG_DX_H]; - data->y = ((int16_t)buf[REG_DY_H - REG_DX_H] << 8) | buf[REG_DY_L - REG_DX_H]; - data->z = ((int16_t)buf[REG_DZ_H - REG_DX_H] << 8) | buf[REG_DZ_L - REG_DX_H]; - return true; -} - -void hmc5883l_raw_to_mg(const hmc5883l_raw_data_t *raw, hmc5883l_data_t *mg) -{ - mg->x = raw->x * current_gain; - mg->y = raw->y * current_gain; - mg->z = raw->z * current_gain; -} - -bool hmc5883l_get_data(i2c_dev_t *dev, hmc5883l_data_t *data) -{ - hmc5883l_raw_data_t raw; - - if (!hmc5883l_get_raw_data(dev, &raw)) - return false; - hmc5883l_raw_to_mg(&raw, data); - return true; -} diff --git a/extras/hmc5883l/hmc5883l.h b/extras/hmc5883l/hmc5883l.h deleted file mode 100644 index 041e818..0000000 --- a/extras/hmc5883l/hmc5883l.h +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Driver for 3-axis digital compass HMC5883L - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_HMC5883L_H_ -#define EXTRAS_HMC5883L_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define HMC5883L_ADDR 0x1e - -#define HMC5883L_ID 0x00333448 // "H43" - -/** - * Device operating mode - */ -typedef enum -{ - HMC5883L_MODE_CONTINUOUS = 0, //!< Continuous mode - HMC5883L_MODE_SINGLE //!< Single measurement mode, default -} hmc5883l_operating_mode_t; - -/** - * Number of samples averaged per measurement - */ -typedef enum -{ - HMC5883L_SAMPLES_1 = 0, //!< 1 sample, default - HMC5883L_SAMPLES_2, //!< 2 samples - HMC5883L_SAMPLES_4, //!< 4 samples - HMC5883L_SAMPLES_8 //!< 8 samples -} hmc5883l_samples_averaged_t; - -/** - * Data output rate in continuous measurement mode - */ -typedef enum -{ - HMC5883L_DATA_RATE_00_75 = 0, //!< 0.75 Hz - HMC5883L_DATA_RATE_01_50, //!< 1.5 Hz - HMC5883L_DATA_RATE_03_00, //!< 3 Hz - HMC5883L_DATA_RATE_07_50, //!< 7.5 Hz - HMC5883L_DATA_RATE_15_00, //!< 15 Hz, default - HMC5883L_DATA_RATE_30_00, //!< 30 Hz - HMC5883L_DATA_RATE_75_00 //!< 75 Hz -} hmc5883l_data_rate_t; - -/** - * Measurement mode of the device (bias) - */ -typedef enum -{ - HMC5883L_BIAS_NORMAL = 0, //!< Default flow, no bias - HMC5883L_BIAS_POSITIVE, //!< Positive bias configuration all axes, used for self test (see datasheet) - HMC5883L_BIAS_NEGATIVE //!< Negative bias configuration all axes, used for self test (see datasheet) -} hmc5883l_bias_t; - -/** - * Device gain - */ -typedef enum -{ - HMC5883L_GAIN_1370 = 0, //!< 0.73 mG/LSb, range -0.88..+0.88 G - HMC5883L_GAIN_1090, //!< 0.92 mG/LSb, range -1.3..+1.3 G, default - HMC5883L_GAIN_820, //!< 1.22 mG/LSb, range -1.9..+1.9 G - HMC5883L_GAIN_660, //!< 1.52 mG/LSb, range -2.5..+2.5 G - HMC5883L_GAIN_440, //!< 2.27 mG/LSb, range -4.0..+4.0 G - HMC5883L_GAIN_390, //!< 2.56 mG/LSb, range -4.7..+4.7 G - HMC5883L_GAIN_330, //!< 3.03 mG/LSb, range -5.6..+5.6 G - HMC5883L_GAIN_230 //!< 4.35 mG/LSb, range -8.1..+8.1 G -} hmc5883l_gain_t; - -/** - * Raw measurement result - */ -typedef struct -{ - int16_t x; - int16_t y; - int16_t z; -} hmc5883l_raw_data_t; - -/** - * Measurement result, milligauss - */ -typedef struct -{ - float x; - float y; - float z; -} hmc5883l_data_t; - -/** - * \brief Init device - * \return false if error occured - */ -bool hmc5883l_init(i2c_dev_t *dev); - -/** - * \brief Get device ID - * Always returns 0x00333448 if IC functioning properly. - * \return Device ID - */ -uint32_t hmc5883l_get_id(i2c_dev_t *dev); - -/** - * \brief Get operating mode - * \return Measurement mode - */ -hmc5883l_operating_mode_t hmc5883l_get_operating_mode(i2c_dev_t *dev); - -/** - * \brief Set operating mode - * \param mode Measurement mode - */ -void hmc5883l_set_operating_mode(i2c_dev_t *dev, hmc5883l_operating_mode_t mode); - -/** - * \brief Get number of samples averaged per measurement output - * \return Number of samples - */ -hmc5883l_samples_averaged_t hmc5883l_get_samples_averaged(i2c_dev_t *dev); - -/** - * \brief Set number of samples averaged per measurement output - * \param samples Number of samples - */ -void hmc5883l_set_samples_averaged(i2c_dev_t *dev, hmc5883l_samples_averaged_t samples); - -/** - * \brief Get data output rate in continuous measurement mode - * \return Data output rate - */ -hmc5883l_data_rate_t hmc5883l_get_data_rate(i2c_dev_t *dev); - -/** - * \brief Set data output rate in continuous measurement mode - * \param rate Data output rate - */ -void hmc5883l_set_data_rate(i2c_dev_t *dev, hmc5883l_data_rate_t rate); - -/** - * \brief Get measurement mode (bias of the axes) - * See datasheet for self test description - * \return Bias - */ -hmc5883l_bias_t hmc5883l_get_bias(i2c_dev_t *dev); - -/** - * \brief Set measurement mode (bias of the axes) - * See datasheet for self test description - * \param bias Bias - */ -void hmc5883l_set_bias(i2c_dev_t *dev, hmc5883l_bias_t bias); - -/** - * \brief Get device gain - * \return Current gain - */ -hmc5883l_gain_t hmc5883l_get_gain(i2c_dev_t *dev); - -/** - * \brief Set device gain - * \param gain Gain - */ -void hmc5883l_set_gain(i2c_dev_t *dev, hmc5883l_gain_t gain); - -/** - * \brief Get data state - * \return true when data is written to all six data registers - */ -bool hmc5883l_data_is_ready(i2c_dev_t *dev); - -/** - * \brief Get lock state. - * If data is locked, any new data will not be placed in data registers until - * one of these conditions are met: - * 1. data have been read, - * 2. operating mode is changed, - * 3. the measurement configuration (bias) is changed, - * 4. power is reset. - * \return true when data registers is locked - */ -bool hmc5883l_data_is_locked(i2c_dev_t *dev); - -/** - * \brief Get raw magnetic data - * \param data Pointer to the struct to write raw data - * \return false if error occured in single measurement mode, always true in continuous mode - */ -bool hmc5883l_get_raw_data(i2c_dev_t *dev, hmc5883l_raw_data_t *data); - -/** - * \brief Convert raw magnetic data to milligausses - * \param raw Pointer to source raw data struct - * \param mg Pointer to target struct to write converted data - */ -void hmc5883l_raw_to_mg(const hmc5883l_raw_data_t *raw, hmc5883l_data_t *mg); - -/** - * \brief Get magnetic data in milligausses - * \param data Pointer to the struct to write data - * \return false if error occured in single measurement mode, always true in continuous mode - */ -bool hmc5883l_get_data(i2c_dev_t *dev, hmc5883l_data_t *data); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_HMC5883L_H_ */ diff --git a/extras/http-parser/component.mk b/extras/http-parser/component.mk deleted file mode 100644 index d3787fb..0000000 --- a/extras/http-parser/component.mk +++ /dev/null @@ -1,11 +0,0 @@ -# Component makefile for extras/http-parser - -# Include it as 'http-parser/http_parser.h' -INC_DIRS += $(http-parser_ROOT) - -# args for passing into compile rule generation -http-parser_INC_DIR = -http-parser_SRC_DIR = $(http-parser_ROOT)http-parser -http-parser_SRC_FILES = $(http-parser_SRC_DIR)/http_parser.c - -$(eval $(call component_compile_rules,http-parser)) diff --git a/extras/http-parser/http-parser b/extras/http-parser/http-parser deleted file mode 160000 index 335850f..0000000 --- a/extras/http-parser/http-parser +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 335850f6b868d3411968cbf5a4d59fe619dee36f diff --git a/extras/http_client_ota/component.mk b/extras/http_client_ota/component.mk deleted file mode 100644 index 4cebd16..0000000 --- a/extras/http_client_ota/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/http_client_ota - -# Expected anyone using http_client_ota includes it as 'http_client_ota/ota' -INC_DIRS += $(http_client_ota_ROOT) - -# args for passing into compile rule generation -http_client_ota_INC_DIR = $(http_client_ota_ROOT) -http_client_ota_SRC_DIR = $(http_client_ota_ROOT) - -$(eval $(call component_compile_rules,http_client_ota)) diff --git a/extras/http_client_ota/http_buffered_client.c b/extras/http_client_ota/http_buffered_client.c deleted file mode 100644 index 2d6e276..0000000 --- a/extras/http_client_ota/http_buffered_client.c +++ /dev/null @@ -1,220 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "lwip/err.h" -#include "lwip/sockets.h" -#include "lwip/sys.h" -#include "lwip/netdb.h" -#include "lwip/dns.h" - -#include "http_buffered_client.h" - -#define MAX_REQUEST_SIZE (152 / sizeof(uint32_t)) -#define vTaskDelayMs(ms) vTaskDelay((ms) / portTICK_PERIOD_MS) - -typedef void (*handle_http_token)(char *); - -struct http_token_table { - const char * token; - handle_http_token http_tock_cb; -}; - -// Response struct -struct HTTP_response { - unsigned int response_code; - unsigned int length; -}; - -/** - * \addtogroup http_buffer_client_internal - * Http Request - */ -const char *req = - "GET %s HTTP/1.1\r\n" - "Host: %s \r\n" - "User-Agent: esp-open-rtos/0.1 esp8266\r\n" - "Connection: close\r\n" - "\r\n"; - -static uint32_t request[MAX_REQUEST_SIZE]; - -static const struct addrinfo hints = { - .ai_family = AF_UNSPEC, - .ai_socktype = SOCK_STREAM, -}; - -static struct HTTP_response http_reponse; - -// HTTP Header Token, add here function and then register it in HTTP Table callback -static void http_handle_cb_ContentLength(char *token) -{ - token += 16; // strlen("Content-Length:"), skip useless part - while (*token) { - if (isdigit((int) *token)) - http_reponse.length = (unsigned int) strtol(token, &token, 10); - else - token++; - } -} - -static inline void parse_http_header_HTTP_STATUS(char *token) -{ - token += 8; // Skip HTTP/1.0 - - while (*token) { - if (isdigit((int) *token)) - http_reponse.response_code = (unsigned int) strtol(token, &token, 10); - else - token++; - } -} - -// HTTP Token Hanling callback -struct http_token_table HTTP_HEADER_TOKEN[] = { - { .token = "Content-Length", .http_tock_cb = http_handle_cb_ContentLength }, -}; - -static inline void parse_http_header(char *header) -{ - char *str1, *str2, *token, *subtoken, *saveptr1, *saveptr2; - const char line_split[] = "\r\n", sub_chart[] = ":"; - unsigned int j, i; - - for (j = 1, str1 = header;; j++, str1 = NULL) { - token = strtok_r(str1, line_split, &saveptr1); - if (token == NULL) - break; - - str2 = token; - subtoken = strtok_r(str2, sub_chart, &saveptr2); - if (subtoken == NULL) - break; - - if (j == 1) { - // Is HTTP Header, response, HTTP Version and status - parse_http_header_HTTP_STATUS(token); - continue; - } - - for (i = 0; i < sizeof(HTTP_HEADER_TOKEN) / sizeof(struct http_token_table); i++) - if (!strcmp(subtoken, HTTP_HEADER_TOKEN[i].token)) - HTTP_HEADER_TOKEN[i].http_tock_cb(token); - - } -} - -HTTP_Client_State HttpClient_dowload(Http_client_info *info) -{ - struct addrinfo *res; - unsigned int tot_http_pdu_rd, full; - ssize_t read_byte; - int err, sock; - char *wrt_ptr; - - err = getaddrinfo(info->server, info->port, &hints, &res); - - if (err != 0 || res == NULL) { - if (res) - freeaddrinfo(res); - return HTTP_DNS_LOOKUP_FALLIED; - } - - sock = socket(res->ai_family, res->ai_socktype, 0); - if (sock < 0) { - freeaddrinfo(res); - return HTTP_SOCKET_ALLOCATION_FALLIED; - } - - if (connect(sock, res->ai_addr, res->ai_addrlen) != 0) { - close(sock); - freeaddrinfo(res); - return HTTP_SOCKET_CONNECTION_FALLIED; - } - - // Release address memory - freeaddrinfo(res); - - // Alloc memory for request - sprintf((char *) request, req, info->path, info->server); - if (write(sock, (char *) request, strlen((char *) request)) < 0) { - close(sock); - return HTTP_REQUEST_SEND_FALLIED; - } - - tot_http_pdu_rd = 0; - wrt_ptr = info->buffer; - full = 0; - - // Ping wdog - vTaskDelayMs(250); - do { - int free_buff_space; - - free_buff_space = info->buffer_size - full; - read_byte = read(sock, wrt_ptr, free_buff_space); - - // Update buffer property - wrt_ptr += read_byte; - full += read_byte; - - if (tot_http_pdu_rd == 0) { - // Is fist chunk, then it contains http header, parse it. - unsigned int header_len, pdu_size; - char *header, *pdu; - - pdu = strstr(info->buffer, "\r\n\r\n"); - - if (pdu != NULL) - pdu += 4; // Offset by 4 bytes to start of content - else // Not all HTTP Header has been read, then continue read - continue; - - header_len = pdu - info->buffer + 4; - - header = malloc(header_len + 1); // NULL string terminator - - memset(header, 0, header_len + 1); - memcpy(header, info->buffer, header_len); - - parse_http_header(header); - // Release useless memory - free(header); - - // Move memory - pdu_size = wrt_ptr - pdu; - - memmove(info->buffer, pdu, pdu_size); - wrt_ptr = (info->buffer + pdu_size); - - full = pdu_size; - tot_http_pdu_rd = pdu_size; - - if (http_reponse.response_code != HTTP_OK) - goto err_label; - - continue; - } - tot_http_pdu_rd += read_byte; - - if (full == info->buffer_size) { - info->buffer_full_cb(info->buffer, full); - - memset(info->buffer, 0, info->buffer_size); - wrt_ptr = info->buffer; - full = 0; - vTaskDelayMs(50); - } - } while (read_byte > 0); - - info->final_cb(info->buffer, full); - if (tot_http_pdu_rd != http_reponse.length) - http_reponse.response_code = HTTP_DOWLOAD_SIZE_NOT_MATCH; - -err_label: - close(sock); - return http_reponse.response_code; -} /* HttpClient_dowload */ diff --git a/extras/http_client_ota/http_buffered_client.h b/extras/http_client_ota/http_buffered_client.h deleted file mode 100644 index aa30da3..0000000 --- a/extras/http_client_ota/http_buffered_client.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef HTTP_BUFFERED_CLIENT -#define HTTP_BUFFERED_CLIENT - -typedef unsigned int (*http_final_cb)(char *buff, uint16_t size); - -typedef enum { - HTTP_DNS_LOOKUP_FALLIED = 1, - HTTP_SOCKET_ALLOCATION_FALLIED = 2, - HTTP_SOCKET_CONNECTION_FALLIED = 3, - HTTP_SHA_DONT_MATCH = 4, - HTTP_REQUEST_SEND_FALLIED = 5, - HTTP_DOWLOAD_SIZE_NOT_MATCH = 6, - HTTP_OK = 200, - HTTP_NOTFOUND = 404, -} HTTP_Client_State; - -typedef struct { - const char * server; - const char * port; - const char * path; - char * buffer; - uint16_t buffer_size; - http_final_cb buffer_full_cb; - http_final_cb final_cb; -} Http_client_info; - -HTTP_Client_State HttpClient_dowload(Http_client_info *info); - -#endif // ifndef HTTP_BUFFERED_CLIENT diff --git a/extras/http_client_ota/http_client_ota.c b/extras/http_client_ota/http_client_ota.c deleted file mode 100644 index f7a2be9..0000000 --- a/extras/http_client_ota/http_client_ota.c +++ /dev/null @@ -1,259 +0,0 @@ -#include -#include -#include -#include -#include -#include "arch/cc.h" -#include "lwip/err.h" -#include "lwip/sockets.h" -#include "lwip/sys.h" -#include "lwip/netdb.h" -#include "lwip/dns.h" -#include -#include -#include -#include -#include "mbedtls/sha256.h" -#include "http_client_ota.h" -#include "rboot-api.h" -#include "rboot.h" -#define MODULE "OTA" - -#if defined(DEBUG) -# ifndef MODULE -# error "Module not define" -# endif - - # define DEBUG_PRINT(fmt, args ...) \ - printf("[%s]\t" fmt "\n", MODULE, ## args) -#else - # define DEBUG_PRINT(fmt, args ...) /* Don't do anything in release builds */ -#endif - -#define MAX_IMAGE_SIZE 0x100000 /*1MB images max at the moment */ -#define READ_BUFFER_LEN 512 - -#define SHA256_SIZE_BIN 32 -#define SHA256_SIZE_STR SHA256_SIZE_BIN * 2 -#define SHA256_CONV_STEP_SIZE 4 - -#if SECTOR_SIZE % READ_BUFFER_LEN != 0 -# error "Incompatible SECTOR SIZE, with you current READ_BUFFER" -#endif - -#define SECTOR_BUFFER_SIZE (SECTOR_SIZE) -#define vTaskDelayMs(ms) vTaskDelay((ms) / portTICK_PERIOD_MS) - -static ota_info *ota_inf; -static mbedtls_sha256_context *sha256_ctx; - -static uint32_t flash_offset; -static uint32_t flash_limits; - -static unsigned char *SHA256_output; -static uint16_t *SHA256_dowload; -static char *SHA256_str; -static char *SHA256_wrt_ptr; - -/** - * CallBack called from Http Buffered client, for ota firmaware - */ -static unsigned int ota_firmaware_dowload_callback(char *buf, uint16_t size) -{ - if (ota_inf->sha256_path != NULL) - mbedtls_sha256_update(sha256_ctx, (const unsigned char *) buf, size); - - if (flash_offset + size > flash_limits) { - DEBUG_PRINT("Flash Limits override"); - return -1; - } - - // Ready for flash device, the erase NANDFLASH Block - if (flash_offset % SECTOR_SIZE == 0) { - unsigned int sector; - - sector = flash_offset / SECTOR_SIZE; - sdk_spi_flash_erase_sector(sector); - } - - // Write into Flash - sdk_spi_flash_write(flash_offset, (uint32_t *) buf, size); - flash_offset += size; - return 1; -} - -static unsigned int SHA256_check_callback(char *buf, uint16_t size) -{ - int Current_SHA_Size; - - // Check that str does not contains other streing with SHA256 - if (size > SHA256_SIZE_STR) - size = SHA256_SIZE_STR; - - Current_SHA_Size = SHA256_wrt_ptr - (char *) SHA256_str; - - if (!(Current_SHA_Size > SHA256_SIZE_STR)) { - memcpy(SHA256_wrt_ptr, buf, size); - SHA256_wrt_ptr += size; - } - return 1; -} - -static void convert_SHA256_Str_TO_uint32(char *str, uint16_t *final_sha_bin) -{ - char tmp[SHA256_CONV_STEP_SIZE + 1]; - char *wrt_ptr; - int i; - - wrt_ptr = str; - for (i = 0; i < SHA256_SIZE_STR / SHA256_CONV_STEP_SIZE; i++) { - uint16_t val; - memset(tmp, 0, sizeof(tmp)); - memcpy(tmp, wrt_ptr, SHA256_CONV_STEP_SIZE); - - val = strtol(tmp, NULL, 16); - - final_sha_bin[i] = LWIP_PLATFORM_HTONS(val); - - wrt_ptr += SHA256_CONV_STEP_SIZE; - } -} - -OTA_err ota_update(ota_info *ota_info_par) -{ - Http_client_info http_inf; - rboot_config rboot_config; - HTTP_Client_State err; - int slot; - - ota_inf = ota_info_par; - - // Malloc memory for work - http_inf.buffer = malloc(SECTOR_BUFFER_SIZE); - http_inf.buffer_size = SECTOR_BUFFER_SIZE; - http_inf.server = ota_inf->server; - http_inf.port = ota_inf->port; - - // Check memory alignement, must be aligned - if ((unsigned int) http_inf.buffer % sizeof(unsigned int)) { - DEBUG_PRINT("Malloc return Unaligned memory"); - free(http_inf.buffer); - } - - if (ota_inf->sha256_path != NULL) { - sha256_ctx = malloc(sizeof(mbedtls_sha256_context)); - SHA256_output = malloc(SHA256_SIZE_BIN); - SHA256_dowload = malloc(SHA256_SIZE_BIN); - SHA256_str = malloc(SHA256_SIZE_STR + 1); - SHA256_wrt_ptr = SHA256_str; - SHA256_str[SHA256_SIZE_STR] = '\0'; - mbedtls_sha256_init(sha256_ctx); - } - - DEBUG_PRINT("HTTP client task starting"); - - rboot_config = rboot_get_config(); - slot = (rboot_config.current_rom + 1) % rboot_config.count; - - DEBUG_PRINT("Image will be saved in OTA slot %d", slot); - if (slot == rboot_config.current_rom) { - DEBUG_PRINT("Only one OTA slot is configured!"); - err = OTA_ONE_SLOT_ONLY; - goto dealloc_all; - } - - /* Validate the OTA slot parameter */ - if (rboot_config.current_rom == slot || rboot_config.count <= slot) - DEBUG_PRINT("Current rom set to unknow value:%d", rboot_config.current_rom); - - // Calculate room limits - flash_offset = rboot_config.roms[slot]; - flash_limits = flash_offset + MAX_IMAGE_SIZE; - - if (ota_inf->sha256_path != NULL) { - // Setup for dowload sha256 - http_inf.path = ota_inf->sha256_path; - http_inf.final_cb = SHA256_check_callback; - http_inf.buffer_full_cb = SHA256_check_callback; - - memset(SHA256_dowload, 0, SHA256_SIZE_BIN); - memset(SHA256_str, 0, SHA256_SIZE_STR); - - err = HttpClient_dowload(&http_inf); - - // Check if dowload success - if (err != HTTP_OK) - goto dealloc_all; - - convert_SHA256_Str_TO_uint32(SHA256_str, SHA256_dowload); - } - - // Ping Wdog - vTaskDelayMs(250); - - // Dowload Firmaware - http_inf.path = ota_inf->binary_path; - http_inf.final_cb = ota_firmaware_dowload_callback; - http_inf.buffer_full_cb = ota_firmaware_dowload_callback; - if (ota_inf->sha256_path != NULL) - mbedtls_sha256_starts(sha256_ctx, 0); // Start SHA256, not SHA224 - - err = HttpClient_dowload(&http_inf); - - if (err != HTTP_OK) - goto dealloc_all; - - if (ota_inf->sha256_path != NULL) { - char com_res; - mbedtls_sha256_finish(sha256_ctx, SHA256_output); - mbedtls_sha256_free(sha256_ctx); - - com_res = !memcmp((void *) SHA256_output, (void *) SHA256_dowload, SHA256_SIZE_BIN); - if (!com_res) { - DEBUG_PRINT("SHA256 is not equal"); - err = HTTP_SHA_DONT_MATCH; - goto dealloc_all; - } - } - // Ping watch DOG - vTaskDelayMs(500); - { - #define MESSAGE_MAX 120 - unsigned int Rboot_verified, boot_dimension; - char error_message[MESSAGE_MAX]; - - memset(error_message, 0, sizeof(error_message)); - // Start verify - Rboot_verified = rboot_verify_image(rboot_config.roms[slot], &boot_dimension, (const char **) &error_message); - if (Rboot_verified) { - // Rom OK, call final callback for let inform user that all is ready for switch and reset. - - vPortEnterCritical(); - if (!rboot_set_current_rom(slot)) { - vPortExitCritical(); - err = OTA_FAIL_SET_NEW_SLOT; - goto dealloc_all; - } - vPortExitCritical(); - - // Update success, software return HTTP_200 - err = OTA_UPDATE_DONE; - goto dealloc_all; - } else { - DEBUG_PRINT("%s", error_message); - err = OTA_IMAGE_VERIFY_FALLIED; - goto dealloc_all; - } - } - -dealloc_all: - free(http_inf.buffer); - - if (ota_inf->sha256_path != NULL) { - free(sha256_ctx); - free(SHA256_str); - free(SHA256_output); - free(SHA256_dowload); - } - return err; -} /* ota_update */ diff --git a/extras/http_client_ota/http_client_ota.h b/extras/http_client_ota/http_client_ota.h deleted file mode 100644 index f6841e6..0000000 --- a/extras/http_client_ota/http_client_ota.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef HTTP_OTA_H -#define HTTP_OTA_H - -/** - * @file ota_update.h - * @author Andrea Greco - * @brief File containing struct and function ota update - * File containing struct and function ota update. - * Ota use remote HTTP server in internet, for dowload Firmaware and sha256 file. - * Firmaware is compiled file stripped, contained in folder firmaware. - * Sha256 is a file that contains a sha256, of Firmaware. - * If enabled 256 is checked during firmaware download. - */ -#include "http_buffered_client.h" - -typedef enum { - // Keep this aligned with \ref HTTP_Client_State - OTA_DNS_LOOKUP_FALLIED = HTTP_DNS_LOOKUP_FALLIED,/**< DNS lookup has fallied */ - OTA_SOCKET_ALLOCATION_FALLIED = HTTP_SOCKET_ALLOCATION_FALLIED,/**< Impossible allocate required socket */ - OTA_SOCKET_CONNECTION_FALLIED = HTTP_SOCKET_CONNECTION_FALLIED,/**< Server unreachable, impossible connect */ - OTA_SHA_DONT_MATCH = HTTP_SHA_DONT_MATCH,/** Sha256 sum does not fit downloaded sha256 */ - OTA_REQUEST_SEND_FALLIED = HTTP_REQUEST_SEND_FALLIED,/**< Impossible send HTTP request */ - OTA_DOWLOAD_SIZE_NOT_MATCH = HTTP_DOWLOAD_SIZE_NOT_MATCH, /**< Dowload size don't match with server declared size */ - - // Ota error - OTA_ONE_SLOT_ONLY = 20,/**< rboot has only one slot configured, impossible switch it */ - OTA_FAIL_SET_NEW_SLOT = 21,/**< rboot cannot switch between rom */ - OTA_IMAGE_VERIFY_FALLIED = 22,/**< Dowloaded image binary checsum is fallied */ - OTA_UPDATE_DONE = 23, /**< Ota has completed upgrade process, all ready for system software reset */ - - OTA_HTTP_OK = 200,/** HTTP server has response 200, Ok */ - OTA_HTTP_NOTFOUND = 404,/** HTTP server has response 404, file not found */ -} OTA_err; - - -/** - * \brief Create ota info. - * Struct that contains all info for start ota. - */ -typedef struct { - const char *server; /**< Server domain */ - const char *port; /**< Server port */ - const char *binary_path; /**< Server Path dowload new update binary */ - const char *sha256_path; /**< Server Path of SHA256 sum for check binary, could be NULL, check will be skipped */ -} ota_info; - -/** - * \brief Start ota update. - * Start Ota update. - * Ota_info contains all information about file to download, port, server. - * \param ota_info_par ptr to ota info. - * In case of success, and ota update is right done, \ref finish_cb is called before ESP8266 reset. - * \return http server return Code, check out \ref HTTP_Client_State for all code. - */ -OTA_err ota_update(ota_info *ota_info_par); -#endif // ifndef HTTP_OTA_H diff --git a/extras/httpd/component.mk b/extras/httpd/component.mk deleted file mode 100644 index c93f8f9..0000000 --- a/extras/httpd/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/httpd - -# expected anyone using httpd includes it as 'httpd/httpd.h' -INC_DIRS += $(httpd_ROOT).. - -# args for passing into compile rule generation -httpd_SRC_DIR = $(httpd_ROOT) - -$(eval $(call component_compile_rules,httpd)) diff --git a/extras/httpd/fs.c b/extras/httpd/fs.c deleted file mode 100644 index 6faa628..0000000 --- a/extras/httpd/fs.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#include "lwip/opt.h" -#include "lwip/def.h" -#include "fs.h" -#include "fsdata.h" -#include - -/** Set this to 1 to include "fsdata_custom.c" instead of "fsdata.c" for the - * file system (to prevent changing the file included in CVS) */ -#ifndef HTTPD_USE_CUSTOM_FSDATA -#define HTTPD_USE_CUSTOM_FSDATA 0 -#endif - -#if HTTPD_USE_CUSTOM_FSDATA -#include "fsdata_custom.c" -#else /* HTTPD_USE_CUSTOM_FSDATA */ -#include "fsdata.c" -#endif /* HTTPD_USE_CUSTOM_FSDATA */ - -/*-----------------------------------------------------------------------------------*/ - -#if LWIP_HTTPD_CUSTOM_FILES -int fs_open_custom(struct fs_file *file, const char *name); -void fs_close_custom(struct fs_file *file); -#if LWIP_HTTPD_FS_ASYNC_READ -u8_t fs_canread_custom(struct fs_file *file); -u8_t fs_wait_read_custom(struct fs_file *file, fs_wait_cb callback_fn, void *callback_arg); -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ -#endif /* LWIP_HTTPD_CUSTOM_FILES */ - -/*-----------------------------------------------------------------------------------*/ -err_t -fs_open(struct fs_file *file, const char *name) -{ - const struct fsdata_file *f; - - if ((file == NULL) || (name == NULL)) { - return ERR_ARG; - } - -#if LWIP_HTTPD_CUSTOM_FILES - if (fs_open_custom(file, name)) { - file->is_custom_file = 1; - return ERR_OK; - } - file->is_custom_file = 0; -#endif /* LWIP_HTTPD_CUSTOM_FILES */ - - for (f = FS_ROOT; f != NULL; f = f->next) { - if (!strcmp(name, (char *)f->name)) { - file->data = (const char *)f->data; - file->len = f->len; - file->index = f->len; - file->pextension = NULL; - file->http_header_included = f->http_header_included; -#if HTTPD_PRECALCULATED_CHECKSUM - file->chksum_count = f->chksum_count; - file->chksum = f->chksum; -#endif /* HTTPD_PRECALCULATED_CHECKSUM */ -#if LWIP_HTTPD_FILE_STATE - file->state = fs_state_init(file, name); -#endif /* #if LWIP_HTTPD_FILE_STATE */ - return ERR_OK; - } - } - /* file not found */ - return ERR_VAL; -} - -/*-----------------------------------------------------------------------------------*/ -void -fs_close(struct fs_file *file) -{ -#if LWIP_HTTPD_CUSTOM_FILES - if (file->is_custom_file) { - fs_close_custom(file); - } -#endif /* LWIP_HTTPD_CUSTOM_FILES */ -#if LWIP_HTTPD_FILE_STATE - fs_state_free(file, file->state); -#endif /* #if LWIP_HTTPD_FILE_STATE */ - LWIP_UNUSED_ARG(file); -} -/*-----------------------------------------------------------------------------------*/ -#if LWIP_HTTPD_DYNAMIC_FILE_READ -#if LWIP_HTTPD_FS_ASYNC_READ -int -fs_read_async(struct fs_file *file, char *buffer, int count, fs_wait_cb callback_fn, void *callback_arg) -#else /* LWIP_HTTPD_FS_ASYNC_READ */ -int -fs_read(struct fs_file *file, char *buffer, int count) -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ -{ - int read; - - if(file->index == file->len) { - return FS_READ_EOF; - } -#if LWIP_HTTPD_FS_ASYNC_READ -#if LWIP_HTTPD_CUSTOM_FILES - if (!fs_canread_custom(file)) { - if (fs_wait_read_custom(file, callback_fn, callback_arg)) { - return FS_READ_DELAYED; - } - } -#else /* LWIP_HTTPD_CUSTOM_FILES */ - LWIP_UNUSED_ARG(callback_fn); - LWIP_UNUSED_ARG(callback_arg); -#endif /* LWIP_HTTPD_CUSTOM_FILES */ -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ - - read = file->len - file->index; - if(read > count) { - read = count; - } - - MEMCPY(buffer, (file->data + file->index), read); - file->index += read; - - return(read); -} -#endif /* LWIP_HTTPD_DYNAMIC_FILE_READ */ -/*-----------------------------------------------------------------------------------*/ -#if LWIP_HTTPD_FS_ASYNC_READ -int -fs_is_file_ready(struct fs_file *file, fs_wait_cb callback_fn, void *callback_arg) -{ - if (file != NULL) { -#if LWIP_HTTPD_FS_ASYNC_READ -#if LWIP_HTTPD_CUSTOM_FILES - if (!fs_canread_custom(file)) { - if (fs_wait_read_custom(file, callback_fn, callback_arg)) { - return 0; - } - } -#else /* LWIP_HTTPD_CUSTOM_FILES */ - LWIP_UNUSED_ARG(callback_fn); - LWIP_UNUSED_ARG(callback_arg); -#endif /* LWIP_HTTPD_CUSTOM_FILES */ -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ - } - return 1; -} -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ -/*-----------------------------------------------------------------------------------*/ -int -fs_bytes_left(struct fs_file *file) -{ - return file->len - file->index; -} diff --git a/extras/httpd/fs.h b/extras/httpd/fs.h deleted file mode 100644 index e8286a7..0000000 --- a/extras/httpd/fs.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __FS_H__ -#define __FS_H__ - -#include "lwip/opt.h" -#include "lwip/err.h" - -/** Set this to 1 and provide the functions: - * - "int fs_open_custom(struct fs_file *file, const char *name)" - * Called first for every opened file to allow opening files - * that are not included in fsdata(_custom).c - * - "void fs_close_custom(struct fs_file *file)" - * Called to free resources allocated by fs_open_custom(). - */ -#ifndef LWIP_HTTPD_CUSTOM_FILES -#define LWIP_HTTPD_CUSTOM_FILES 0 -#endif - -/** Set this to 1 to support fs_read() to dynamically read file data. - * Without this (default=off), only one-block files are supported, - * and the contents must be ready after fs_open(). - */ -#ifndef LWIP_HTTPD_DYNAMIC_FILE_READ -#define LWIP_HTTPD_DYNAMIC_FILE_READ 0 -#endif - -/** Set this to 1 to include an application state argument per file - * that is opened. This allows to keep a state per connection/file. - */ -#ifndef LWIP_HTTPD_FILE_STATE -#define LWIP_HTTPD_FILE_STATE 0 -#endif - -/** HTTPD_PRECALCULATED_CHECKSUM==1: include precompiled checksums for - * predefined (MSS-sized) chunks of the files to prevent having to calculate - * the checksums at runtime. */ -#ifndef HTTPD_PRECALCULATED_CHECKSUM -#define HTTPD_PRECALCULATED_CHECKSUM 0 -#endif - -/** LWIP_HTTPD_FS_ASYNC_READ==1: support asynchronous read operations - * (fs_read_async returns FS_READ_DELAYED and calls a callback when finished). - */ -#ifndef LWIP_HTTPD_FS_ASYNC_READ -#define LWIP_HTTPD_FS_ASYNC_READ 0 -#endif - -#define FS_READ_EOF -1 -#define FS_READ_DELAYED -2 - -#if HTTPD_PRECALCULATED_CHECKSUM -struct fsdata_chksum { - u32_t offset; - u16_t chksum; - u16_t len; -}; -#endif /* HTTPD_PRECALCULATED_CHECKSUM */ - -struct fs_file { - const char *data; - int len; - int index; - void *pextension; -#if HTTPD_PRECALCULATED_CHECKSUM - const struct fsdata_chksum *chksum; - u16_t chksum_count; -#endif /* HTTPD_PRECALCULATED_CHECKSUM */ - u8_t http_header_included; -#if LWIP_HTTPD_CUSTOM_FILES - u8_t is_custom_file; -#endif /* LWIP_HTTPD_CUSTOM_FILES */ -#if LWIP_HTTPD_FILE_STATE - void *state; -#endif /* LWIP_HTTPD_FILE_STATE */ -}; - -#if LWIP_HTTPD_FS_ASYNC_READ -typedef void (*fs_wait_cb)(void *arg); -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ - -err_t fs_open(struct fs_file *file, const char *name); -void fs_close(struct fs_file *file); -#if LWIP_HTTPD_DYNAMIC_FILE_READ -#if LWIP_HTTPD_FS_ASYNC_READ -int fs_read_async(struct fs_file *file, char *buffer, int count, fs_wait_cb callback_fn, void *callback_arg); -#else /* LWIP_HTTPD_FS_ASYNC_READ */ -int fs_read(struct fs_file *file, char *buffer, int count); -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ -#endif /* LWIP_HTTPD_DYNAMIC_FILE_READ */ -#if LWIP_HTTPD_FS_ASYNC_READ -int fs_is_file_ready(struct fs_file *file, fs_wait_cb callback_fn, void *callback_arg); -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ -int fs_bytes_left(struct fs_file *file); - -#if LWIP_HTTPD_FILE_STATE -/** This user-defined function is called when a file is opened. */ -void *fs_state_init(struct fs_file *file, const char *name); -/** This user-defined function is called when a file is closed. */ -void fs_state_free(struct fs_file *file, void *state); -#endif /* #if LWIP_HTTPD_FILE_STATE */ - -#endif /* __FS_H__ */ diff --git a/extras/httpd/fsdata.h b/extras/httpd/fsdata.h deleted file mode 100644 index de1d259..0000000 --- a/extras/httpd/fsdata.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __FSDATA_H__ -#define __FSDATA_H__ - -#include "lwip/opt.h" -#include "fs.h" - -struct fsdata_file { - const struct fsdata_file *next; - const unsigned char *name; - const unsigned char *data; - int len; - u8_t http_header_included; -#if HTTPD_PRECALCULATED_CHECKSUM - u16_t chksum_count; - const struct fsdata_chksum *chksum; -#endif /* HTTPD_PRECALCULATED_CHECKSUM */ -}; - -#endif /* __FSDATA_H__ */ diff --git a/extras/httpd/httpd.c b/extras/httpd/httpd.c deleted file mode 100644 index fcbc290..0000000 --- a/extras/httpd/httpd.c +++ /dev/null @@ -1,2754 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * Simon Goldschmidt - * - */ - -/* This httpd supports for a - * rudimentary server-side-include facility which will replace tags of the form - * in any file whose extension is .shtml, .shtm or .ssi with - * strings provided by an include handler whose pointer is provided to the - * module via function http_set_ssi_handler(). - * Additionally, a simple common - * gateway interface (CGI) handling mechanism has been added to allow clients - * to hook functions to particular request URIs. - * - * To enable SSI support, define label LWIP_HTTPD_SSI in lwipopts.h. - * To enable CGI support, define label LWIP_HTTPD_CGI in lwipopts.h. - * - * By default, the server assumes that HTTP headers are already present in - * each file stored in the file system. By defining LWIP_HTTPD_DYNAMIC_HEADERS in - * lwipopts.h, this behavior can be changed such that the server inserts the - * headers automatically based on the extension of the file being served. If - * this mode is used, be careful to ensure that the file system image used - * does not already contain the header information. - * - * File system images without headers can be created using the makefsfile - * tool with the -h command line option. - * - * - * Notes about valid SSI tags - * -------------------------- - * - * The following assumptions are made about tags used in SSI markers: - * - * 1. No tag may contain '-' or whitespace characters within the tag name. - * 2. Whitespace is allowed between the tag leadin "". - * 3. The maximum tag name length is LWIP_HTTPD_MAX_TAG_NAME_LEN, currently 8 characters. - * - * Notes on CGI usage - * ------------------ - * - * The simple CGI support offered here works with GET method requests only - * and can handle up to 16 parameters encoded into the URI. The handler - * function may not write directly to the HTTP output but must return a - * filename that the HTTP server will send to the browser as a response to - * the incoming CGI request. - * - * - * - * The list of supported file types is quite short, so if makefsdata complains - * about an unknown extension, make sure to add it (and its doctype) to - * the 'g_psHTTPHeaders' list. - */ -#include "httpd.h" -#include "lwip/debug.h" -#include "lwip/stats.h" -#include "httpd_structs.h" -#include "lwip/tcp.h" -#include "fs.h" - -#include -#include - -#if LWIP_TCP - -#ifndef HTTPD_DEBUG -#define HTTPD_DEBUG LWIP_DBG_OFF -#endif - -/** Set this to 1 and add the next line to lwippools.h to use a memp pool - * for allocating struct http_state instead of the heap: - * - * LWIP_MEMPOOL(HTTPD_STATE, 20, 100, "HTTPD_STATE") - */ -#ifndef HTTPD_USE_MEM_POOL -#define HTTPD_USE_MEM_POOL 0 -#endif - -/** The server port for HTTPD to use */ -#ifndef HTTPD_SERVER_PORT -#define HTTPD_SERVER_PORT 80 -#endif - -/** Maximum retries before the connection is aborted/closed. - * - number of times pcb->poll is called -> default is 4*500ms = 2s; - * - reset when pcb->sent is called - */ -#ifndef HTTPD_MAX_RETRIES -#define HTTPD_MAX_RETRIES 4 -#endif - -/** The poll delay is X*500ms */ -#ifndef HTTPD_POLL_INTERVAL -#define HTTPD_POLL_INTERVAL 4 -#endif - -/** Priority for tcp pcbs created by HTTPD (very low by default). - * Lower priorities get killed first when running out of memroy. - */ -#ifndef HTTPD_TCP_PRIO -#define HTTPD_TCP_PRIO TCP_PRIO_MIN -#endif - -/** Set this to 1 to enabled timing each file sent */ -#ifndef LWIP_HTTPD_TIMING -#define LWIP_HTTPD_TIMING 0 -#endif -#ifndef HTTPD_DEBUG_TIMING -#define HTTPD_DEBUG_TIMING LWIP_DBG_OFF -#endif - -/** Set this to 1 on platforms where strnstr is not available */ -#ifndef LWIP_HTTPD_STRNSTR_PRIVATE -#define LWIP_HTTPD_STRNSTR_PRIVATE 0 -#endif - -/** Set this to one to show error pages when parsing a request fails instead - of simply closing the connection. */ -#ifndef LWIP_HTTPD_SUPPORT_EXTSTATUS -#define LWIP_HTTPD_SUPPORT_EXTSTATUS 0 -#endif - -/** Set this to 0 to drop support for HTTP/0.9 clients (to save some bytes) */ -#ifndef LWIP_HTTPD_SUPPORT_V09 -#define LWIP_HTTPD_SUPPORT_V09 1 -#endif - -/** Set this to 1 to enable HTTP/1.1 persistent connections. - * ATTENTION: If the generated file system includes HTTP headers, these must - * include the "Connection: keep-alive" header (pass argument "-11" to makefsdata). - */ -#ifndef LWIP_HTTPD_SUPPORT_11_KEEPALIVE -#define LWIP_HTTPD_SUPPORT_11_KEEPALIVE 0 -#endif - -/** Set this to 1 to support HTTP request coming in in multiple packets/pbufs */ -#ifndef LWIP_HTTPD_SUPPORT_REQUESTLIST -#define LWIP_HTTPD_SUPPORT_REQUESTLIST 1 -#endif - -#if LWIP_HTTPD_SUPPORT_REQUESTLIST -/** Number of rx pbufs to enqueue to parse an incoming request (up to the first - newline) */ -#ifndef LWIP_HTTPD_REQ_QUEUELEN -#define LWIP_HTTPD_REQ_QUEUELEN 5 -#endif - -/** Number of (TCP payload-) bytes (in pbufs) to enqueue to parse and incoming - request (up to the first double-newline) */ -#ifndef LWIP_HTTPD_REQ_BUFSIZE -#define LWIP_HTTPD_REQ_BUFSIZE LWIP_HTTPD_MAX_REQ_LENGTH -#endif - -/** Defines the maximum length of a HTTP request line (up to the first CRLF, - copied from pbuf into this a global buffer when pbuf- or packet-queues - are received - otherwise the input pbuf is used directly) */ -#ifndef LWIP_HTTPD_MAX_REQ_LENGTH -#define LWIP_HTTPD_MAX_REQ_LENGTH LWIP_MIN(1023, (LWIP_HTTPD_REQ_QUEUELEN * PBUF_POOL_BUFSIZE)) -#endif -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - -/** Maximum length of the filename to send as response to a POST request, - * filled in by the application when a POST is finished. - */ -#ifndef LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN -#define LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN 63 -#endif - -/** Set this to 0 to not send the SSI tag (default is on, so the tag will - * be sent in the HTML page */ -#ifndef LWIP_HTTPD_SSI_INCLUDE_TAG -#define LWIP_HTTPD_SSI_INCLUDE_TAG 1 -#endif - -/** Set this to 1 to call tcp_abort when tcp_close fails with memory error. - * This can be used to prevent consuming all memory in situations where the - * HTTP server has low priority compared to other communication. */ -#ifndef LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR -#define LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR 0 -#endif - -/** Set this to 1 to kill the oldest connection when running out of - * memory for 'struct http_state' or 'struct http_ssi_state'. - * ATTENTION: This puts all connections on a linked list, so may be kind of slow. - */ -#ifndef LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED -#define LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED 0 -#endif - -/** Minimum length for a valid HTTP/0.9 request: "GET /\r\n" -> 7 bytes */ -#define MIN_REQ_LEN 7 - -#define CRLF "\r\n" -#define HTTP11_CONNECTIONKEEPALIVE "Connection: keep-alive" - -#if LWIP_HTTPD_SSI -#define LWIP_HTTPD_IS_SSI(hs) ((hs)->ssi) -#else /* LWIP_HTTPD_SSI */ -#define LWIP_HTTPD_IS_SSI(hs) 0 -#endif /* LWIP_HTTPD_SSI */ - -/** These defines check whether tcp_write has to copy data or not */ - -/** This was TI's check whether to let TCP copy data or not -#define HTTP_IS_DATA_VOLATILE(hs) ((hs->file < (char *)0x20000000) ? 0 : TCP_WRITE_FLAG_COPY)*/ -#ifndef HTTP_IS_DATA_VOLATILE -#if LWIP_HTTPD_SSI -/* Copy for SSI files, no copy for non-SSI files */ -#define HTTP_IS_DATA_VOLATILE(hs) ((hs)->ssi ? TCP_WRITE_FLAG_COPY : 0) -#else /* LWIP_HTTPD_SSI */ -/** Default: don't copy if the data is sent from file-system directly */ -#define HTTP_IS_DATA_VOLATILE(hs) (((hs->file != NULL) && (hs->handle != NULL) && (hs->file == \ - (char*)hs->handle->data + hs->handle->len - hs->left)) \ - ? 0 : TCP_WRITE_FLAG_COPY) -#endif /* LWIP_HTTPD_SSI */ -#endif - -/** Default: headers are sent from ROM */ -#ifndef HTTP_IS_HDR_VOLATILE -#define HTTP_IS_HDR_VOLATILE(hs, ptr) 0 -#endif - -#if LWIP_HTTPD_SSI -/** Default: Tags are sent from struct http_state and are therefore volatile */ -#ifndef HTTP_IS_TAG_VOLATILE -#define HTTP_IS_TAG_VOLATILE(ptr) TCP_WRITE_FLAG_COPY -#endif -#endif /* LWIP_HTTPD_SSI */ - -/* Return values for http_send_*() */ -#define HTTP_DATA_TO_SEND_BREAK 2 -#define HTTP_DATA_TO_SEND_CONTINUE 1 -#define HTTP_NO_DATA_TO_SEND 0 - -#if HTTPD_USE_MEM_POOL -#define HTTP_ALLOC_SSI_STATE() (struct http_ssi_state *)memp_malloc(MEMP_HTTPD_SSI_STATE) -#define HTTP_ALLOC_HTTP_STATE() (struct http_state *)memp_malloc(MEMP_HTTPD_STATE) -#else /* HTTPD_USE_MEM_POOL */ -#define HTTP_ALLOC_SSI_STATE() (struct http_ssi_state *)mem_malloc(sizeof(struct http_ssi_state)) -#define HTTP_ALLOC_HTTP_STATE() (struct http_state *)mem_malloc(sizeof(struct http_state)) -#endif /* HTTPD_USE_MEM_POOL */ - -#include -#include -#include "strcasestr.h" - -static const char WS_HEADER[] = "Upgrade: websocket\r\n"; -static const char WS_GUID[] = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; -static const char WS_RSP[] = "HTTP/1.1 101 Switching Protocols\r\n" \ - "Upgrade: websocket\r\n" \ - "Connection: Upgrade\r\n" \ - "Sec-WebSocket-Accept: "; - -/* Response buffer length (30 = base64 encoded key max length) */ -#define WS_BUF_LEN (sizeof(WS_RSP) + sizeof(CRLF CRLF) + 30 - 2) - -/* WebSocket timeout: X*(HTTPD_POLL_INTERVAL), default is 10*4*500ms = 20s */ -#ifndef WS_TIMEOUT -#define WS_TIMEOUT 10 -#endif - -/* Callback functions */ -static tWsHandler websocket_cb = NULL; -static tWsOpenHandler websocket_open_cb = NULL; - -typedef struct -{ - const char *name; - u8_t shtml; -} default_filename; - -const default_filename g_psDefaultFilenames[] = { - {"/index.shtml", 1 }, - {"/index.ssi", 1 }, - {"/index.shtm", 1 }, - {"/index.html", 0 }, - {"/index.htm", 0 } -}; - -#define NUM_DEFAULT_FILENAMES (sizeof(g_psDefaultFilenames) / \ - sizeof(default_filename)) - -#if LWIP_HTTPD_SUPPORT_REQUESTLIST -/** HTTP request is copied here from pbufs for simple parsing */ -static char httpd_req_buf[LWIP_HTTPD_MAX_REQ_LENGTH+1]; -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - -#if LWIP_HTTPD_SUPPORT_POST -/** Filename for response file to send when POST is finished */ -static char http_post_response_filename[LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN+1]; -#endif /* LWIP_HTTPD_SUPPORT_POST */ - -#if LWIP_HTTPD_DYNAMIC_HEADERS -/* The number of individual strings that comprise the headers sent before each - * requested file. - */ -#define NUM_FILE_HDR_STRINGS 3 -#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ - -#if LWIP_HTTPD_SSI - -#define HTTPD_LAST_TAG_PART 0xFFFF - -enum tag_check_state { - TAG_NONE, /* Not processing an SSI tag */ - TAG_LEADIN, /* Tag lead in "" being processed */ - TAG_SENDING /* Sending tag replacement string */ -}; - -struct http_ssi_state { - const char *parsed; /* Pointer to the first unparsed byte in buf. */ -#if !LWIP_HTTPD_SSI_INCLUDE_TAG - const char *tag_started;/* Pointer to the first opening '<' of the tag. */ -#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG */ - const char *tag_end; /* Pointer to char after the closing '>' of the tag. */ - u32_t parse_left; /* Number of unparsed bytes in buf. */ - u16_t tag_index; /* Counter used by tag parsing state machine */ - u16_t tag_insert_len; /* Length of insert in string tag_insert */ -#if LWIP_HTTPD_SSI_MULTIPART - u16_t tag_part; /* Counter passed to and changed by tag insertion function to insert multiple times */ -#endif /* LWIP_HTTPD_SSI_MULTIPART */ - u8_t tag_name_len; /* Length of the tag name in string tag_name */ - char tag_name[LWIP_HTTPD_MAX_TAG_NAME_LEN + 1]; /* Last tag name extracted */ - char tag_insert[LWIP_HTTPD_MAX_TAG_INSERT_LEN + 1]; /* Insert string for tag_name */ - enum tag_check_state tag_state; /* State of the tag processor */ -}; -#endif /* LWIP_HTTPD_SSI */ - -struct http_state { -#if LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED - struct http_state *next; -#endif /* LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED */ - struct fs_file file_handle; - struct fs_file *handle; - char *file; /* Pointer to first unsent byte in buf. */ - - u8_t is_websocket; - - struct tcp_pcb *pcb; -#if LWIP_HTTPD_SUPPORT_REQUESTLIST - struct pbuf *req; -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - -#if LWIP_HTTPD_DYNAMIC_FILE_READ - char *buf; /* File read buffer. */ - int buf_len; /* Size of file read buffer, buf. */ -#endif /* LWIP_HTTPD_DYNAMIC_FILE_READ */ - u32_t left; /* Number of unsent bytes in buf. */ - u8_t retries; -#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE - u8_t keepalive; -#endif /* LWIP_HTTPD_SUPPORT_11_KEEPALIVE */ -#if LWIP_HTTPD_SSI - struct http_ssi_state *ssi; -#endif /* LWIP_HTTPD_SSI */ -#if LWIP_HTTPD_CGI - char *params[LWIP_HTTPD_MAX_CGI_PARAMETERS]; /* Params extracted from the request URI */ - char *param_vals[LWIP_HTTPD_MAX_CGI_PARAMETERS]; /* Values for each extracted param */ -#endif /* LWIP_HTTPD_CGI */ -#if LWIP_HTTPD_DYNAMIC_HEADERS - const char *hdrs[NUM_FILE_HDR_STRINGS]; /* HTTP headers to be sent. */ - u16_t hdr_pos; /* The position of the first unsent header byte in the - current string */ - u16_t hdr_index; /* The index of the hdr string currently being sent. */ -#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ -#if LWIP_HTTPD_TIMING - u32_t time_started; -#endif /* LWIP_HTTPD_TIMING */ -#if LWIP_HTTPD_SUPPORT_POST - u32_t post_content_len_left; -#if LWIP_HTTPD_POST_MANUAL_WND - u32_t unrecved_bytes; - u8_t no_auto_wnd; - u8_t post_finished; -#endif /* LWIP_HTTPD_POST_MANUAL_WND */ -#endif /* LWIP_HTTPD_SUPPORT_POST*/ -}; - -static err_t http_close_conn(struct tcp_pcb *pcb, struct http_state *hs); -static err_t http_close_or_abort_conn(struct tcp_pcb *pcb, struct http_state *hs, u8_t abort_conn); -static err_t http_find_file(struct http_state *hs, const char *uri, int is_09); -static err_t http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const char *uri, u8_t tag_check); -static err_t http_poll(void *arg, struct tcp_pcb *pcb); - -static err_t websocket_send_close(struct tcp_pcb *pcb); - -#if LWIP_HTTPD_FS_ASYNC_READ -static void http_continue(void *connection); -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ - -#if LWIP_HTTPD_SSI -/* SSI insert handler function pointer. */ -tSSIHandler g_pfnSSIHandler = NULL; -int g_iNumTags = 0; -const char **g_ppcTags = NULL; - -#define LEN_TAG_LEAD_IN 5 -const char * const g_pcTagLeadIn = ""; -#endif /* LWIP_HTTPD_SSI */ - -#if LWIP_HTTPD_CGI -/* CGI handler information */ -const tCGI *g_pCGIs; -int g_iNumCGIs; -#endif /* LWIP_HTTPD_CGI */ - -#if LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED -/** global list of active HTTP connections, use to kill the oldest when - running out of memory */ -static struct http_state *http_connections; -#endif /* LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED */ - -#if LWIP_HTTPD_STRNSTR_PRIVATE -/** Like strstr but does not need 'buffer' to be NULL-terminated */ -static char* -strnstr(const char* buffer, const char* token, size_t n) -{ - const char* p; - int tokenlen = (int)strlen(token); - if (tokenlen == 0) { - return (char *)buffer; - } - for (p = buffer; *p && (p + tokenlen <= buffer + n); p++) { - if ((*p == *token) && (strncmp(p, token, tokenlen) == 0)) { - return (char *)p; - } - } - return NULL; -} -#endif /* LWIP_HTTPD_STRNSTR_PRIVATE */ - -#if LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED -static void -http_kill_oldest_connection(u8_t ssi_required) -{ - struct http_state *hs = http_connections; - struct http_state *hs_free_next = NULL; - while(hs && hs->next) { - if (ssi_required) { - if (hs->next->ssi != NULL) { - hs_free_next = hs; - } - } else { - hs_free_next = hs; - } - hs = hs->next; - } - if (hs_free_next != NULL) { - LWIP_ASSERT("hs_free_next->next != NULL", hs_free_next->next != NULL); - LWIP_ASSERT("hs_free_next->next->pcb != NULL", hs_free_next->next->pcb != NULL); - /* send RST when killing a connection because of memory shortage */ - http_close_or_abort_conn(hs_free_next->next->pcb, hs_free_next->next, 1); /* this also unlinks the http_state from the list */ - } -} -#endif /* LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED */ - -#if LWIP_HTTPD_SSI -/** Allocate as struct http_ssi_state. */ -static struct http_ssi_state* -http_ssi_state_alloc(void) -{ - struct http_ssi_state *ret = HTTP_ALLOC_SSI_STATE(); -#if LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED - if (ret == NULL) { - http_kill_oldest_connection(1); - ret = HTTP_ALLOC_SSI_STATE(); - } -#endif /* LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED */ - if (ret != NULL) { - memset(ret, 0, sizeof(struct http_ssi_state)); - } - return ret; -} - -/** Free a struct http_ssi_state. */ -static void -http_ssi_state_free(struct http_ssi_state *ssi) -{ - if (ssi != NULL) { -#if HTTPD_USE_MEM_POOL - memp_free(MEMP_HTTPD_SSI_STATE, ssi); -#else /* HTTPD_USE_MEM_POOL */ - mem_free(ssi); -#endif /* HTTPD_USE_MEM_POOL */ - } -} -#endif /* LWIP_HTTPD_SSI */ - -/** Initialize a struct http_state. - */ -static void -http_state_init(struct http_state* hs) -{ - /* Initialize the structure. */ - memset(hs, 0, sizeof(struct http_state)); -#if LWIP_HTTPD_DYNAMIC_HEADERS - /* Indicate that the headers are not yet valid */ - hs->hdr_index = NUM_FILE_HDR_STRINGS; -#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ -} - -/** Allocate a struct http_state. */ -static struct http_state* -http_state_alloc(void) -{ - struct http_state *ret = HTTP_ALLOC_HTTP_STATE(); -#if LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED - if (ret == NULL) { - http_kill_oldest_connection(0); - ret = HTTP_ALLOC_HTTP_STATE(); - } -#endif /* LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED */ - if (ret != NULL) { - http_state_init(ret); -#if LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED - /* add the connection to the list */ - if (http_connections == NULL) { - http_connections = ret; - } else { - struct http_state *last; - for(last = http_connections; last->next != NULL; last = last->next); - LWIP_ASSERT("last != NULL", last != NULL); - last->next = ret; - } -#endif /* LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED */ - } - return ret; -} - -/** Free a struct http_state. - * Also frees the file data if dynamic. - */ -static void -http_state_eof(struct http_state *hs) -{ - if(hs->handle) { -#if LWIP_HTTPD_TIMING - u32_t ms_needed = sys_now() - hs->time_started; - u32_t needed = LWIP_MAX(1, (ms_needed/100)); - LWIP_DEBUGF(HTTPD_DEBUG_TIMING, ("httpd: needed %"U32_F" ms to send file of %d bytes -> %"U32_F" bytes/sec\n", - ms_needed, hs->handle->len, ((((u32_t)hs->handle->len) * 10) / needed))); -#endif /* LWIP_HTTPD_TIMING */ - fs_close(hs->handle); - hs->handle = NULL; - } -#if LWIP_HTTPD_DYNAMIC_FILE_READ - if (hs->buf != NULL) { - mem_free(hs->buf); - hs->buf = NULL; - } -#endif /* LWIP_HTTPD_DYNAMIC_FILE_READ */ -#if LWIP_HTTPD_SSI - if (hs->ssi) { - http_ssi_state_free(hs->ssi); - hs->ssi = NULL; - } -#endif /* LWIP_HTTPD_SSI */ -} - -/** Free a struct http_state. - * Also frees the file data if dynamic. - */ -static void -http_state_free(struct http_state *hs) -{ - if (hs != NULL) { - http_state_eof(hs); -#if LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED - /* take the connection off the list */ - if (http_connections) { - if (http_connections == hs) { - http_connections = hs->next; - } else { - struct http_state *last; - for(last = http_connections; last->next != NULL; last = last->next) { - if (last->next == hs) { - last->next = hs->next; - break; - } - } - } - } -#endif /* LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED */ -#if HTTPD_USE_MEM_POOL - memp_free(MEMP_HTTPD_STATE, hs); -#else /* HTTPD_USE_MEM_POOL */ - mem_free(hs); -#endif /* HTTPD_USE_MEM_POOL */ - } -} - -/** Call tcp_write() in a loop trying smaller and smaller length - * - * @param pcb tcp_pcb to send - * @param ptr Data to send - * @param length Length of data to send (in/out: on return, contains the - * amount of data sent) - * @param apiflags directly passed to tcp_write - * @return the return value of tcp_write - */ -static err_t -http_write(struct tcp_pcb *pcb, const void* ptr, u16_t *length, u8_t apiflags) -{ - u16_t len; - err_t err; - LWIP_ASSERT("length != NULL", length != NULL); - len = *length; - if (len == 0) { - return ERR_OK; - } - do { - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Trying to send %d bytes\n", len)); - err = tcp_write(pcb, ptr, len, apiflags); - if (err == ERR_MEM) { - if ((tcp_sndbuf(pcb) == 0) || - (tcp_sndqueuelen(pcb) >= TCP_SND_QUEUELEN)) { - /* no need to try smaller sizes */ - len = 1; - } else { - len /= 2; - } - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, - ("Send failed, trying less (%d bytes)\n", len)); - } - } while ((err == ERR_MEM) && (len > 1)); - - if (err == ERR_OK) { - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Sent %d bytes\n", len)); - } else { - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Send failed with err %d (\"%s\")\n", err, lwip_strerr(err))); - } - - *length = len; - return err; -} - -/** - * The connection shall be actively closed (using RST to close from fault states). - * Reset the sent- and recv-callbacks. - * - * @param pcb the tcp pcb to reset callbacks - * @param hs connection state to free - */ -static err_t -http_close_or_abort_conn(struct tcp_pcb *pcb, struct http_state *hs, u8_t abort_conn) -{ - err_t err; - LWIP_DEBUGF(HTTPD_DEBUG, ("Closing connection %p\n", (void*)pcb)); - -#if LWIP_HTTPD_SUPPORT_POST - if (hs != NULL) { - if ((hs->post_content_len_left != 0) -#if LWIP_HTTPD_POST_MANUAL_WND - || ((hs->no_auto_wnd != 0) && (hs->unrecved_bytes != 0)) -#endif /* LWIP_HTTPD_POST_MANUAL_WND */ - ) { - /* make sure the post code knows that the connection is closed */ - http_post_response_filename[0] = 0; - httpd_post_finished(hs, http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN); - } - } -#endif /* LWIP_HTTPD_SUPPORT_POST*/ - - if (hs != NULL) { - if (hs->is_websocket) - websocket_send_close(pcb); - - if (hs->req != NULL) { - /* this should not happen */ - LWIP_DEBUGF(HTTPD_DEBUG, ("Freeing buffer (malformed request?)\n")); - pbuf_free(hs->req); - hs->req = NULL; - } - } - - tcp_arg(pcb, NULL); - tcp_recv(pcb, NULL); - tcp_err(pcb, NULL); - tcp_poll(pcb, NULL, 0); - tcp_sent(pcb, NULL); - if (hs != NULL) { - http_state_free(hs); - } - - if (abort_conn) { - tcp_abort(pcb); - return ERR_OK; - } - err = tcp_close(pcb); - if (err != ERR_OK) { - LWIP_DEBUGF(HTTPD_DEBUG, ("Error %d closing %p\n", err, (void*)pcb)); - /* error closing, try again later in poll */ - tcp_poll(pcb, http_poll, HTTPD_POLL_INTERVAL); - } - return err; -} - -/** - * The connection shall be actively closed. - * Reset the sent- and recv-callbacks. - * - * @param pcb the tcp pcb to reset callbacks - * @param hs connection state to free - */ -static err_t -http_close_conn(struct tcp_pcb *pcb, struct http_state *hs) -{ - return http_close_or_abort_conn(pcb, hs, 0); -} - -/** End of file: either close the connection (Connection: close) or - * close the file (Connection: keep-alive) - */ -static void -http_eof(struct tcp_pcb *pcb, struct http_state *hs) -{ - /* HTTP/1.1 persistent connection? (Not supported for SSI) */ -#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE - if (hs->keepalive && !LWIP_HTTPD_IS_SSI(hs)) { - http_state_eof(hs); - http_state_init(hs); - hs->keepalive = 1; - } else -#endif /* LWIP_HTTPD_SUPPORT_11_KEEPALIVE */ - if (hs->is_websocket) { - http_state_eof(hs); - http_state_init(hs); - hs->is_websocket = 1; - } else { - http_close_conn(pcb, hs); - } -} - -#if LWIP_HTTPD_CGI -/** - * Extract URI parameters from the parameter-part of an URI in the form - * "test.cgi?x=y" @todo: better explanation! - * Pointers to the parameters are stored in hs->param_vals. - * - * @param hs http connection state - * @param params pointer to the NULL-terminated parameter string from the URI - * @return number of parameters extracted - */ -static int -extract_uri_parameters(struct http_state *hs, char *params) -{ - char *pair; - char *equals; - int loop; - - /* If we have no parameters at all, return immediately. */ - if(!params || (params[0] == '\0')) { - return(0); - } - - /* Get a pointer to our first parameter */ - pair = params; - - /* Parse up to LWIP_HTTPD_MAX_CGI_PARAMETERS from the passed string and ignore the - * remainder (if any) */ - for(loop = 0; (loop < LWIP_HTTPD_MAX_CGI_PARAMETERS) && pair; loop++) { - - /* Save the name of the parameter */ - hs->params[loop] = pair; - - /* Remember the start of this name=value pair */ - equals = pair; - - /* Find the start of the next name=value pair and replace the delimiter - * with a 0 to terminate the previous pair string. */ - pair = strchr(pair, '&'); - if(pair) { - *pair = '\0'; - pair++; - } else { - /* We didn't find a new parameter so find the end of the URI and - * replace the space with a '\0' */ - pair = strchr(equals, ' '); - if(pair) { - *pair = '\0'; - } - - /* Revert to NULL so that we exit the loop as expected. */ - pair = NULL; - } - - /* Now find the '=' in the previous pair, replace it with '\0' and save - * the parameter value string. */ - equals = strchr(equals, '='); - if(equals) { - *equals = '\0'; - hs->param_vals[loop] = equals + 1; - } else { - hs->param_vals[loop] = NULL; - } - } - - return loop; -} -#endif /* LWIP_HTTPD_CGI */ - -#if LWIP_HTTPD_SSI -/** - * Insert a tag (found in an shtml in the form of "" into the file. - * The tag's name is stored in ssi->tag_name (NULL-terminated), the replacement - * should be written to hs->tag_insert (up to a length of LWIP_HTTPD_MAX_TAG_INSERT_LEN). - * The amount of data written is stored to ssi->tag_insert_len. - * - * @todo: return tag_insert_len - maybe it can be removed from struct http_state? - * - * @param hs http connection state - */ -static void -get_tag_insert(struct http_state *hs) -{ - int loop; - size_t len; - struct http_ssi_state *ssi; - LWIP_ASSERT("hs != NULL", hs != NULL); - ssi = hs->ssi; - LWIP_ASSERT("ssi != NULL", ssi != NULL); -#if LWIP_HTTPD_SSI_MULTIPART - u16_t current_tag_part = ssi->tag_part; - ssi->tag_part = HTTPD_LAST_TAG_PART; -#endif /* LWIP_HTTPD_SSI_MULTIPART */ - - if(g_pfnSSIHandler && g_ppcTags && g_iNumTags) { - - /* Find this tag in the list we have been provided. */ - for(loop = 0; loop < g_iNumTags; loop++) { - if(strcmp(ssi->tag_name, g_ppcTags[loop]) == 0) { - ssi->tag_insert_len = g_pfnSSIHandler(loop, ssi->tag_insert, - LWIP_HTTPD_MAX_TAG_INSERT_LEN -#if LWIP_HTTPD_SSI_MULTIPART - , current_tag_part, &ssi->tag_part -#endif /* LWIP_HTTPD_SSI_MULTIPART */ -#if LWIP_HTTPD_FILE_STATE - , hs->handle->state -#endif /* LWIP_HTTPD_FILE_STATE */ - ); - return; - } - } - } - - /* If we drop out, we were asked to serve a page which contains tags that - * we don't have a handler for. Merely echo back the tags with an error - * marker. */ -#define UNKNOWN_TAG1_TEXT "***UNKNOWN TAG " -#define UNKNOWN_TAG1_LEN 18 -#define UNKNOWN_TAG2_TEXT "***" -#define UNKNOWN_TAG2_LEN 7 - len = LWIP_MIN(strlen(ssi->tag_name), - LWIP_HTTPD_MAX_TAG_INSERT_LEN - (UNKNOWN_TAG1_LEN + UNKNOWN_TAG2_LEN)); - MEMCPY(ssi->tag_insert, UNKNOWN_TAG1_TEXT, UNKNOWN_TAG1_LEN); - MEMCPY(&ssi->tag_insert[UNKNOWN_TAG1_LEN], ssi->tag_name, len); - MEMCPY(&ssi->tag_insert[UNKNOWN_TAG1_LEN + len], UNKNOWN_TAG2_TEXT, UNKNOWN_TAG2_LEN); - ssi->tag_insert[UNKNOWN_TAG1_LEN + len + UNKNOWN_TAG2_LEN] = 0; - - len = strlen(ssi->tag_insert); - LWIP_ASSERT("len <= 0xffff", len <= 0xffff); - ssi->tag_insert_len = (u16_t)len; -} -#endif /* LWIP_HTTPD_SSI */ - -#if LWIP_HTTPD_DYNAMIC_HEADERS -/** - * Generate the relevant HTTP headers for the given filename and write - * them into the supplied buffer. - */ -static void -get_http_headers(struct http_state *pState, char *pszURI) -{ - unsigned int iLoop; - char *pszWork; - char *pszExt; - char *pszVars; - - /* Ensure that we initialize the loop counter. */ - iLoop = 0; - - /* In all cases, the second header we send is the server identification - so set it here. */ - pState->hdrs[1] = g_psHTTPHeaderStrings[HTTP_HDR_SERVER]; - - /* Is this a normal file or the special case we use to send back the - default "404: Page not found" response? */ - if (pszURI == NULL) { - pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND]; - pState->hdrs[2] = g_psHTTPHeaderStrings[DEFAULT_404_HTML]; - - /* Set up to send the first header string. */ - pState->hdr_index = 0; - pState->hdr_pos = 0; - return; - } else { - /* We are dealing with a particular filename. Look for one other - special case. We assume that any filename with "404" in it must be - indicative of a 404 server error whereas all other files require - the 200 OK header. */ - if (strstr(pszURI, "404")) { - pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND]; - } else if (strstr(pszURI, "400")) { - pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_BAD_REQUEST]; - } else if (strstr(pszURI, "501")) { - pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_NOT_IMPL]; - } else { - pState->hdrs[0] = g_psHTTPHeaderStrings[HTTP_HDR_OK]; - } - - /* Determine if the URI has any variables and, if so, temporarily remove - them. */ - pszVars = strchr(pszURI, '?'); - if(pszVars) { - *pszVars = '\0'; - } - - /* Get a pointer to the file extension. We find this by looking for the - last occurrence of "." in the filename passed. */ - pszExt = NULL; - pszWork = strchr(pszURI, '.'); - while(pszWork) { - pszExt = pszWork + 1; - pszWork = strchr(pszExt, '.'); - } - - /* Now determine the content type and add the relevant header for that. */ - for(iLoop = 0; (iLoop < NUM_HTTP_HEADERS) && pszExt; iLoop++) { - /* Have we found a matching extension? */ - if(!strcmp(g_psHTTPHeaders[iLoop].extension, pszExt)) { - pState->hdrs[2] = - g_psHTTPHeaderStrings[g_psHTTPHeaders[iLoop].headerIndex]; - break; - } - } - - /* Reinstate the parameter marker if there was one in the original URI. */ - if(pszVars) { - *pszVars = '?'; - } - } - - /* Does the URL passed have any file extension? If not, we assume it - is a special-case URL used for control state notification and we do - not send any HTTP headers with the response. */ - if(!pszExt) { - /* Force the header index to a value indicating that all headers - have already been sent. */ - pState->hdr_index = NUM_FILE_HDR_STRINGS; - } else { - /* Did we find a matching extension? */ - if(iLoop == NUM_HTTP_HEADERS) { - /* No - use the default, plain text file type. */ - pState->hdrs[2] = g_psHTTPHeaderStrings[HTTP_HDR_DEFAULT_TYPE]; - } - - /* Set up to send the first header string. */ - pState->hdr_index = 0; - pState->hdr_pos = 0; - } -} - -/** Sub-function of http_send(): send dynamic headers - * - * @returns: - HTTP_NO_DATA_TO_SEND: no new data has been enqueued - * - HTTP_DATA_TO_SEND_CONTINUE: continue with sending HTTP body - * - HTTP_DATA_TO_SEND_BREAK: data has been enqueued, headers pending, - * so don't send HTTP body yet - */ -static u8_t -http_send_headers(struct tcp_pcb *pcb, struct http_state *hs) -{ - err_t err; - u16_t len; - u8_t data_to_send = HTTP_NO_DATA_TO_SEND; - u16_t hdrlen, sendlen; - - /* How much data can we send? */ - len = tcp_sndbuf(pcb); - sendlen = len; - - while(len && (hs->hdr_index < NUM_FILE_HDR_STRINGS) && sendlen) { - const void *ptr; - u16_t old_sendlen; - /* How much do we have to send from the current header? */ - hdrlen = (u16_t)strlen(hs->hdrs[hs->hdr_index]); - - /* How much of this can we send? */ - sendlen = (len < (hdrlen - hs->hdr_pos)) ? len : (hdrlen - hs->hdr_pos); - - /* Send this amount of data or as much as we can given memory - * constraints. */ - ptr = (const void *)(hs->hdrs[hs->hdr_index] + hs->hdr_pos); - old_sendlen = sendlen; - err = http_write(pcb, ptr, &sendlen, HTTP_IS_HDR_VOLATILE(hs, ptr)); - if ((err == ERR_OK) && (old_sendlen != sendlen)) { - /* Remember that we added some more data to be transmitted. */ - data_to_send = HTTP_DATA_TO_SEND_CONTINUE; - } else if (err != ERR_OK) { - /* special case: http_write does not try to send 1 byte */ - sendlen = 0; - } - - /* Fix up the header position for the next time round. */ - hs->hdr_pos += sendlen; - len -= sendlen; - - /* Have we finished sending this string? */ - if(hs->hdr_pos == hdrlen) { - /* Yes - move on to the next one */ - hs->hdr_index++; - hs->hdr_pos = 0; - } - } - /* If we get here and there are still header bytes to send, we send - * the header information we just wrote immediately. If there are no - * more headers to send, but we do have file data to send, drop through - * to try to send some file data too. */ - if((hs->hdr_index < NUM_FILE_HDR_STRINGS) || !hs->file) { - LWIP_DEBUGF(HTTPD_DEBUG, ("tcp_output\n")); - return HTTP_DATA_TO_SEND_BREAK; - } - return data_to_send; -} -#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ - -/** Sub-function of http_send(): end-of-file (or block) is reached, - * either close the file or read the next block (if supported). - * - * @returns: 0 if the file is finished or no data has been read - * 1 if the file is not finished and data has been read - */ -static u8_t -http_check_eof(struct tcp_pcb *pcb, struct http_state *hs) -{ -#if LWIP_HTTPD_DYNAMIC_FILE_READ - int count; -#endif /* LWIP_HTTPD_DYNAMIC_FILE_READ */ - - /* Do we have a valid file handle? */ - if (hs->handle == NULL) { - /* No - close the connection. */ - http_eof(pcb, hs); - return 0; - } - if (fs_bytes_left(hs->handle) <= 0) { - /* We reached the end of the file so this request is done. */ - LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n")); - http_eof(pcb, hs); - return 0; - } -#if LWIP_HTTPD_DYNAMIC_FILE_READ - /* Do we already have a send buffer allocated? */ - if(hs->buf) { - /* Yes - get the length of the buffer */ - count = hs->buf_len; - } else { - /* We don't have a send buffer so allocate one up to 2mss bytes long. */ - count = 2 * tcp_mss(pcb); - do { - hs->buf = (char*)mem_malloc((mem_size_t)count); - if (hs->buf != NULL) { - hs->buf_len = count; - break; - } - count = count / 2; - } while (count > 100); - - /* Did we get a send buffer? If not, return immediately. */ - if (hs->buf == NULL) { - LWIP_DEBUGF(HTTPD_DEBUG, ("No buff\n")); - return 0; - } - } - - /* Read a block of data from the file. */ - LWIP_DEBUGF(HTTPD_DEBUG, ("Trying to read %d bytes.\n", count)); - -#if LWIP_HTTPD_FS_ASYNC_READ - count = fs_read_async(hs->handle, hs->buf, count, http_continue, hs); -#else /* LWIP_HTTPD_FS_ASYNC_READ */ - count = fs_read(hs->handle, hs->buf, count); -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ - if (count < 0) { - if (count == FS_READ_DELAYED) { - /* Delayed read, wait for FS to unblock us */ - return 0; - } - /* We reached the end of the file so this request is done. - * @todo: don't close here for HTTP/1.1? */ - LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n")); - http_eof(pcb, hs); - return 0; - } - - /* Set up to send the block of data we just read */ - LWIP_DEBUGF(HTTPD_DEBUG, ("Read %d bytes.\n", count)); - hs->left = count; - hs->file = hs->buf; -#if LWIP_HTTPD_SSI - if (hs->ssi) { - hs->ssi->parse_left = count; - hs->ssi->parsed = hs->buf; - } -#endif /* LWIP_HTTPD_SSI */ -#else /* LWIP_HTTPD_DYNAMIC_FILE_READ */ - LWIP_ASSERT("SSI and DYNAMIC_HEADERS turned off but eof not reached", 0); -#endif /* LWIP_HTTPD_SSI || LWIP_HTTPD_DYNAMIC_HEADERS */ - return 1; -} - -/** Sub-function of http_send(): This is the normal send-routine for non-ssi files - * - * @returns: - 1: data has been written (so call tcp_ouput) - * - 0: no data has been written (no need to call tcp_output) - */ -static u8_t -http_send_data_nonssi(struct tcp_pcb *pcb, struct http_state *hs) -{ - err_t err; - u16_t len; - u16_t mss; - u8_t data_to_send = 0; - - /* We are not processing an SHTML file so no tag checking is necessary. - * Just send the data as we received it from the file. */ - - /* We cannot send more data than space available in the send - buffer. */ - if (tcp_sndbuf(pcb) < hs->left) { - len = tcp_sndbuf(pcb); - } else { - len = (u16_t)hs->left; - LWIP_ASSERT("hs->left did not fit into u16_t!", (len == hs->left)); - } - mss = tcp_mss(pcb); - if (len > (2 * mss)) { - len = 2 * mss; - } - - err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); - if (err == ERR_OK) { - data_to_send = 1; - hs->file += len; - hs->left -= len; - } - - return data_to_send; -} - -#if LWIP_HTTPD_SSI -/** Sub-function of http_send(): This is the send-routine for ssi files - * - * @returns: - 1: data has been written (so call tcp_ouput) - * - 0: no data has been written (no need to call tcp_output) - */ -static u8_t -http_send_data_ssi(struct tcp_pcb *pcb, struct http_state *hs) -{ - err_t err = ERR_OK; - u16_t len; - u16_t mss; - u8_t data_to_send = 0; - - struct http_ssi_state *ssi = hs->ssi; - LWIP_ASSERT("ssi != NULL", ssi != NULL); - /* We are processing an SHTML file so need to scan for tags and replace - * them with insert strings. We need to be careful here since a tag may - * straddle the boundary of two blocks read from the file and we may also - * have to split the insert string between two tcp_write operations. */ - - /* Do we have remaining data to send before parsing more? */ - if(ssi->parsed > hs->file) { - /* We cannot send more data than space available in the send - buffer. */ - if (tcp_sndbuf(pcb) < (ssi->parsed - hs->file)) { - len = tcp_sndbuf(pcb); - } else { - LWIP_ASSERT("Data size does not fit into u16_t!", - (ssi->parsed - hs->file) <= 0xffff); - len = (u16_t)(ssi->parsed - hs->file); - } - mss = tcp_mss(pcb); - if(len > (2 * mss)) { - len = 2 * mss; - } - - err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); - if (err == ERR_OK) { - data_to_send = 1; - hs->file += len; - hs->left -= len; - } - - /* If the send buffer is full, return now. */ - if(tcp_sndbuf(pcb) == 0) { - return data_to_send; - } - } - - LWIP_DEBUGF(HTTPD_DEBUG, ("State %d, %d left\n", ssi->tag_state, (int)ssi->parse_left)); - - /* We have sent all the data that was already parsed so continue parsing - * the buffer contents looking for SSI tags. */ - while((ssi->parse_left) && (err == ERR_OK)) { - /* How much data could we send? */ - len = tcp_sndbuf(pcb); - if (len == 0) { - return data_to_send; - } - switch(ssi->tag_state) { - case TAG_NONE: - /* We are not currently processing an SSI tag so scan for the - * start of the lead-in marker. */ - if(*ssi->parsed == g_pcTagLeadIn[0]) { - /* We found what could be the lead-in for a new tag so change - * state appropriately. */ - ssi->tag_state = TAG_LEADIN; - ssi->tag_index = 1; -#if !LWIP_HTTPD_SSI_INCLUDE_TAG - ssi->tag_started = ssi->parsed; -#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG */ - } - - /* Move on to the next character in the buffer */ - ssi->parse_left--; - ssi->parsed++; - break; - - case TAG_LEADIN: - /* We are processing the lead-in marker, looking for the start of - * the tag name. */ - - /* Have we reached the end of the leadin? */ - if(ssi->tag_index == LEN_TAG_LEAD_IN) { - ssi->tag_index = 0; - ssi->tag_state = TAG_FOUND; - } else { - /* Have we found the next character we expect for the tag leadin? */ - if(*ssi->parsed == g_pcTagLeadIn[ssi->tag_index]) { - /* Yes - move to the next one unless we have found the complete - * leadin, in which case we start looking for the tag itself */ - ssi->tag_index++; - } else { - /* We found an unexpected character so this is not a tag. Move - * back to idle state. */ - ssi->tag_state = TAG_NONE; - } - - /* Move on to the next character in the buffer */ - ssi->parse_left--; - ssi->parsed++; - } - break; - - case TAG_FOUND: - /* We are reading the tag name, looking for the start of the - * lead-out marker and removing any whitespace found. */ - - /* Remove leading whitespace between the tag leading and the first - * tag name character. */ - if((ssi->tag_index == 0) && ((*ssi->parsed == ' ') || - (*ssi->parsed == '\t') || (*ssi->parsed == '\n') || - (*ssi->parsed == '\r'))) { - /* Move on to the next character in the buffer */ - ssi->parse_left--; - ssi->parsed++; - break; - } - - /* Have we found the end of the tag name? This is signalled by - * us finding the first leadout character or whitespace */ - if((*ssi->parsed == g_pcTagLeadOut[0]) || - (*ssi->parsed == ' ') || (*ssi->parsed == '\t') || - (*ssi->parsed == '\n') || (*ssi->parsed == '\r')) { - - if(ssi->tag_index == 0) { - /* We read a zero length tag so ignore it. */ - ssi->tag_state = TAG_NONE; - } else { - /* We read a non-empty tag so go ahead and look for the - * leadout string. */ - ssi->tag_state = TAG_LEADOUT; - LWIP_ASSERT("ssi->tag_index <= 0xff", ssi->tag_index <= 0xff); - ssi->tag_name_len = (u8_t)ssi->tag_index; - ssi->tag_name[ssi->tag_index] = '\0'; - if(*ssi->parsed == g_pcTagLeadOut[0]) { - ssi->tag_index = 1; - } else { - ssi->tag_index = 0; - } - } - } else { - /* This character is part of the tag name so save it */ - if(ssi->tag_index < LWIP_HTTPD_MAX_TAG_NAME_LEN) { - ssi->tag_name[ssi->tag_index++] = *ssi->parsed; - } else { - /* The tag was too long so ignore it. */ - ssi->tag_state = TAG_NONE; - } - } - - /* Move on to the next character in the buffer */ - ssi->parse_left--; - ssi->parsed++; - - break; - - /* We are looking for the end of the lead-out marker. */ - case TAG_LEADOUT: - /* Remove leading whitespace between the tag leading and the first - * tag leadout character. */ - if((ssi->tag_index == 0) && ((*ssi->parsed == ' ') || - (*ssi->parsed == '\t') || (*ssi->parsed == '\n') || - (*ssi->parsed == '\r'))) { - /* Move on to the next character in the buffer */ - ssi->parse_left--; - ssi->parsed++; - break; - } - - /* Have we found the next character we expect for the tag leadout? */ - if(*ssi->parsed == g_pcTagLeadOut[ssi->tag_index]) { - /* Yes - move to the next one unless we have found the complete - * leadout, in which case we need to call the client to process - * the tag. */ - - /* Move on to the next character in the buffer */ - ssi->parse_left--; - ssi->parsed++; - - if(ssi->tag_index == (LEN_TAG_LEAD_OUT - 1)) { - /* Call the client to ask for the insert string for the - * tag we just found. */ -#if LWIP_HTTPD_SSI_MULTIPART - ssi->tag_part = 0; /* start with tag part 0 */ -#endif /* LWIP_HTTPD_SSI_MULTIPART */ - get_tag_insert(hs); - - /* Next time through, we are going to be sending data - * immediately, either the end of the block we start - * sending here or the insert string. */ - ssi->tag_index = 0; - ssi->tag_state = TAG_SENDING; - ssi->tag_end = ssi->parsed; -#if !LWIP_HTTPD_SSI_INCLUDE_TAG - ssi->parsed = ssi->tag_started; -#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/ - - /* If there is any unsent data in the buffer prior to the - * tag, we need to send it now. */ - if (ssi->tag_end > hs->file) { - /* How much of the data can we send? */ -#if LWIP_HTTPD_SSI_INCLUDE_TAG - if(len > ssi->tag_end - hs->file) { - len = (u16_t)(ssi->tag_end - hs->file); - } -#else /* LWIP_HTTPD_SSI_INCLUDE_TAG*/ - if(len > ssi->tag_started - hs->file) { - /* we would include the tag in sending */ - len = (u16_t)(ssi->tag_started - hs->file); - } -#endif /* LWIP_HTTPD_SSI_INCLUDE_TAG*/ - - err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); - if (err == ERR_OK) { - data_to_send = 1; -#if !LWIP_HTTPD_SSI_INCLUDE_TAG - if(ssi->tag_started <= hs->file) { - /* pretend to have sent the tag, too */ - len += ssi->tag_end - ssi->tag_started; - } -#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/ - hs->file += len; - hs->left -= len; - } - } - } else { - ssi->tag_index++; - } - } else { - /* We found an unexpected character so this is not a tag. Move - * back to idle state. */ - ssi->parse_left--; - ssi->parsed++; - ssi->tag_state = TAG_NONE; - } - break; - - /* - * We have found a valid tag and are in the process of sending - * data as a result of that discovery. We send either remaining data - * from the file prior to the insert point or the insert string itself. - */ - case TAG_SENDING: - /* Do we have any remaining file data to send from the buffer prior - * to the tag? */ - if(ssi->tag_end > hs->file) { - /* How much of the data can we send? */ -#if LWIP_HTTPD_SSI_INCLUDE_TAG - if(len > ssi->tag_end - hs->file) { - len = (u16_t)(ssi->tag_end - hs->file); - } -#else /* LWIP_HTTPD_SSI_INCLUDE_TAG*/ - LWIP_ASSERT("hs->started >= hs->file", ssi->tag_started >= hs->file); - if (len > ssi->tag_started - hs->file) { - /* we would include the tag in sending */ - len = (u16_t)(ssi->tag_started - hs->file); - } -#endif /* LWIP_HTTPD_SSI_INCLUDE_TAG*/ - if (len != 0) { - err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); - } else { - err = ERR_OK; - } - if (err == ERR_OK) { - data_to_send = 1; -#if !LWIP_HTTPD_SSI_INCLUDE_TAG - if(ssi->tag_started <= hs->file) { - /* pretend to have sent the tag, too */ - len += ssi->tag_end - ssi->tag_started; - } -#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/ - hs->file += len; - hs->left -= len; - } - } else { -#if LWIP_HTTPD_SSI_MULTIPART - if(ssi->tag_index >= ssi->tag_insert_len) { - /* Did the last SSIHandler have more to send? */ - if (ssi->tag_part != HTTPD_LAST_TAG_PART) { - /* If so, call it again */ - ssi->tag_index = 0; - get_tag_insert(hs); - } - } -#endif /* LWIP_HTTPD_SSI_MULTIPART */ - - /* Do we still have insert data left to send? */ - if(ssi->tag_index < ssi->tag_insert_len) { - /* We are sending the insert string itself. How much of the - * insert can we send? */ - if(len > (ssi->tag_insert_len - ssi->tag_index)) { - len = (ssi->tag_insert_len - ssi->tag_index); - } - - /* Note that we set the copy flag here since we only have a - * single tag insert buffer per connection. If we don't do - * this, insert corruption can occur if more than one insert - * is processed before we call tcp_output. */ - err = http_write(pcb, &(ssi->tag_insert[ssi->tag_index]), &len, - HTTP_IS_TAG_VOLATILE(hs)); - if (err == ERR_OK) { - data_to_send = 1; - ssi->tag_index += len; - /* Don't return here: keep on sending data */ - } - } else { -#if LWIP_HTTPD_SSI_MULTIPART - if (ssi->tag_part == HTTPD_LAST_TAG_PART) -#endif /* LWIP_HTTPD_SSI_MULTIPART */ - { - /* We have sent all the insert data so go back to looking for - * a new tag. */ - LWIP_DEBUGF(HTTPD_DEBUG, ("Everything sent.\n")); - ssi->tag_index = 0; - ssi->tag_state = TAG_NONE; -#if !LWIP_HTTPD_SSI_INCLUDE_TAG - ssi->parsed = ssi->tag_end; -#endif /* !LWIP_HTTPD_SSI_INCLUDE_TAG*/ - } - } - break; - } - } - } - - /* If we drop out of the end of the for loop, this implies we must have - * file data to send so send it now. In TAG_SENDING state, we've already - * handled this so skip the send if that's the case. */ - if((ssi->tag_state != TAG_SENDING) && (ssi->parsed > hs->file)) { - /* We cannot send more data than space available in the send - buffer. */ - if (tcp_sndbuf(pcb) < (ssi->parsed - hs->file)) { - len = tcp_sndbuf(pcb); - } else { - LWIP_ASSERT("Data size does not fit into u16_t!", - (ssi->parsed - hs->file) <= 0xffff); - len = (u16_t)(ssi->parsed - hs->file); - } - if(len > (2 * tcp_mss(pcb))) { - len = 2 * tcp_mss(pcb); - } - - err = http_write(pcb, hs->file, &len, HTTP_IS_DATA_VOLATILE(hs)); - if (err == ERR_OK) { - data_to_send = 1; - hs->file += len; - hs->left -= len; - } - } - return data_to_send; -} -#endif /* LWIP_HTTPD_SSI */ - -/** - * Try to send more data on this pcb. - * - * @param pcb the pcb to send data - * @param hs connection state - */ -static u8_t -http_send(struct tcp_pcb *pcb, struct http_state *hs) -{ - u8_t data_to_send = HTTP_NO_DATA_TO_SEND; - - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_send: pcb=%p hs=%p left=%d\n", (void*)pcb, - (void*)hs, hs != NULL ? (int)hs->left : 0)); - -#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND - if (hs->unrecved_bytes != 0) { - return 0; - } -#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */ - - /* If we were passed a NULL state structure pointer, ignore the call. */ - if (hs == NULL) { - return 0; - } - -#if LWIP_HTTPD_FS_ASYNC_READ - /* Check if we are allowed to read from this file. - (e.g. SSI might want to delay sending until data is available) */ - if (!fs_is_file_ready(hs->handle, http_continue, hs)) { - return 0; - } -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ - -#if LWIP_HTTPD_DYNAMIC_HEADERS - /* Do we have any more header data to send for this file? */ - if(hs->hdr_index < NUM_FILE_HDR_STRINGS) { - data_to_send = http_send_headers(pcb, hs); - if (data_to_send != HTTP_DATA_TO_SEND_CONTINUE) { - return data_to_send; - } - } -#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ - - /* Have we run out of file data to send? If so, we need to read the next - * block from the file. */ - if (hs->left == 0) { - if (!http_check_eof(pcb, hs)) { - return 0; - } - } - -#if LWIP_HTTPD_SSI - if(hs->ssi) { - data_to_send = http_send_data_ssi(pcb, hs); - } else -#endif /* LWIP_HTTPD_SSI */ - { - data_to_send = http_send_data_nonssi(pcb, hs); - } - - if((hs->left == 0) && (fs_bytes_left(hs->handle) <= 0)) { - /* We reached the end of the file so this request is done. - * This adds the FIN flag right into the last data segment. */ - LWIP_DEBUGF(HTTPD_DEBUG, ("End of file.\n")); - http_eof(pcb, hs); - return 0; - } - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("send_data end.\n")); - return data_to_send; -} - -#if LWIP_HTTPD_SUPPORT_EXTSTATUS -/** Initialize a http connection with a file to send for an error message - * - * @param hs http connection state - * @param error_nr HTTP error number - * @return ERR_OK if file was found and hs has been initialized correctly - * another err_t otherwise - */ -static err_t -http_find_error_file(struct http_state *hs, u16_t error_nr) -{ - const char *uri1, *uri2, *uri3; - err_t err; - - if (error_nr == 501) { - uri1 = "/501.html"; - uri2 = "/501.htm"; - uri3 = "/501.shtml"; - } else { - /* 400 (bad request is the default) */ - uri1 = "/400.html"; - uri2 = "/400.htm"; - uri3 = "/400.shtml"; - } - err = fs_open(&hs->file_handle, uri1); - if (err != ERR_OK) { - err = fs_open(&hs->file_handle, uri2); - if (err != ERR_OK) { - err = fs_open(&hs->file_handle, uri3); - if (err != ERR_OK) { - LWIP_DEBUGF(HTTPD_DEBUG, ("Error page for error %"U16_F" not found\n", - error_nr)); - return ERR_ARG; - } - } - } - return http_init_file(hs, &hs->file_handle, 0, NULL, 0); -} -#else /* LWIP_HTTPD_SUPPORT_EXTSTATUS */ -#define http_find_error_file(hs, error_nr) ERR_ARG -#endif /* LWIP_HTTPD_SUPPORT_EXTSTATUS */ - -/** - * Get the file struct for a 404 error page. - * Tries some file names and returns NULL if none found. - * - * @param uri pointer that receives the actual file name URI - * @return file struct for the error page or NULL no matching file was found - */ -static struct fs_file * -http_get_404_file(struct http_state *hs, const char **uri) -{ - err_t err; - - *uri = "/404.html"; - err = fs_open(&hs->file_handle, *uri); - if (err != ERR_OK) { - /* 404.html doesn't exist. Try 404.htm instead. */ - *uri = "/404.htm"; - err = fs_open(&hs->file_handle, *uri); - if (err != ERR_OK) { - /* 404.htm doesn't exist either. Try 404.shtml instead. */ - *uri = "/404.shtml"; - err = fs_open(&hs->file_handle, *uri); - if (err != ERR_OK) { - /* 404.htm doesn't exist either. Indicate to the caller that it should - * send back a default 404 page. - */ - *uri = NULL; - return NULL; - } - } - } - - return &hs->file_handle; -} - -#if LWIP_HTTPD_SUPPORT_POST -static err_t -http_handle_post_finished(struct http_state *hs) -{ -#if LWIP_HTTPD_POST_MANUAL_WND - /* Prevent multiple calls to httpd_post_finished, since it might have already - been called before from httpd_post_data_recved(). */ - if (hs->post_finished) { - return ERR_OK; - } - hs->post_finished = 1; -#endif /* LWIP_HTTPD_POST_MANUAL_WND */ - /* application error or POST finished */ - /* NULL-terminate the buffer */ - http_post_response_filename[0] = 0; - httpd_post_finished(hs, http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN); - return http_find_file(hs, http_post_response_filename, 0); -} - -/** Pass received POST body data to the application and correctly handle - * returning a response document or closing the connection. - * ATTENTION: The application is responsible for the pbuf now, so don't free it! - * - * @param hs http connection state - * @param p pbuf to pass to the application - * @return ERR_OK if passed successfully, another err_t if the response file - * hasn't been found (after POST finished) - */ -static err_t -http_post_rxpbuf(struct http_state *hs, struct pbuf *p) -{ - err_t err; - - /* adjust remaining Content-Length */ - if (hs->post_content_len_left < p->tot_len) { - hs->post_content_len_left = 0; - } else { - hs->post_content_len_left -= p->tot_len; - } - err = httpd_post_receive_data(hs, p); - if ((err != ERR_OK) || (hs->post_content_len_left == 0)) { -#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND - if (hs->unrecved_bytes != 0) { - return ERR_OK; - } -#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */ - /* application error or POST finished */ - return http_handle_post_finished(hs); - } - - return ERR_OK; -} - -/** Handle a post request. Called from http_parse_request when method 'POST' - * is found. - * - * @param p The input pbuf (containing the POST header and body). - * @param hs The http connection state. - * @param data HTTP request (header and part of body) from input pbuf(s). - * @param data_len Size of 'data'. - * @param uri The HTTP URI parsed from input pbuf(s). - * @param uri_end Pointer to the end of 'uri' (here, the rest of the HTTP - * header starts). - * @return ERR_OK: POST correctly parsed and accepted by the application. - * ERR_INPROGRESS: POST not completely parsed (no error yet) - * another err_t: Error parsing POST or denied by the application - */ -static err_t -http_post_request(struct pbuf **inp, struct http_state *hs, - char *data, u16_t data_len, char *uri, char *uri_end) -{ - err_t err; - /* search for end-of-header (first double-CRLF) */ - char* crlfcrlf = strnstr(uri_end + 1, CRLF CRLF, data_len - (uri_end + 1 - data)); - - if (crlfcrlf != NULL) { - /* search for "Content-Length: " */ -#define HTTP_HDR_CONTENT_LEN "Content-Length: " -#define HTTP_HDR_CONTENT_LEN_LEN 16 -#define HTTP_HDR_CONTENT_LEN_DIGIT_MAX_LEN 10 - char *scontent_len = strnstr(uri_end + 1, HTTP_HDR_CONTENT_LEN, crlfcrlf - (uri_end + 1)); - if (scontent_len != NULL) { - char *scontent_len_end = strnstr(scontent_len + HTTP_HDR_CONTENT_LEN_LEN, CRLF, HTTP_HDR_CONTENT_LEN_DIGIT_MAX_LEN); - if (scontent_len_end != NULL) { - int content_len; - char *conten_len_num = scontent_len + HTTP_HDR_CONTENT_LEN_LEN; - *scontent_len_end = 0; - content_len = atoi(conten_len_num); - if (content_len > 0) { - /* adjust length of HTTP header passed to application */ - const char *hdr_start_after_uri = uri_end + 1; - u16_t hdr_len = LWIP_MIN(data_len, crlfcrlf + 4 - data); - u16_t hdr_data_len = LWIP_MIN(data_len, crlfcrlf + 4 - hdr_start_after_uri); - u8_t post_auto_wnd = 1; - http_post_response_filename[0] = 0; - err = httpd_post_begin(hs, uri, hdr_start_after_uri, hdr_data_len, content_len, - http_post_response_filename, LWIP_HTTPD_POST_MAX_RESPONSE_URI_LEN, &post_auto_wnd); - if (err == ERR_OK) { - /* try to pass in data of the first pbuf(s) */ - struct pbuf *q = *inp; - u16_t start_offset = hdr_len; -#if LWIP_HTTPD_POST_MANUAL_WND - hs->no_auto_wnd = !post_auto_wnd; -#endif /* LWIP_HTTPD_POST_MANUAL_WND */ - /* set the Content-Length to be received for this POST */ - hs->post_content_len_left = (u32_t)content_len; - - /* get to the pbuf where the body starts */ - while((q != NULL) && (q->len <= start_offset)) { - struct pbuf *head = q; - start_offset -= q->len; - q = q->next; - /* free the head pbuf */ - head->next = NULL; - pbuf_free(head); - } - *inp = NULL; - if (q != NULL) { - /* hide the remaining HTTP header */ - pbuf_header(q, -(s16_t)start_offset); -#if LWIP_HTTPD_POST_MANUAL_WND - if (!post_auto_wnd) { - /* already tcp_recved() this data... */ - hs->unrecved_bytes = q->tot_len; - } -#endif /* LWIP_HTTPD_POST_MANUAL_WND */ - return http_post_rxpbuf(hs, q); - } else { - return ERR_OK; - } - } else { - /* return file passed from application */ - return http_find_file(hs, http_post_response_filename, 0); - } - } else { - LWIP_DEBUGF(HTTPD_DEBUG, ("POST received invalid Content-Length: %s\n", - conten_len_num)); - return ERR_ARG; - } - } - } - } - /* if we come here, the POST is incomplete */ -#if LWIP_HTTPD_SUPPORT_REQUESTLIST - return ERR_INPROGRESS; -#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - return ERR_ARG; -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ -} - -#if LWIP_HTTPD_POST_MANUAL_WND -/** A POST implementation can call this function to update the TCP window. - * This can be used to throttle data reception (e.g. when received data is - * programmed to flash and data is received faster than programmed). - * - * @param connection A connection handle passed to httpd_post_begin for which - * httpd_post_finished has *NOT* been called yet! - * @param recved_len Length of data received (for window update) - */ -void httpd_post_data_recved(void *connection, u16_t recved_len) -{ - struct http_state *hs = (struct http_state*)connection; - if (hs != NULL) { - if (hs->no_auto_wnd) { - u16_t len = recved_len; - if (hs->unrecved_bytes >= recved_len) { - hs->unrecved_bytes -= recved_len; - } else { - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_LEVEL_WARNING, ("httpd_post_data_recved: recved_len too big\n")); - len = (u16_t)hs->unrecved_bytes; - hs->unrecved_bytes = 0; - } - if (hs->pcb != NULL) { - if (len != 0) { - tcp_recved(hs->pcb, len); - } - if ((hs->post_content_len_left == 0) && (hs->unrecved_bytes == 0)) { - /* finished handling POST */ - http_handle_post_finished(hs); - http_send(hs->pcb, hs); - } - } - } - } -} -#endif /* LWIP_HTTPD_POST_MANUAL_WND */ - -#endif /* LWIP_HTTPD_SUPPORT_POST */ - -#if LWIP_HTTPD_FS_ASYNC_READ -/** Try to send more data if file has been blocked before - * This is a callback function passed to fs_read_async(). - */ -static void -http_continue(void *connection) -{ - struct http_state *hs = (struct http_state*)connection; - if (hs && (hs->pcb) && (hs->handle)) { - LWIP_ASSERT("hs->pcb != NULL", hs->pcb != NULL); - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("httpd_continue: try to send more data\n")); - if (http_send(hs->pcb, hs)) { - /* If we wrote anything to be sent, go ahead and send it now. */ - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("tcp_output\n")); - tcp_output(hs->pcb); - } - } -} -#endif /* LWIP_HTTPD_FS_ASYNC_READ */ - -/** - * When data has been received in the correct state, try to parse it - * as a HTTP request. - * - * @param p the received pbuf - * @param hs the connection state - * @param pcb the tcp_pcb which received this packet - * @return ERR_OK if request was OK and hs has been initialized correctly - * ERR_INPROGRESS if request was OK so far but not fully received - * another err_t otherwise - */ -static err_t -http_parse_request(struct pbuf **inp, struct http_state *hs, struct tcp_pcb *pcb) -{ - char *data; - char *crlf; - u16_t data_len; - struct pbuf *p = *inp; -#if LWIP_HTTPD_SUPPORT_REQUESTLIST - u16_t clen; -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ -#if LWIP_HTTPD_SUPPORT_POST - err_t err; -#endif /* LWIP_HTTPD_SUPPORT_POST */ - - LWIP_UNUSED_ARG(pcb); /* only used for post */ - LWIP_ASSERT("p != NULL", p != NULL); - LWIP_ASSERT("hs != NULL", hs != NULL); - - if ((hs->handle != NULL) || (hs->file != NULL)) { - LWIP_DEBUGF(HTTPD_DEBUG, ("Received data while sending a file\n")); - /* already sending a file */ - /* @todo: abort? */ - return ERR_USE; - } - -#if LWIP_HTTPD_SUPPORT_REQUESTLIST - - LWIP_DEBUGF(HTTPD_DEBUG, ("Received %"U16_F" bytes\n", p->tot_len)); - - /* first check allowed characters in this pbuf? */ - - /* enqueue the pbuf */ - if (hs->req == NULL) { - LWIP_DEBUGF(HTTPD_DEBUG, ("First pbuf\n")); - hs->req = p; - } else { - LWIP_DEBUGF(HTTPD_DEBUG, ("pbuf enqueued\n")); - pbuf_cat(hs->req, p); - } - - if (hs->req->next != NULL) { - data_len = LWIP_MIN(hs->req->tot_len, LWIP_HTTPD_MAX_REQ_LENGTH); - pbuf_copy_partial(hs->req, httpd_req_buf, data_len, 0); - data = httpd_req_buf; - } else -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - { - data = (char *)p->payload; - data_len = p->len; - if (p->len != p->tot_len) { - LWIP_DEBUGF(HTTPD_DEBUG, ("Warning: incomplete header due to chained pbufs\n")); - } - } - - /* Parse WebSocket request */ - hs->is_websocket = 0; - unsigned char *retval = NULL; - if (strncasestr(data, WS_HEADER, data_len)) { - LWIP_DEBUGF(HTTPD_DEBUG, ("WebSocket opening handshake\n")); - char *key_start = strncasestr(data, "Sec-WebSocket-Key: ", data_len); - if (key_start) { - key_start += 19; - char *key_end = strncasestr(key_start, "\r\n", data_len); - if (key_end) { - char key[64]; - int len = sizeof (char) * (key_end - key_start); - if ((len + sizeof (WS_GUID) < sizeof (key)) && (len > 0)) { - /* Allocate response buffer */ - retval = mem_malloc(WS_BUF_LEN); - if (retval == NULL) { - LWIP_DEBUGF(HTTPD_DEBUG, ("Out of memory\n")); - return ERR_MEM; - } - unsigned char *retval_ptr; - retval_ptr = memcpy(retval, WS_RSP, sizeof(WS_RSP)); - retval_ptr += sizeof(WS_RSP) - 1; - - /* Concatenate key */ - memcpy(key, key_start, len); - strlcpy(&key[len], WS_GUID, sizeof(key)); - LWIP_DEBUGF(HTTPD_DEBUG, ("Resulting key: %s\n", key)); - - /* Get SHA1 */ - int key_len = sizeof(WS_GUID) - 1 + len; - unsigned char sha1sum[20]; - mbedtls_sha1((unsigned char *) key, key_len, sha1sum); - - /* Base64 encode */ - unsigned int olen; - mbedtls_base64_encode(NULL, 0, &olen, sha1sum, 20); //get length - int ok = mbedtls_base64_encode(retval_ptr, WS_BUF_LEN, &olen, sha1sum, 20); - - if (ok == 0) { - memcpy(&retval_ptr[olen], CRLF CRLF, sizeof(CRLF CRLF)); - hs->is_websocket = 1; - LWIP_DEBUGF(HTTPD_DEBUG, ("Base64 encoded: %s\n", retval_ptr)); - } - } else { - LWIP_DEBUGF(HTTPD_DEBUG, ("Key overflow")); - return ERR_MEM; - } - } - } else { - LWIP_DEBUGF(HTTPD_DEBUG, ("error: malformed packet\n")); - return ERR_ARG; - } - } - - /* received enough data for minimal request? */ - if (data_len >= MIN_REQ_LEN) { - /* wait for CRLF before parsing anything */ - crlf = strnstr(data, CRLF, data_len); - if (crlf != NULL) { -#if LWIP_HTTPD_SUPPORT_POST - int is_post = 0; -#endif /* LWIP_HTTPD_SUPPORT_POST */ - int is_09 = 0; - char *sp1, *sp2; - u16_t left_len, uri_len; - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("CRLF received, parsing request\n")); - /* parse method */ - if (!strncmp(data, "GET ", 4)) { - sp1 = data + 3; - /* received GET request */ - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Received GET request\"\n")); -#if LWIP_HTTPD_SUPPORT_POST - } else if (!strncmp(data, "POST ", 5)) { - /* store request type */ - is_post = 1; - sp1 = data + 4; - /* received GET request */ - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Received POST request\n")); -#endif /* LWIP_HTTPD_SUPPORT_POST */ - } else { - /* null-terminate the METHOD (pbuf is freed anyway wen returning) */ - data[4] = 0; - /* unsupported method! */ - LWIP_DEBUGF(HTTPD_DEBUG, ("Unsupported request method (not implemented): \"%s\"\n", - data)); - return http_find_error_file(hs, 501); - } - /* if we come here, method is OK, parse URI */ - left_len = data_len - ((sp1 +1) - data); - sp2 = strnstr(sp1 + 1, " ", left_len); -#if LWIP_HTTPD_SUPPORT_V09 - if (sp2 == NULL) { - /* HTTP 0.9: respond with correct protocol version */ - sp2 = strnstr(sp1 + 1, CRLF, left_len); - is_09 = 1; -#if LWIP_HTTPD_SUPPORT_POST - if (is_post) { - /* HTTP/0.9 does not support POST */ - goto badrequest; - } -#endif /* LWIP_HTTPD_SUPPORT_POST */ - } -#endif /* LWIP_HTTPD_SUPPORT_V09 */ - uri_len = sp2 - (sp1 + 1); - if ((sp2 != 0) && (sp2 > sp1)) { - /* wait for CRLFCRLF (indicating end of HTTP headers) before parsing anything */ - if (strnstr(data, CRLF CRLF, data_len) != NULL) { - char *uri = sp1 + 1; -#if LWIP_HTTPD_SUPPORT_11_KEEPALIVE - if (!is_09 && strnstr(data, HTTP11_CONNECTIONKEEPALIVE, data_len)) { - hs->keepalive = 1; - } -#endif /* LWIP_HTTPD_SUPPORT_11_KEEPALIVE */ - /* null-terminate the METHOD (pbuf is freed anyway wen returning) */ - *sp1 = 0; - uri[uri_len] = 0; - LWIP_DEBUGF(HTTPD_DEBUG, ("Received \"%s\" request for URI: \"%s\"\n", - data, uri)); -#if LWIP_HTTPD_SUPPORT_POST - if (is_post) { -#if LWIP_HTTPD_SUPPORT_REQUESTLIST - struct pbuf **q = &hs->req; -#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - struct pbuf **q = inp; -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - err = http_post_request(q, hs, data, data_len, uri, sp2); - if (err != ERR_OK) { - /* restore header for next try */ - *sp1 = ' '; - *sp2 = ' '; - uri[uri_len] = ' '; - } - if (err == ERR_ARG) { - goto badrequest; - } - return err; - } else -#endif /* LWIP_HTTPD_SUPPORT_POST */ - { - if (hs->is_websocket && retval != NULL) { - LWIP_DEBUGF(HTTPD_DEBUG, ("Sending:\n%s\n", retval)); - u16_t len = strlen((char *) retval); - http_write(pcb, retval, &len, 0); - mem_free(retval); - if(websocket_open_cb) - websocket_open_cb(pcb, uri); - return ERR_OK; // We handled this - } else { - return http_find_file(hs, uri, is_09); - } - } - } - } else { - LWIP_DEBUGF(HTTPD_DEBUG, ("invalid URI\n")); - } - } - } - -#if LWIP_HTTPD_SUPPORT_REQUESTLIST - clen = pbuf_clen(hs->req); - if ((hs->req->tot_len <= LWIP_HTTPD_REQ_BUFSIZE) && - (clen <= LWIP_HTTPD_REQ_QUEUELEN)) { - /* request not fully received (too short or CRLF is missing) */ - return ERR_INPROGRESS; - } else -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - { -#if LWIP_HTTPD_SUPPORT_POST -badrequest: -#endif /* LWIP_HTTPD_SUPPORT_POST */ - LWIP_DEBUGF(HTTPD_DEBUG, ("bad request\n")); - /* could not parse request */ - return http_find_error_file(hs, 400); - } -} - -/** Try to find the file specified by uri and, if found, initialize hs - * accordingly. - * - * @param hs the connection state - * @param uri the HTTP header URI - * @param is_09 1 if the request is HTTP/0.9 (no HTTP headers in response) - * @return ERR_OK if file was found and hs has been initialized correctly - * another err_t otherwise - */ -static err_t -http_find_file(struct http_state *hs, const char *uri, int is_09) -{ - size_t loop; - struct fs_file *file = NULL; - char *params; - err_t err; -#if LWIP_HTTPD_CGI - int i; - int count; -#endif /* LWIP_HTTPD_CGI */ -#if !LWIP_HTTPD_SSI - const -#endif /* !LWIP_HTTPD_SSI */ - /* By default, assume we will not be processing server-side-includes tags */ - u8_t tag_check = 0; - - /* Have we been asked for the default root file? */ - if((uri[0] == '/') && (uri[1] == 0)) { - /* Try each of the configured default filenames until we find one - that exists. */ - for (loop = 0; loop < NUM_DEFAULT_FILENAMES; loop++) { - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Looking for %s...\n", g_psDefaultFilenames[loop].name)); - err = fs_open(&hs->file_handle, (char *)g_psDefaultFilenames[loop].name); - uri = (char *)g_psDefaultFilenames[loop].name; - if(err == ERR_OK) { - file = &hs->file_handle; - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Opened.\n")); -#if LWIP_HTTPD_SSI - tag_check = g_psDefaultFilenames[loop].shtml; -#endif /* LWIP_HTTPD_SSI */ - break; - } - } - if (file == NULL) { - /* None of the default filenames exist so send back a 404 page */ - file = http_get_404_file(hs, &uri); -#if LWIP_HTTPD_SSI - tag_check = 0; -#endif /* LWIP_HTTPD_SSI */ - } - } else { - /* No - we've been asked for a specific file. */ - /* First, isolate the base URI (without any parameters) */ - params = (char *)strchr(uri, '?'); - if (params != NULL) { - /* URI contains parameters. NULL-terminate the base URI */ - *params = '\0'; - params++; - } - -#if LWIP_HTTPD_CGI - /* Does the base URI we have isolated correspond to a CGI handler? */ - if (g_iNumCGIs && g_pCGIs) { - for (i = 0; i < g_iNumCGIs; i++) { - if (strcmp(uri, g_pCGIs[i].pcCGIName) == 0) { - /* - * We found a CGI that handles this URI so extract the - * parameters and call the handler. - */ - count = extract_uri_parameters(hs, params); - uri = g_pCGIs[i].pfnCGIHandler(i, count, hs->params, - hs->param_vals); - break; - } - } - } -#endif /* LWIP_HTTPD_CGI */ - - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("Opening %s\n", uri)); - - err = fs_open(&hs->file_handle, uri); - if (err == ERR_OK) { - file = &hs->file_handle; - } else { - file = http_get_404_file(hs, &uri); - } -#if LWIP_HTTPD_SSI - if (file != NULL) { - /* See if we have been asked for an shtml file and, if so, - enable tag checking. */ - tag_check = 0; - for (loop = 0; loop < NUM_SHTML_EXTENSIONS; loop++) { - if (strstr(uri, g_pcSSIExtensions[loop])) { - tag_check = 1; - break; - } - } - } -#endif /* LWIP_HTTPD_SSI */ - } - return http_init_file(hs, file, is_09, uri, tag_check); -} - -/** Initialize a http connection with a file to send (if found). - * Called by http_find_file and http_find_error_file. - * - * @param hs http connection state - * @param file file structure to send (or NULL if not found) - * @param is_09 1 if the request is HTTP/0.9 (no HTTP headers in response) - * @param uri the HTTP header URI - * @param tag_check enable SSI tag checking - * @return ERR_OK if file was found and hs has been initialized correctly - * another err_t otherwise - */ -static err_t -http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const char *uri, u8_t tag_check) -{ - if (file != NULL) { - /* file opened, initialise struct http_state */ -#if LWIP_HTTPD_SSI - if (tag_check) { - struct http_ssi_state *ssi = http_ssi_state_alloc(); - if (ssi != NULL) { - ssi->tag_index = 0; - ssi->tag_state = TAG_NONE; - ssi->parsed = file->data; - ssi->parse_left = file->len; - ssi->tag_end = file->data; - hs->ssi = ssi; - } - } -#else /* LWIP_HTTPD_SSI */ - LWIP_UNUSED_ARG(tag_check); -#endif /* LWIP_HTTPD_SSI */ - hs->handle = file; - hs->file = (char*)file->data; - LWIP_ASSERT("File length must be positive!", (file->len >= 0)); - hs->left = file->len; - hs->retries = 0; -#if LWIP_HTTPD_TIMING - hs->time_started = sys_now(); -#endif /* LWIP_HTTPD_TIMING */ -#if !LWIP_HTTPD_DYNAMIC_HEADERS - LWIP_ASSERT("HTTP headers not included in file system", hs->handle->http_header_included); -#endif /* !LWIP_HTTPD_DYNAMIC_HEADERS */ -#if LWIP_HTTPD_SUPPORT_V09 - if (hs->handle->http_header_included && is_09) { - /* HTTP/0.9 responses are sent without HTTP header, - search for the end of the header. */ - char *file_start = strnstr(hs->file, CRLF CRLF, hs->left); - if (file_start != NULL) { - size_t diff = file_start + 4 - hs->file; - hs->file += diff; - hs->left -= (u32_t)diff; - } - } -#endif /* LWIP_HTTPD_SUPPORT_V09*/ - } else { - hs->handle = NULL; - hs->file = NULL; - hs->left = 0; - hs->retries = 0; - } -#if LWIP_HTTPD_DYNAMIC_HEADERS - /* Determine the HTTP headers to send based on the file extension of - * the requested URI. */ - if ((hs->handle == NULL) || !hs->handle->http_header_included) { - get_http_headers(hs, (char*)uri); - } -#else /* LWIP_HTTPD_DYNAMIC_HEADERS */ - LWIP_UNUSED_ARG(uri); -#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ - return ERR_OK; -} - -/** - * The pcb had an error and is already deallocated. - * The argument might still be valid (if != NULL). - */ -static void -http_err(void *arg, err_t err) -{ - struct http_state *hs = (struct http_state *)arg; - LWIP_UNUSED_ARG(err); - - LWIP_DEBUGF(HTTPD_DEBUG, ("http_err: %s", lwip_strerr(err))); - - if (hs != NULL) { - http_state_free(hs); - } -} - -/** - * Data has been sent and acknowledged by the remote host. - * This means that more data can be sent. - */ -static err_t -http_sent(void *arg, struct tcp_pcb *pcb, u16_t len) -{ - struct http_state *hs = (struct http_state *)arg; - - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_sent %p\n", (void*)pcb)); - - LWIP_UNUSED_ARG(len); - - if (hs == NULL) { - return ERR_OK; - } - - hs->retries = 0; - - http_send(pcb, hs); - - return ERR_OK; -} - -/** - * The poll function is called every 2nd second. - * If there has been no data sent (which resets the retries) in 8 seconds, close. - * If the last portion of a file has not been sent in 2 seconds, close. - * - * This could be increased, but we don't want to waste resources for bad connections. - */ -static err_t -http_poll(void *arg, struct tcp_pcb *pcb) -{ - struct http_state *hs = (struct http_state *)arg; - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_poll: pcb=%p hs=%p pcb_state=%s\n", - (void*)pcb, (void*)hs, tcp_debug_state_str(pcb->state))); - - if (hs == NULL) { - err_t closed; - /* arg is null, close. */ - LWIP_DEBUGF(HTTPD_DEBUG, ("http_poll: arg is NULL, close\n")); - closed = http_close_conn(pcb, NULL); - LWIP_UNUSED_ARG(closed); -#if LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR - if (closed == ERR_MEM) { - tcp_abort(pcb); - return ERR_ABRT; - } -#endif /* LWIP_HTTPD_ABORT_ON_CLOSE_MEM_ERROR */ - return ERR_OK; - } else { - hs->retries++; - if (hs->retries == ((hs->is_websocket) ? WS_TIMEOUT : HTTPD_MAX_RETRIES)) { - LWIP_DEBUGF(HTTPD_DEBUG, ("http_poll: too many retries, close\n")); - http_close_conn(pcb, hs); - return ERR_OK; - } - - /* If this connection has a file open, try to send some more data. If - * it has not yet received a GET request, don't do this since it will - * cause the connection to close immediately. */ - if(hs && (hs->handle)) { - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_poll: try to send more data\n")); - if(http_send(pcb, hs)) { - /* If we wrote anything to be sent, go ahead and send it now. */ - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("tcp_output\n")); - tcp_output(pcb); - } - } - } - - return ERR_OK; -} - -void -websocket_register_callbacks(tWsOpenHandler ws_open_cb, tWsHandler ws_cb) -{ - websocket_open_cb = ws_open_cb; - websocket_cb = ws_cb; -} - -err_t -websocket_write(struct tcp_pcb *pcb, const uint8_t *data, uint16_t len, uint8_t mode) -{ - uint8_t *buf = mem_malloc(len + 4); - if (buf == NULL) { - LWIP_DEBUGF(HTTPD_DEBUG, ("[websocket_write] out of memory\n")); - return ERR_MEM; - } - - int offset = 2; - buf[0] = 0x80 | mode; - if (len > 125) { - offset = 4; - buf[1] = 126; - buf[2] = len >> 8; - buf[3] = len; - } else { - buf[1] = len; - } - - memcpy(&buf[offset], data, len); - len += offset; - - LWIP_DEBUGF(HTTPD_DEBUG, ("[websocket_write] sending packet\n")); - err_t retval = http_write(pcb, buf, &len, TCP_WRITE_FLAG_COPY); - mem_free(buf); - - return retval; -} - -/** - * Send status code 1000 (normal closure). - */ -static err_t -websocket_send_close(struct tcp_pcb *pcb) -{ - const u8_t buf[] = {0x88, 0x02, 0x03, 0xe8}; - u16_t len = sizeof (buf); - LWIP_DEBUGF(HTTPD_DEBUG, ("[wsoc] closing connection\n")); - return tcp_write(pcb, buf, len, TCP_WRITE_FLAG_COPY); -} - -/** - * Parse websocket frame. - * - * @return ERR_OK: frame parsed - * ERR_CLSD: close request from client - * ERR_VAL: invalid frame. - */ -static err_t -websocket_parse(struct tcp_pcb *pcb, struct pbuf *p) -{ - u8_t *data = (u8_t *) p->payload; - u16_t data_len = p->len; - - if (data != NULL && data_len > 1) { - LWIP_DEBUGF(HTTPD_DEBUG, ("[wsoc] frame received\n")); - if ((data[0] & 0x80) == 0) { - LWIP_DEBUGF(HTTPD_DEBUG, ("Warning: continuation frames not supported\n")); - return ERR_OK; - } - u8_t opcode = data[0] & 0x0F; - switch (opcode) { - case WS_TEXT_MODE: - case WS_BIN_MODE: - LWIP_DEBUGF(HTTPD_DEBUG, ("Opcode: 0x%hX, frame length: %d\n", opcode, data_len)); - if (data_len > 6 && websocket_cb != NULL) { - int data_offset = 6; - u8_t *dptr = &data[6]; - u8_t *kptr = &data[2]; - u16_t len = data[1] & 0x7F; - - if (len == 127) { - /* most likely won't happen inside non-fragmented frame */ - LWIP_DEBUGF(HTTPD_DEBUG, ("Warning: frame is too long\n")); - return ERR_OK; - } else if (len == 126) { - /* extended length */ - dptr += 2; - kptr += 2; - data_offset += 2; - len = (data[2] << 8) | data[3]; - } - - data_len -= data_offset; - - if (len > data_len) { - LWIP_DEBUGF(HTTPD_DEBUG, ("Error: incorrect frame size\n")); - return ERR_VAL; - } - - if (data_len != len) - LWIP_DEBUGF(HTTPD_DEBUG, ("Warning: segmented frame received\n")); - - /* unmask */ - for (int i = 0; i < len; i++) - *(dptr++) ^= kptr[i % 4]; - - /* user callback */ - websocket_cb(pcb, &data[data_offset], len, opcode); - } - break; - case 0x08: // close - LWIP_DEBUGF(HTTPD_DEBUG, ("Close request\n")); - return ERR_CLSD; - default: - LWIP_DEBUGF(HTTPD_DEBUG, ("Unsupported opcode 0x%hX\n", opcode)); - break; - } - return ERR_OK; - } - return ERR_VAL; -} - -/** - * Data has been received on this pcb. - * For HTTP 1.0, this should normally only happen once (if the request fits in one packet). - */ -static err_t -http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) -{ - err_t parsed = ERR_ABRT; - struct http_state *hs = (struct http_state *)arg; - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_recv: pcb=%p pbuf=%p err=%s\n", (void*)pcb, - (void*)p, lwip_strerr(err))); - - if (hs != NULL && hs->is_websocket) { - if (p == NULL) { - LWIP_DEBUGF(HTTPD_DEBUG, ("http_recv: buffer error\n")); - http_close_or_abort_conn(pcb, hs, 0); - return ERR_BUF; - } - tcp_recved(pcb, p->tot_len); - err_t err = websocket_parse(pcb, p); - if (p != NULL) { - /* otherwise tcp buffer hogs */ - LWIP_DEBUGF(HTTPD_DEBUG, ("[wsoc] freeing buffer\n")); - pbuf_free(p); - } - if (err == ERR_CLSD) { - http_close_conn(pcb, hs); - } - /* reset timeout */ - hs->retries = 0; - return ERR_OK; - } - - if ((err != ERR_OK) || (p == NULL) || (hs == NULL)) { - /* error or closed by other side? */ - if (p != NULL) { - /* Inform TCP that we have taken the data. */ - tcp_recved(pcb, p->tot_len); - pbuf_free(p); - } - if (hs == NULL) { - /* this should not happen, only to be robust */ - LWIP_DEBUGF(HTTPD_DEBUG, ("Error, http_recv: hs is NULL, close\n")); - } - http_close_conn(pcb, hs); - return ERR_OK; - } - -#if LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND - if (hs->no_auto_wnd) { - hs->unrecved_bytes += p->tot_len; - } else -#endif /* LWIP_HTTPD_SUPPORT_POST && LWIP_HTTPD_POST_MANUAL_WND */ - { - /* Inform TCP that we have taken the data. */ - tcp_recved(pcb, p->tot_len); - } - -#if LWIP_HTTPD_SUPPORT_POST - if (hs->post_content_len_left > 0) { - /* reset idle counter when POST data is received */ - hs->retries = 0; - /* this is data for a POST, pass the complete pbuf to the application */ - http_post_rxpbuf(hs, p); - /* pbuf is passed to the application, don't free it! */ - if (hs->post_content_len_left == 0) { - /* all data received, send response or close connection */ - http_send(pcb, hs); - } - return ERR_OK; - } else -#endif /* LWIP_HTTPD_SUPPORT_POST */ - { - if (hs->handle == NULL) { - parsed = http_parse_request(&p, hs, pcb); - LWIP_ASSERT("http_parse_request: unexpected return value", parsed == ERR_OK - || parsed == ERR_INPROGRESS ||parsed == ERR_ARG - || parsed == ERR_USE || parsed == ERR_MEM); - } else { - LWIP_DEBUGF(HTTPD_DEBUG, ("http_recv: already sending data\n")); - } -#if LWIP_HTTPD_SUPPORT_REQUESTLIST - if (parsed != ERR_INPROGRESS) { - /* request fully parsed or error */ - if (hs->req != NULL) { - pbuf_free(hs->req); - hs->req = NULL; - } - } -#else /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - if (p != NULL) { - /* pbuf not passed to application, free it now */ - pbuf_free(p); - } -#endif /* LWIP_HTTPD_SUPPORT_REQUESTLIST */ - if (parsed == ERR_OK) { -#if LWIP_HTTPD_SUPPORT_POST - if (hs->post_content_len_left == 0) -#endif /* LWIP_HTTPD_SUPPORT_POST */ - { - LWIP_DEBUGF(HTTPD_DEBUG | LWIP_DBG_TRACE, ("http_recv: data %p len %"S32_F"\n", hs->file, hs->left)); - http_send(pcb, hs); - } - } else if (parsed == ERR_ARG || parsed == ERR_MEM) { - /* @todo: close on ERR_USE? */ - http_close_conn(pcb, hs); - } - } - return ERR_OK; -} - -/** - * A new incoming connection has been accepted. - */ -static err_t -http_accept(void *arg, struct tcp_pcb *pcb, err_t err) -{ - struct http_state *hs; - struct tcp_pcb_listen *lpcb = (struct tcp_pcb_listen*)arg; - LWIP_UNUSED_ARG(err); - LWIP_DEBUGF(HTTPD_DEBUG, ("http_accept %p / %p\n", (void*)pcb, arg)); - - /* Decrease the listen backlog counter */ - tcp_accepted(lpcb); - /* Set priority */ - tcp_setprio(pcb, HTTPD_TCP_PRIO); - - /* Allocate memory for the structure that holds the state of the - connection - initialized by that function. */ - hs = http_state_alloc(); - if (hs == NULL) { - LWIP_DEBUGF(HTTPD_DEBUG, ("http_accept: Out of memory, RST\n")); - return ERR_MEM; - } - hs->pcb = pcb; - - /* Tell TCP that this is the structure we wish to be passed for our - callbacks. */ - tcp_arg(pcb, hs); - - /* Set up the various callback functions */ - tcp_recv(pcb, http_recv); - tcp_err(pcb, http_err); - tcp_poll(pcb, http_poll, HTTPD_POLL_INTERVAL); - tcp_sent(pcb, http_sent); - - return ERR_OK; -} - -/** - * Initialize the httpd with the specified local address. - */ -static void -httpd_init_addr(const ip_addr_t *local_addr) -{ - struct tcp_pcb *pcb; - err_t err; - - pcb = tcp_new(); - LWIP_ASSERT("httpd_init: tcp_new failed", pcb != NULL); - tcp_setprio(pcb, HTTPD_TCP_PRIO); - /* set SOF_REUSEADDR here to explicitly bind httpd to multiple interfaces */ - err = tcp_bind(pcb, local_addr, HTTPD_SERVER_PORT); - LWIP_ASSERT("httpd_init: tcp_bind failed", err == ERR_OK); - pcb = tcp_listen(pcb); - LWIP_ASSERT("httpd_init: tcp_listen failed", pcb != NULL); - /* initialize callback arg and accept callback */ - tcp_arg(pcb, pcb); - tcp_accept(pcb, http_accept); -} - -/** - * Initialize the httpd: set up a listening PCB and bind it to the defined port - */ -void -httpd_init(void) -{ -#if HTTPD_USE_MEM_POOL - LWIP_ASSERT("memp_sizes[MEMP_HTTPD_STATE] >= sizeof(http_state)", - memp_sizes[MEMP_HTTPD_STATE] >= sizeof(http_state)); - LWIP_ASSERT("memp_sizes[MEMP_HTTPD_SSI_STATE] >= sizeof(http_ssi_state)", - memp_sizes[MEMP_HTTPD_SSI_STATE] >= sizeof(http_ssi_state)); -#endif - LWIP_DEBUGF(HTTPD_DEBUG, ("httpd_init\n")); - - httpd_init_addr(IP_ADDR_ANY); -} - -#if LWIP_HTTPD_SSI -/** - * Set the SSI handler function. - * - * @param ssi_handler the SSI handler function - * @param tags an array of SSI tag strings to search for in SSI-enabled files - * @param num_tags number of tags in the 'tags' array - */ -void -http_set_ssi_handler(tSSIHandler ssi_handler, const char **tags, int num_tags) -{ - LWIP_DEBUGF(HTTPD_DEBUG, ("http_set_ssi_handler\n")); - - LWIP_ASSERT("no ssi_handler given", ssi_handler != NULL); - LWIP_ASSERT("no tags given", tags != NULL); - LWIP_ASSERT("invalid number of tags", num_tags > 0); - - g_pfnSSIHandler = ssi_handler; - g_ppcTags = tags; - g_iNumTags = num_tags; -} -#endif /* LWIP_HTTPD_SSI */ - -#if LWIP_HTTPD_CGI -/** - * Set an array of CGI filenames/handler functions - * - * @param cgis an array of CGI filenames/handler functions - * @param num_handlers number of elements in the 'cgis' array - */ -void -http_set_cgi_handlers(const tCGI *cgis, int num_handlers) -{ - LWIP_ASSERT("no cgis given", cgis != NULL); - LWIP_ASSERT("invalid number of handlers", num_handlers > 0); - - g_pCGIs = cgis; - g_iNumCGIs = num_handlers; -} -#endif /* LWIP_HTTPD_CGI */ - -#endif /* LWIP_TCP */ diff --git a/extras/httpd/httpd.h b/extras/httpd/httpd.h deleted file mode 100644 index 1214054..0000000 --- a/extras/httpd/httpd.h +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - * This version of the file has been modified by Texas Instruments to offer - * simple server-side-include (SSI) and Common Gateway Interface (CGI) - * capability. - */ - -#ifndef __HTTPD_H__ -#define __HTTPD_H__ - -#include "lwip/opt.h" -#include "lwip/err.h" -#include "lwip/pbuf.h" -#include "lwip/tcp.h" - - -/** Set this to 1 to support CGI */ -#ifndef LWIP_HTTPD_CGI -#define LWIP_HTTPD_CGI 0 -#endif - -/** Set this to 1 to support SSI (Server-Side-Includes) */ -#ifndef LWIP_HTTPD_SSI -#define LWIP_HTTPD_SSI 0 -#endif - -/** Set this to 1 to support HTTP POST */ -#ifndef LWIP_HTTPD_SUPPORT_POST -#define LWIP_HTTPD_SUPPORT_POST 0 -#endif - -#if LWIP_HTTPD_CGI - -/* - * Function pointer for a CGI script handler. - * - * This function is called each time the HTTPD server is asked for a file - * whose name was previously registered as a CGI function using a call to - * http_set_cgi_handler. The iIndex parameter provides the index of the - * CGI within the ppcURLs array passed to http_set_cgi_handler. Parameters - * pcParam and pcValue provide access to the parameters provided along with - * the URI. iNumParams provides a count of the entries in the pcParam and - * pcValue arrays. Each entry in the pcParam array contains the name of a - * parameter with the corresponding entry in the pcValue array containing the - * value for that parameter. Note that pcParam may contain multiple elements - * with the same name if, for example, a multi-selection list control is used - * in the form generating the data. - * - * The function should return a pointer to a character string which is the - * path and filename of the response that is to be sent to the connected - * browser, for example "/thanks.htm" or "/response/error.ssi". - * - * The maximum number of parameters that will be passed to this function via - * iNumParams is defined by LWIP_HTTPD_MAX_CGI_PARAMETERS. Any parameters in the incoming - * HTTP request above this number will be discarded. - * - * Requests intended for use by this CGI mechanism must be sent using the GET - * method (which encodes all parameters within the URI rather than in a block - * later in the request). Attempts to use the POST method will result in the - * request being ignored. - * - */ -typedef const char *(*tCGIHandler)(int iIndex, int iNumParams, char *pcParam[], - char *pcValue[]); - -/* - * Structure defining the base filename (URL) of a CGI and the associated - * function which is to be called when that URL is requested. - */ -typedef struct -{ - const char *pcCGIName; - tCGIHandler pfnCGIHandler; -} tCGI; - -void http_set_cgi_handlers(const tCGI *pCGIs, int iNumHandlers); - - -/* The maximum number of parameters that the CGI handler can be sent. */ -#ifndef LWIP_HTTPD_MAX_CGI_PARAMETERS -#define LWIP_HTTPD_MAX_CGI_PARAMETERS 16 -#endif - -#endif /* LWIP_HTTPD_CGI */ - -#if LWIP_HTTPD_SSI - -/** LWIP_HTTPD_SSI_MULTIPART==1: SSI handler function is called with 2 more - * arguments indicating a counter for insert string that are too long to be - * inserted at once: the SSI handler function must then set 'next_tag_part' - * which will be passed back to it in the next call. */ -#ifndef LWIP_HTTPD_SSI_MULTIPART -#define LWIP_HTTPD_SSI_MULTIPART 0 -#endif - -/* - * Function pointer for the SSI tag handler callback. - * - * This function will be called each time the HTTPD server detects a tag of the - * form in a .shtml, .ssi or .shtm file where "name" appears as - * one of the tags supplied to http_set_ssi_handler in the ppcTags array. The - * returned insert string, which will be appended after the the string - * "" in file sent back to the client,should be written to pointer - * pcInsert. iInsertLen contains the size of the buffer pointed to by - * pcInsert. The iIndex parameter provides the zero-based index of the tag as - * found in the ppcTags array and identifies the tag that is to be processed. - * - * The handler returns the number of characters written to pcInsert excluding - * any terminating NULL or a negative number to indicate a failure (tag not - * recognized, for example). - * - * Note that the behavior of this SSI mechanism is somewhat different from the - * "normal" SSI processing as found in, for example, the Apache web server. In - * this case, the inserted text is appended following the SSI tag rather than - * replacing the tag entirely. This allows for an implementation that does not - * require significant additional buffering of output data yet which will still - * offer usable SSI functionality. One downside to this approach is when - * attempting to use SSI within JavaScript. The SSI tag is structured to - * resemble an HTML comment but this syntax does not constitute a comment - * within JavaScript and, hence, leaving the tag in place will result in - * problems in these cases. To work around this, any SSI tag which needs to - * output JavaScript code must do so in an encapsulated way, sending the whole - * HTML section as a single include. - */ -typedef u16_t (*tSSIHandler)(int iIndex, char *pcInsert, int iInsertLen -#if LWIP_HTTPD_SSI_MULTIPART - , u16_t current_tag_part, u16_t *next_tag_part -#endif /* LWIP_HTTPD_SSI_MULTIPART */ -#if LWIP_HTTPD_FILE_STATE - , void *connection_state -#endif /* LWIP_HTTPD_FILE_STATE */ - ); - -void http_set_ssi_handler(tSSIHandler pfnSSIHandler, - const char **ppcTags, int iNumTags); - -/* The maximum length of the string comprising the tag name */ -#ifndef LWIP_HTTPD_MAX_TAG_NAME_LEN -#define LWIP_HTTPD_MAX_TAG_NAME_LEN 8 -#endif - -/* The maximum length of string that can be returned to replace any given tag */ -#ifndef LWIP_HTTPD_MAX_TAG_INSERT_LEN -#define LWIP_HTTPD_MAX_TAG_INSERT_LEN 192 -#endif - -#endif /* LWIP_HTTPD_SSI */ - -#if LWIP_HTTPD_SUPPORT_POST - -/* These functions must be implemented by the application */ - -/** Called when a POST request has been received. The application can decide - * whether to accept it or not. - * - * @param connection Unique connection identifier, valid until httpd_post_end - * is called. - * @param uri The HTTP header URI receiving the POST request. - * @param http_request The raw HTTP request (the first packet, normally). - * @param http_request_len Size of 'http_request'. - * @param content_len Content-Length from HTTP header. - * @param response_uri Filename of response file, to be filled when denying the - * request - * @param response_uri_len Size of the 'response_uri' buffer. - * @param post_auto_wnd Set this to 0 to let the callback code handle window - * updates by calling 'httpd_post_data_recved' (to throttle rx speed) - * default is 1 (httpd handles window updates automatically) - * @return ERR_OK: Accept the POST request, data may be passed in - * another err_t: Deny the POST request, send back 'bad request'. - */ -err_t httpd_post_begin(void *connection, const char *uri, const char *http_request, - u16_t http_request_len, int content_len, char *response_uri, - u16_t response_uri_len, u8_t *post_auto_wnd); - -/** Called for each pbuf of data that has been received for a POST. - * ATTENTION: The application is responsible for freeing the pbufs passed in! - * - * @param connection Unique connection identifier. - * @param p Received data. - * @return ERR_OK: Data accepted. - * another err_t: Data denied, http_post_get_response_uri will be called. - */ -err_t httpd_post_receive_data(void *connection, struct pbuf *p); - -/** Called when all data is received or when the connection is closed. - * The application must return the filename/URI of a file to send in response - * to this POST request. If the response_uri buffer is untouched, a 404 - * response is returned. - * - * @param connection Unique connection identifier. - * @param response_uri Filename of response file, to be filled when denying the request - * @param response_uri_len Size of the 'response_uri' buffer. - */ -void httpd_post_finished(void *connection, char *response_uri, u16_t response_uri_len); - -#ifndef LWIP_HTTPD_POST_MANUAL_WND -#define LWIP_HTTPD_POST_MANUAL_WND 0 -#endif - -#if LWIP_HTTPD_POST_MANUAL_WND -void httpd_post_data_recved(void *connection, u16_t recved_len); -#endif /* LWIP_HTTPD_POST_MANUAL_WND */ - -#endif /* LWIP_HTTPD_SUPPORT_POST */ - -typedef enum { - WS_TEXT_MODE = 0x01, - WS_BIN_MODE = 0x02, -} WS_MODE; - -typedef void (*tWsHandler)(struct tcp_pcb *pcb, uint8_t *data, u16_t data_len, uint8_t mode); -typedef void (*tWsOpenHandler)(struct tcp_pcb *pcb, const char *uri); - -/** - * Write data into a websocket. - * - * @param pcb tcp_pcb to send. - * @param data data to send. - * @param len data length. - * @param mode WS_TEXT_MODE or WS_BIN_MODE. - * @return ERR_OK if write succeeded. - */ -err_t websocket_write(struct tcp_pcb *pcb, const uint8_t *data, uint16_t len, uint8_t mode); - -/** - * Register websocket callback functions. Use NULL if callback is not needed. - * - * @param ws_open_cb called when new websocket is opened. - * @param ws_cb called when data is received from client. - */ -void websocket_register_callbacks(tWsOpenHandler ws_open_cb, tWsHandler ws_cb); - -void httpd_init(void); - -#endif /* __HTTPD_H__ */ diff --git a/extras/httpd/httpd_structs.h b/extras/httpd/httpd_structs.h deleted file mode 100644 index 51dc807..0000000 --- a/extras/httpd/httpd_structs.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef __HTTPD_STRUCTS_H__ -#define __HTTPD_STRUCTS_H__ - -#include "httpd.h" - -/** This string is passed in the HTTP header as "Server: " */ -#ifndef HTTPD_SERVER_AGENT -#define HTTPD_SERVER_AGENT "lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)" -#endif - -/** Set this to 1 if you want to include code that creates HTTP headers - * at runtime. Default is off: HTTP headers are then created statically - * by the makefsdata tool. Static headers mean smaller code size, but - * the (readonly) fsdata will grow a bit as every file includes the HTTP - * header. */ -#ifndef LWIP_HTTPD_DYNAMIC_HEADERS -#define LWIP_HTTPD_DYNAMIC_HEADERS 0 -#endif - - -#if LWIP_HTTPD_DYNAMIC_HEADERS -/** This struct is used for a list of HTTP header strings for various - * filename extensions. */ -typedef struct -{ - const char *extension; - int headerIndex; -} tHTTPHeader; - -/** A list of strings used in HTTP headers */ -static const char * const g_psHTTPHeaderStrings[] = -{ - "Content-type: text/html\r\n\r\n", - "Content-type: text/html\r\nExpires: Fri, 10 Apr 2008 14:00:00 GMT\r\nPragma: no-cache\r\n\r\n", - "Content-type: image/gif\r\n\r\n", - "Content-type: image/png\r\n\r\n", - "Content-type: image/jpeg\r\n\r\n", - "Content-type: image/bmp\r\n\r\n", - "Content-type: image/x-icon\r\n\r\n", - "Content-type: application/octet-stream\r\n\r\n", - "Content-type: application/x-javascript\r\n\r\n", - "Content-type: application/x-javascript\r\n\r\n", - "Content-type: text/css\r\n\r\n", - "Content-type: application/x-shockwave-flash\r\n\r\n", - "Content-type: text/xml\r\n\r\n", - "Content-type: text/plain\r\n\r\n", - "HTTP/1.0 200 OK\r\n", - "HTTP/1.0 404 File not found\r\n", - "HTTP/1.0 400 Bad Request\r\n", - "HTTP/1.0 501 Not Implemented\r\n", - "HTTP/1.1 200 OK\r\n", - "HTTP/1.1 404 File not found\r\n", - "HTTP/1.1 400 Bad Request\r\n", - "HTTP/1.1 501 Not Implemented\r\n", - "Content-Length: ", - "Connection: Close\r\n", - "Connection: keep-alive\r\n", - "Server: "HTTPD_SERVER_AGENT"\r\n", - "\r\n

404: The requested file cannot be found.

\r\n" -}; - -/* Indexes into the g_psHTTPHeaderStrings array */ -#define HTTP_HDR_HTML 0 /* text/html */ -#define HTTP_HDR_SSI 1 /* text/html Expires... */ -#define HTTP_HDR_GIF 2 /* image/gif */ -#define HTTP_HDR_PNG 3 /* image/png */ -#define HTTP_HDR_JPG 4 /* image/jpeg */ -#define HTTP_HDR_BMP 5 /* image/bmp */ -#define HTTP_HDR_ICO 6 /* image/x-icon */ -#define HTTP_HDR_APP 7 /* application/octet-stream */ -#define HTTP_HDR_JS 8 /* application/x-javascript */ -#define HTTP_HDR_RA 9 /* application/x-javascript */ -#define HTTP_HDR_CSS 10 /* text/css */ -#define HTTP_HDR_SWF 11 /* application/x-shockwave-flash */ -#define HTTP_HDR_XML 12 /* text/xml */ -#define HTTP_HDR_DEFAULT_TYPE 13 /* text/plain */ -#define HTTP_HDR_OK 14 /* 200 OK */ -#define HTTP_HDR_NOT_FOUND 15 /* 404 File not found */ -#define HTTP_HDR_BAD_REQUEST 16 /* 400 Bad request */ -#define HTTP_HDR_NOT_IMPL 17 /* 501 Not Implemented */ -#define HTTP_HDR_OK_11 18 /* 200 OK */ -#define HTTP_HDR_NOT_FOUND_11 19 /* 404 File not found */ -#define HTTP_HDR_BAD_REQUEST_11 20 /* 400 Bad request */ -#define HTTP_HDR_NOT_IMPL_11 21 /* 501 Not Implemented */ -#define HTTP_HDR_CONTENT_LENGTH 22 /* Content-Length: (HTTP 1.1)*/ -#define HTTP_HDR_CONN_CLOSE 23 /* Connection: Close (HTTP 1.1) */ -#define HTTP_HDR_CONN_KEEPALIVE 24 /* Connection: keep-alive (HTTP 1.1) */ -#define HTTP_HDR_SERVER 25 /* Server: HTTPD_SERVER_AGENT */ -#define DEFAULT_404_HTML 26 /* default 404 body */ - -/** A list of extension-to-HTTP header strings */ -const static tHTTPHeader g_psHTTPHeaders[] = -{ - { "html", HTTP_HDR_HTML}, - { "htm", HTTP_HDR_HTML}, - { "shtml",HTTP_HDR_SSI}, - { "shtm", HTTP_HDR_SSI}, - { "ssi", HTTP_HDR_SSI}, - { "gif", HTTP_HDR_GIF}, - { "png", HTTP_HDR_PNG}, - { "jpg", HTTP_HDR_JPG}, - { "bmp", HTTP_HDR_BMP}, - { "ico", HTTP_HDR_ICO}, - { "class",HTTP_HDR_APP}, - { "cls", HTTP_HDR_APP}, - { "js", HTTP_HDR_JS}, - { "ram", HTTP_HDR_RA}, - { "css", HTTP_HDR_CSS}, - { "swf", HTTP_HDR_SWF}, - { "xml", HTTP_HDR_XML}, - { "xsl", HTTP_HDR_XML} -}; - -#define NUM_HTTP_HEADERS (sizeof(g_psHTTPHeaders) / sizeof(tHTTPHeader)) - -#endif /* LWIP_HTTPD_DYNAMIC_HEADERS */ - -#if LWIP_HTTPD_SSI -static const char * const g_pcSSIExtensions[] = { - ".shtml", ".shtm", ".ssi", ".xml" -}; -#define NUM_SHTML_EXTENSIONS (sizeof(g_pcSSIExtensions) / sizeof(const char *)) -#endif /* LWIP_HTTPD_SSI */ - -#endif /* __HTTPD_STRUCTS_H__ */ diff --git a/extras/httpd/readme.txt b/extras/httpd/readme.txt deleted file mode 100644 index ebf1109..0000000 --- a/extras/httpd/readme.txt +++ /dev/null @@ -1,11 +0,0 @@ -This is a basic HTTP server with WebSockets based on httpd from LwIP. - -WebSockets implementation supports binary and text modes. Multiple sockets are supported. Continuation frames are not implemented. -By default, a WebSocket is closed after 20 seconds of inactivity to conserve memory. This behavior can be changed by overriding `WS_TIMEOUT` option. - -To enable debugging extra flags `-DLWIP_DEBUG=1 -DHTTPD_DEBUG=LWIP_DBG_ON` should be passed at compile-time. - -This module expects your project to provide "fsdata.c" created with "makefsdata" utility. -See examples/http_server. - -Maintained by lujji (https://github.com/lujji/esp-httpd). diff --git a/extras/httpd/strcasestr.c b/extras/httpd/strcasestr.c deleted file mode 100644 index 26a0e53..0000000 --- a/extras/httpd/strcasestr.c +++ /dev/null @@ -1,80 +0,0 @@ -/*- - * Copyright (c) 2001 Mike Barcroft - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Chris Torek. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 3. Neither the name of the University 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 REGENTS 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 REGENTS 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. - */ -#include "strcasestr.h" -#include -#include - -char * -strcasestr(s, find) -const char *s, *find; -{ - char c, sc; - size_t len; - - if ((c = *find++) != 0) { - c = tolower((unsigned char) c); - len = strlen(find); - do { - do { - if ((sc = *s++) == 0) - return (NULL); - } while ((char) tolower((unsigned char) sc) != c); - } while (strncasecmp(s, find, len) != 0); - s--; - } - return ((char *) s); -} - -char * -strncasestr(s, find, slen) -const char *s; -const char *find; -size_t slen; -{ - char c, sc; - size_t len; - - if ((c = *find++) != '\0') { - len = strlen(find); - do { - do { - if (slen-- < 1 || (sc = *s++) == '\0') - return (NULL); - } while (sc != c); - if (len > slen) - return (NULL); - } while (strncasecmp(s, find, len) != 0); - s--; - } - return ((char *) s); -} \ No newline at end of file diff --git a/extras/httpd/strcasestr.h b/extras/httpd/strcasestr.h deleted file mode 100644 index 4947c11..0000000 --- a/extras/httpd/strcasestr.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef STRCASESTR_H -#define STRCASESTR_H - -#include - -char *strcasestr(const char *s, const char *find); -char *strncasestr(const char *s, const char * find, size_t slen); - -#endif /* STRCASESTR_H */ diff --git a/extras/i2c/README.md b/extras/i2c/README.md index d36209b..7ab90f6 100644 --- a/extras/i2c/README.md +++ b/extras/i2c/README.md @@ -2,34 +2,38 @@ This time a driver for the excellent esp-open-rtos. This is a bit banging I2C driver based on the Wikipedia pesudo C code [1]. -### Basic usage +### Adding to your project -```C +Add the driver to your project as a submodule rather than cloning it: + +```` +% git submodule add https://github.com/kanflo/esp-open-rtos-driver-i2c.git i2c +```` +The esp-open-rtos makefile-fu will make sure the driver is built. + +### Usage + + +```` #include -#define BUS (0) #define SCL_PIN (0) #define SDA_PIN (2) uint8_t slave_addr = 0x20; uint8_t reg_addr = 0x1f; uint8_t reg_data; +uint8_t data[] = {reg_addr, 0xc8}; -i2c_init(BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K); +i2c_init(SCL_PIN, SDA_PIN); -// Write 1 byte to slave register -int err = i2c_slave_write(BUS, slave_addr, ®_addr, &data, 1); -if (err != 0) -{ - // do something with error -} +// Write data to slave +bool success = i2c_slave_write(slave_addr, data, sizeof(data)); // Issue write to slave, sending reg_addr, followed by reading 1 byte -err = i2c_slave_read(BUS, slave_addr, ®_addr, ®_data, 1); +success = i2c_slave_read(slave_addr, ®_addr, reg_data, 1); -``` - -For details please see `extras/i2c/i2c.h`. +```` The driver is released under the MIT license. diff --git a/extras/i2c/i2c.c b/extras/i2c/i2c.c index d45c463..ef19c45 100644 --- a/extras/i2c/i2c.c +++ b/extras/i2c/i2c.c @@ -1,18 +1,18 @@ -/* +/* * The MIT License (MIT) - * + * * Copyright (c) 2015 Johan Kanflo (github.com/kanflo) - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -22,463 +22,208 @@ * THE SOFTWARE. */ +#include +#include // sdk_os_delay_us #include "i2c.h" -#include -#include -#include -#include -//#define I2C_DEBUG true +// I2C driver for ESP8266 written for use with esp-open-rtos +// Based on https://en.wikipedia.org/wiki/I²C#Example_of_bit-banging_the_I.C2.B2C_Master_protocol -#ifdef I2C_DEBUG -#include -#define debug(fmt, ...) printf("%s: " fmt "\n", "I2C", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif +// With calling overhead, we end up at ~100kbit/s +#define CLK_HALF_PERIOD_US (1) -// Delay loop takes four CPU clock cycles per round -#define DELAY_LOOPS_PER_US_160MHZ 40 -// The value for 80 MHz is half the above -// Constant overhead per I2C clock cycle in terms of delay loop rounds. -// If timing is changed by some code change, these will require tuning. -#if I2C_USE_GPIO16 == 1 - #define DELAY_OVERHEAD_80MHZ 18 - #define DELAY_OVERHEAD_160MHZ 20 -#else - #define DELAY_OVERHEAD_80MHZ 12 - #define DELAY_OVERHEAD_160MHZ 14 -#endif +#define CLK_STRETCH (10) -// Bus settings -typedef struct i2c_bus_description +static bool started; +static uint8_t g_scl_pin; +static uint8_t g_sda_pin; + +void i2c_init(uint8_t scl_pin, uint8_t sda_pin) { -#if I2C_USE_GPIO16 == 1 - uint8_t g_scl_pin; // SCL pin - uint8_t g_sda_pin; // SDA pin -#else - uint32_t g_scl_mask; // SCL pin mask - uint32_t g_sda_mask; // SDA pin mask -#endif - uint8_t delay_80; - uint8_t delay_160; - uint8_t delay; - bool started; - bool flag; - bool force; - TickType_t clk_stretch; -} i2c_bus_description_t; - -static i2c_bus_description_t i2c_bus[I2C_MAX_BUS]; - -inline bool i2c_status(uint8_t bus) -{ - return i2c_bus[bus].started; + started = false; + g_scl_pin = scl_pin; + g_sda_pin = sda_pin; } -static uint32_t freq_t_to_hz(i2c_freq_t freq) +static void i2c_delay(void) { - switch (freq) - { - case I2C_FREQ_80K: return 80000; - case I2C_FREQ_100K: return 100000; - case I2C_FREQ_400K: return 400000; - case I2C_FREQ_500K: return 500000; - case I2C_FREQ_600K: return 600000; - case I2C_FREQ_800K: return 800000; - case I2C_FREQ_1000K: return 1000000; - case I2C_FREQ_1300K: return 1300000; - } - return 80000; + sdk_os_delay_us(CLK_HALF_PERIOD_US); } -int i2c_init(uint8_t bus, uint8_t scl_pin, uint8_t sda_pin, i2c_freq_t freq) +// Set SCL as input and return current level of line, 0 or 1 +static bool read_scl(void) { - return i2c_init_hz(bus, scl_pin, sda_pin, freq_t_to_hz(freq)); + gpio_enable(g_scl_pin, GPIO_INPUT); + return gpio_read(g_scl_pin); // Clock high, valid ACK } -int i2c_init_hz(uint8_t bus, uint8_t scl_pin, uint8_t sda_pin, uint32_t freq) +// Set SDA as input and return current level of line, 0 or 1 +static bool read_sda(void) { - if (bus >= I2C_MAX_BUS) { - debug("Invalid bus"); - return -EINVAL; - } - -#if I2C_USE_GPIO16 == 1 - const int I2C_MAX_PIN = 16; -#else - const int I2C_MAX_PIN = 15; -#endif - - if (scl_pin > I2C_MAX_PIN || sda_pin > I2C_MAX_PIN) - { - debug("Invalid GPIO number. All pins must be less than or equal to %d", - I2C_MAX_PIN); - return -EINVAL; - } - - i2c_bus[bus].started = false; - i2c_bus[bus].flag = false; -#if I2C_USE_GPIO16 == 1 - i2c_bus[bus].g_scl_pin = scl_pin; - i2c_bus[bus].g_sda_pin = sda_pin; -#else - i2c_bus[bus].g_scl_mask = BIT(scl_pin); - i2c_bus[bus].g_sda_mask = BIT(sda_pin); -#endif - i2c_bus[bus].clk_stretch = I2C_DEFAULT_CLK_STRETCH; - - // Just to prevent these pins floating too much if not connected. - gpio_set_pullup(scl_pin, 1, 1); - gpio_set_pullup(sda_pin, 1, 1); - - gpio_enable(scl_pin, GPIO_OUT_OPEN_DRAIN); - gpio_enable(sda_pin, GPIO_OUT_OPEN_DRAIN); - - // I2C bus idle state. - gpio_write(scl_pin, 1); - gpio_write(sda_pin, 1); - - // Inform user if the desired frequency is not supported. - if (i2c_set_frequency_hz(bus, freq) != 0) { - debug("Frequency not supported"); - return -ENOTSUP; - } - - return 0; -} - -int i2c_set_frequency(uint8_t bus, i2c_freq_t freq) -{ - return i2c_set_frequency_hz(bus, freq_t_to_hz(freq)); -} - -int i2c_set_frequency_hz(uint8_t bus, uint32_t freq) -{ - if (freq == 0) return -EINVAL; - - uint32_t tick_count = (1000000UL * DELAY_LOOPS_PER_US_160MHZ) / (2 * freq); - - bool not_ok = false; - - int32_t delay_80 = tick_count / 2 - DELAY_OVERHEAD_80MHZ; - if (delay_80 > 255) { - delay_80 = 255; - not_ok = true; - } else if (delay_80 < 0) { - delay_80 = 0; - not_ok = true; - } - int32_t delay_160 = tick_count - DELAY_OVERHEAD_160MHZ; - if (delay_160 > 255) { - delay_160 = 255; - not_ok = true; - } else if (delay_160 < 0) { - delay_160 = 0; - not_ok = true; - } - i2c_bus[bus].delay_80 = delay_80; - i2c_bus[bus].delay_160 = delay_160; - - return not_ok ? -EINVAL : 0; -} - -void i2c_set_clock_stretch(uint8_t bus, TickType_t clk_stretch) -{ - i2c_bus[bus].clk_stretch = clk_stretch; -} - -static inline void i2c_delay(uint8_t bus) -{ - uint32_t delay = i2c_bus[bus].delay; - __asm volatile ( - "1: addi %0, %0, -1" "\n" - "bnez %0, 1b" "\n" - : "=a" (delay) : "0" (delay)); -} - -static inline bool read_scl(uint8_t bus) -{ -#if I2C_USE_GPIO16 == 1 - return gpio_read(i2c_bus[bus].g_scl_pin); -#else - return GPIO.IN & i2c_bus[bus].g_scl_mask; -#endif -} - -static inline bool read_sda(uint8_t bus) -{ -#if I2C_USE_GPIO16 == 1 - return gpio_read(i2c_bus[bus].g_sda_pin); -#else - return GPIO.IN & i2c_bus[bus].g_sda_mask; -#endif + gpio_enable(g_sda_pin, GPIO_INPUT); + // TODO: Without this delay we get arbitration lost in i2c_stop + i2c_delay(); + return gpio_read(g_sda_pin); // Clock high, valid ACK } // Actively drive SCL signal low -static inline void clear_scl(uint8_t bus) +static void clear_scl(void) { -#if I2C_USE_GPIO16 == 1 - gpio_write(i2c_bus[bus].g_scl_pin, 0); -#else - GPIO.OUT_CLEAR = i2c_bus[bus].g_scl_mask; -#endif + gpio_enable(g_scl_pin, GPIO_OUTPUT); + gpio_write(g_scl_pin, 0); } // Actively drive SDA signal low -static inline void clear_sda(uint8_t bus) +static void clear_sda(void) { -#if I2C_USE_GPIO16 == 1 - gpio_write(i2c_bus[bus].g_sda_pin, 0); -#else - GPIO.OUT_CLEAR = i2c_bus[bus].g_sda_mask; -#endif -} - -#define I2C_CLK_STRETCH_SPIN 1024 - -static void set_scl(uint8_t bus) -{ -#if I2C_USE_GPIO16 == 1 - gpio_write(i2c_bus[bus].g_scl_pin, 1); -#else - GPIO.OUT_SET = i2c_bus[bus].g_scl_mask; -#endif - - // Clock stretching. - - // Spin sampling frequently. - uint32_t clk_stretch_spin = I2C_CLK_STRETCH_SPIN; - do { - if (read_scl(bus)) { - return; - } - - clk_stretch_spin--; - } while (clk_stretch_spin); - - // Fall back to a longer wait, sampling less frequently. - TickType_t clk_stretch = i2c_bus[bus].clk_stretch; - TickType_t start = xTaskGetTickCount(); - - do { - vTaskDelay(20 / portTICK_PERIOD_MS); - - if (read_scl(bus)) { - return; - } - - TickType_t elapsed = xTaskGetTickCount() - start; - if (elapsed > clk_stretch) { - break; - } - } while (1); - - debug("bus %u clock stretch timeout", bus); -} - -static inline void set_sda(uint8_t bus) -{ -#if I2C_USE_GPIO16 == 1 - gpio_write(i2c_bus[bus].g_sda_pin, 1); -#else - GPIO.OUT_SET = i2c_bus[bus].g_sda_mask; -#endif + gpio_enable(g_sda_pin, GPIO_OUTPUT); + gpio_write(g_sda_pin, 0); } // Output start condition -void i2c_start(uint8_t bus) +void i2c_start(void) { - if (sdk_system_get_cpu_freq() == SYS_CPU_160MHZ) - i2c_bus[bus].delay = i2c_bus[bus].delay_160; - else - i2c_bus[bus].delay = i2c_bus[bus].delay_80; - - if (i2c_bus[bus].started) { // if started, do a restart cond + uint32_t clk_stretch = CLK_STRETCH; + if (started) { // if started, do a restart cond // Set SDA to 1 - set_sda(bus); - i2c_delay(bus); - set_scl(bus); + (void) read_sda(); + i2c_delay(); + while (read_scl() == 0 && clk_stretch--) ; // Repeated start setup time, minimum 4.7us - i2c_delay(bus); + i2c_delay(); } - i2c_bus[bus].started = true; - set_sda(bus); - if (read_sda(bus) == 0) { - debug("arbitration lost in i2c_start from bus %u", bus); + if (read_sda() == 0) { + printf("I2C: arbitration lost in i2c_start\n"); } // SCL is high, set SDA from 1 to 0. - clear_sda(bus); - i2c_delay(bus); - clear_scl(bus); + clear_sda(); + i2c_delay(); + clear_scl(); + started = true; } // Output stop condition -bool i2c_stop(uint8_t bus) +void i2c_stop(void) { + uint32_t clk_stretch = CLK_STRETCH; // Set SDA to 0 - clear_sda(bus); - i2c_delay(bus); - set_scl(bus); + clear_sda(); + i2c_delay(); + // Clock stretching + while (read_scl() == 0 && clk_stretch--) ; // Stop bit setup time, minimum 4us - i2c_delay(bus); + i2c_delay(); // SCL is high, set SDA from 0 to 1 - set_sda(bus); - // additional delay before testing SDA value to avoid wrong state - i2c_delay(bus); - if (read_sda(bus) == 0) { - debug("arbitration lost in i2c_stop from bus %u", bus); + if (read_sda() == 0) { + printf("I2C: arbitration lost in i2c_stop\n"); } - i2c_delay(bus); - if (!i2c_bus[bus].started) { - debug("bus %u link was break!", bus); - return false; // If bus was stop in other way, the current transmission Failed - } - i2c_bus[bus].started = false; - return true; + i2c_delay(); + started = false; } // Write a bit to I2C bus -static void i2c_write_bit(uint8_t bus, bool bit) +static void i2c_write_bit(bool bit) { + uint32_t clk_stretch = CLK_STRETCH; if (bit) { - set_sda(bus); + (void) read_sda(); } else { - clear_sda(bus); + clear_sda(); } - i2c_delay(bus); - set_scl(bus); + i2c_delay(); + // Clock stretching + while (read_scl() == 0 && clk_stretch--) ; // SCL is high, now data is valid // If SDA is high, check that nobody else is driving SDA - if (bit && read_sda(bus) == 0) { - debug("arbitration lost in i2c_write_bit from bus %u", bus); + if (bit && read_sda() == 0) { + printf("I2C: arbitration lost in i2c_write_bit\n"); } - i2c_delay(bus); - clear_scl(bus); + i2c_delay(); + clear_scl(); } // Read a bit from I2C bus -static bool i2c_read_bit(uint8_t bus) +static bool i2c_read_bit(void) { + uint32_t clk_stretch = CLK_STRETCH; bool bit; // Let the slave drive data - set_sda(bus); - i2c_delay(bus); - set_scl(bus); + (void) read_sda(); + i2c_delay(); + // Clock stretching + while (read_scl() == 0 && clk_stretch--) ; // SCL is high, now data is valid - bit = read_sda(bus); - i2c_delay(bus); - clear_scl(bus); + bit = read_sda(); + i2c_delay(); + clear_scl(); return bit; } -bool i2c_write(uint8_t bus, uint8_t byte) +bool i2c_write(uint8_t byte) { bool nack; uint8_t bit; for (bit = 0; bit < 8; bit++) { - i2c_write_bit(bus, (byte & 0x80) != 0); + i2c_write_bit((byte & 0x80) != 0); byte <<= 1; } - nack = i2c_read_bit(bus); + nack = i2c_read_bit(); return !nack; } -uint8_t i2c_read(uint8_t bus, bool ack) +uint8_t i2c_read(bool ack) { uint8_t byte = 0; uint8_t bit; for (bit = 0; bit < 8; bit++) { - byte = ((byte << 1)) | (i2c_read_bit(bus)); + byte = (byte << 1) | i2c_read_bit(); } - i2c_write_bit(bus, ack); + i2c_write_bit(ack); return byte; } -void i2c_force_bus(uint8_t bus, bool state) +bool i2c_slave_write(uint8_t slave_addr, uint8_t *data, uint8_t len) { - i2c_bus[bus].force = state; -} - -static int i2c_bus_test(uint8_t bus) -{ - taskENTER_CRITICAL(); // To prevent task swaping after checking flag and before set it! - bool status = i2c_bus[bus].flag; // get current status - if (i2c_bus[bus].force) { - i2c_bus[bus].flag = true; // force bus on - taskEXIT_CRITICAL(); - if (status) - i2c_stop(bus); //Bus was busy, stop it. - } - else { - if (status) { - taskEXIT_CRITICAL(); - debug("busy"); - taskYIELD(); // If bus busy, change task to try finish last com. - return -EBUSY; // If bus busy, inform user + bool success = false; + do { + i2c_start(); + if (!i2c_write(slave_addr << 1)) + break; + while (len--) { + if (!i2c_write(*data++)) + break; } - else { - i2c_bus[bus].flag = true; // Set Bus busy - taskEXIT_CRITICAL(); + i2c_stop(); + success = true; + } while(0); + return success; +} + +bool i2c_slave_read(uint8_t slave_addr, uint8_t data, uint8_t *buf, uint32_t len) +{ + bool success = false; + do { + i2c_start(); + if (!i2c_write(slave_addr << 1)) { + break; } + i2c_write(data); + i2c_stop(); + i2c_start(); + if (!i2c_write(slave_addr << 1 | 1)) { // Slave address + read + break; + } + while(len) { + *buf = i2c_read(len == 1); + buf++; + len--; + } + success = true; + } while(0); + i2c_stop(); + if (!success) { + printf("I2C: write error\n"); } - return 0; -} - -int i2c_slave_write(uint8_t bus, uint8_t slave_addr, const uint8_t *data, const uint8_t *buf, uint32_t len) -{ - if (i2c_bus_test(bus)) - return -EBUSY; - i2c_start(bus); - if (!i2c_write(bus, slave_addr << 1)) - goto error; - if (data != NULL) - if (!i2c_write(bus, *data)) - goto error; - while (len--) { - if (!i2c_write(bus, *buf++)) - goto error; - } - if (!i2c_stop(bus)) - goto error; - i2c_bus[bus].flag = false; // Bus free - return 0; - -error: - debug("Bus %u Write Error", bus); - i2c_stop(bus); - i2c_bus[bus].flag = false; // Bus free - return -EIO; -} - -int i2c_slave_read(uint8_t bus, uint8_t slave_addr, const uint8_t *data, uint8_t *buf, uint32_t len) -{ - if (i2c_bus_test(bus)) - return -EBUSY; - if (data != NULL) { - i2c_start(bus); - if (!i2c_write(bus, slave_addr << 1)) - goto error; - if (!i2c_write(bus, *data)) - goto error; - } - i2c_start(bus); - if (!i2c_write(bus, slave_addr << 1 | 1)) // Slave address + read - goto error; - while(len) { - *buf = i2c_read(bus, len == 1); - buf++; - len--; - } - if (!i2c_stop(bus)) - goto error; - i2c_bus[bus].flag = false; // Bus free - return 0; - -error: - debug("Read Error"); - i2c_stop(bus); - i2c_bus[bus].flag = false; // Bus free - return -EIO; + return success; } diff --git a/extras/i2c/i2c.h b/extras/i2c/i2c.h index 9cd55f2..ac3163f 100644 --- a/extras/i2c/i2c.h +++ b/extras/i2c/i2c.h @@ -1,18 +1,18 @@ -/* +/* * The MIT License (MIT) - * + * * Copyright (c) 2015 Johan Kanflo (github.com/kanflo) - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -21,180 +21,31 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -/** - * I2C driver for ESP8266 written for use with esp-open-rtos - * Based on https://en.wikipedia.org/wiki/I²C#Example_of_bit-banging_the_I.C2.B2C_Master_protocol - */ #ifndef __I2C_H__ #define __I2C_H__ +#endif #include #include -#include -#include -#include -#ifdef __cplusplus -extern "C" { -#endif +// Init bitbanging I2C driver on given pins +void i2c_init(uint8_t scl_pin, uint8_t sda_pin); -/** - * Define i2c bus max number - */ -#ifndef I2C_MAX_BUS - #define I2C_MAX_BUS 2 -#endif +// Write a byte to I2C bus. Return true if slave acked. +bool i2c_write(uint8_t byte); -/* Set this to 1 if you intend to use GPIO 16 for I2C. It is not recommended - * and will result in degradation of performance and timing accuracy. - */ -#ifndef I2C_USE_GPIO16 - #define I2C_USE_GPIO16 0 -#endif +// Read a byte from I2C bus. Return true if slave acked. +uint8_t i2c_read(bool ack); -/* Default clock strech waiting time, 250 msec. */ -#define I2C_DEFAULT_CLK_STRETCH (250 / portTICK_PERIOD_MS) +// Write 'len' bytes from 'buf' to slave. Return true if slave acked. +bool i2c_slave_write(uint8_t slave_addr, uint8_t *buf, uint8_t len); -/* SCL speed settings. 160 MHz sysclk frequency will result in improved - * timing accuracy. Greater bitrates will have poorer accuracy. 1000K is the - * maximum SCL speed at 80 MHz sysclk. - */ -typedef enum -{ - I2C_FREQ_80K = 0, - I2C_FREQ_100K, - I2C_FREQ_400K, - I2C_FREQ_500K, - I2C_FREQ_600K, - I2C_FREQ_800K, - I2C_FREQ_1000K, - I2C_FREQ_1300K -} i2c_freq_t; +// Issue a read operation and send 'data', followed by reading 'len' bytes +// from slave into 'buf'. Return true if slave acked. +bool i2c_slave_read(uint8_t slave_addr, uint8_t data, uint8_t *buf, uint32_t len); -/** - * Device descriptor - */ -typedef struct i2c_dev -{ - uint8_t bus; - uint8_t addr; -} i2c_dev_t; - -/// Level 0 API - -/** - * Init bitbanging I2C driver on given pins - * @param bus Bus i2c selection - * @param scl_pin SCL pin for I2C - * @param sda_pin SDA pin for I2C - * @param freq frequency of bus (ex : I2C_FREQ_400K) - * @return Non-zero if error occured - */ -int i2c_init(uint8_t bus, uint8_t scl_pin, uint8_t sda_pin, i2c_freq_t freq); - -/** - * Init bitbanging I2C driver on given pins - * @param bus Bus i2c selection - * @param scl_pin SCL pin for I2C - * @param sda_pin SDA pin for I2C - * @param freq frequency of bus in hertz - * @return Non-zero if error occured - */ -int i2c_init_hz(uint8_t bus, uint8_t scl_pin, uint8_t sda_pin, uint32_t freq); - -/** - * Change bus frequency - * @param bus Bus i2c selection - * @param freq frequency of bus (ex : I2C_FREQ_400K) - */ -int i2c_set_frequency(uint8_t bus, i2c_freq_t freq); - -/** - * Change bus frequency - * @param bus Bus i2c selection - * @param freq frequency of bus in hertz - */ -int i2c_set_frequency_hz(uint8_t bus, uint32_t freq); - -/** - * Change clock stretch - * @param bus I2C bus - * @param clk_stretch I2C clock stretch, in ticks. I2C_DEFAULT_CLK_STRETCH by default - */ -void i2c_set_clock_stretch(uint8_t bus, TickType_t clk_stretch); - -/** - * Write a byte to I2C bus. - * @param bus Bus i2c selection - * @param byte Pointer to device descriptor - * @return true if slave acked - */ -bool i2c_write(uint8_t bus, uint8_t byte); - -/** - * Read a byte from I2C bus. - * @param bus Bus i2c selection - * @param ack Set Ack for slave (false: Ack // true: NoAck) - * @return byte read from slave. - */ -uint8_t i2c_read(uint8_t bus, bool ack); - -/** - * Send start or restart condition - * @param bus Bus i2c selection - */ -void i2c_start(uint8_t bus); - -/** - * Send stop condition - * @param bus Bus i2c selection - * @return false if link was broken - */ -bool i2c_stop(uint8_t bus); - -/** - * get status from I2C bus. - * @param bus Bus i2c selection - * @return true if busy. - */ -bool i2c_status(uint8_t bus); - -/// Level 1 API (Don't need functions above) - -/** - * This function will allow you to force a transmission I2C, cancel current transmission. - * Warning: Use with precaution. Don't use it if you can avoid it. Usefull for priority transmission. - * @param bus Bus i2c selection - * @param state Force the next I2C transmission if true (Use with precaution) - */ -void i2c_force_bus(uint8_t bus, bool state); - -/** - * Write 'len' bytes from 'buf' to slave at 'data' register adress . - * @param bus Bus i2c selection - * @param slave_addr slave device address - * @param data Pointer to register address to send if non-null - * @param buf Pointer to data buffer - * @param len Number of byte to send - * @return Non-Zero if error occured - */ -int i2c_slave_write(uint8_t bus, uint8_t slave_addr, const uint8_t *data, const uint8_t *buf, uint32_t len); - -/** - * Issue a send operation of 'data' register adress, followed by reading 'len' bytes - * from slave into 'buf'. - * @param bus Bus i2c selection - * @param slave_addr slave device address - * @param data Pointer to register address to send if non-null - * @param buf Pointer to data buffer - * @param len Number of byte to read - * @return Non-Zero if error occured - */ -int i2c_slave_read(uint8_t bus, uint8_t slave_addr, const uint8_t *data, uint8_t *buf, uint32_t len); - -#ifdef __cplusplus -} -#endif - -#endif /* __I2C_H__ */ +// Send start and stop conditions. Only needed when implementing protocols for +// devices where the i2c_slave_[read|write] functions above are of no use. +void i2c_start(void); +void i2c_stop(void); diff --git a/extras/i2s_dma/README.md b/extras/i2s_dma/README.md deleted file mode 100644 index 4fb8901..0000000 --- a/extras/i2s_dma/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Wrapper around hardware I2S and DMA subsystems of ESP8266 - -ESP8266 has hardware I2S bus support. I2S is a serial bus interface used for -connecting digital audio devices. But can be used to produce sequence of pulses -with reliable timings for example to control a strip of WS2812 leds. - -This library is just a wrapper around tricky I2S initialization. -It sets necessary registers, enables I2S clock etc. diff --git a/extras/i2s_dma/component.mk b/extras/i2s_dma/component.mk deleted file mode 100644 index f04e6ee..0000000 --- a/extras/i2s_dma/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/i2s_dma - -# expected anyone using i2s_dma driver includes it as 'i2s_dma/i2s_dma.h' -INC_DIRS += $(i2s_dma_ROOT).. - -# args for passing into compile rule generation -i2s_dma_SRC_DIR = $(i2s_dma_ROOT) - -$(eval $(call component_compile_rules,i2s_dma)) diff --git a/extras/i2s_dma/i2s_dma.c b/extras/i2s_dma/i2s_dma.c deleted file mode 100644 index 9609f1b..0000000 --- a/extras/i2s_dma/i2s_dma.c +++ /dev/null @@ -1,172 +0,0 @@ -/** - * The MIT License (MIT) - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include "i2s_dma.h" -#include "esp/iomux.h" -#include "esp/i2s_regs.h" -#include "esp/interrupts.h" -#include "esp/iomux.h" -#include "common_macros.h" - -#include - -// #define I2S_DMA_DEBUG - -#ifdef I2S_DMA_DEBUG -#include -#define debug(fmt, ...) printf("%s" fmt "\n", "i2s_dma: ", ## __VA_ARGS__); -#else -#define debug(fmt, ...) -#endif - -// The following definitions is taken from ESP8266_MP3_DECODER demo -// https://github.com/espressif/ESP8266_MP3_DECODER/blob/master/mp3/driver/i2s_freertos.c -// It is requred to set clock to I2S subsystem -void sdk_rom_i2c_writeReg_Mask(uint32_t block, uint32_t host_id, - uint32_t reg_add, uint32_t Msb, uint32_t Lsb, uint32_t indata); - -#ifndef i2c_bbpll -#define i2c_bbpll 0x67 -#define i2c_bbpll_en_audio_clock_out 4 -#define i2c_bbpll_en_audio_clock_out_msb 7 -#define i2c_bbpll_en_audio_clock_out_lsb 7 -#define i2c_bbpll_hostid 4 -#endif - -#define i2c_writeReg_Mask(block, host_id, reg_add, Msb, Lsb, indata) \ - sdk_rom_i2c_writeReg_Mask(block, host_id, reg_add, Msb, Lsb, indata) - -#define i2c_writeReg_Mask_def(block, reg_add, indata) \ - i2c_writeReg_Mask(block, block##_hostid, reg_add, reg_add##_msb, \ - reg_add##_lsb, indata) - - -void i2s_dma_init(i2s_dma_isr_t isr, void *arg, i2s_clock_div_t clock_div, i2s_pins_t pins) -{ - // reset DMA - SET_MASK_BITS(SLC.CONF0, SLC_CONF0_RX_LINK_RESET); - CLEAR_MASK_BITS(SLC.CONF0, SLC_CONF0_RX_LINK_RESET); - - // clear DMA int flags - SLC.INT_CLEAR = 0xFFFFFFFF; - SLC.INT_CLEAR = 0; - - // Enable and configure DMA - SLC.CONF0 = SET_FIELD(SLC.CONF0, SLC_CONF0_MODE, 0); // does it really needed? - SLC.CONF0 = SET_FIELD(SLC.CONF0, SLC_CONF0_MODE, 1); - - // Do we really need to set and clear? - SET_MASK_BITS(SLC.RX_DESCRIPTOR_CONF, SLC_RX_DESCRIPTOR_CONF_INFOR_NO_REPLACE | - SLC_RX_DESCRIPTOR_CONF_TOKEN_NO_REPLACE); - CLEAR_MASK_BITS(SLC.RX_DESCRIPTOR_CONF, SLC_RX_DESCRIPTOR_CONF_RX_FILL_ENABLE | - SLC_RX_DESCRIPTOR_CONF_RX_EOF_MODE | SLC_RX_DESCRIPTOR_CONF_RX_FILL_MODE); - - if (isr) { - _xt_isr_attach(INUM_SLC, isr, arg); - SET_MASK_BITS(SLC.INT_ENABLE, SLC_INT_ENABLE_RX_EOF); - SLC.INT_CLEAR = 0xFFFFFFFF; - _xt_isr_unmask(1< -#include -#include "esp/slc_regs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*i2s_dma_isr_t)(void *); - -typedef struct dma_descriptor { - uint32_t blocksize:12; - uint32_t datalen:12; - uint32_t unused:5; - uint32_t sub_sof:1; - uint32_t eof:1; - uint32_t owner:1; - - void* buf_ptr; - struct dma_descriptor *next_link_ptr; -} dma_descriptor_t; - -typedef struct { - uint8_t bclk_div; - uint8_t clkm_div; -} i2s_clock_div_t; - -typedef struct { - bool data; - bool clock; - bool ws; -} i2s_pins_t; - -/** - * Initialize I2S and DMA subsystems. - * - * @param isr ISR handler. Can be NULL if interrupt handling is not needed. - * @param arg ISR handler arg. - * @param clock_div I2S clock configuration. - * @param pins I2S pin configuration. Specifies which pins are enabled in I2S. - */ -void i2s_dma_init(i2s_dma_isr_t isr, void *arg, i2s_clock_div_t clock_div, i2s_pins_t pins); - -/** - * Calculate I2S dividers for the specified frequency. - * - * I2S_FREQ = 160000000 / (bclk_div * clkm_div) - * Base frequency is independent from the CPU frequency. - */ -i2s_clock_div_t i2s_get_clock_div(int32_t freq); - -/** - * Start I2S transmittion. - * - * @param descr Pointer to the first descriptor in the linked list of descriptors. - */ -void i2s_dma_start(dma_descriptor_t *descr); - -/** - * Stop I2S transmittion. - */ -void i2s_dma_stop(); - -/** - * Clear interrupt in the I2S ISR handler. - * - * It is intended to be called from ISR. - */ -inline void i2s_dma_clear_interrupt() -{ - SLC.INT_CLEAR = 0xFFFFFFFF; -} - -/** - * Check if it is EOF interrupt. - * - * It is intended to be called from ISR. - */ -inline bool i2s_dma_is_eof_interrupt() -{ - return (SLC.INT_STATUS & SLC_INT_STATUS_RX_EOF); -} - -/** - * Get pointer to a descriptor that caused EOF interrupt. - * It is the last processed descriptor. - * - * It is intended to be called from ISR. - */ -inline dma_descriptor_t *i2s_dma_get_eof_descriptor() -{ - return (dma_descriptor_t*)SLC.RX_EOF_DESCRIPTOR_ADDR; -} - -#ifdef __cplusplus -} -#endif - -#endif // __I2S_DMA_H__ diff --git a/extras/ina3221/component.mk b/extras/ina3221/component.mk deleted file mode 100644 index 9f39aef..0000000 --- a/extras/ina3221/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ina3221 - -# expected anyone using this driver includes it as 'ina3221/ina3221.h' -INC_DIRS += $(ina3221_ROOT).. - -# args for passing into compile rule generation -ina3221_SRC_DIR = $(ina3221_ROOT) - -$(eval $(call component_compile_rules,ina3221)) diff --git a/extras/ina3221/ina3221.c b/extras/ina3221/ina3221.c deleted file mode 100644 index 7d54e76..0000000 --- a/extras/ina3221/ina3221.c +++ /dev/null @@ -1,207 +0,0 @@ -/** - * INA3221 driver for esp-open-rtos. - * - * Copyright (c) 2016 Zaltora (https://github.com/Zaltora) - * - * MIT Licensed as described in the file LICENSE - * - * @todo Interupt system for critical and warning alert pin - */ - -#include "ina3221.h" - -//#define INA3221_DEBUG true - -#ifdef INA3221_DEBUG -#define debug(fmt, ...) printf("%s: " fmt "\n", "INA3221", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -static int _wireWriteRegister(const i2c_dev_t *dev, uint8_t reg, uint16_t value) -{ - uint8_t d[2] = { 0, 0 }; - d[1] = value & 0x00FF; - d[0] = (value >> 8) & 0x00FF; - debug("Data write to bus %u at %02X : %02X+%04X\n", dev->bus, dev->addr, reg, value); - return i2c_slave_write(dev->bus, dev->addr, ®, d, sizeof(d)); -} - -static int _wireReadRegister(const i2c_dev_t *dev, uint8_t reg, uint16_t *value) -{ - uint8_t d[] = { 0, 0 }; - int error = i2c_slave_read(dev->bus, dev->addr, ®, d, sizeof(d)); - debug("Data read from bus %u at %02X: %02X+%04X\n", dev->bus, dev->addr, reg, *value); - *value = d[1] | (d[0] << 8); - return error; -} - -int ina3221_trigger(ina3221_t *dev) -{ - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CONFIG, dev->config.config_register); -} - -int ina3221_getStatus(ina3221_t *dev) -{ - return _wireReadRegister(&dev->i2c_dev, INA3221_REG_MASK, &dev->mask.mask_register); -} - -int ina3221_sync(ina3221_t *dev) -{ - uint16_t ptr_data; - int err = 0; - //////////////////////// Sync config register - if ((err = _wireReadRegister(&dev->i2c_dev, INA3221_REG_CONFIG, &ptr_data))) // Read config - return err; - if (ptr_data != dev->config.config_register) - { - if ((err = _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CONFIG, dev->config.config_register))) // Update config - return err; - } - //////////////////////// Sync mask register config - if ((err = _wireReadRegister(&dev->i2c_dev, INA3221_REG_MASK, &ptr_data))) // Read mask - return err; - if ((ptr_data & INA3221_MASK_CONFIG) != (dev->mask.mask_register & INA3221_MASK_CONFIG)) - { - if ((err = _wireWriteRegister(&dev->i2c_dev, INA3221_REG_MASK, dev->mask.mask_register & INA3221_MASK_CONFIG))) // Update config - return err; - } - return 0; -} - -int ina3221_setting(ina3221_t *dev, bool mode, bool bus, bool shunt) -{ - dev->config.mode = mode; - dev->config.ebus = bus; - dev->config.esht = shunt; - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CONFIG, dev->config.config_register); -} - -int ina3221_enableChannel(ina3221_t *dev, bool ch1, bool ch2, bool ch3) -{ - dev->config.ch1 = ch1; - dev->config.ch2 = ch2; - dev->config.ch3 = ch3; - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CONFIG, dev->config.config_register); -} - -int ina3221_enableChannelSum(ina3221_t *dev, bool ch1, bool ch2, bool ch3) -{ - dev->mask.scc1 = ch1; - dev->mask.scc2 = ch2; - dev->mask.scc3 = ch3; - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_MASK, dev->mask.mask_register & INA3221_MASK_CONFIG); -} - -int ina3221_enableLatchPin(ina3221_t *dev, bool warning, bool critical) -{ - dev->mask.wen = warning; - dev->mask.cen = critical; - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_MASK, dev->mask.mask_register & INA3221_MASK_CONFIG); -} - -int ina3221_setAverage(ina3221_t *dev, ina3221_avg_t avg) -{ - dev->config.avg = avg; - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CONFIG, dev->config.config_register); -} - -int ina3221_setBusConversionTime(ina3221_t *dev, ina3221_ct_t ct) -{ - dev->config.vbus = ct; - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CONFIG, dev->config.config_register); -} - -int ina3221_setShuntConversionTime(ina3221_t *dev, ina3221_ct_t ct) -{ - dev->config.vsht = ct; - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CONFIG, dev->config.config_register); -} - -int ina3221_reset(ina3221_t *dev) -{ - dev->config.config_register = INA3221_DEFAULT_CONFIG; //dev reset - dev->mask.mask_register = INA3221_DEFAULT_CONFIG; //dev reset - dev->config.rst = 1; - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CONFIG, dev->config.config_register); // send reset to device -} - -int ina3221_getBusVoltage(ina3221_t *dev, ina3221_channel_t channel, float *voltage) -{ - int16_t raw_value; - int err = 0; - if ((err = _wireReadRegister(&dev->i2c_dev, INA3221_REG_BUSVOLTAGE_1 + channel * 2, (uint16_t*)&raw_value))) - return err; - if (voltage) - *voltage = raw_value * 0.001; //V 8mV step - return 0; -} - -int ina3221_getShuntValue(ina3221_t *dev, ina3221_channel_t channel, float *voltage, float *current) -{ - int16_t raw_value; - int err = 0; - if ((err = _wireReadRegister(&dev->i2c_dev,INA3221_REG_SHUNTVOLTAGE_1+channel*2, (uint16_t*)&raw_value))) - return err; - float compute = raw_value*0.005; //mV 40uV step - if (voltage) - *voltage = compute; - if(!dev->shunt[channel]) - { - debug("No shunt configured for channel %u. Dev:%u:%X\n", channel+1, dev->bus, dev->addr); - return -EINVAL; - } - if (current) - *current = (compute*1000.0)/dev->shunt[channel]; //mA - return 0; -} - -int ina3221_getSumShuntValue(ina3221_t *dev, float *voltage) -{ - int16_t raw_value; - int err = 0; - if ((err = _wireReadRegister(&dev->i2c_dev, INA3221_REG_SHUNT_VOLTAGE_SUM, (uint16_t*)&raw_value))) - return err; - *voltage = raw_value * 0.02; //uV 40uV step - return 0; -} - -int ina3221_setCriticalAlert(ina3221_t *dev, ina3221_channel_t channel, float current) -{ - int16_t raw_value = current * dev->shunt[channel] * 0.2; // format - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_CRITICAL_ALERT_1 + channel * 2, *(uint16_t*)&raw_value); -} - -int ina3221_setWarningAlert(ina3221_t *dev, ina3221_channel_t channel, float current) -{ - int16_t raw_value = current * dev->shunt[channel] * 0.2; // format - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_WARNING_ALERT_1 + channel * 2, *(uint16_t*)&raw_value); -} - -int ina3221_setSumWarningAlert(ina3221_t *dev, float voltage) -{ - int16_t raw_value = voltage * 50.0; // format - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_SHUNT_VOLTAGE_SUM_LIMIT, *(uint16_t*)&raw_value); -} - -int ina3221_setPowerValidUpperLimit(ina3221_t *dev, float voltage) -{ - if (!dev->config.ebus) - { - debug("Bus not enable. Dev:%u:%X\n", dev->bus, dev->addr); - return -ENOTSUP; - } - int16_t raw_value = voltage * 1000.0; //format - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_VALID_POWER_UPPER_LIMIT, *(uint16_t*)&raw_value); -} - -int ina3221_setPowerValidLowerLimit(ina3221_t *dev, float voltage) -{ - if (!dev->config.ebus) - { - debug("Bus not enable. Dev:%u:%X\n", dev->bus, dev->addr); - return -ENOTSUP; - } - int16_t raw_value = voltage * 1000.0; // round and format - return _wireWriteRegister(&dev->i2c_dev, INA3221_REG_VALID_POWER_LOWER_LIMIT, *(uint16_t*)&raw_value); -} diff --git a/extras/ina3221/ina3221.h b/extras/ina3221/ina3221.h deleted file mode 100644 index 6783dfa..0000000 --- a/extras/ina3221/ina3221.h +++ /dev/null @@ -1,309 +0,0 @@ -/** - * INA3221 driver for esp-open-rtos. - * - * Copyright (c) 2016 Zaltora (https://github.com/Zaltora) - * - * MIT Licensed as described in the file LICENSE - * - */ - -#ifndef INA3221_H_ -#define INA3221_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define INA3221_ADDR_0 (0x40) ///< A0 to GND -#define INA3221_ADDR_1 (0x41) ///< A0 to Vs+ -#define INA3221_ADDR_2 (0x42) ///< A0 to SDA -#define INA3221_ADDR_3 (0x43) ///< A0 to SCL - -#define INA3221_BUS_NUMBER 3 ///< Number of shunt available - -#define INA3221_REG_CONFIG (0x00) -#define INA3221_REG_SHUNTVOLTAGE_1 (0x01) -#define INA3221_REG_BUSVOLTAGE_1 (0x02) -#define INA3221_REG_CRITICAL_ALERT_1 (0x07) -#define INA3221_REG_WARNING_ALERT_1 (0x08) -#define INA3221_REG_SHUNT_VOLTAGE_SUM (0x0D) -#define INA3221_REG_SHUNT_VOLTAGE_SUM_LIMIT (0x0E) -#define INA3221_REG_MASK (0x0F) -#define INA3221_REG_VALID_POWER_UPPER_LIMIT (0x10) -#define INA3221_REG_VALID_POWER_LOWER_LIMIT (0x11) - -/** - * Default register after reset - */ -#define INA3221_DEFAULT_CONFIG (0x7127) -#define INA3221_DEFAULT_MASK (0x0002) -#define INA3221_DEFAULT_POWER_UPPER_LIMIT (0x2710) //10V -#define INA3221_DEFAULT_POWER_LOWER_LIMIT (0x2328) //9V - -#define INA3221_MASK_CONFIG (0x7C00) - -/** - * Number of samples - */ -typedef enum { - INA3221_AVG_1 = 0, ///< Default - INA3221_AVG_4, - INA3221_AVG_16, - INA3221_AVG_64, - INA3221_AVG_128, - INA3221_AVG_256, - INA3221_AVG_512, - INA3221_AVG_1024, -} ina3221_avg_t; - -/** - * Channel selection list - */ -typedef enum { - CHANNEL_1 = 0, - CHANNEL_2, - CHANNEL_3, -} ina3221_channel_t; - -/** - * Conversion time in us - */ -typedef enum { - INA3221_CT_140 = 0, - INA3221_CT_204, - INA3221_CT_332, - INA3221_CT_588, - INA3221_CT_1100, ///< Default - INA3221_CT_2116, - INA3221_CT_4156, - INA3221_CT_8244, -} ina3221_ct_t; - -/** - * Config description register - */ -typedef union -{ - struct { - uint16_t esht : 1; ///< Enable/Disable shunt measure // LSB - uint16_t ebus : 1; ///< Enable/Disable bus measure - uint16_t mode : 1; ///< Single shot measure or continious mode - uint16_t vsht : 3; ///< Shunt voltage conversion time - uint16_t vbus : 3; ///< Bus voltage conversion time - uint16_t avg : 3; ///< number of sample collected and averaged together - uint16_t ch3 : 1; ///< Enable/Disable channel 3 - uint16_t ch2 : 1; ///< Enable/Disable channel 2 - uint16_t ch1 : 1; ///< Enable/Disable channel 1 - uint16_t rst : 1; ///< Set this bit to 1 to reset device // MSB - }; - uint16_t config_register; -} ina3221_config_t; - - -/** - * Mask/enable description register - */ -typedef union -{ - struct { - uint16_t cvrf : 1; ///< Conversion ready flag (1: ready) // LSB - uint16_t tcf : 1; ///< Timing control flag - uint16_t pvf : 1; ///< Power valid flag - uint16_t wf : 3; ///< Warning alert flag (Read mask to clear) (order : Channel1:channel2:channel3) - uint16_t sf : 1; ///< Sum alert flag (Read mask to clear) - uint16_t cf : 3; ///< Critical alert flag (Read mask to clear) (order : Channel1:channel2:channel3) - uint16_t cen : 1; ///< Critical alert latch (1:enable) - uint16_t wen : 1; ///< Warning alert latch (1:enable) - uint16_t scc3 : 1; ///< channel 3 sum (1:enable) - uint16_t scc2 : 1; ///< channel 2 sum (1:enable) - uint16_t scc1 : 1; ///< channel 1 sum (1:enable) - uint16_t : 1; ///< Reserved //MSB - }; - uint16_t mask_register; -} ina3221_mask_t; - -/** - * Device description - */ -typedef struct { - const i2c_dev_t i2c_dev; ///< ina3221 I2C address - const uint16_t shunt[INA3221_BUS_NUMBER]; ///< Memory of shunt value (mOhm) - ina3221_config_t config; ///< Memory of ina3221 config - ina3221_mask_t mask; ///< Memory of mask_config -} ina3221_t; - -/** - * sync internal config buffer and mask with external device register ( When struct is manually set ) - * @param dev Pointer to device descriptor - * @return Non-zero if error occured - */ -int ina3221_sync(ina3221_t *dev); - -/** - * send current config register to trig a measurement in single-shot mode - * @param dev Pointer to device descriptor - * @return Non-zero if error occured - */ -int ina3221_trigger(ina3221_t *dev); - -/** - * get mask register from the device ( Used to read flags ) - * @param dev Pointer to device descriptor - * @return Non-zero if error occured - */ -int ina3221_getStatus(ina3221_t *dev); - -/** - * Set options for bus and shunt - * @param dev Pointer to device descriptor - * @param mode Selection of measurement (true :continuous // false:single-shot) - * @param bus Enable/Disable bus measures - * @param shunt Enable/Disable shunt measures - * @return Non-zero if error occured - */ -int ina3221_setting(ina3221_t *dev ,bool mode, bool bus, bool shunt); - -/** - * Select channel - * @param dev Pointer to device descriptor - * @param ch1 Enable/Disable channel 1 ( true : enable // false : disable ) - * @param ch2 Enable/Disable channel 2 ( true : enable // false : disable ) - * @param ch3 Enable/Disable channel 3 ( true : enable // false : disable ) - * @return Non-zero if error occured - */ -int ina3221_enableChannel(ina3221_t *dev ,bool ch1, bool ch2, bool ch3); - -/** - * Select channel to be sum (don't impact enable channel status) - * @param dev Pointer to device descriptor - * @param ch1 Enable/Disable channel 1 ( true : enable // false : disable ) - * @param ch2 Enable/Disable channel 2 ( true : enable // false : disable ) - * @param ch3 Enable/Disable channel 3 ( true : enable // false : disable ) - * @return Non-zero if error occured - */ -int ina3221_enableChannelSum(ina3221_t *dev ,bool ch1, bool ch2, bool ch3); - -/** - * enable Latch on warning and critical alert pin - * @param dev Pointer to device descriptor - * @param warning Enable/Disable warning latch ( true : Latch // false : Transparent ) - * @param critical Enable/Disable critical latch ( true : Latch // false : Transparent ) - * @return Non-zero if error occured - */ -int ina3221_enableLatchPin(ina3221_t *dev ,bool warning, bool critical); - -/** - * Set average ( number(s) of point measured ) - * @param dev Pointer to device descriptor - * @param avg Value of average selection - * @return Non-zero if error occured - */ -int ina3221_setAverage(ina3221_t *dev, ina3221_avg_t avg); - -/** - * Set conversion time ( time for a measurement ) for bus. - * @param dev Pointer to device descriptor - * @param ct Value of conversion time selection - * @return Non-zero if error occured - */ -int ina3221_setBusConversionTime(ina3221_t *dev,ina3221_ct_t ct); - -/** - * Set conversion time ( time for a measurement ) for shunt. - * @param dev Pointer to device descriptor - * @param ct Value of conversion time selection - * @return Non-zero if error occured - */ -int ina3221_setShuntConversionTime(ina3221_t *dev,ina3221_ct_t ct); - -/** - * Reset device and config like POR (Power-On-Reset) - * @param dev Pointer to device descriptor - * @return Non-zero if error occured - */ -int ina3221_reset(ina3221_t *dev); - -/** - * Get Bus voltage (V) - * @param dev Pointer to device descriptor - * @param channel Select channel value to get - * @param voltage Data pointer to get bus voltage (V) - * @return Non-zero if error occured - */ -int ina3221_getBusVoltage(ina3221_t *dev, ina3221_channel_t channel, float *voltage); - -/** - * Get Shunt voltage (mV) and current (mA) - * @param dev Pointer to device descriptor - * @param channel Select channel value to get - * @param voltage Data pointer to get shunt voltage (mV) - * @param current Data pointer to get shunt voltage (mA) - * @return Non-zero if error occured - */ -int ina3221_getShuntValue(ina3221_t *dev, ina3221_channel_t channel, float *voltage, float *current); - -/** - * Get Shunt-voltage (mV) sum value of selected channels - * @param dev Pointer to device descriptor - * @param channel Select channel value to get - * @param voltage Data pointer to get shunt voltage (mV) - * @return Non-zero if error occured - */ -int ina3221_getSumShuntValue(ina3221_t *dev, float *voltage); - -/** - * Set Critical alert (when measurement(s) is greater that value set ) - * @param dev Pointer to device descriptor - * @param channel Select channel value to set - * @param current Value to set (mA) // max : 163800/shunt (mOhm) - * @return Non-zero if error occured - */ -int ina3221_setCriticalAlert(ina3221_t *dev, ina3221_channel_t channel, float current); - -/** - * Set Warning alert (when average measurement(s) is greater that value set ) - * @param dev Pointer to device descriptor - * @param channel Select channel value to set - * @param current Value to set (mA) // max : 163800/shunt (mOhm) - * @return Non-zero if error occured - */ -int ina3221_setWarningAlert(ina3221_t *dev, ina3221_channel_t channel, float current); - -/** - * Set Sum Warning alert (Compared to each completed cycle of all selected channels : Sum register ) - * @param dev Pointer to device descriptor - * @param voltage voltage to set (mV) // max : 655.32 - * @return Non-zero if error occured - */ -int ina3221_setSumWarningAlert(ina3221_t *dev, float voltage); - -/** - * Set Power-valid upper-limit ( To determine if power conditions are met.)( bus need enable ) - * If bus voltage exceed the value set, PV pin is high - * @param dev Pointer to device descriptor - * @param voltage voltage to set (V) - * @return Non-zero if error occured - */ -int ina3221_setPowerValidUpperLimit(ina3221_t *dev, float voltage); - -/** - * Set Power-valid lower-limit ( To determine if power conditions are met.)( bus need enable ) - * If bus voltage drops below the value set, PV pin is low - * @param dev Pointer to device descriptor - * @param voltage voltage to set (V) - * @return Non-zero if error occured - */ -int ina3221_setPowerValidLowerLimit(ina3221_t *dev, float voltage); - -#ifdef __cplusplus -} -#endif - -#endif /* INA3221_H_ */ diff --git a/extras/l3gd20h/README.md b/extras/l3gd20h/README.md deleted file mode 100644 index 211d37a..0000000 --- a/extras/l3gd20h/README.md +++ /dev/null @@ -1,983 +0,0 @@ -# Driver for the L3GD20H 3-axes digital output gyroscope - -The driver is for the usage with the ESP8266 and [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos). If you can't find it in folder [extras/l3gd20h](https://github.com/SuperHouse/esp-open-rtos/tree/master/extras) of original repository, it is not yet merged. Please take a look to branch [l3gd20h](https://github.com/gschorcht/esp-open-rtos/tree/l3gd20h) of my fork in that case. - -It is also working with ESP32 and [ESP-IDF](https://github.com/espressif/esp-idf.git) using a wrapper component for ESP8266 functions, see folder ```components/esp8266_wrapper```, as well as Linux based systems using a wrapper library. - -The driver can also be used with L3GD20 and L3G4200D. - -## About the sensor - -L3GD20H is a low-power **3-axis angular rate sensor** connected to **I2C** or **SPI** with a full scale of up to **2000 dps**. It supports different measuring rates with a user selectable bandwidth. - -**Main features** of the sensor are: - -- 3 selectable full scales of ±245, ±500, and ±2000 dps -- 7 measuring rates from 12.5 Hz to 800 Hz with 4 bandwidths -- 16 bit angular rate value data output -- 8 bit temperature data output -- 2 dedicated interrupt signals for data and event interrupts -- integrated high-pass filters with 3 modes and 10 different cut off frequencies -- embedded temperature sensor -- embedded 32 levels of 16 bit data output FIFO -- I2C and SPI digital output interface -- embedded power-down and sleep mode with fast turn-on and wake-up - -## Sensor operation - -### Sensor modes - -L3GD20H provides different operating modes. - -- **Power Down mode** is configured automatically after power up boot sequence. In this mode, all gyros are switched off. Therefore, it takes up to 100 ms to switch to another mode. - -- **Normal mode** is the normal measurement mode. All gyros are switched on and at least one axis is enabled for measurements. Measurements are performed at a defined output data rate (**ODR**). - -- **Sleep mode** is the normal mode when no axis is enabled for measurement. In this modes, all gyros are kept switched on. Therefore, it only takes 1/ODR to switch to normal mode if low pass filtering is disabled or 6/ODR if low pass filtering is enabled. - -### Output Data Rates - -In normal mode, measurements are performed at a defined output rate with a user selectable bandwidth. Following output data rates (ODR) are supported. - -Mode | Output Data Rate (ODR) | Driver symbol -:---- |:----------------------:|:------------------ -Power down | - | ```l3gd20h_power_down``` -Normal mode | 12.5 Hz | ```l3gd20h_normal_12_5``` -Normal mode | 25 Hz | ```l3gd20h_normal_25``` -Normal mode | 50 Hz | ```l3gd20h_normal_50``` -Normal mode | 100 Hz | ```l3gd20h_normal_100``` -Normal mode | 200 Hz | ```l3gd20h_normal_200``` -Normal mode | 400 Hz | ```l3gd20h_normal_400``` -Normal mode | 800 Hz | ```l3gd20h_normal_800``` - -Output data rates (ODR) of less than 100 Hz are called Low Data Rates. - -For each ODR, one of the four bandwidths 0...3 can be selected that defines the cutoff frequency (please refer datasheet) of an embedded low pass filter for the measurement results. - -The **easiest way to use the sensor** is simply to initialize it with function ```l3gd20h_init_sensor``` and then set it to the normal mode with function ```l3gd20h_set_mode``` to start measurements with the given output data rate (ODR). The bandwidth of the embedded low-pass filter and the axes x, y and z that are activated for measurements are also given as parameters. - -``` -... -static l3gd20h_sensor_t* sensor = 0; -... -if ((sensor = l3gd20h_init_sensor (I2C_BUS, L3GD20H_I2C_ADDRESS_2, 0))) -{ - ... - l3gd20h_set_mode (sensor, l3gd20h_normal_odr_200, 3, true, true, true); - ... -} -... - -``` -In this example, a L3GD20H sensor connected to I2C is initialized and set to normal mode to start measurements for all three axes with an output data rate (ODR) of 200 Hz and bandwidth 3 (please refer datasheet). - -**Please note:** -- Function ```l3gd20h_init_sensor``` resets the sensor completely, switches it to the power down mode, and returns a pointer to a sensor device data structure on success. All registers are reset to default values and the embedded FIFO is cleared. -- All sensor configurations should be done before calling function ```l3gd20h_set_mode```. In particular, the interrupt configuration should be performed before to avoid loosing the first interrupt and locking the system. - -## Measurement results - -### Output data format - -In normal mode, sensor determines periodically the angular rate for all axes that are enabled for measurement and produces output data with the selected output data rate (ODR). - -Function ```l3gd20h_new_data``` or the data ready interrupt (see below) can be used to determine when new data are available. - -Raw **output data** (**raw data**) are given as 16-bit signed integer values in 2’s complement representation. The range and the resolution of these data depend on the sensitivity of the sensor which is selected by the **full scale** value. The L3GD20H allows to select the following full scales: - -Full Scale | Resolution | Driver symbol ------------:|-----------:|:--------------- -±245 dps | 2 mdps | ```l3gd20h_scale_245_dps``` -±500 dps | 4 mdps | ```l3gd20h_scale_500_dps``` -±2000 dps | 16 mdps | ```l3gd20h_scale_2000_dps``` - -By default, a full scale of ±245 dps is used. Function ```l3gd20h_set_scale``` can be used to change it. - -``` -l3gd20h_set_scale(sensor, l3gd20h_scale_500_dps); -``` - -### Fetching output data - -To get the information whether new data are available, the user task can either use - -- the function ```l3gd20h_new_data``` to check periodically whether new output data are available, or -- the data ready interrupt (DRDY) which is thrown as soon as new output data are available (see below). - -Last measurement results can then be fetched either - -- as raw data using function ```l3gd20h_get_raw_data``` or -- as floating point values in dps (degrees per second) using function ```l3gd20h_get_float_data```. - -It is recommended to use function ```l3gd20h_get_float_data``` since it already converts measurement results to real values according to the selected full scale. - -``` -void user_task_periodic(void *pvParameters) -{ - l3gd20h_float_data_t data; - - while (1) - { - // execute task every 10 ms - vTaskDelay (10/portTICK_PERIOD_MS); - ... - // test for new data - if (!l3gd20h_new_data (sensor)) - continue; - - // fetch new data - if (l3gd20h_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } -} -``` - -**Please note:** -The functions ```l3gd20h_get_float_data``` and ```l3gd20h_get_raw_data``` always return the last available results. If these functions are called more often than measurements are performed, some measurement results are retrieved multiple times. If these functions are called too rarely, some measurement results will be lost. - -### Filters - -L3GD20H provides embedded low-pass as well as high-pass filtering capabilities to improve measurement results. -It is possible to independently apply the filters on the output data and/or on the data used for event interrupt generation (selective axis movement and wake up, see below) separately. Please refer the [datasheet](http://www.st.com/resource/en/datasheet/l3gd20.pdf) or [application note](http://www.st.com/resource/en/application_note/dm00119036.pdf) for more details. - -The filters applied to the output data are selected with function ```l3gd20h_select_output_filter```. Following selections are possible: - -Driver symbol | Low pass filter (LPF2) used | High pass filter (HPF) used -:--------------|:-----------------------------:|:---------------------: -```l3gd20h_no_filter``` | - | - -```l3gd20h_hpf_only``` | x | - -```l3gd20h_lpf2_only``` | - | x -```l3gd20h_hpf_and_lpf2``` | x | x - -These filters can also be applied to data used for event interrupt generation (selective axis movement and wake up). The filter mode is defined by member ```filter``` in the settings of interrupt generator configuration, see function ```l3gd20h_set_int_event_config```. - -While the cutoff frequency of the low pass filter (LPF2) is fixed and depends only on the output data rate (ODR), the mode and the cutoff frequency of the high pass filter can be configured using function ```l3gd20h_config_hpf```. Following HPF modes are available: - -Driver symbol | HPF mode -:--------------|:--------- -```l3gd20h_hpf_normal``` | Normal mode -```l3gd20h_hpf_reference``` | Reference mode -```l3gd20h_hpf_autoreset``` | Auto-reset on interrupt - -For each output data rate (ODR), 10 different HPF cutoff frequencies can be used. - -``` -... -// select LPF/HPF -l3gd20h_select_output_filter (sensor, l3gd20h_hpf_only); - -// configure HPF in normal mode with cutoff frequency 0 -l3gd20h_config_hpf (sensor, l3gd20h_hpf_normal, 2); - -// reset the reference by a dummy read -l3gd20h_get_hpf_ref (sensor); -... -``` - -**Please note:** Since same filters are used for the output data as well as the data used for event interrupt generation (selective axes movement / wake up), the configuration of the filters always affects both data. - - -### FIFO - -In order to limit the rate at which the host processor has to fetch the data, the L3GD20H embeds a first-in first-out buffer (FIFO). This is in particular helpful at high output data rates. The FIFO buffer can work in seven different modes and is able to store up to 32 angular rate samples. Please refer the [datasheet](http://www.st.com/resource/en/datasheet/l3gd20.pdf) or [application note](http://www.st.com/resource/en/application_note/dm00119036.pdf) for more details. - -Driver symbol | FIFO mode ---------------|------------------------- -```l3gd20h_bypass``` | Bypass mode (FIFO is not used) -```l3gd20h_fifo``` | FIFO mode -```l3gd20h_stream``` | Stream mode -```l3gd20h_stream_to_fifo``` | Stream-to-FIFO mode -```l3gd20h_bypass_to_stream``` | Bypass-to-Stream mode -```l3gd20h_dynamic_stream``` | Dynamic Stream mode -```l3gd20h_bypass_to_fifo``` | Bypass to FIFO mode - -The FIFO mode can be set using function ```l3gd20h_set_fifo_mode```. This function takes two parameters, the FIFO mode and a threshold value which defines a watermark level. When the FIFO content exceeds this level, a watermark flag is set and an interrupt can be generated. They can be used to gather a minimum number of axes angular rate samples with the sensor before the data are fetched as a single read operation from the sensor. - -``` -... -// clear FIFO -l3gd20h_set_fifo_mode (sensor, l3gd20h_bypass, 0); - -// activate FIFO mode -l3gd20h_set_fifo_mode (sensor, l3gd20h_stream, 10); -... -``` - -**Please note**: To clear the FIFO at any time, set the FIFO mode to ```l3gd20h_bypass``` and back to the desired FIFO mode. - -To read data from the FIFO, simply use either - -- the function ```l3gd20h_get_raw_data_fifo``` to all get raw output data stored in FIFO or -- the function ```l3gd20h_get_float_data_fifo``` to get all data stored in FIFO and converted to real values in dps (degrees per second). - -Both functions clear the FIFO and return the number of samples read from the FIFO. - -``` -void user_task_periodic (void *pvParameters) -{ - l3gd20h_float_data_fifo_t data; - - while (1) - { - // execute task every 500 ms - vTaskDelay (500/portTICK_PERIOD_MS); - ... - // test for new data - if (!l3gd20h_new_data (sensor)) - continue; - - // fetch data from fifo - uint8_t num = l3gd20h_get_float_data_fifo (sensor, data); - - for (int i = 0; i < num; i++) - { - // do something with data[i] ... - } -} -``` - -## Interrupts - -The L3GD20H allows to activate interrupts on two dedicated interrupt signals - -- for data interrupts (data ready and FIFO status) on signal **```DRDY/INT2```**, and -- for event interrupts (axis movement and wake up) on signal **```INT1```**. - -### Data interrupts (data ready and FIFO status) on signal **```DRDY/INT2```** - -Interrupts on signal ```DRDY/INT2``` can be generated by following sources: - -Interrupt source | Driver symbol -:-----------------|:------------- -Output data become ready to read | ```l3gd20h_int_data_ready``` -FIFO content exceeds the watermark level | ```l3gd20h_int_fifo_threshold``` -FIFO is completely filled | ```l3gd20h_int_fifo_overrun``` -FIFO becomes empty | ```l3gd20h_int_fifo_empty``` - -Each of these interrupt sources can be enabled or disabled separately with function ```l3gd20h_enable_int```. By default all interrupt sources are disabled. - -``` -l3gd20h_enable_int (sensor, l3gd20h_int_data_ready, true); -``` - -Whenever the interrupt signal ```DRDY/INT2``` is generated, function ```l3gd20h_get_int_data_source``` can be used to determine the source of the interrupt signal. This function returns a data structure of type ```l3gd20h_int_data_source_t``` that contains a boolean member for each source that can be tested for true. - -``` -void int2_handler () -{ - l3gd20h_int_data_source_t source; - - // get the interrupt source of INT2 - l3gd20h_get_int_data_source (sensor, &source); - - // in case of data ready interrupt, get the results and do something with them - if (source.data_ready) - { - l3gd20h_get_float_data (sensor, &data) - - // do something with data - ... - } -} -``` - -### Event interrupts (Axes movement and wake up) on signal **```INT1```** - -This interrupt signal allows to recognize independent rotations of the x, y and z axes. For this purpose, a separate threshold can be defined for each axis. If activated, the angular rate of each axis is compared with its threshold to check whether it is below or above the threshold. The results of all activated comparisons are combined OR or AND to generate the interrupt signal. - -The configuration of the thresholds, the activated comparisons and selected AND/OR combination allows to recognize special situations like selective axis movement (SA) or axes movement wakeup (WU). - -- **Selective axis movement recognition (SA)** means that only one axis is rotating. This is the case if the angular rate of selected axis is above its threshold AND angular rates of all other axes are below their thresholds. - -- **Axis movement wake up (WU)** means that the angular rate of any axis is above its threshold (OR). - -To configure event interrupts, the function ```l3gd20h_set_int_event_config``` has to be used with a parameter of structured data type ```l3gd20h_int_event_config_t``` which contains the configuration. For example, selective axis movement recognition (SA) for the z-axis could be configured as following: - -``` -l3gd20h_int_event_config_t int_cfg; - -// thresholds -int_cfg.x_threshold = 100; -int_cfg.y_threshold = 100; -int_cfg.z_threshold = 1000; - -// x axis below threshold -int_cfg.x_low_enabled = false; -int_cfg.x_high_enabled = true; - -// y axis below threshold -int_cfg.y_low_enabled = true; -int_cfg.y_high_enabled = false; - -// z axis below threshold -int_cfg.z_low_enabled = false; -int_cfg.z_high_enabled = true; - -// AND combination of all conditions -int_cfg.and_or = true; - -// further parameters -int_cfg.filter = l3gd20h_hpf_only; -int_cfg.latch = true; -int_cfg.duration = 0; -int_cfg.wait = false; - -// set the configuration and enable the interrupt -l3gd20h_set_int_cfg (sensor, &int_cfg); -l3gd20h_enable_int (sensor, l3gd20h_int_event, true); -``` - -Furthermore, with this data structure it is also configured - -- whether the interrupt signal should latched until the interrupt source is read, -- which filters are applied to data used for interrupt generation, -- which time in 1/ODR an interrupt condition has to be given before the interrupt is generated, and -- whether this time is also used when interrupt condition in no longer given before interrupt signal is reset. - -Function ```l3gd20h_enable_int``` is used to enable or disable the event interrupt generation. - -As with data ready and FIFO interrupts, function ```l3gd20h_get_int1_source``` can be used to determine the source of the interrupt signal whenever it is generated. This function returns a data structure of type ```l3gd20h_int1_source_t``` that contain a boolean member for each source that can be tested for true. - -``` -void int1_handler () -{ - l3gd20h_int_event_source_t source; - - // get the source of INT1 reset INT1 signal - l3gd20h_get_int_event_source (sensor, &source); - - // if all conditions where true interrupt - if (source.active) - { - l3gd20h_get_float_data (sensor, &data) - - // do something with data - ... - } -} -``` -**Please note:** If the interrupt is configured to be latched, the interrupt signal is active until the interrupt source is read. Otherwise the interrupt signal is only active as long as the interrupt condition is satisfied. - -**Please note** Activating all threshold comparisons and the OR combination is the most flexible way, functions like selective axis movement can then be realized combining the different interrupt sources. Following example realizes also the selective axis movement recognition (SA) for the z-axis. - -``` -l3gd20h_int_event_config_t int_cfg; - -// thresholds -int_cfg.x_threshold = 100; -int_cfg.y_threshold = 100; -int_cfg.z_threshold = 100; - -// x axis -int_cfg.x_low_enabled = true; -int_cfg.x_high_enabled = true; - -// y axis -int_cfg.y_low_enabled = true; -int_cfg.y_high_enabled = true; - -// z axis -int_cfg.z_low_enabled = true; -int_cfg.z_high_enabled = true; - -// OR combination of all conditions -int_cfg.and_or = false; -... -// set the configuration and enable the interrupt -l3gd20h_set_int_cfg (sensor, &int_cfg); -l3gd20h_enable_int (sensor, l3gd20h_int_event, true); -``` - -``` -void int1_handler () -{ - l3gd20h_int1_source_t source; - - // get the interrupt source of INT1 - l3gd20h_get_int1_source (sensor, &source); - - // if all conditions where true interrupt - if (source.y_low && source.y_low && source.z_high) - { - // selective axis movement of z-axis - ... - } -} -``` - -### Interrupt signal properties - -By default, interrupt signals are high active. Using function ```l3gd20h_config_int_signals```, the level of the interrupt signal and the type of the interrupt outputs can be changed. - -Driver symbol | Meaning -:-------------|:------- -```l3gd20h_high_active``` | Interrupt signal is high active (default) -```l3gd20h_low_active``` | Interrupt signal is low active - -Driver symbol | Meaning -:-------------|:------- -```l3gd20h_push_pull``` | Interrupt output is pushed/pulled -```l3gd20h_open_drain``` | Interrupt output is open-drain - -## Temperature sensor - -The L3GD20H contains a temperature sensor. Function ```l3gd20h_get_temperature``` can be used to get the temperature. The temperature is given as 8-bit signed integer values in 2’s complement. - -## Low level functions - -The L3GD20H is a very complex and flexible sensor with a lot of features. It can be used for a big number of different use cases. Since it is quite impossible to implement a high level interface which is generic enough to cover all the functionality of the sensor for all different use cases, there are two low level interface functions that allow direct read and write access to the registers of the sensor. - -``` -bool l3gd20h_reg_read (l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -bool l3gd20h_reg_write (l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -``` -**Please note** -These functions should only be used to do something special that is not covered by the high level interface AND if you exactly know what you do and what it might affect. Please be aware that it might affect the high level interface. - - -## Usage - -First, the hardware configuration has to be established. - -### Hardware configurations - -Following figure shows a possible hardware configuration for ESP8266 and ESP32 if I2C interface is used to connect the sensor. - -``` - +-----------------+ +----------+ - | ESP8266 / ESP32 | | L3GD20H | - | | | | - | GPIO 14 (SCL) >-----> SCL | - | GPIO 13 (SDA) <-----> SDA | - | GPIO 5 <------ INT1 | - | GPIO 4 <------ DRDY/INT2| - +-----------------+ +----------+ -``` - -If SPI interface is used, configuration for ESP8266 and ESP32 could look like following. - -``` - +-----------------+ +----------+ +-----------------+ +----------+ - | ESP8266 | | L3GD20H | | ESP32 | | L3GD20H | - | | | | | | | | - | GPIO 14 (SCK) ------> SCK | | GPIO 16 (SCK) ------> SCK | - | GPIO 13 (MOSI)------> SDI | | GPIO 17 (MOSI)------> SDI | - | GPIO 12 (MISO)<------ SDO | | GPIO 18 (MISO)<------ SDO | - | GPIO 2 (CS) ------> CS | | GPIO 19 (CS) ------> CS | - | GPIO 5 <------ INT1 | | GPIO 5 <------ INT1 | - | GPIO 4 <------ DRDY/INT2| | GPIO 4 <------ DRDY/INT2| - +-----------------+ +----------+ +-----------------+ +----------+ -``` - -### Communication interface settings - -Dependent on the hardware configuration, the communication interface and interrupt settings have to be defined. In case ESP32 is used, the configuration could look like - -``` -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define INT1_PIN 5 -#define INT2_PIN 4 -``` - -### Main program - -#### Initialization - -If I2C interfaces are used, they have to be initialized first. - -``` -i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); -``` - -SPI interface has only to be initialized explicitly on ESP32 platform to declare the GPIOs that are used for SPI interface. - -``` -#ifdef ESP_PLATFORM -spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); -#endif -``` - -Once the interfaces are initialized, function ```l3gd20h_init_sensor``` has to be called for each L3GD20H sensor in order to initialize the sensor and to check its availability as well as its error state. This function returns a pointer to a sensor device data structure or NULL in case of error. - -The parameter *bus* specifies the ID of the I2C or SPI bus to which the sensor is connected. - -``` -static l3gd20h_sensor_t* sensor; -``` - -For sensors connected to an I2C interface, a valid I2C slave address has to be defined as parameter *addr*. In that case parameter *cs* is ignored. - -``` -sensor = l3gd20h_init_sensor (I2C_BUS, L3GD20H_I2C_ADDRESS_2, 0); - -``` - -If parameter *addr* is 0, the sensor is connected to a SPI bus. In that case, parameter *cs* defines the GPIO used as CS signal. - -``` -sensor = l3gd20h_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - -``` - -The remaining of the program is independent on the communication interface. - -#### Configuring the sensor - -Optionally, you could wish to set some measurement parameters. For details see the sections above, the header file of the driver ```l3gd20h.h```, and of course the data sheet of the sensor. - -#### Starting measurements - -As last step, the sensor mode has be set to start periodic measurement. The sensor mode can be changed anytime later. - -``` -... -// start periodic measurement with output data rate of 12.5 Hz -l3gd20h_set_mode (sensor, l3gd20h_normal_odr_12_5, 3, true, true, true); -... -``` - -#### Periodic user task - -Finally, a user task that uses the sensor has to be created. - -**Please note:** To avoid concurrency situations when driver functions are used to access the sensor, for example to read data, the user task must not be created until the sensor configuration is completed. - -The user task can use different approaches to fetch new data. Either new data are fetched periodically or interrupt signals are used when new data are available or a configured event happens. - -If new data are fetched **periodically** the implementation of the user task is quite simple and could look like following. - -``` -void user_task_periodic(void *pvParameters) -{ - l3gd20h_float_data_t data; - - while (1) - { - // execute task every 10 ms - vTaskDelay (10/portTICK_PERIOD_MS); - ... - // test for new data - if (!l3gd20h_new_data (sensor)) - continue; - - // fetch new data - if (l3gd20h_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } -} -... -// create a user task that fetches data from sensor periodically -xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); -``` - -The user task simply tests periodically with a higher rate than the output data rate (ODR) of the sensor whether new data are available. If new data are available, it fetches the data. - -#### Interrupt user task - -A different approach is to use one of the **interrupts** INT1 or INT2. - -- **```DRDY/INT2```** is triggered when new data become available or the FIFO queue status changes. -- **```INT1```** is triggered when configured axis movements are recognized. - -In both cases, the user has to implement an interrupt handler that either fetches the data directly or triggers a task, that is waiting to fetch the data. - -``` -static QueueHandle_t gpio_evt_queue = NULL; - -// Interrupt handler which resumes sends an event to the waiting user_task_interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -// User task that fetches the sensor values - -void user_task_interrupt (void *pvParameters) -{ - uint32_t gpio_num; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - // test for new data - if (!l3gd20h_new_data (sensor)) - continue; - - // fetch new data - if (l3gd20h_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } - } -} -... - -// create a task that is triggered only in case of interrupts to fetch the data - -xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); -... -``` - -In this example, there is - -- a task that is fetching data when it receives an event, and -- an interrupt handler that generates the event on interrupt. - -Finally, interrupt handlers have to be activated for the GPIOs which are connected to the interrupt signals. - -``` -// configure interrupt pins for *INT1* and *INT2* signals and set the interrupt handler -gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); -gpio_set_interrupt(INT2_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); -``` - -Furthermore, the interrupts have to be enabled and configured in the L3GD20H sensor, see section **Interrupts** above. - -## Full Example - -``` -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED // if defined SPI is used, otherwise I2C -// #define FIFO_MODE // multiple sample read mode -// #define INT_DATA // data interrupts used (data ready and FIFO status) -// #define INT_EVENT // event interrupts used (axis movement and wake up) - -#if defined(INT_EVENT) || defined(INT_DATA) -#define INT_USED -#endif - -/* -- includes -------------------------------------------------- */ - -#include "l3gd20h.h" - -/* -- platform dependent definitions ---------------------------- */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth -#define TASK_STACK_DEPTH 2048 - -// define SPI interface for L3GD20H sensors -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth -#define TASK_STACK_DEPTH 256 - -// define SPI interface for L3GD20H sensors -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// define I2C interfaces for L3GD20H sensors -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// define GPIOs for interrupt -#define INT1_PIN 5 -#define INT2_PIN 4 - -/* -- user tasks ---------------------------------------------- */ - -static l3gd20h_sensor_t* sensor; - -/** - * Common function used to get sensor data. - */ -void read_data (void) -{ - #ifdef FIFO_MODE - - l3gd20h_float_data_fifo_t data; - - if (l3gd20h_new_data (sensor)) - { - uint8_t num = l3gd20h_get_float_data_fifo (sensor, data); - printf("%.3f L3GD20H num=%d\n", (double)sdk_system_get_time()*1e-3, num); - for (int i = 0; i < num; i++) - // max. full scale is +-2000 dps and best sensitivity is 1 mdps, i.e. 7 digits - printf("%.3f L3GD20H (xyz)[dps]: %+9.3f %+9.3f %+9.3f\n", - (double)sdk_system_get_time()*1e-3, data[i].x, data[i].y, data[i].z); - } - - #else // !FIFO_MODE - - l3gd20h_float_data_t data; - - if (l3gd20h_new_data (sensor) && - l3gd20h_get_float_data (sensor, &data)) - // max. full scale is +-2000 dps and best sensitivity is 1 mdps, i.e. 7 digits - printf("%.3f L3GD20H (xyz)[dps]: %+9.3f %+9.3f %+9.3f\n", - (double)sdk_system_get_time()*1e-3, data.x, data.y, data.z); - - #endif // FIFO_MODE -} - - -#ifdef INT_USED -/** - * In this case, axes movement wake up interrupt *INT1* and/or data ready - * interrupt *INT2* are used. While data ready interrupt *INT2* is generated - * every time new data are available or the FIFO status changes, the axes - * movement wake up interrupt *INT1* is triggered when output data across - * defined thresholds. - * - * When interrupts are used, the user has to define interrupt handlers that - * either fetches the data directly or triggers a task which is waiting to - * fetch the data. In this example, the interrupt handler sends an event to - * a waiting task to trigger the data gathering. - */ - -static QueueHandle_t gpio_evt_queue = NULL; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint8_t gpio_num; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - if (gpio_num == INT1_PIN) - { - l3gd20h_int_event_source_t source; - - // get the source of INT1 reset INT1 signal - l3gd20h_get_int_event_source (sensor, &source); - - // in case of data ready interrupt, get the results and do something with them - if (source.active) - read_data (); - } - else if (gpio_num == INT2_PIN) - { - l3gd20h_int_data_source_t source; - - // get the source of INT2 - l3gd20h_get_int_data_source (sensor, &source); - - // if data ready interrupt, get the results and do something with them - read_data(); - } - } - } -} - -// Interrupt handler which resumes sends an event to the waiting user_task_interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -#else // !INT_USED - -/* - * In this case, no interrupts are used and the user task fetches the sensor - * values periodically every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - vTaskDelay (100/portTICK_PERIOD_MS); - - while (1) - { - // read sensor data - read_data (); - - // passive waiting until 1 second is over - vTaskDelay (100/portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ---------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - // init the sensor connnected to SPI - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = l3gd20h_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else // I2C - - // init all I2C bus interfaces at which L3GD20H sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address L3GD20H_I2C_ADDRESS_2 connected to I2C_BUS. - sensor = l3gd20h_init_sensor (I2C_BUS, L3GD20H_I2C_ADDRESS_2, 0); - - #endif // SPI_USED - - if (sensor) - { - #ifdef INT_USED - - /** --- INTERRUPT CONFIGURATION PART ---- */ - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode to avoid losing interrupts - - // create an event queue to send interrupt events from interrupt - // handler to the interrupt task - gpio_evt_queue = xQueueCreate(10, sizeof(uint8_t)); - - // configure interupt pins for *INT1* and *INT2* signals and set the - // interrupt handler - gpio_enable(INT1_PIN, GPIO_INPUT); - gpio_enable(INT2_PIN, GPIO_INPUT); - gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - gpio_set_interrupt(INT2_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - - #endif // INT_USED - - /** -- SENSOR CONFIGURATION PART --- */ - - // set type and polarity of INT signals if necessary - // l3gd20h_config_int_signals (dev, l3gd20h_push_pull, l3gd20h_high_active); - - #ifdef INT_EVENT - // enable event interrupts (axis movement and wake up) - l3gd20h_int_event_config_t int_cfg; - - l3gd20h_get_int_event_config (sensor, &int_cfg); - - int_cfg.x_high_enabled = true; - int_cfg.y_high_enabled = true; - int_cfg.z_high_enabled = true; - int_cfg.x_low_enabled = false; - int_cfg.y_low_enabled = false; - int_cfg.z_low_enabled = false; - int_cfg.x_threshold = 1000; - int_cfg.y_threshold = 1000; - int_cfg.z_threshold = 1000; - - int_cfg.filter = l3gd20h_hpf_only; - int_cfg.and_or = false; - int_cfg.duration = 0; - int_cfg.latch = true; - - l3gd20h_set_int_event_config (sensor, &int_cfg); - l3gd20h_enable_int (sensor, l3gd20h_int_event, true); - - #endif // INT_EVENT - - #ifdef INT_DATA - // enable data ready (DRDY) and FIFO interrupt signal *INT2* - // NOTE: DRDY and FIFO interrupts must not be enabled at the same time - #ifdef FIFO_MODE - l3gd20h_enable_int (sensor, l3gd20h_int_fifo_overrun, true); - l3gd20h_enable_int (sensor, l3gd20h_int_fifo_threshold, true); - #else - l3gd20h_enable_int (sensor, l3gd20h_int_data_ready, true); - #endif - #endif // INT_DATA - - #ifdef FIFO_MODE - // clear FIFO and activate FIFO mode if needed - l3gd20h_set_fifo_mode (sensor, l3gd20h_bypass, 0); - l3gd20h_set_fifo_mode (sensor, l3gd20h_stream, 10); - #endif - - // select LPF/HPF, configure HPF and reset the reference by dummy read - l3gd20h_select_output_filter (sensor, l3gd20h_hpf_only); - l3gd20h_config_hpf (sensor, l3gd20h_hpf_normal, 0); - l3gd20h_get_hpf_ref (sensor); - - // LAST STEP: Finally set scale and sensor mode to start measurements - l3gd20h_set_scale(sensor, l3gd20h_scale_245_dps); - l3gd20h_set_mode (sensor, l3gd20h_normal_odr_12_5, 3, true, true, true); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - #ifdef INT_USED - - // create a task that is triggered only in case of interrupts to fetch the data - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a user task that fetches data from sensor periodically - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #endif - } - else - printf("Could not initialize L3GD20H sensor\n"); -} -``` - diff --git a/extras/l3gd20h/component.mk b/extras/l3gd20h/component.mk deleted file mode 100644 index a7e6b4a..0000000 --- a/extras/l3gd20h/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/l3gd20h - -# expected anyone using L3GD20H driver includes it as 'l3gd20h/l3gd20h.h' -INC_DIRS += $(l3gd20h_ROOT).. -INC_DIRS += $(l3gd20h_ROOT) - -# args for passing into compile rule generation -l3gd20h_SRC_DIR = $(l3gd20h_ROOT) - -$(eval $(call component_compile_rules,l3gd20h)) diff --git a/extras/l3gd20h/l3gd20h.c b/extras/l3gd20h/l3gd20h.c deleted file mode 100644 index 4960e24..0000000 --- a/extras/l3gd20h/l3gd20h.c +++ /dev/null @@ -1,1091 +0,0 @@ -/* - * Driver for L3GD20H 3-axes digital output gyroscope connected to I2C or SPI. - * It can also be used with L3GD20 and L3G4200D. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - * - * The information provided is believed to be accurate and reliable. The - * copyright holder assumes no responsibility for the consequences of use - * of such information nor for any infringement of patents or other rights - * of third parties which may result from its use. No license is granted by - * implication or otherwise under any patent or patent rights of the copyright - * holder. - */ - -#include -#include - -#include "l3gd20h.h" - -#ifdef debug -#undef debug -#undef debug_dev -#endif - -#ifdef error -#undef error -#undef error_dev -#endif - -#if defined(L3GD20H_DEBUG_LEVEL_2) -#define debug(s, f, ...) printf("%s %s: " s "\n", "L3GD20H", f, ## __VA_ARGS__) -#define debug_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "L3GD20H", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define debug(s, f, ...) -#define debug_dev(s, f, d, ...) -#endif - -#if defined(L3GD20H_DEBUG_LEVEL_1) || defined(L3GD20H_DEBUG_LEVEL_2) -#define error(s, f, ...) printf("%s %s: " s "\n", "L3GD20H", f, ## __VA_ARGS__) -#define error_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "L3GD20H", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define error(s, f, ...) -#define error_dev(s, f, d, ...) -#endif - -// register addresses -#define L3GD20H_REG_WHO_AM_I 0x0f -#define L3GD20H_REG_CTRL1 0x20 -#define L3GD20H_REG_CTRL2 0x21 -#define L3GD20H_REG_CTRL3 0x22 -#define L3GD20H_REG_CTRL4 0x23 -#define L3GD20H_REG_CTRL5 0x24 -#define L3GD20H_REG_REFERENCE 0x25 -#define L3GD20H_REG_OUT_TEMP 0x26 -#define L3GD20H_REG_STATUS 0x27 -#define L3GD20H_REG_OUT_X_L 0x28 -#define L3GD20H_REG_OUT_X_H 0x29 -#define L3GD20H_REG_OUT_Y_L 0x2a -#define L3GD20H_REG_OUT_Y_H 0x2b -#define L3GD20H_REG_OUT_Z_L 0x2c -#define L3GD20H_REG_OUT_Z_H 0x2d -#define L3GD20H_REG_FIFO_CTRL 0x2e -#define L3GD20H_REG_FIFO_SRC 0x2f -#define L3GD20H_REG_IG_CFG 0x30 -#define L3GD20H_REG_IG_SRC 0x31 -#define L3GD20H_REG_IG_THS_XH 0x32 -#define L3GD20H_REG_IG_THS_XL 0x33 -#define L3GD20H_REG_IG_THS_YH 0x34 -#define L3GD20H_REG_IG_THS_YL 0x35 -#define L3GD20H_REG_IG_THS_ZH 0x36 -#define L3GD20H_REG_IG_THS_ZL 0x37 -#define L3GD20H_REG_IG_DURATION 0x38 -#define L3GD20H_REG_LOW_ODR 0x39 - -// register structure definitions -#define L3GD20H_ZYXOR 0x80 // L3GD20H_REG_STATUS<7> -#define L3GD20H_ZOR 0x40 // L3GD20H_REG_STATUS<6> -#define L3GD20H_YOR 0x20 // L3GD20H_REG_STATUS<5> -#define L3GD20H_XOR 0x10 // L3GD20H_REG_STATUS<4> -#define L3GD20H_ZYXDA 0x08 // L3GD20H_REG_STATUS<3> -#define L3GD20H_ZDA 0x04 // L3GD20H_REG_STATUS<2> -#define L3GD20H_YDA 0x02 // L3GD20H_REG_STATUS<1> -#define L3GD20H_XDA 0x01 // L3GD20H_REG_STATUS<0> - -#define L3GD20H_ANY_DATA_READY 0x07 // L3GD20H_REG_STATUS<2:0> - -#define L3GD20H_ODR 0xc0 // L3GD20H_REG_CTRL1<7:6> -#define L3GD20H_BW 0x30 // L3GD20H_REG_CTRL1<5:4> -#define L3GD20H_POWER_MODE 0x08 // L3GD20H_REG_CTRL1<3> -#define L3GD20H_Z_ENABLED 0x04 // L3GD20H_REG_CTRL1<2> -#define L3GD20H_Y_ENABLED 0x02 // L3GD20H_REG_CTRL1<1> -#define L3GD20H_X_ENABLED 0x01 // L3GD20H_REG_CTRL1<0> - -#define L3GD20H_HPF_MODE 0x30 // L3GD20H_REG_CTRL2<5:4> -#define L3GD20H_HPF_CUTOFF 0x0f // L3GD20H_REG_CTRL2<3:0> - -#define L3GD20H_INT1_IG 0x80 // L3GD20H_REG_CTRL3<7> -#define L3GD20H_INT1_BOOT 0x40 // L3GD20H_REG_CTRL3<6> -#define L3GD20H_HL_ACTIVE 0x20 // L3GD20H_REG_CTRL3<5> -#define L3GD20H_PP_OD 0x10 // L3GD20H_REG_CTRL3<4> -#define L3GD20H_INT2_DRDY 0x08 // L3GD20H_REG_CTRL3<3> -#define L3GD20H_INT2_FTH 0x04 // L3GD20H_REG_CTRL3<2> -#define L3GD20H_INT2_ORUN 0x02 // L3GD20H_REG_CTRL3<1> -#define L3GD20H_INT2_EMPTY 0x01 // L3GD20H_REG_CTRL3<0> - -#define L3GD20H_BLOCK_DATA_UPDATE 0x80 // L3GD20H_REG_CTRL4<7> -#define L3GD20H_BIG_LITTLE_ENDIAN 0x40 // L3GD20H_REG_CTRL4<6> -#define L3GD20H_FULL_SCALE 0x30 // L3GD20H_REG_CTRL4<5:4> - -#define L3GD20H_BOOT 0x80 // L3GD20H_REG_CTRL5<7> -#define L3GD20H_FIFO_EN 0x40 // L3GD20H_REG_CTRL5<6> -#define L3GD20H_STOP_ON_FTH 0x20 // L3GD20H_REG_CTRL5<5> -#define L3GD20H_HP_ENABLED 0x10 // L3GD20H_REG_CTRL5<4> -#define L3GD20H_IG_SEL 0x0c // L3GD20H_REG_CTRL5<3:2> -#define L3GD20H_OUT_SEL 0x03 // L3GD20H_REG_CTRL5<1:0> - -#define L3GD20H_FIFO_MODE 0xe0 // L3GD20H_REG_FIFO_CTRL<7:5> -#define L3GD20H_FIFO_THRESH 0x1f // L3GD20H_REG_FIFO_CTRL<4:0> - -#define L3GD20H_FIFO_THS 0x80 // L3GD20H_REG_FIFO_SRC<7> -#define L3GD20H_FIFO_OVR 0x40 // L3GD20H_REG_FIFO_SRC<6> -#define L3GD20H_FIFO_EMPTY 0x20 // L3GD20H_REG_FIFO_SRC<5> -#define L3GD20H_FIFO_FFS 0x1f // L3GD20H_REG_FIFO_SRC<4:0> - -#define L3GD20H_INT1_AND_OR 0x80 // L3GD20H_REG_IG_CFG<7> -#define L3GD20H_INT1_LATCH 0x40 // L3GD20H_REG_IG_CFG<6> -#define L3GD20H_INT1_Z_HIGH 0x20 // L3GD20H_REG_IG_CFG<5>, L3GD20H_REG_IG_SRC<5> -#define L3GD20H_INT1_Z_LOW 0x10 // L3GD20H_REG_IG_CFG<4>, L3GD20H_REG_IG_SRC<4> -#define L3GD20H_INT1_Y_HIGH 0x08 // L3GD20H_REG_IG_CFG<3>, L3GD20H_REG_IG_SRC<3> -#define L3GD20H_INT1_Y_LOW 0x04 // L3GD20H_REG_IG_CFG<2>, L3GD20H_REG_IG_SRC<2> -#define L3GD20H_INT1_X_HIGH 0x02 // L3GD20H_REG_IG_CFG<1>, L3GD20H_REG_IG_SRC<1> -#define L3GD20H_INT1_X_LOW 0x01 // L3GD20H_REG_IG_CFG<0>, L3GD20H_REG_IG_SRC<0> - -#define L3GD20H_INT1_ACTIVE 0x40 // L3GD20H_REG_IG_SRC<7> - -#define L3GD20H_INT1_WAIT 0x80 // L3GD20H_REG_IG_DURATION<7> -#define L3GD20H_INT1_DURATION 0x3f // L3GD20H_REG_IG_DURATION<6:0> - -#define L3GD20H_DRDY_HL 0x20 // L3GD20H_REG_LOW_ODR<5> -#define L3GD20H_SW_RESET 0x04 // L3GD20H_REG_LOW_ODR<2> -#define L3GD20H_LOW_ODR 0x01 // L3GD20H_REG_LOW_ODR<0> - -/** Forward declaration of functions for internal use */ - -static bool l3gd20h_reset (l3gd20h_sensor_t* dev); -static bool l3gd20h_is_available(l3gd20h_sensor_t* dev); - -static bool l3gd20h_update_reg (l3gd20h_sensor_t* dev, uint8_t reg, uint8_t mask, uint8_t val); - -static uint8_t l3gd20h_get_reg_bit (uint8_t byte, uint8_t mask); -static void l3gd20h_set_reg_bit (uint8_t* byte, uint8_t mask, uint8_t bit); - -static bool l3gd20h_i2c_read (l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool l3gd20h_i2c_write (l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool l3gd20h_spi_read (l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool l3gd20h_spi_write (l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); - -#define msb_lsb_to_type(t,b,o) (t)(((t)b[o] << 8) | b[o+1]) -#define lsb_msb_to_type(t,b,o) (t)(((t)b[o+1] << 8) | b[o]) -#define lsb_to_type(t,b,o) (t)(b[o]) - -l3gd20h_sensor_t* l3gd20h_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs) -{ - l3gd20h_sensor_t* dev; - - if ((dev = malloc (sizeof(l3gd20h_sensor_t))) == NULL) - return NULL; - - // init sensor data structure - dev->bus = bus; - dev->addr = addr; - dev->cs = cs; - - dev->error_code = L3GD20H_OK; - dev->scale = l3gd20h_scale_245_dps; - dev->fifo_mode = l3gd20h_bypass; - - // if addr==0 then SPI is used and has to be initialized - if (!addr && !spi_device_init (bus, cs)) - { - error_dev ("Could not initialize SPI interface.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // check availability of the sensor - if (!l3gd20h_is_available (dev)) - { - error_dev ("Sensor is not available.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // reset the sensor - if (!l3gd20h_reset(dev)) - { - error_dev ("Could not reset the sensor device.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - l3gd20h_update_reg (dev, L3GD20H_REG_CTRL4, L3GD20H_FULL_SCALE, l3gd20h_scale_245_dps); - l3gd20h_update_reg (dev, L3GD20H_REG_CTRL4, L3GD20H_BLOCK_DATA_UPDATE, 1); - - return dev; -} - - -bool l3gd20h_set_mode (l3gd20h_sensor_t* dev, l3gd20h_mode_t mode, uint8_t bw, - bool x, bool y, bool z) -{ - if (!dev) return false; - - if (bw > 3) - { - error_dev ("Bandwidth value %d not in range 0 ... 3", __FUNCTION__, dev, bw); - dev->error_code = L3GD20H_WRONG_BANDWIDTH; - return false; - } - - if (dev->mode != l3gd20h && mode != l3gd20h_power_down && mode < l3gd20h_normal_odr_100) - { - error_dev ("Low ODRs are not available for this sensor", __FUNCTION__, dev); - dev->error_code = L3GD20H_ODR_NOT_AVAILABLE; - return false; - } - - dev->error_code = L3GD20H_OK; - - uint8_t reg1 = 0; - uint8_t reg2 = 0; - - if (mode != l3gd20h_power_down) - { - // read current register values - if (!l3gd20h_reg_read (dev, L3GD20H_REG_CTRL1, ®1, 1) || - !l3gd20h_reg_read (dev, L3GD20H_REG_LOW_ODR, ®2, 1)) - return false; - - // if sensor is in power mode it takes at least 100 ms to start in another mode - if (!l3gd20h_get_reg_bit (reg1, L3GD20H_POWER_MODE)) - vTaskDelay (200/portTICK_PERIOD_MS); - - if (mode >= l3gd20h_normal_odr_100) - { - // high output data rate - l3gd20h_set_reg_bit (®2, L3GD20H_LOW_ODR, 0); - l3gd20h_set_reg_bit (®1, L3GD20H_ODR, mode - l3gd20h_normal_odr_100); - } - else - { - // low output data rate - l3gd20h_set_reg_bit (®2, L3GD20H_LOW_ODR, 1); - l3gd20h_set_reg_bit (®1, L3GD20H_ODR, mode - l3gd20h_normal_odr_12_5); - } - - l3gd20h_set_reg_bit (®1, L3GD20H_POWER_MODE, 1); - l3gd20h_set_reg_bit (®1, L3GD20H_BW, bw); - l3gd20h_set_reg_bit (®1, L3GD20H_X_ENABLED, x); - l3gd20h_set_reg_bit (®1, L3GD20H_Y_ENABLED, y); - l3gd20h_set_reg_bit (®1, L3GD20H_Z_ENABLED, z); - - if (dev->mode == l3gd20h && - !l3gd20h_reg_write (dev, L3GD20H_REG_LOW_ODR, ®2, 1)) - return false; - } - else - l3gd20h_set_reg_bit (®1, L3GD20H_POWER_MODE, 0); - - if (!l3gd20h_reg_write (dev, L3GD20H_REG_CTRL1, ®1, 1)) - return false; - - return true; -} - - -bool l3gd20h_set_scale (l3gd20h_sensor_t* dev, l3gd20h_scale_t scale) -{ - if (!dev) return false; - - dev->error_code = L3GD20H_OK; - dev->scale = scale; - - // read CTRL4 register and write scale - return l3gd20h_update_reg (dev, L3GD20H_REG_CTRL4, L3GD20H_FULL_SCALE, scale); -} - - -bool l3gd20h_set_fifo_mode (l3gd20h_sensor_t* dev, l3gd20h_fifo_mode_t mode, - uint8_t thresh) -{ - if (!dev) return false; - - if (dev->mode != l3gd20h && mode > l3gd20h_bypass_to_stream) - { - error_dev ("FIFO mode is not available for this sensor", __FUNCTION__, dev); - dev->error_code = L3GD20H_FIFO_MODE_NOT_AVAILABLE; - return false; - } - - dev->error_code = L3GD20H_OK; - dev->fifo_mode = mode; - - // read CTRL5 register and write FIFO_EN flag - if (!l3gd20h_update_reg (dev, L3GD20H_REG_CTRL5, L3GD20H_FIFO_EN, (mode != l3gd20h_bypass))) - return false; - - // read FIFO_CTRL register and write FIFO mode - if (!l3gd20h_update_reg (dev, L3GD20H_REG_FIFO_CTRL, L3GD20H_FIFO_THRESH, thresh) || - !l3gd20h_update_reg (dev, L3GD20H_REG_FIFO_CTRL, L3GD20H_FIFO_MODE, mode)) - return false; - - return true; -} - - -bool l3gd20h_select_output_filter (l3gd20h_sensor_t* dev, - l3gd20h_filter_t filter) -{ - if (!dev) return 0; - - dev->error_code = L3GD20H_OK; - - if (// try to set the register OUT_SEL in any case - !l3gd20h_update_reg (dev, L3GD20H_REG_CTRL5, L3GD20H_OUT_SEL, filter) || - // try to set HPen in case LPF2 and HPF is used - (filter == l3gd20h_hpf_and_lpf2 && - !l3gd20h_update_reg (dev, L3GD20H_REG_CTRL5, L3GD20H_HP_ENABLED, 1))) - { - error_dev ("Could not select filters for output data", __FUNCTION__, dev); - dev->error_code |= L3GD20H_SEL_OUT_FILTER_FAILED; - return false; - } - - return true; -} - - -bool l3gd20h_new_data (l3gd20h_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = L3GD20H_OK; - - uint8_t reg; - - if (dev->fifo_mode == l3gd20h_bypass) - { - if (!l3gd20h_reg_read (dev, L3GD20H_REG_STATUS, ®, 1)) - { - error_dev ("Could not get sensor status", __FUNCTION__, dev); - return false; - } - return l3gd20h_get_reg_bit (reg, L3GD20H_ANY_DATA_READY); - } - else - { - if (!l3gd20h_reg_read (dev, L3GD20H_REG_FIFO_SRC, ®, 1)) - { - error_dev ("Could not get fifo source register data", __FUNCTION__, dev); - return false; - } - return l3gd20h_get_reg_bit (reg, L3GD20H_FIFO_FFS); - } -} - -// scale factors for conversion of raw sensor data to degree for possible -// sensitivities according to mechanical characteristics in datasheet -const static float L3GD20H_SCALES[3] = { (0.00875F), (0.0175F), (0.070F) }; - - -bool l3gd20h_get_float_data (l3gd20h_sensor_t* dev, l3gd20h_float_data_t* data) -{ - if (!dev || !data) return false; - - l3gd20h_raw_data_t raw; - - if (!l3gd20h_get_raw_data (dev, &raw)) - return false; - - data->x = raw.x * L3GD20H_SCALES[dev->scale]; - data->y = raw.y * L3GD20H_SCALES[dev->scale]; - data->z = raw.z * L3GD20H_SCALES[dev->scale]; - - return true; -} - - -uint8_t l3gd20h_get_float_data_fifo (l3gd20h_sensor_t* dev, l3gd20h_float_data_fifo_t data) -{ - if (!dev) return 0; - - l3gd20h_raw_data_fifo_t raw; - - uint8_t num = l3gd20h_get_raw_data_fifo (dev, raw); - - for (int i = 0; i < num; i++) - { - data[i].x = raw[i].x * L3GD20H_SCALES[dev->scale]; - data[i].y = raw[i].y * L3GD20H_SCALES[dev->scale]; - data[i].z = raw[i].z * L3GD20H_SCALES[dev->scale]; - } - - return num; -} - - -bool l3gd20h_get_raw_data (l3gd20h_sensor_t* dev, l3gd20h_raw_data_t* raw) -{ - if (!dev || !raw) return false; - - dev->error_code = L3GD20H_OK; - - // abort if not in bypass mode - if (dev->fifo_mode != l3gd20h_bypass) - { - dev->error_code = L3GD20H_SENSOR_IN_BYPASS_MODE; - error_dev ("Sensor is in FIFO mode, use l3gd20h_get_*_data_fifo to get data", - __FUNCTION__, dev); - return false; - } - - // read raw data sample - if (!l3gd20h_reg_read (dev, L3GD20H_REG_OUT_X_L, (uint8_t*)raw, 6)) - { - error_dev ("Could not get raw data", __FUNCTION__, dev); - dev->error_code |= L3GD20H_GET_RAW_DATA_FAILED; - return false; - } - - return true; -} - -uint8_t l3gd20h_get_raw_data_fifo (l3gd20h_sensor_t* dev, l3gd20h_raw_data_fifo_t raw) -{ - if (!dev) return 0; - - dev->error_code = L3GD20H_OK; - - // in bypass mode, use lis3dh_get_raw_data to return one sample - if (dev->fifo_mode == l3gd20h_bypass) - return l3gd20h_get_raw_data (dev, raw) ? 1 : 0; - - uint8_t reg; - - // read FIFO state - if (!l3gd20h_reg_read (dev, L3GD20H_REG_FIFO_SRC, ®, 1)) - { - error_dev ("Could not get fifo source register data", __FUNCTION__, dev); - return 0; - } - - // if nothing is in the FIFO, just return with 0 - if (reg & L3GD20H_FIFO_EMPTY) - return 0; - - // read samples from FIFO - uint8_t samples = (reg & L3GD20H_FIFO_FFS) + (reg & L3GD20H_FIFO_OVR ? 1 : 0); - - // read samples from FIFO - for (int i = 0; i < samples; i++) - if (!l3gd20h_reg_read (dev, L3GD20H_REG_OUT_X_L, (uint8_t*)&raw[i], 6)) - { - error_dev ("Could not get raw data", __FUNCTION__, dev); - dev->error_code |= L3GD20H_GET_RAW_DATA_FIFO_FAILED; - return i; - } - - l3gd20h_reg_read (dev, L3GD20H_REG_FIFO_SRC, ®, 1); - - if (reg & L3GD20H_FIFO_FFS) - { - dev->error_code = L3GD20H_ODR_TOO_HIGH; - error_dev ("New samples stored in FIFO while reading, " - "output data rate (ODR) too high", __FUNCTION__, dev); - } - - if (dev->fifo_mode == l3gd20h_fifo && samples == 32) - { - // clean FIFO (see app note) - l3gd20h_update_reg (dev, L3GD20H_REG_FIFO_CTRL, L3GD20H_FIFO_MODE, l3gd20h_bypass); - l3gd20h_update_reg (dev, L3GD20H_REG_FIFO_CTRL, L3GD20H_FIFO_MODE, l3gd20h_fifo); - } - - return samples; -} - - -bool l3gd20h_enable_int (l3gd20h_sensor_t* dev, - l3gd20h_int_types_t type, bool value) -{ - if (!dev) return false; - - dev->error_code = L3GD20H_OK; - - uint8_t mask; - - switch (type) - { - case l3gd20h_int_data_ready: mask = L3GD20H_INT2_DRDY; break; - case l3gd20h_int_fifo_threshold: mask = L3GD20H_INT2_FTH; break; - case l3gd20h_int_fifo_overrun: mask = L3GD20H_INT2_ORUN; break; - case l3gd20h_int_fifo_empty: mask = L3GD20H_INT2_EMPTY; break; - case l3gd20h_int_event: mask = L3GD20H_INT1_IG; break; - default: dev->error_code = L3GD20H_WRONG_INT_TYPE; - error_dev ("Wrong interrupt type", __FUNCTION__, dev); - return false; - } - - if (!l3gd20h_update_reg (dev, L3GD20H_REG_CTRL3, mask, value)) - { - error_dev ("Could not %s interrupt INT2", __FUNCTION__, dev, value ? "enable" : "disable"); - dev->error_code |= L3GD20H_CONFIG_INT2_FAILED; - return false; - } - - return true; -} - - -bool l3gd20h_set_int_event_config (l3gd20h_sensor_t* dev, - l3gd20h_int_event_config_t* config) -{ - if (!dev || !config) return false; - - dev->error_code = L3GD20H_OK; - - uint8_t ig_cfg = 0; - uint8_t ig_dur = 0; - uint8_t ig_ths[6] = { 0 }; - - l3gd20h_set_reg_bit (&ig_cfg, L3GD20H_INT1_X_LOW , config->x_low_enabled); - l3gd20h_set_reg_bit (&ig_cfg, L3GD20H_INT1_X_HIGH, config->x_high_enabled); - - l3gd20h_set_reg_bit (&ig_cfg, L3GD20H_INT1_Y_LOW , config->y_low_enabled); - l3gd20h_set_reg_bit (&ig_cfg, L3GD20H_INT1_Y_HIGH, config->y_high_enabled); - - l3gd20h_set_reg_bit (&ig_cfg, L3GD20H_INT1_Z_LOW , config->z_low_enabled); - l3gd20h_set_reg_bit (&ig_cfg, L3GD20H_INT1_Z_HIGH, config->z_high_enabled); - - l3gd20h_set_reg_bit (&ig_cfg, L3GD20H_INT1_LATCH , config->latch); - l3gd20h_set_reg_bit (&ig_cfg, L3GD20H_INT1_AND_OR, config->and_or); - - l3gd20h_set_reg_bit (&ig_dur, L3GD20H_INT1_WAIT , config->wait); - l3gd20h_set_reg_bit (&ig_dur, L3GD20H_INT1_DURATION, config->duration); - - ig_ths[0] = (config->x_threshold >> 8) & 0x7f; - ig_ths[1] = (config->x_threshold & 0xff); - ig_ths[2] = (config->y_threshold >> 8) & 0x7f; - ig_ths[3] = (config->y_threshold & 0xff); - ig_ths[4] = (config->z_threshold >> 8) & 0x7f; - ig_ths[5] = (config->z_threshold & 0xff); - - if (// write the thresholds to registers IG_THS_* - !l3gd20h_reg_write (dev, L3GD20H_REG_IG_THS_XH, ig_ths, 6) || - - // write duration configuration to IG_DURATION - !l3gd20h_reg_write (dev, L3GD20H_REG_IG_DURATION, &ig_dur, 1) || - - // write INT1 configuration to IG_CFG - !l3gd20h_reg_write (dev, L3GD20H_REG_IG_CFG, &ig_cfg, 1)) - { - error_dev ("Could not configure interrupt INT1", __FUNCTION__, dev); - dev->error_code |= L3GD20H_CONFIG_INT1_FAILED; - return false; - } - - - if (// ouput value selection used for threshold comparison for INT1 generation - !l3gd20h_update_reg (dev, L3GD20H_REG_CTRL5, L3GD20H_IG_SEL, config->filter) || - - // try to set HPen in case LPF2 and HPF is used - (config->filter == l3gd20h_hpf_and_lpf2 && - !l3gd20h_update_reg (dev, L3GD20H_REG_CTRL5, L3GD20H_HP_ENABLED, 1))) - { - error_dev ("Could not configure interrupt INT1", __FUNCTION__, dev); - dev->error_code |= L3GD20H_CONFIG_INT1_FAILED; - return false; - } - - return true; -} - - -bool l3gd20h_get_int_event_config (l3gd20h_sensor_t* dev, - l3gd20h_int_event_config_t* config) -{ - if (!dev || !config) return false; - - dev->error_code = L3GD20H_OK; - - uint8_t ig_cfg; - uint8_t ig_dur; - uint8_t ig_ths[6]; - uint8_t ctrl3; - uint8_t ctrl5; - - if (!l3gd20h_reg_read (dev, L3GD20H_REG_IG_THS_XH, ig_ths, 6) || - !l3gd20h_reg_read (dev, L3GD20H_REG_IG_CFG, &ig_cfg, 1) || - !l3gd20h_reg_read (dev, L3GD20H_REG_IG_DURATION, &ig_dur, 1) || - !l3gd20h_reg_read (dev, L3GD20H_REG_CTRL3, &ctrl3, 1) || - !l3gd20h_reg_read (dev, L3GD20H_REG_CTRL5, &ctrl5, 1)) - { - dev->error_code |= L3GD20H_CONFIG_INT1_FAILED; - error_dev ("Could not read configuration for interrupt INT1 from sensor", - __FUNCTION__, dev); - return false; - } - - config->x_low_enabled = l3gd20h_get_reg_bit (ig_cfg, L3GD20H_INT1_X_LOW); - config->x_high_enabled = l3gd20h_get_reg_bit (ig_cfg, L3GD20H_INT1_X_HIGH); - - config->y_low_enabled = l3gd20h_get_reg_bit (ig_cfg, L3GD20H_INT1_Y_LOW); - config->y_high_enabled = l3gd20h_get_reg_bit (ig_cfg, L3GD20H_INT1_Y_HIGH); - - config->z_low_enabled = l3gd20h_get_reg_bit (ig_cfg, L3GD20H_INT1_Z_LOW); - config->z_high_enabled = l3gd20h_get_reg_bit (ig_cfg, L3GD20H_INT1_Z_HIGH); - - config->x_threshold = msb_lsb_to_type(uint16_t, ig_ths, 0); - config->y_threshold = msb_lsb_to_type(uint16_t, ig_ths, 2); - config->z_threshold = msb_lsb_to_type(uint16_t, ig_ths, 4); - - config->filter = l3gd20h_get_reg_bit (ctrl5, L3GD20H_IG_SEL); - - config->and_or = l3gd20h_get_reg_bit (ig_cfg, L3GD20H_INT1_AND_OR); - config->latch = l3gd20h_get_reg_bit (ig_cfg, L3GD20H_INT1_LATCH); - - config->wait = l3gd20h_get_reg_bit (ig_dur, L3GD20H_INT1_WAIT); - config->duration = l3gd20h_get_reg_bit (ig_dur, L3GD20H_INT1_DURATION); - - config->counter_mode = 0; - - return true; -} - - -bool l3gd20h_get_int_event_source (l3gd20h_sensor_t* dev, l3gd20h_int_event_source_t* source) -{ - if (!dev || !source) return false; - - dev->error_code = L3GD20H_OK; - - l3gd20h_int_event_source_t ig_cfg; - l3gd20h_int_event_source_t ig_src; - - if (!l3gd20h_reg_read (dev, L3GD20H_REG_IG_CFG, (uint8_t*)&ig_cfg, 1) || - !l3gd20h_reg_read (dev, L3GD20H_REG_IG_SRC, (uint8_t*)&ig_src, 1)) - { - error_dev ("Could not read source of interrupt INT1 from sensor", __FUNCTION__, dev); - dev->error_code |= L3GD20H_INT1_SOURCE_FAILED; - return false; - } - - source->active = ig_src.active; - source->x_low = ig_src.x_low & ig_cfg.x_low; - source->x_high = ig_src.x_high & ig_cfg.x_high; - source->y_low = ig_src.y_low & ig_cfg.y_low; - source->y_high = ig_src.y_high & ig_cfg.y_high; - source->z_low = ig_src.z_low & ig_cfg.z_low; - source->z_high = ig_src.z_high & ig_cfg.z_high; - - return true; -} - - -bool l3gd20h_get_int_data_source (l3gd20h_sensor_t* dev, l3gd20h_int_data_source_t* source) -{ - if (!dev || !source) return false; - - dev->error_code = L3GD20H_OK; - - uint8_t fifo_src; - uint8_t status; - - if (!l3gd20h_reg_read (dev, L3GD20H_REG_STATUS, &status, 1) || - !l3gd20h_reg_read (dev, L3GD20H_REG_FIFO_SRC, &fifo_src, 1)) - { - error_dev ("Could not read source of interrupt INT2 from sensor", __FUNCTION__, dev); - dev->error_code |= L3GD20H_INT2_SOURCE_FAILED; - return false; - } - - source->data_ready = l3gd20h_get_reg_bit (status, L3GD20H_ANY_DATA_READY); - source->fifo_threshold = l3gd20h_get_reg_bit (fifo_src, L3GD20H_FIFO_THS); - source->fifo_overrun = l3gd20h_get_reg_bit (fifo_src, L3GD20H_FIFO_OVR); - source->fifo_empty = l3gd20h_get_reg_bit (fifo_src, L3GD20H_FIFO_EMPTY); - - return true; -} - - -bool l3gd20h_config_int_signals (l3gd20h_sensor_t* dev, - l3gd20h_signal_type_t type, - l3gd20h_signal_level_t level) -{ - if (!dev) return false; - - dev->error_code = L3GD20H_OK; - - if (!l3gd20h_update_reg (dev, L3GD20H_REG_CTRL3, L3GD20H_HL_ACTIVE, level) || - !l3gd20h_update_reg (dev, L3GD20H_REG_CTRL3, L3GD20H_PP_OD, type) || - !l3gd20h_update_reg (dev, L3GD20H_REG_LOW_ODR, L3GD20H_DRDY_HL, level)) - { - error_dev ("Could not configure interrupt signals", __FUNCTION__, dev); - dev->error_code |= L3GD20H_CONFIG_INT_SIGNALS_FAILED; - return false; - } - - return true; -} - - -bool l3gd20h_config_hpf (l3gd20h_sensor_t* dev, l3gd20h_hpf_mode_t mode, - uint8_t cutoff) -{ - if (!dev) return false; - - dev->error_code = L3GD20H_OK; - - if (!l3gd20h_update_reg (dev, L3GD20H_REG_CTRL2, L3GD20H_HPF_MODE, mode) || - !l3gd20h_update_reg (dev, L3GD20H_REG_CTRL2, L3GD20H_HPF_CUTOFF, cutoff)) - { - error_dev ("Could not configure high pass filter", __FUNCTION__, dev); - dev->error_code |= L3GD20H_CONFIG_HPF_FAILED; - return false; - } - - return true; -} - - -bool l3gd20h_set_hpf_ref (l3gd20h_sensor_t* dev, int8_t ref) -{ - if (!dev) return false; - - dev->error_code = L3GD20H_OK; - - if (!l3gd20h_reg_write (dev, L3GD20H_REG_REFERENCE, (uint8_t*)&ref, 1)) - { - error_dev ("Could not set high pass filter reference", __FUNCTION__, dev); - dev->error_code |= L3GD20H_CONFIG_HPF_FAILED; - return false; - } - - return true; -} - -int8_t l3gd20h_get_hpf_ref (l3gd20h_sensor_t* dev) -{ - if (!dev) return 0; - - dev->error_code = L3GD20H_OK; - - int8_t ref = 0; - - if (!l3gd20h_reg_read (dev, L3GD20H_REG_REFERENCE, (uint8_t*)&ref, 1)) - { - error_dev ("Could not get high pass filter reference", __FUNCTION__, dev); - dev->error_code |= L3GD20H_CONFIG_HPF_FAILED; - return 0; - } - - return ref; -} - - -int8_t l3gd20h_get_temperature (l3gd20h_sensor_t* dev) -{ - if (!dev) return 0; - - dev->error_code = L3GD20H_OK; - - int8_t reg; - - if (!l3gd20h_reg_read (dev, L3GD20H_REG_OUT_TEMP, (uint8_t*)(®), 1)) - { - error_dev ("Could not get temperature", __FUNCTION__, dev); - return false; - } - - return reg; -} - - -/** Functions for internal use only */ - -/** - * @brief Check the chip ID to test whether sensor is available - */ -static bool l3gd20h_is_available (l3gd20h_sensor_t* dev) -{ - uint8_t chip_id; - - if (!dev) return false; - - dev->error_code = L3GD20H_OK; - - if (!l3gd20h_reg_read (dev, L3GD20H_REG_WHO_AM_I, &chip_id, 1)) - return false; - - switch (chip_id) - { - case L3GD20H_CHIP_ID: dev->mode = l3gd20h ; break; - case L3GD20_CHIP_ID: dev->mode = l3gd20 ; break; - case L3G4200D_CHIP_ID: dev->mode = l3g4200d; break; - default: error_dev ("Chip id %02x is wrong, should be %02x.", - __FUNCTION__, dev, chip_id, L3GD20H_CHIP_ID); - dev->error_code = L3GD20H_WRONG_CHIP_ID; - return false; - } - - return true; -} - - -static bool l3gd20h_reset (l3gd20h_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = L3GD20H_OK; - - if (!l3gd20h_update_reg (dev, L3GD20H_REG_LOW_ODR, L3GD20H_SW_RESET, 1)) - return false; - - vTaskDelay(100/portTICK_PERIOD_MS); - - uint8_t reg[6] = { 0 }; - - // initialize sensor completely including setting in power down mode - l3gd20h_reg_write (dev, L3GD20H_REG_CTRL1 , reg, 6); - l3gd20h_reg_write (dev, L3GD20H_REG_FIFO_CTRL, reg, 1); - l3gd20h_reg_write (dev, L3GD20H_REG_IG_CFG , reg, 1); - l3gd20h_reg_write (dev, L3GD20H_REG_IG_THS_XH, reg, 6); - - return true; -} - - -static bool l3gd20h_update_reg(l3gd20h_sensor_t* dev, uint8_t reg, uint8_t mask, uint8_t val) -{ - if (!dev) return false; - - uint8_t reg_val; - uint8_t shift = 0; - - while (!((mask >> shift) & 0x01)) shift++; - - // read current register value - if (!l3gd20h_reg_read (dev, reg, ®_val, 1)) - return false; - - // set masked bits to the given value - reg_val = (reg_val & ~mask) | ((val << shift) & mask); - - // write back new register value - if (!l3gd20h_reg_write (dev, reg, ®_val, 1)) - return false; - - return true; -} - -bool l3gd20h_reg_read(l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? l3gd20h_i2c_read (dev, reg, data, len) - : l3gd20h_spi_read (dev, reg, data, len); -} - - -bool l3gd20h_reg_write(l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? l3gd20h_i2c_write (dev, reg, data, len) - : l3gd20h_spi_write (dev, reg, data, len); -} - - -static void l3gd20h_set_reg_bit (uint8_t* byte, uint8_t mask, uint8_t bit) -{ - if (byte) - { - uint8_t shift = 0; - while (!((mask >> shift) & 0x01)) shift++; - *byte = ((*byte & ~mask) | ((bit << shift) & mask)); - } -} - - -static uint8_t l3gd20h_get_reg_bit(uint8_t byte, uint8_t mask) -{ - uint8_t shift = 0; - while (!((mask >> shift) & 0x01)) shift++; - return (byte & mask) >> shift; -} - - -#define L3GD20H_SPI_BUF_SIZE 64 // SPI register data buffer size - -#define L3GD20H_SPI_READ_FLAG 0x80 -#define L3GD20H_SPI_WRITE_FLAG 0x00 -#define L3GD20H_SPI_AUTO_INC_FLAG 0x40 - -static bool l3gd20h_spi_read(l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - if (len >= L3GD20H_SPI_BUF_SIZE) - { - dev->error_code |= L3GD20H_SPI_BUFFER_OVERFLOW; - error_dev ("Error on read from SPI slave on bus 1. Tried to transfer " - "more than %d byte in one read operation.", - __FUNCTION__, dev, L3GD20H_SPI_BUF_SIZE); - return false; - } - - uint8_t addr = (reg & 0x3f) | L3GD20H_SPI_READ_FLAG | L3GD20H_SPI_AUTO_INC_FLAG; - - static uint8_t mosi[L3GD20H_SPI_BUF_SIZE]; - static uint8_t miso[L3GD20H_SPI_BUF_SIZE]; - - memset (mosi, 0xff, L3GD20H_SPI_BUF_SIZE); - memset (miso, 0xff, L3GD20H_SPI_BUF_SIZE); - - mosi[0] = addr; - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, miso, len+1)) - { - error_dev ("Could not read data from SPI", __FUNCTION__, dev); - dev->error_code |= L3GD20H_SPI_READ_FAILED; - return false; - } - - // shift data one by left, first byte received while sending register address is invalid - for (int i=0; i < len; i++) - data[i] = miso[i+1]; - - #ifdef L3GD20H_DEBUG_LEVEL_2 - printf("L3GD20H %s: read the following bytes from reg %02x: ", __FUNCTION__, reg); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); - #endif - - return true; -} - - -static bool l3gd20h_spi_write(l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - uint8_t addr = (reg & 0x3f) | L3GD20H_SPI_WRITE_FLAG | L3GD20H_SPI_AUTO_INC_FLAG; - - static uint8_t mosi[L3GD20H_SPI_BUF_SIZE]; - - if (len >= L3GD20H_SPI_BUF_SIZE) - { - dev->error_code |= L3GD20H_SPI_BUFFER_OVERFLOW; - error_dev ("Error on write to SPI slave on bus 1. Tried to transfer more" - "than %d byte in one write operation.", __FUNCTION__, dev, L3GD20H_SPI_BUF_SIZE); - - return false; - } - - reg &= 0x7f; - - // first byte in output is the register address - mosi[0] = addr; - - // shift data one byte right, first byte in output is the register address - for (int i = 0; i < len; i++) - mosi[i+1] = data[i]; - - #ifdef L3GD20H_DEBUG_LEVEL_2 - printf("L3GD20H %s: Write the following bytes to reg %02x: ", __FUNCTION__, reg); - for (int i = 1; i < len+1; i++) - printf("%02x ", mosi[i]); - printf("\n"); - #endif - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, NULL, len+1)) - { - error_dev ("Could not write data to SPI.", __FUNCTION__, dev); - dev->error_code |= L3GD20H_SPI_WRITE_FAILED; - return false; - } - - return true; -} - - -#define I2C_AUTO_INCREMENT (0x80) - -static bool l3gd20h_i2c_read(l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Read %d byte from i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - if (len > 1) - reg |= I2C_AUTO_INCREMENT; - - int result = i2c_slave_read(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? L3GD20H_I2C_BUSY : L3GD20H_I2C_READ_FAILED; - error_dev ("Error %d on read %d byte from I2C slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef L3GD20H_DEBUG_LEVEL_2 - printf("L3GD20H %s: Read following bytes: ", __FUNCTION__); - printf("%02x: ", reg & 0x7f); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif - - return true; -} - - -static bool l3gd20h_i2c_write(l3gd20h_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Write %d byte to i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - if (len > 1) - reg |= I2C_AUTO_INCREMENT; - - int result = i2c_slave_write(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? L3GD20H_I2C_BUSY : L3GD20H_I2C_WRITE_FAILED; - error_dev ("Error %d on write %d byte to i2c slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef L3GD20H_DEBUG_LEVEL_2 - printf("L3GD20H %s: Wrote the following bytes: ", __FUNCTION__); - printf("%02x: ", reg); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif - - return true; -} diff --git a/extras/l3gd20h/l3gd20h.h b/extras/l3gd20h/l3gd20h.h deleted file mode 100644 index d9cd216..0000000 --- a/extras/l3gd20h/l3gd20h.h +++ /dev/null @@ -1,408 +0,0 @@ -/** - * Driver for L3GD20H 3-axes digital output gyroscope connected to I2C or SPI. - * It can also be used with L3GD20 and L3G4200D. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef __L3GD20H_H__ -#define __L3GD20H_H__ - -// Uncomment one of the following defines to enable debug output -// #define L3GD20H_DEBUG_LEVEL_1 // only error messages -// #define L3GD20H_DEBUG_LEVEL_2 // debug and error messages - -// L3GD20H addresses -#define L3GD20H_I2C_ADDRESS_1 0x6a // SDO pin is low -#define L3GD20H_I2C_ADDRESS_2 0x6b // SDO pin is high - -// L3GD20 addresses -#define L3GD20_I2C_ADDRESS_1 0x6a // SDO pin is low -#define L3GD20_I2C_ADDRESS_2 0x6b // SDO pin is high - -// L3G4200D addresses -#define L3G4200D_I2C_ADDRESS_1 0x68 // SDO pin is low -#define L3G4200D_I2C_ADDRESS_2 0x69 // SDO pin is high - -// L3GD20H chip id -#define L3GD20H_CHIP_ID 0xd7 // L3GD20H_REG_WHO_AM_I<7:0> - -// L3GD20 chip id -#define L3GD20_CHIP_ID 0xd4 // L3GD20H_REG_WHO_AM_I<7:0> - -// L3G4200D chip id -#define L3G4200D_CHIP_ID 0xd3 // L3GD20H_REG_WHO_AM_I<7:0> - -// Definition of error codes -#define L3GD20H_OK 0 -#define L3GD20H_NOK -1 - -#define L3GD20H_INT_ERROR_MASK 0x000f -#define L3GD20H_DRV_ERROR_MASK 0xfff0 - -// Error codes for I2C and SPI interfaces ORed with L3GD20H driver error codes -#define L3GD20H_I2C_READ_FAILED 1 -#define L3GD20H_I2C_WRITE_FAILED 2 -#define L3GD20H_I2C_BUSY 3 -#define L3GD20H_SPI_WRITE_FAILED 4 -#define L3GD20H_SPI_READ_FAILED 5 -#define L3GD20H_SPI_BUFFER_OVERFLOW 6 -#define L3GD20H_SPI_SET_PAGE_FAILED 7 - -// L3GD20H driver error codes ORed with error codes for I2C and SPI interfaces -#define L3GD20H_WRONG_CHIP_ID ( 1 << 8) -#define L3GD20H_WRONG_BANDWIDTH ( 2 << 8) -#define L3GD20H_GET_RAW_DATA_FAILED ( 3 << 8) -#define L3GD20H_GET_RAW_DATA_FIFO_FAILED ( 4 << 8) -#define L3GD20H_WRONG_INT_TYPE ( 5 << 8) -#define L3GD20H_CONFIG_INT_SIGNALS_FAILED ( 6 << 8) -#define L3GD20H_CONFIG_INT1_FAILED ( 7 << 8) -#define L3GD20H_CONFIG_INT2_FAILED ( 8 << 8) -#define L3GD20H_INT1_SOURCE_FAILED ( 9 << 8) -#define L3GD20H_INT2_SOURCE_FAILED (10 << 8) -#define L3GD20H_SEL_OUT_FILTER_FAILED (11 << 8) -#define L3GD20H_CONFIG_HPF_FAILED (12 << 8) -#define L3GD20H_ENABLE_HPF_FAILED (13 << 8) -#define L3GD20H_SENSOR_IN_BYPASS_MODE (14 << 8) -#define L3GD20H_SENSOR_IN_FIFO_MODE (15 << 8) -#define L3GD20H_ODR_TOO_HIGH (16 << 8) -#define L3GD20H_ODR_NOT_AVAILABLE (17 << 8) -#define L3GD20H_FIFO_MODE_NOT_AVAILABLE (18 << 8) - -#include "l3gd20h_platform.h" -#include "l3gd20h_types.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief Initialize the sensor - * - * Reset the sensor and switch to power down mode. All registers are reset to - * default values. FIFO is cleared. - * - * @param bus I2C or SPI bus at which L3GD20H sensor is connected - * @param addr I2C addr of the L3GD20H sensor, 0 for using SPI - * @param cs SPI CS GPIO, ignored for I2C - * @return pointer to sensor data structure, or NULL on error - */ -l3gd20h_sensor_t* l3gd20h_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs); - - -/** - * @brief Set sensor mode - * - * @param dev pointer to the sensor device data structure - * @param mode sensor mode with certain output data rate - * @param bw bandwidth - * @param x true enable x-axis, false disable x-axis - * @param y true enable y-axis, false disable y-axis - * @param z true enable z-axis, false disable z-axis - * @return true on success, false on error - */ -bool l3gd20h_set_mode (l3gd20h_sensor_t* dev, l3gd20h_mode_t mode, uint8_t bw, - bool x, bool y, bool z); - - -/** - * @brief Set scale (full range range) - * - * @param dev pointer to the sensor device data structure - * @param scale range setting - * @return true on success, false on error - */ -bool l3gd20h_set_scale (l3gd20h_sensor_t* dev, l3gd20h_scale_t sens); - - -/** - * @brief Set FIFO mode - * - * @param dev pointer to the sensor device data structure - * @param mode FIFO mode - * @param thresh FIFO watermark (ignored in bypass mode) - * @return true on success, false on error - */ -bool l3gd20h_set_fifo_mode (l3gd20h_sensor_t* dev, - l3gd20h_fifo_mode_t mode, uint8_t thresh); - - -/** - * @brief Filter selection for raw data output values - * - * High pass filter (HPF) is configured with function *l3gd20h_config_hpf*. If - * HPF is selected, it is enabled implicitly. - * - * @param dev pointer to the sensor device data structure - * @param filter selected filters for output values - * @return true on success, false on error - */ -bool l3gd20h_select_output_filter (l3gd20h_sensor_t* dev, - l3gd20h_filter_t filter); - - -/** - * @brief Test whether new sets of data are available - * - * @param dev pointer to the sensor device data structure - * @return true on new data, otherwise false - */ -bool l3gd20h_new_data (l3gd20h_sensor_t* dev); - - -/** - * @brief Get one sample of floating point sensor data (unit degree) - * - * Function works only in bypass mode and fails in FIFO modes. In FIFO modes, - * function *l3gd20h_get_float_data_fifo* has to be used instead to get data. - * - * @param dev pointer to the sensor device data structure - * @param data pointer to float data structure filled with values - * @return true on success, false on error - */ -bool l3gd20h_get_float_data (l3gd20h_sensor_t* dev, - l3gd20h_float_data_t* data); - - -/** - * @brief Get all samples of sensor data stored in the FIFO (unit dps) - * - * In bypass mode, it returns only one sensor data sample. - * - * @param dev pointer to the sensor device data structure - * @param data array of 32 float data structures - * @return number of data sets read from fifo on success or 0 on error - */ -uint8_t l3gd20h_get_float_data_fifo (l3gd20h_sensor_t* dev, - l3gd20h_float_data_fifo_t data); - - -/** - * @brief Get one sample of raw sensor data as 16 bit two's complements - * - * Function works only in bypass mode and fails in FIFO modes. In FIFO modes, - * function *l3gd20h_get_raw_data_fifo* has to be used instead to get data. - * - * @param dev pointer to the sensor device data structure - * @param raw pointer to raw data structure filled with values - * @return true on success, false on error - */ -bool l3gd20h_get_raw_data (l3gd20h_sensor_t* dev, - l3gd20h_raw_data_t* raw); - - -/** - * @brief Get all samples of raw sensor data stored in the FIFO - * - * In bypass mode, it returns only one raw data sample. - * - * @param dev pointer to the sensor device data structure - * @param raw array of 32 raw data structures - * @return number of data sets read from fifo on success or 0 on error - */ -uint8_t l3gd20h_get_raw_data_fifo (l3gd20h_sensor_t* dev, - l3gd20h_raw_data_fifo_t raw); - - -/** - * @brief Enable / disable data or event interrupts on signal INT1/INT2 - * - * @param dev pointer to the sensor device data structure - * @param type type of the interrupt to be enabled/disabled - * @param value true to enable or false to disable the interrupt - * @return true on success, false on error - */ -bool l3gd20h_enable_int (l3gd20h_sensor_t* dev, - l3gd20h_int_types_t type, bool value); - - - -/** - * @brief Set the configuration of the event interrupt generator - * - * The event interrupt generator produces interrupts (axis movement and wake up) - * on signal INT1 whenever the angular rate of one or more axes becomes higher - * or lower than defined thresholds. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @return true on success, false on error - */ -bool l3gd20h_set_int_event_config (l3gd20h_sensor_t* dev, - l3gd20h_int_event_config_t* config); - - -/** - * @brief Get the configuration of the event interrupt generator - * - * The event interrupt generator produces interrupts (axis movement and wake up) - * on signal INT1 whenever the angular rate of one or more axes becomes higher - * or lower than defined thresholds. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @return true on success, false on error - */ -bool l3gd20h_get_int_event_config (l3gd20h_sensor_t* dev, - l3gd20h_int_event_config_t* config); - - -/** - * @brief Get the source of an event interrupt (axis movement and wake up) - * - * @param dev pointer to the sensor device data structure - * @param type pointer to the interrupt source - * @return true on success, false on error - */ -bool l3gd20h_get_int_event_source (l3gd20h_sensor_t* dev, - l3gd20h_int_event_source_t* source); - - -/** - * @brief Get the source of a data interrupt (data ready or FIFO status) - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source - * @return true on success, false on error - */ -bool l3gd20h_get_int_data_source (l3gd20h_sensor_t* dev, - l3gd20h_int_data_source_t* source); - - -/** - * @brief Set signal configuration for INT1 and INT2 signals - * - * @param dev pointer to the sensor device data structure - * @param type define interrupt signal as pushed/pulled or open drain - * @return true on success, false on error - */ -bool l3gd20h_config_int_signals (l3gd20h_sensor_t* dev, - l3gd20h_signal_type_t type, - l3gd20h_signal_level_t level); - - -/** - * @brief Config HPF (high pass filter) - * - * @param dev pointer to the sensor device data structure - * @param mode high pass filter mode - * @param cutoff cutoff frequency (depends on output data rate) [0 ... 15] - * @return true on success, false on error - */ -bool l3gd20h_config_hpf (l3gd20h_sensor_t* dev, - l3gd20h_hpf_mode_t mode, uint8_t cutoff); - - -/** - * @brief Set HPF (high pass filter) reference - * - * Used to set the reference of HPF in reference mode *l3gd20h_hpf_reference*. - * Used to reset the HPF in autoreset mode *l3gd20h_hpf_autoreset*. - * Reference is given as two's complement. - * - * @param dev pointer to the sensor device data structure - * @param ref reference *l3gd20h_hpf_reference* mode, otherwise ignored - * @return true on success, false on error - */ -bool l3gd20h_set_hpf_ref (l3gd20h_sensor_t* dev, int8_t ref); - - -/** - * @brief Get HPF (high pass filter) reference - * - * Used to reset the HPF in normal mode *l3gd20h_hpf_normal*. - * - * @param dev pointer to the sensor device data structure - * @return HPF reference as two's complement - */ -int8_t l3gd20h_get_hpf_ref (l3gd20h_sensor_t* dev); - - -/** - * @brief Get temperature - * - * @param dev pointer to the sensor device data structure - * @return temperature in degree as two's complement - */ -int8_t l3gd20h_get_temperature (l3gd20h_sensor_t* dev); - - -// ---- Low level interface functions ----------------------------- - -/** - * @brief Direct write to register - * - * PLEASE NOTE: This function should only be used to do something special that - * is not covered by the high level interface AND if you exactly know what you - * do and what effects it might have. Please be aware that it might affect the - * high level interface. - * - * @param dev pointer to the sensor device data structure - * @param reg address of the first register to be changed - * @param data pointer to the data to be written to the register - * @param len number of bytes to be written to the register - * @return true on success, false on error - */ -bool l3gd20h_reg_write (l3gd20h_sensor_t* dev, - uint8_t reg, uint8_t *data, uint16_t len); - -/** - * @brief Direct read from register - * - * PLEASE NOTE: This function should only be used to do something special that - * is not covered by the high level interface AND if you exactly know what you - * do and what effects it might have. Please be aware that it might affect the - * high level interface. - * - * @param dev pointer to the sensor device data structure - * @param reg address of the first register to be read - * @param data pointer to the data to be read from the register - * @param len number of bytes to be read from the register - * @return true on success, false on error - */ -bool l3gd20h_reg_read (l3gd20h_sensor_t* dev, - uint8_t reg, uint8_t *data, uint16_t len); - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __L3GD20H_H__ */ diff --git a/extras/l3gd20h/l3gd20h_platform.c b/extras/l3gd20h/l3gd20h_platform.c deleted file mode 100644 index d1db563..0000000 --- a/extras/l3gd20h/l3gd20h_platform.c +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Driver for L3GD20H 3-axes digital output gyroscope connected to I2C or SPI. - * It can also be used with L3GD20 and L3G4200D. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#include "l3gd20h_platform.h" - -// platform specific SPI functions - -static const spi_settings_t bus_settings = { - .mode = SPI_MODE0, - .freq_divider = SPI_FREQ_DIV_1M, - .msb = true, - .minimal_pins = false, - .endianness = SPI_LITTLE_ENDIAN -}; - -bool spi_device_init (uint8_t bus, uint8_t cs) -{ - gpio_enable(cs, GPIO_OUTPUT); - gpio_write (cs, true); - return true; -} - -size_t spi_transfer_pf(uint8_t bus, uint8_t cs, const uint8_t *mosi, uint8_t *miso, uint16_t len) -{ - spi_settings_t old_settings; - - spi_get_settings(bus, &old_settings); - spi_set_settings(bus, &bus_settings); - gpio_write(cs, false); - - size_t transfered = spi_transfer (bus, (const void*)mosi, (void*)miso, len, SPI_8BIT); - - gpio_write(cs, true); - spi_set_settings(bus, &old_settings); - - return transfered; -} - diff --git a/extras/l3gd20h/l3gd20h_platform.h b/extras/l3gd20h/l3gd20h_platform.h deleted file mode 100644 index 9293bad..0000000 --- a/extras/l3gd20h/l3gd20h_platform.h +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Driver for L3GD20H 3-axes digital output gyroscope connected to I2C or SPI. - * It can also be used with L3GD20 and L3G4200D. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#ifndef __L3GD20H_PLATFORM_H__ -#define __L3GD20H_PLATFORM_H__ - -#if !defined(ESP_OPEN_RTOS) -#define ESP_OPEN_RTOS 1 -#endif - -#ifdef ESP_OPEN_RTOS // ESP8266 - -// platform specific includes - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" - -#include "espressif/esp_common.h" -#include "espressif/sdk_private.h" - -#include "esp/uart.h" -#include "esp/spi.h" -#include "i2c/i2c.h" - -// platform specific SPI functions - -#define spi_bus_init(bus,sck,miso,mosi) // not needed on ESP8266 - -extern bool spi_device_init (uint8_t bus, uint8_t cs); -extern size_t spi_transfer_pf(uint8_t bus, uint8_t cs, - const uint8_t *mosi, uint8_t *miso, - uint16_t len); - -#endif // ESP_OPEN_RTOS - -#endif // __L3GD20H_PLATFORM_H__ diff --git a/extras/l3gd20h/l3gd20h_types.h b/extras/l3gd20h/l3gd20h_types.h deleted file mode 100644 index cadb740..0000000 --- a/extras/l3gd20h/l3gd20h_types.h +++ /dev/null @@ -1,310 +0,0 @@ -/** - * Driver for L3GD20H 3-axes digital output gyroscope connected to I2C or SPI. - * It can also be used with L3GD20 and L3G4200D. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef __L3GD20H_TYPES_H__ -#define __L3GD20H_TYPES_H__ - -#include "stdint.h" -#include "stdbool.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief Output data rates (ODR) - */ -typedef enum -{ - l3gd20h_power_down = 0, // power down mode - l3gd20h_normal_odr_12_5, // normal mode with low output data rate 12.5 Hz - l3gd20h_normal_odr_25, // normal mode with low output data rate 25 Hz - l3gd20h_normal_odr_50, // normal mode with low output data rate 50 Hz - l3gd20h_normal_odr_100, // normal mode with high output data rate 100 Hz - l3gd20h_normal_odr_200, // normal mode with high output data rate 200 Hz - l3gd20h_normal_odr_400, // normal mode with high output data rate 400 Hz - l3gd20h_normal_odr_800, // normal mode with high output data rate 800 Hz - -} l3gd20h_mode_t; - -#define l3gd20_normal_odr_95 l3gd20h_normal_odr_100 -#define l3gd20_normal_odr_190 l3gd20h_normal_odr_200 -#define l3gd20_normal_odr_380 l3gd20h_normal_odr_400 -#define l3gd20_normal_odr_760 l3gd20h_normal_odr_800 - -/** - * @brief Sensitivity level - */ -typedef enum -{ - l3gd20h_scale_245_dps = 0, // default - l3gd20h_scale_500_dps, - l3gd20h_scale_2000_dps - -} l3gd20h_scale_t; - -#define l3gd20_scale_250_dps l3gd20h_scale_245_dps -#define l3gd20_scale_500_dps l3gd20h_scale_500_dps -#define l3gd20_scale_2000_dps l3gd20h_scale_2000_dps - -/** - * @brief FIFO mode - */ -typedef enum -{ - l3gd20h_bypass = 0, // default - l3gd20h_fifo = 1, - l3gd20h_stream = 2, - l3gd20h_stream_to_fifo = 3, - l3gd20h_bypass_to_stream = 5, - l3gd20h_dynamic_stream = 6, - l3gd20h_bypass_to_fifo = 7 - -} l3gd20h_fifo_mode_t; - - -/** - * @brief High pass filter (HPF) and low pass filter 2 (LPF2) modes - */ -typedef enum -{ - l3gd20h_no_filter = 0, // HPF not used, LPF2 not used - l3gd20h_hpf_only, // HPF used, LPF2 not used - l3gd20h_lpf2_only, // HPF not used, LPF2 used - l3gd20h_hpf_and_lpf2 // HPF used, LPF2 used - -} l3gd20h_filter_t; - - -/** - * @brief Interrupt types - */ -typedef enum { - - l3gd20h_int_data_ready, // data are ready to read (INT2) - - l3gd20h_int_fifo_threshold, // FIFO filling exceds FTH level (INT2) - l3gd20h_int_fifo_overrun, // FIFO is completely filled (INT2) - l3gd20h_int_fifo_empty, // FIFO becomes empty (INT2) - - l3gd20h_int_event // angular rate of one or more axes becomes - // lower or higher than threshold (INT1) -} l3gd20h_int_types_t; - - -/** - * @brief Event interrupt generator configuration (axis movement and wake up) - * - * memset to 0 to disable all interrupt conditions (default) - */ -typedef struct -{ - bool x_low_enabled; // x lower than threshold interrupt enabled - bool x_high_enabled; // x higher than threshold interrupt enabled - uint16_t x_threshold; // x threshold value - - bool y_low_enabled; // y lower than threshold interrupt enabled - bool y_high_enabled; // y higher than threshold interrupt enabled - uint16_t y_threshold; // y threshold value - - bool z_low_enabled; // z lower than threshold interrupt enabled - bool z_high_enabled; // z higher than threshold interrupt enabled - uint16_t z_threshold; // z threshold value - - l3gd20h_filter_t filter; // HPF and LPF2 mode used for threshold comparison - - bool and_or; // interrupt combination true - AND, false - OR - // AND - all enabled axes passed the treshold - // OR - at least one axes passed the threshold - - bool latch; // latch the interrupt when true until the - // interrupt source has been read - - uint8_t duration; // duration in 1/ODR an interrupt condition has - // to be given before the interrupt is generated - - bool wait; // when true, duration is also used when interrupt - // condition in no longer given before interrupt - // signal is reset - - bool counter_mode; // DCRM is not documented and not used therefore - -} l3gd20h_int_event_config_t; - - -/** - * @brief Event interrupt source (axis movement and wake up) - */ -typedef struct { - - bool x_low :1; // true - x is lower event occured - bool x_high:1; // true - x is higher event occured - - bool y_low :1; // true - z is lower event occured - bool y_high:1; // true - z is higher event occured - - bool z_low :1; // true - z is lower event occured - bool z_high:1; // true - z is higher event occured - - bool active:1; // true - one ore more have been generated - -} l3gd20h_int_event_source_t; - - -/** - * @brief Data interrupt source type (data ready and FIFO status) - */ -typedef struct { - - bool data_ready; // true when data are ready to read - - bool fifo_threshold; // true when FIFO filling >= FTH level - bool fifo_overrun; // true when FIFO is completely filled - bool fifo_empty; // true when FIFO is empty - -} l3gd20h_int_data_source_t; - - -/** - * @brief INT1, INT2 signal activity level - */ -typedef enum { - - l3gd20h_high_active = 0, - l3gd20h_low_active - -} l3gd20h_signal_level_t; - - -/** - * @brief INT1, INT2 signal type - */ -typedef enum { - - l3gd20h_push_pull = 0, - l3gd20h_open_drain - -} l3gd20h_signal_type_t; - - -/** - * @brief Raw data set as two complements - */ -typedef struct { - - int16_t x; - int16_t y; - int16_t z; - -} l3gd20h_raw_data_t; - - -/** - * @brief Raw data FIFO type - */ -typedef l3gd20h_raw_data_t l3gd20h_raw_data_fifo_t[32]; - - -/** - * @brief Floating point output value set in degree - */ -typedef struct { - - float x; - float y; - float z; - -} l3gd20h_float_data_t; - - -/** - * @brief Floating point output value FIFO type - */ -typedef l3gd20h_float_data_t l3gd20h_float_data_fifo_t[32]; - - -/** - * @brief HPF (high pass filter) modes - */ -typedef enum { - - l3gd20h_hpf_normal = 0, - l3gd20h_hpf_reference, - l3gd20h_hpf_normal_x, - l3gd20h_hpf_autoreset - -} l3gd20h_hpf_mode_t; - - -/** - * @brief L3GD20H sensor device data structure type - */ -typedef struct { - - int error_code; // contains the error code of last operation - - uint8_t bus; // I2C = x, SPI = 1 - uint8_t addr; // I2C = slave address, SPI = 0 - - uint8_t cs; // ESP8266, ESP32: GPIO used as SPI CS - // __linux__: device index - - l3gd20h_scale_t scale; // fill range scale (default 245 dps) - l3gd20h_fifo_mode_t fifo_mode; // FIFO operation mode (default bypass) - - enum { - l3gd20h, - l3gd20, - l3g4200d - } mode; - -} l3gd20h_sensor_t; - - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __L3GD20H_TYPES_H__ */ diff --git a/extras/libesphttpd/component.mk b/extras/libesphttpd/component.mk deleted file mode 100644 index cdc1360..0000000 --- a/extras/libesphttpd/component.mk +++ /dev/null @@ -1,64 +0,0 @@ -# Component makefile for extras/libesphttpd - -INC_DIRS += $(libesphttpd_ROOT)/libesphttpd/include $(libesphttpd_ROOT)/libesphttpd/espfs $(libesphttpd_ROOT)/libesphttpd/lib/heatshrink - -LIBESPHTTPD_MAX_CONNECTIONS ?= 4 -LIBESPHTTPD_STACKSIZE ?= 2048 -LIBESPHTTPD_OTA_TAGNAME ?= generic -LIBESPHTTPD_HTML_DIR ?= html -LIBESPHTTPD_HTML_FILES ?= $(call rwildcard,$(LIBESPHTTPD_HTML_DIR)/,*) - -RBOOT_OTA ?= 1 -ESP_IP ?= 192.168.4.1 - -# args for passing into compile rule generation -libesphttpd_SRC_DIR = $(libesphttpd_ROOT)/libesphttpd/core $(libesphttpd_ROOT)/libesphttpd/espfs $(libesphttpd_ROOT)/libesphttpd/util -libesphttpd_CFLAGS += -DFREERTOS -DUSE_OPEN_SDK -DHTTPD_MAX_CONNECTIONS=$(LIBESPHTTPD_MAX_CONNECTIONS) -DHTTPD_STACKSIZE=$(LIBESPHTTPD_STACKSIZE) -DESPFS_HEATSHRINK -D__ets__ -DRBOOT_OTA=1 -std=gnu99 - -$(eval $(call component_compile_rules,libesphttpd)) - -rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)) - -LIBESPHTTPD_MKESPFSIMAGE_DIR = $(BUILD_DIR)mkespfsimage - -LIBESPHTTPD_MKESPFS = $(LIBESPHTTPD_MKESPFSIMAGE_DIR)/mkespfsimage -LIBESPHTTPD_HTML_TINY_DIR = $(BUILD_DIR)html -LIBESPHTTPD_HTML_ESPFS = $(BUILD_DIR)web.espfs.bin -LIBESPHTTPD_HTML_ESPFS_PATH = $(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_HTML_ESPFS) -LIBESPHTTPD_HTML_ESPFS_OBJ = $(BUILD_DIR)web.espfs.o - -CROSS_BINARY_ARCH ?= xtensa -CROSS_OUTPUT_TARGET ?= elf32-xtensa-le - -LIBESPHTTPD_HTML_TINY ?= no - -CURL = curl -LIBESPHTTPD_CURL_OPTS = --connect-timeout 3 --max-time 60 -s - -$(LIBESPHTTPD_MKESPFSIMAGE_DIR): - $(Q)mkdir -p $(LIBESPHTTPD_MKESPFSIMAGE_DIR) - -$(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_MKESPFS): $(LIBESPHTTPD_MKESPFSIMAGE_DIR) - make -C $(libesphttpd_ROOT)/libesphttpd/espfs/mkespfsimage CC=gcc GZIP_COMPRESSION=yes USE_HEATSHRINK=yes BUILD_DIR=$(PROGRAM_REAL_ROOT)/$(BUILD_DIR) - -$(LIBESPHTTPD_HTML_ESPFS): $(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_MKESPFS) $(LIBESPHTTPD_HTML_FILES) - cd $(LIBESPHTTPD_HTML_DIR) && find $(patsubst $(LIBESPHTTPD_HTML_DIR)/%,%,$(LIBESPHTTPD_HTML_FILES)) | $< > $(LIBESPHTTPD_HTML_ESPFS_PATH) || rm -f $(LIBESPHTTPD_HTML_ESPFS_PATH) - -$(LIBESPHTTPD_HTML_ESPFS_OBJ): $(LIBESPHTTPD_HTML_ESPFS) - $(Q)$(OBJCOPY) -I binary -O $(CROSS_OUTPUT_TARGET) -B $(CROSS_BINARY_ARCH) --rename-section .data=.irom.espfs $^ $@ - -$(BUILD_DIR)libesphttpd.a: $(LIBESPHTTPD_HTML_ESPFS_OBJ) - -htmlfs: $(LIBESPHTTPD_HTML_ESPFS_OBJ) - -$(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg: - make -C $(libesphttpd_ROOT)/libesphttpd/mkupgimg CC=gcc RBOOT_OTA=$(RBOOT_OTA) - -$(FIRMWARE_DIR)ota_$(PROGRAM).bin: $(FW_FILE) $(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg - $(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg $(FW_FILE) "$(LIBESPHTTPD_OTA_TAGNAME)" $(FIRMWARE_DIR)ota_$(PROGRAM).bin - -ota: $(FIRMWARE_DIR)ota_$(PROGRAM).bin $(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg - -webflash: $(FIRMWARE_DIR)ota_$(PROGRAM).bin - $(CURL) $(LIBESPHTTPD_CURL_OPTS) --data-binary "@$(FIRMWARE_DIR)ota_$(PROGRAM).bin" http://$(ESP_IP)/flash/upload && $(CURL) $(LIBESPHTTPD_CURL_OPTS) http://$(ESP_IP)/flash/reboot - diff --git a/extras/libesphttpd/libesphttpd b/extras/libesphttpd/libesphttpd deleted file mode 160000 index 3047230..0000000 --- a/extras/libesphttpd/libesphttpd +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 30472301589fb0c4eae792884cafc92651a959e3 diff --git a/extras/lis3dh/README.md b/extras/lis3dh/README.md deleted file mode 100644 index 352ec95..0000000 --- a/extras/lis3dh/README.md +++ /dev/null @@ -1,1039 +0,0 @@ -# Driver for the LIS3DH 3-axes digital output accelerometer - -The driver is for the usage with the ESP8266 and [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos). If you can't find it in folder [extras/lis3dh](https://github.com/SuperHouse/esp-open-rtos/tree/master/extras) of original repository, it is not yet merged. Please take a look to branch [lis3dh](https://github.com/gschorcht/esp-open-rtos/tree/lis3dh) of my fork in that case. - -It is also working with ESP32 and [ESP-IDF](https://github.com/espressif/esp-idf.git) using a wrapper component for ESP8266 functions, see folder ```components/esp8266_wrapper```, as well as Linux based systems using a wrapper library. - -The driver can also be used with LIS3DE, LIS2DH, LIS2DH12, LIS2DE, and LIS2DE12 - -## About the sensor - -LIS3DH is a low-power high performance **3-axis accelerometer sensor** connected to **I2C** or **SPI** with a full scale of up to **±16 g**. It supports different measuring rates. - -**Main features** of the sensor are: - -- 4 selectable full scales of ±2 g, ±4 g, ±8 g, and ±16 g -- 9 measuring rates from 1 Hz to 5 kHz -- 16 bit accelerometer value data output -- 2 independent programmable interrupt generators for free-fall and motion detection -- integrated high-pass filters with 3 modes and 4 different cut off frequencies -- embedded temperature sensor -- embedded 32 levels of 16 bit data output FIFO -- 6D/4D orientation detection -- Free-fall detection -- Motion detection -- click/double click recognition -- I2C and SPI digital output interface - -## Sensor operation - -### Sensor modes - -LIS3DH provides different operating modes. - -- **Power Down mode** is configured automatically after power up boot sequence. In this mode, almost all internal blocks of the device are switched off. Register content is preserved, but there are no measurements performed. - -- **Normal mode** is the standard measurement mode. In this mode measurements are performed with a resolution of **10 bit** at the defined output data rate (**ODR**). - -- **Low-power mode** is the measurement mode with reduced power consumption. Measurements are performed with a resolution of only **8 bit** at the defined output data rate (**ODR**). - -- **High-resolution mode** is the measurement mode where measurements are performed with a resolution of 12 bit at the defined output data rate (**ODR**). Only output data rates (ODR) up to 400 Hz are available. - -Switching from any mode to any another mode with the exception of high-resolution mode takes only 1/ODR. Switching from any mode to the high-resolution mode takes 7/ODRs. - -### Output Data Rates - -In normal, low-power and high-resolution modes, measurements are performed at a defined output rate. Following output data rates (ODR) are supported in the different modes: - -Driver symbol | Normal mode
```lis3dh_normal``` | Low-power mode
```lis3dh_low_power``` | High-resolution mode
```lis3dh_high_res``` -:---------------------- |:------------:|:---------------:|:--------------------: -```lis3dh_power_down``` | Power down | Power down | Power down -```lis3dh_normal_1``` | 1 Hz | 1 Hz | 1 Hz -```lis3dh_normal_10``` | 10 Hz | 10 Hz | 10 Hz -```lis3dh_normal_25``` | 25 Hz | 25 Hz | 25 Hz -```lis3dh_normal_50``` | 50 Hz | 50 Hz | 50 Hz -```lis3dh_normal_100``` | 100 Hz | 100 Hz | 100 Hz -```lis3dh_normal_200``` | 200 Hz | 200 Hz | 200 Hz -```lis3dh_normal_400``` | 400 Hz | 400 Hz | 400 Hz -```lis3dh_normal_1600```| - | 1600 Hz | - -```lis3dh_normal_5000```| 1250 Hz | 5000 Hz | - - -The **easiest way to use the sensor** is simply to initialize it with function ```lis3dh_init_sensor``` and then set it to any measurement mode with function ```lis3dh_set_mode``` to start measurements with the given output data rate (ODR). - -``` -... -static lis3dh_sensor_t* sensor = 0; -... -if ((sensor = lis3dh_init_sensor (I2C_BUS, LIS3DH_I2C_ADDRESS_2, 0))) -{ - ... - lis3dh_set_mode (sensor, lis3dh_odr_10, lis3dh_high_res, true, true, true) - ... -} -... - -``` -In this example, a LIS3DH sensor connected to I2C is initialized and set to high-resolution mode to start measurements for all three axes with an output data rate (ODR) of 10 Hz. - -**Please note:** -- ```lis3dh_init_sensor``` function resets the sensor completely, switches it to the power down mode, and returns a pointer to a sensor device data structure on success. All registers are reset to default values and the embedded FIFO is cleared. -- All sensor configurations should be done before calling function ```lis3dh_set_mode```. In particular, the interrupt configuration should be performed before to avoid loosing the first interrupt and locking the system. - -## Measurement results - -### Output data format - -The sensor determines periodically the accelerations for all axes that are enabled for measurement and produces output data with the selected output data rate (ODR). - -Raw **output data** (**raw data**) are given as 16-bit signed integer values in 2’s complement representation and are always left-aligned. The resolution depends on the selected operation mode and the selected full scale. For example, in low power mode with 8-bit resolution only the high byte is used. LIS3DH allows to select the following full scales: - -Full Scale | Driver symbol | Resolution 12 bit
```lis3dh_high_res``` | Resolution 10 bit
```lis3dh_normal``` | Resolution 8 bit
```lis3dh_low_power``` ----------------------:|:-----------:|-----------:|---------------:|-----: - ±2 g | ```lis3dh_scale_2_g``` | 1 mg | 4 mg | 16 mg - ±4 g | ```lis3dh_scale_4_g``` | 2 mg | 8 mg | 32 mg - ±8 g | ```lis3dh_scale_8_g``` | 4 mg | 16 mg | 64 mg -±16 g | ```lis3dh_scale_16_g``` | 12 mg | 48 mg | 192 mg - -By default, a full scale of ±2 g is used. Function ```lis3dh_set_scale``` can be used to change it. - -``` -lis3dh_set_scale(sensor, lis3dh_scale_4_g); -``` - -### Fetching output data - -To get the information whether new data are available, the user task can either use - -- the function ```lis3dh_new_data``` to check periodically whether new output data are available, or -- the data ready interrupt (DRDY) which is thrown as soon as new output data are available (see below). - -Last measurement results can then be fetched either - -- as raw data using function ```lis3dh_get_raw_data``` or -- as floating point values in g using function ```lis3dh_get_float_data```. - -It is recommended to use function ```lis3dh_get_float_data``` since it already converts measurement results to real values according to the selected full scale. - -``` -void user_task_periodic(void *pvParameters) -{ - lis3dh_float_data_t data; - - while (1) - { - // execute task every 10 ms - vTaskDelay (10/portTICK_PERIOD_MS); - ... - // test for new data - if (!lis3dh_new_data (sensor)) - continue; - - // fetch new data - if (lis3dh_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } -} -``` - -**Please note:** -Functions ```lis3dh_get_float_data``` and ```lis3dh_get_raw_data``` always return the last available results. If these functions are called more often than measurements are taken, some measurement results are retrieved multiple times. If these functions are called too rarely, some measurement results will be lost. - -### High pass filtering - -LIS3DH provides embedded high-pass filtering capabilities to improve measurement results. Please refer the [datasheet](http://www.st.com/resource/en/datasheet/lis3dh.pdf) or [application note](http://www.st.com/resource/en/application_note/cd00290365.pdf) for more details. - -The high pass filter can independently apply to - -- the raw output data, -- the data used for click detection, and -- the data used for inertial interrupt generation like wake-up, free fall or 6D/4D orientation detection. - -The mode and the cutoff frequency of the high pass filter can be configured using function ```lis3dh_config_hpf```. Following HPF modes are available: - -Driver symbol | HPF mode -:--------------|:--------- -```lis3dh_hpf_normal``` | Normal mode -```lis3dh_hpf_reference``` | Reference mode -```lis3dh_hpf_autoreset``` | Auto-reset on interrupt - -For each output data rate (ODR), 4 different HPF cutoff frequencies can be used. Furthermore, a number of boolean parameters indicate to which data the HPF is applied. - -``` -... -// configure HPF -lis3dh_config_hpf (sensor, lis3dh_hpf_normal, 0, true, true, true, true); - -// reset the reference by dummy read -lis3dh_get_hpf_ref (sensor); -... -``` - -### FIFO - -In order to limit the rate at which the host processor has to fetch the data, the LIS3DH embeds a first-in first-out buffer (FIFO). This is in particular helpful at high output data rates. The FIFO buffer can work in four different modes and is able to store up to 32 accelerometer samples. Please refer the [datasheet](http://www.st.com/resource/en/datasheet/lis3dh.pdf) or [application note](http://www.st.com/resource/en/application_note/cd00290365.pdf) for more details. - -Driver symbol | FIFO mode ---------------|------------------------- -```lis3dh_bypass``` | Bypass mode (FIFO is not used) -```lis3dh_fifo``` | FIFO mode -```lis3dh_stream``` | Stream mode -```lis3dh_stream_to_fifo``` | Stream-to-FIFO mode - -The FIFO mode can be set using function ```lis3dh_set_fifo_mode```. This function takes three parameters - -- the FIFO mode, -- a threshold value which defines a watermark level, and -- an interrupt source that is used in Stream-to-FIFO mode. - -The watermark level is used by the sensor to set a watermark flag and to generate optionally an interrupt when the FIFO content exceeds this level. They can be used to gather a minimum number of axes acceleration samples with the sensor before the data are fetched as a single read operation from the sensor. - -``` -... -// clear FIFO -lis3dh_set_fifo_mode (sensor, lis3dh_bypass, 0, lis3dh_int1_signal); - -// activate FIFO mode -lis3dh_set_fifo_mode (sensor, lis3dh_stream, 10, lis3dh_int1_signal); -... -``` - -**Please note**: To clear the FIFO at any time, set the FIFO mode to ```lis3dh_bypass``` and back to the desired FIFO mode. - -To read data from the FIFO, simply use either - -- the function ```lis3dh_get_raw_data_fifo``` to all get raw output data stored in FIFO or -- the function ```lis3dh_get_float_data_fifo``` to get all data stored in FIFO and converted to real values in g. - -Both functions clear the FIFO and return the number of samples read from the FIFO. - -``` -void user_task_periodic (void *pvParameters) -{ - lis3dh_float_data_fifo_t data; - - while (1) - { - // execute task every 500 ms - vTaskDelay (500/portTICK_PERIOD_MS); - ... - // test for new data - if (!lis3dh_new_data (sensor)) - continue; - - // fetch data from fifo - uint8_t num = lis3dh_get_float_data_fifo (sensor, data); - - for (int i = 0; i < num; i++) - { - // do something with data[i] ... - } -} -``` - -## Interrupts - -The LIS3DH supports two dedicated interrupt signals **```INT1```** and **```INT2```** and three different types of interrupts: - -- **data** interrupts (data ready and FIFO status), -- **inertial event** interrupts (axis movement, wake-up, free fall, and 6D/4D orientation detection), and -- **click detection** interrupts. - -While inertial event interrupts and click detection interrupts can be configured for both interrupt signals, data ready and FIFO status interrupts can be configured only for interrupt signal ```INT1```. - -### Data interrupts (data ready and FIFO status) - -Following sources can generate an interrupt on signal ```INT1```: - -Interrupt source | Driver symbol -:-----------------|:------------- -Output data become ready to read | ```lis3dh_int_data_ready``` -FIFO content exceeds the watermark level | ```lis3dh_int_fifo_watermark``` -FIFO is completely filled | ```lis3dh_int_fifo_overrun``` - -Each of these interrupt sources can be enabled or disabled separately with function ```lis3dh_enable_int```. By default all interrupt sources are disabled. - -``` -lis3dh_enable_int (sensor, lis3dh_int_data_ready, lis3dh_int1_signal, true); -``` - -Whenever an interrupt is generated at interrupt signal ```INT1```, the function ```lis3dh_get_int_data_source``` can be used to determine the source of the interrupt. This function returns a data structure of type ```lis3dh_int_data_source_t``` that contain a boolean member for each source that can be tested for true. - -``` -void int1_handler () -{ - lis3dh_int_data_source_t data_src; - - // get the source of the interrupt on *INT1* signal - lis3dh_get_int_data_source (sensor, &data_src); - - // in case of data ready interrupt, get the results and do something with them - if (data_src.data_ready) - ... // read data - - // in case of FIFO interrupts read the whole FIFO - else if (data_src.fifo_watermark || data_src.fifo_overrun) - ... // read FIFO data - ... -} -``` - -### Inertial event interrupts - -Inertial interrupt generators allow to generate interrupts when certain inertial event occures (event interrupts), that is, the acceleration of defined axes is higher or lower than a defined threshold. If activated, the acceleration of each axis is compared with a defined threshold to check whether it is below or above the threshold. The results of all activated comparisons are then combined OR or AND to generate the interrupt signal. - -The configuration of the threshold valid for all axes, the activated comparisons and the selected AND/OR combination allows to recognize special situations: - -- **Wake-up detection** refers the special condition that the acceleration measured along any axis is above the defined threshold (```lis3dh_wake_up```). -- **Free fall detection** refers the special condition that the acceleration measured along all the axes goes to zero (```lis3dh_free_fall```). -- **6D/4D orientation detection** refers to the special condition that the measured acceleration along certain axes is above and along the other axes is below the threshold which indicates a particular orientation (```lis3dh_6d_movement```, ```lis3dh_6d_position```, ```lis3dh_4d_movement```, ```lis3dh_4d_position```). - -Inertial event interrupts can be configured with the function ```lis3dh_get_int_event_config```. This function requires as parameters the configuration of type ```lis3dh_int_event_config_t``` and the interrupt generator to be used for inertial event interrupts. - -Inertial event interrupts have to be enabled or disabled using function ```lis3dh_enable_int```. The interrupt signal on which the interrupts are generated is given as parameter. - -For example, axis movement detection interrupt generated by inertial interrupt generator 2 on signal ```INT1``` could be configured as following: - -``` -lis3dh_int_event_config_t event_config; - -event_config.mode = lis3dh_wake_up; -event_config.threshold = 10; -event_config.x_low_enabled = false; -event_config.x_high_enabled = true; -event_config.y_low_enabled = false; -event_config.y_high_enabled = true; -event_config.z_low_enabled = false; -event_config.z_high_enabled = true; - -event_config.duration = 0; -event_config.latch = true; - -lis3dh_set_int_event_config (sensor, &event_config, lis3dh_int_event2_gen); -lis3dh_enable_int (sensor, lis3dh_int_event1, lis3dh_int1_signal, true); -``` - -The parameter of type ```lis3dh_int_event_config_t``` also configures - -- whether the interrupt should be latched until the interrupt source is read, and -- which time given in 1/ODR an interrupt condition has to be given before the interrupt is generated. - -As with data ready and FIFO status interrupts, function ```lis3dh_get_int_event_source``` can be used to determine the source of an inertial event interrupt whenever it is generated. This function returns a data structure of type ```lis3dh_int_event_source_t``` which contains a boolean member for each source that can be tested for true. - -``` -void int1_handler () -{ - lis3dh_int_data_source_t data_src; - lis3dh_int_event_source_t event_src; - - // get the source of the interrupt on *INT1* signal - lis3dh_get_int_data_source (sensor, &data_src); - lis3dh_get_int_event_source (sensor, &event_src, lis3dh_int_event2_gen); - - // in case of data ready interrupt, get the results and do something with them - if (data_src.data_ready) - ... // read data - - // in case of FIFO interrupts read the whole FIFO - else if (data_src.fifo_watermark || data_src.fifo_overrun) - ... // read FIFO data - - // in case of inertial event interrupt - else if (event_src.active) - ... // read data - ... -} -``` - -**Please note:** If the interrupt is configured to be latched, the interrupt signal is active until the interrupt source is read. Otherwise the interrupt signal is only active as long as the interrupt condition is satisfied. - -**Please note** Activating all threshold comparisons and the OR combination (```lis3dh_wake_up```) is the most flexible way to deal with inertial event interrupts. Functions such as free fall detection and so on can then be realized by suitably combining the various interrupt sources by the user task. Following example realizes the free fall detection in user task. - -``` -lis3dh_int_event_config_t event_config; - -event_config.mode = lis3dh_wake_up; -event_config.threshold = 10; -event_config.x_low_enabled = true; -event_config.x_high_enabled = true; -event_config.y_low_enabled = true; -event_config.y_high_enabled = true; -event_config.z_low_enabled = true; -event_config.z_high_enabled = true; - -event_config.duration = 0; -event_config.latch = true; - -lis3dh_set_int_event_config (sensor, &event_config, lis3dh_int_event2_gen); -lis3dh_enable_int (sensor, lis3dh_int_event1, lis3dh_int1_signal, true); -``` - -``` -void int1_handler () -{ - lis3dh_int_event_source_t event_src; - - // get the source of the interrupt from interrupt generator 2 on *INT1* signal - lis3dh_get_int_event_source (sensor, &event_src, lis3dh_int_event2_gen); - - // test for free fall condition (all accelerations are below the threshold) - if (event_src.x_low && event_src.y_low && event_src.z_low) - ... // do something - ... -} - -``` - -### Click detection interrupts - -A sequence of acceleration values over time measured along certain axes can be used to detect single and double clicks. Please refer the [datasheet](http://www.st.com/resource/en/datasheet/lis3dh.pdf) or [application note](http://www.st.com/resource/en/application_note/cd00290365.pdf) for more information. - -Click detection interrupts are configured using the ``` lis3dh_set_int_click_config``` function. This function requires the configuration of type ```lis3dh_int_click_config_t``` as parameter. The interrupt has to be activated or deactivated using the ```lis3dh_enable_int``` function with the interrupt signal on which the interrupts are generated as parameter. - -In following example, the single click detection for z-axis is enabled with a time limit of 1/ODR, a time latency of 1/ODR and a time window of 3/ODR. - -``` -lis3dh_int_click_config_t click_config; - -click_config.threshold = 10; -click_config.x_single = false; -click_config.x_double = false; -click_config.y_single = false; -click_config.y_double = false; -click_config.z_single = true; -click_config.z_double = false; -click_config.latch = true; -click_config.time_limit = 1; -click_config.time_latency = 1; -click_config.time_window = 3; - -lis3dh_set_int_click_config (sensor, &click_config); -lis3dh_enable_int (sensor, lis3dh_int_click, lis3dh_int1_signal, true); -``` - -Please refer the [application note](http://www.st.com/resource/en/application_note/cd00290365.pdf) for more information about the configuration parameters. - -As with other interrupts, the function ```lis3dh_get_int_click_source``` can be used to determine the source of the interrupt signal whenever it is generated. This function returns a data structure of type ```lis3dh_int_click_source_t``` that contains a boolean member for each source that can be tested for true. - -``` -void int1_handler () -{ - lis3dh_int_click_source_t click_src; - - // get the source of the interrupt on *INT1* signal - lis3dh_get_int_click_source (sensor, &click_src); - - // detect single click along z-axis - if (click_src.z_click && click_src.s_click) - ... // do something - ... -} - -``` -**Please note:** If the interrupt is configured to be latched, the interrupt signal is active until the interrupt source is read. Otherwise the interrupt signal is only active as long as the interrupt condition is satisfied. - -### Interrupt signal properties - -By default, interrupt signals are high active. Using function ```lis3dh_config_int_signals```, the level of the interrupt signal can be changed. - -Driver symbol | Meaning -:-------------|:------- -```lis3dh_high_active``` | Interrupt signal is high active (default) -```lis3dh_low_active``` | Interrupt signal is low active - - -## Analog inputs and temperature sensor - -The LIS3DH sensor contains an auxiliary ADC with 3 separate dedicated inputs ADC1, ADC2, and ADC3. ADC3 can be connected to the internal temperatur sensor. The input range is 1200 ± 400 mV. The resolution of the A/D converter is 10 bit in normal and high-resolution mode, but only 8 bit in low-power mode. - -ADC inputs can be activated and deactivated (default) with function ```lis3dh_enable_adc```. If parameter ```temp``` is true, ADC3 is connected to the internal temperature sensor and provides the temperature in degrees. - -ADC sampling rate is the same the output data rate (ODR). Results are given as left-aligned 16-bit signed integer values in 2’s complement. Function ```lis3dh_get_adc``` can be used to get the results. - -## Low level functions - -The LIS3DH is a very complex and flexible sensor with a lot of features. It can be used for a big number of different use cases. Since it is quite impossible to implement a high level interface which is generic enough to cover all the functionality of the sensor for all different use cases, there are two low level interface functions that allow direct read and write access to the registers of the sensor. - -``` -bool lis3dh_reg_read (lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -bool lis3dh_reg_write (lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -``` - -**Please note** -These functions should only be used to do something special that is not covered by drivers's high level interface AND if you exactly know what you do and what it might affect. Please be aware that it might always affect the high level interface. - - -## Usage - -First, the hardware configuration has to be established. - -### Hardware configurations - -Following figure shows a possible hardware configuration for ESP8266 and ESP32 if I2C interface is used to connect the sensor. - -``` - +-----------------+ +----------+ - | ESP8266 / ESP32 | | LIS3DH | - | | | | - | GPIO 14 (SCL) >-----> SCL | - | GPIO 13 (SDA) <-----> SDA | - | GPIO 5 <------ INT1 | - | GPIO 4 <------ INT2 | - +-----------------+ +----------+ -``` - -If SPI interface is used, configuration for ESP8266 and ESP32 could look like following. - -``` - +-----------------+ +----------+ +-----------------+ +----------+ - | ESP8266 | | LIS3DH | | ESP32 | | LIS3DH | - | | | | | | | | - | GPIO 14 (SCK) ------> SCK | | GPIO 16 (SCK) ------> SCK | - | GPIO 13 (MOSI)------> SDI | | GPIO 17 (MOSI)------> SDI | - | GPIO 12 (MISO)<------ SDO | | GPIO 18 (MISO)<------ SDO | - | GPIO 2 (CS) ------> CS | | GPIO 19 (CS) ------> CS | - | GPIO 5 <------ INT1 | | GPIO 5 <------ INT1 | - | GPIO 4 <------ INT2 | | GPIO 5 <------ INT2 | - +-----------------+ +----------+ +-----------------+ +----------+ -``` - -### Communication interface settings - -Dependent on the hardware configuration, the communication interface and interrupt settings have to be defined. In case ESP32 is used, the configuration could look like - -``` -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define INT1_PIN 5 -#define INT2_PIN 4 -``` - -### Main program - -#### Initialization - -If I2C interfaces are used, they have to be initialized first. - -``` -i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); -``` - -SPI interface has only to be initialized explicitly on ESP32 platform to declare the GPIOs that are used for SPI interface. - -``` -spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); -``` - -Once the interfaces are initialized, function ```lis3dh_init_sensor``` has to be called for each LIS3DH sensor in order to initialize the sensor and to check its availability as well as its error state. This function returns a pointer to a sensor device data structure or NULL in case of error. - -The parameter *bus* specifies the ID of the I2C or SPI bus to which the sensor is connected. - -``` -static lis3dh_sensor_t* sensor; -``` - -For sensors connected to an I2C interface, a valid I2C slave address has to be defined as parameter *addr*. In that case parameter *cs* is ignored. - -``` -sensor = lis3dh_init_sensor (I2C_BUS, LIS3DH_I2C_ADDRESS_1, 0); - -``` - -If parameter *addr* is 0, the sensor is connected to a SPI bus. In that case, parameter *cs* defines the GPIO used as CS signal. - -``` -sensor = lis3dh_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - -``` - -The remaining of the program is independent on the communication interface. - -#### Configuring the sensor - -Optionally, you could wish to set some measurement parameters. For details see the sections above, the header file of the driver ```lis3dh.h```, and of course the data sheet of the sensor. - -#### Starting measurements - -As last step, the sensor mode has be set to start periodic measurement. The sensor mode can be changed anytime later. - -``` -... -// start periodic measurement with output data rate of 10 Hz -lis3dh_set_mode (sensor, lis3dh_odr_10, lis3dh_high_res, true, true, true); -... -``` - -#### Periodic user task - -Finally, a user task that uses the sensor has to be created. - -**Please note:** To avoid concurrency situations when driver functions are used to access the sensor, for example to read data, the user task must not be created until the sensor configuration is completed. - -The user task can use different approaches to fetch new data. Either new data are fetched periodically or interrupt signals are used when new data are available or a configured event happens. - -If new data are fetched **periodically** the implementation of the user task is quite simple and could look like following. - -``` -void user_task_periodic(void *pvParameters) -{ - lis3dh_float_data_t data; - - while (1) - { - // execute task every 10 ms - vTaskDelay (10/portTICK_PERIOD_MS); - ... - // test for new data - if (!lis3dh_new_data (sensor)) - continue; - - // fetch new data - if (lis3dh_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } -} -... -// create a user task that fetches data from sensor periodically -xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); -``` - -The user task simply tests periodically with a rate higher than the output data rate (ODR) of the sensor whether new data are available. If new data are available, it fetches the data. - -#### Interrupt user task - -A different approach is to use one of the **interrupts** INT1 or INT2. In this case, the user has to implement an interrupt handler that either fetches the data directly or triggers a task, that is waiting to fetch the data. - -``` -static QueueHandle_t gpio_evt_queue = NULL; - -// Interrupt handler which resumes sends an event to the waiting user_task_interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -// User task that fetches the sensor values - -void user_task_interrupt (void *pvParameters) -{ - uint32_t gpio_num; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - // test for new data - if (!lis3dh_new_data (sensor)) - continue; - - // fetch new data - if (lis3dh_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } - } -} -... - -// create a task that is triggered only in case of interrupts to fetch the data - -xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); -... -``` - -In this example, there is - -- a task that is fetching data when it receives an event, and -- an interrupt handler that generates the event on interrupt. - -Finally, interrupt handlers have to be activated for the GPIOs which are connected to the interrupt signals. - -``` -// configure interrupt pins for *INT1* and *INT2* signals and set the interrupt handler -gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); -gpio_set_interrupt(INT2_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); -``` - -Furthermore, the interrupts have to be enabled and configured in the LIS3DH sensor, see section **Interrupts** above. - -## Full Example - -``` -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED // SPI interface is used, otherwise I2C -// #define FIFO_MODE // multiple sample read mode -// #define INT_DATA // data interrupts used (data ready and FIFO status) -// #define INT_EVENT // inertial event interrupts used (wake-up, free fall or 6D/4D orientation) -// #define INT_CLICK // click detection interrupts used - -#if defined(INT_DATA) || defined(INT_EVENT) || defined(INT_CLICK) -#define INT_USED -#endif - -/* -- includes ----------------------------------------------------- */ - -#include "lis3dh.h" - -/** -- platform dependent definitions ------------------------------ */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define INT1_PIN 5 -#define INT2_PIN 4 - -/* -- user tasks --------------------------------------------------- */ - -static lis3dh_sensor_t* sensor; - -/** - * Common function used to get sensor data. - */ -void read_data () -{ - #ifdef FIFO_MODE - - lis3dh_float_data_fifo_t fifo; - - if (lis3dh_new_data (sensor)) - { - uint8_t num = lis3dh_get_float_data_fifo (sensor, fifo); - - printf("%.3f LIS3DH num=%d\n", (double)sdk_system_get_time()*1e-3, num); - - for (int i=0; i < num; i++) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LIS3DH (xyz)[g] ax=%+7.3f ay=%+7.3f az=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - fifo[i].ax, fifo[i].ay, fifo[i].az); - } - - #else - - lis3dh_float_data_t data; - - if (lis3dh_new_data (sensor) && - lis3dh_get_float_data (sensor, &data)) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LIS3DH (xyz)[g] ax=%+7.3f ay=%+7.3f az=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - data.ax, data.ay, data.az); - - #endif // FIFO_MODE -} - - -#ifdef INT_USED -/** - * In this case, any of the possible interrupts on interrupt signal *INT1* is - * used to fetch the data. - * - * When interrupts are used, the user has to define interrupt handlers that - * either fetches the data directly or triggers a task which is waiting to - * fetch the data. In this example, the interrupt handler sends an event to - * a waiting task to trigger the data gathering. - */ - -static QueueHandle_t gpio_evt_queue = NULL; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint8_t gpio_num; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - lis3dh_int_data_source_t data_src = {}; - lis3dh_int_event_source_t event_src = {}; - lis3dh_int_click_source_t click_src = {}; - - // get the source of the interrupt and reset *INTx* signals - #ifdef INT_DATA - lis3dh_get_int_data_source (sensor, &data_src); - #endif - #ifdef INT_EVENT - lis3dh_get_int_event_source (sensor, &event_src, lis3dh_int_event1_gen); - #endif - #ifdef INT_CLICK - lis3dh_get_int_click_source (sensor, &click_src); - #endif - - // in case of DRDY interrupt or inertial event interrupt read one data sample - if (data_src.data_ready) - read_data (); - - // in case of FIFO interrupts read the whole FIFO - else if (data_src.fifo_watermark || data_src.fifo_overrun) - read_data (); - - // in case of event interrupt - else if (event_src.active) - { - printf("%.3f LIS3DH ", (double)sdk_system_get_time()*1e-3); - if (event_src.x_low) printf("x is lower than threshold\n"); - if (event_src.y_low) printf("y is lower than threshold\n"); - if (event_src.z_low) printf("z is lower than threshold\n"); - if (event_src.x_high) printf("x is higher than threshold\n"); - if (event_src.y_high) printf("y is higher than threshold\n"); - if (event_src.z_high) printf("z is higher than threshold\n"); - } - - // in case of click detection interrupt - else if (click_src.active) - printf("%.3f LIS3DH %s\n", (double)sdk_system_get_time()*1e-3, - click_src.s_click ? "single click" : "double click"); - } - } -} - -// Interrupt handler which resumes user_task_interrupt on interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -#else // !INT_USED - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - vTaskDelay (100/portTICK_PERIOD_MS); - - while (1) - { - // read sensor data - read_data (); - - // passive waiting until 1 second is over - vTaskDelay(100/portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - // init the sensor connnected to SPI - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = lis3dh_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else - - // init all I2C bus interfaces at which LIS3DH sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address LIS3DH_I2C_ADDRESS_1 connected to I2C_BUS. - sensor = lis3dh_init_sensor (I2C_BUS, LIS3DH_I2C_ADDRESS_1, 0); - - #endif - - if (sensor) - { - #ifdef INT_USED - - /** --- INTERRUPT CONFIGURATION PART ---- */ - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode to avoid losing interrupts - - // create an event queue to send interrupt events from interrupt - // handler to the interrupt task - gpio_evt_queue = xQueueCreate(10, sizeof(uint8_t)); - - // configure interupt pins for *INT1* and *INT2* signals and set the interrupt handler - gpio_enable(INT1_PIN, GPIO_INPUT); - gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - - #endif // INT_USED - - /** -- SENSOR CONFIGURATION PART --- */ - - // set polarity of INT signals if necessary - // lis3dh_config_int_signals (sensor, lis3dh_high_active); - - #ifdef INT_DATA - // enable data interrupts on INT1 (data ready or FIFO status interrupts) - // data ready and FIFO status interrupts must not be enabled at the same time - #ifdef FIFO_MODE - lis3dh_enable_int (sensor, lis3dh_int_fifo_overrun , lis3dh_int1_signal, true); - lis3dh_enable_int (sensor, lis3dh_int_fifo_watermark, lis3dh_int1_signal, true); - #else - lis3dh_enable_int (sensor, lis3dh_int_data_ready, lis3dh_int1_signal, true); - #endif // FIFO_MODE - #endif // INT_DATA - - #ifdef INT_EVENT - // enable data interrupts on INT1 - lis3dh_int_event_config_t event_config; - - event_config.mode = lis3dh_wake_up; - // event_config.mode = lis3dh_free_fall; - // event_config.mode = lis3dh_6d_movement; - // event_config.mode = lis3dh_6d_position; - // event_config.mode = lis3dh_4d_movement; - // event_config.mode = lis3dh_4d_position; - event_config.threshold = 10; - event_config.x_low_enabled = false; - event_config.x_high_enabled = true; - event_config.y_low_enabled = false; - event_config.y_high_enabled = true; - event_config.z_low_enabled = false; - event_config.z_high_enabled = true; - event_config.duration = 0; - event_config.latch = true; - - lis3dh_set_int_event_config (sensor, &event_config, lis3dh_int_event1_gen); - lis3dh_enable_int (sensor, lis3dh_int_event1, lis3dh_int1_signal, true); - #endif // INT_EVENT - - #ifdef INT_CLICK - // enable click interrupt on INT1 - lis3dh_int_click_config_t click_config; - - click_config.threshold = 10; - click_config.x_single = false; - click_config.x_double = false; - click_config.y_single = false; - click_config.y_double = false; - click_config.z_single = true; - click_config.z_double = false; - click_config.latch = true; - click_config.time_limit = 1; - click_config.time_latency = 1; - click_config.time_window = 3; - - lis3dh_set_int_click_config (sensor, &click_config); - lis3dh_enable_int (sensor, lis3dh_int_click, lis3dh_int1_signal, true); - #endif // INT_CLICK - - #ifdef FIFO_MODE - // clear FIFO and activate FIFO mode if needed - lis3dh_set_fifo_mode (sensor, lis3dh_bypass, 0, lis3dh_int1_signal); - lis3dh_set_fifo_mode (sensor, lis3dh_stream, 10, lis3dh_int1_signal); - #endif - - // configure HPF and reset the reference by dummy read - lis3dh_config_hpf (sensor, lis3dh_hpf_normal, 0, true, true, true, true); - lis3dh_get_hpf_ref (sensor); - - // enable ADC inputs and temperature sensor for ADC input 3 - lis3dh_enable_adc (sensor, true, true); - - // LAST STEP: Finally set scale and mode to start measurements - lis3dh_set_scale(sensor, lis3dh_scale_2_g); - lis3dh_set_mode (sensor, lis3dh_odr_10, lis3dh_high_res, true, true, true); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - #ifdef INT_USED - - // create a task that is triggered only in case of interrupts to fetch the data - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a user task that fetches data from sensor periodically - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #endif - } - else - printf("Could not initialize LIS3DH sensor\n"); -} - -``` diff --git a/extras/lis3dh/component.mk b/extras/lis3dh/component.mk deleted file mode 100644 index 0b732ad..0000000 --- a/extras/lis3dh/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/lis3dh - -# expected anyone using SHT3x driver includes it as 'lis3dh/lis3dh.h' -INC_DIRS += $(lis3dh_ROOT).. -INC_DIRS += $(lis3dh_ROOT) - -# args for passing into compile rule generation -lis3dh_SRC_DIR = $(lis3dh_ROOT) - -$(eval $(call component_compile_rules,lis3dh)) diff --git a/extras/lis3dh/lis3dh.c b/extras/lis3dh/lis3dh.c deleted file mode 100644 index b9def12..0000000 --- a/extras/lis3dh/lis3dh.c +++ /dev/null @@ -1,1274 +0,0 @@ -/* - * Driver for LIS3DH 3-axes digital accelerometer connected to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - * - * The information provided is believed to be accurate and reliable. The - * copyright holder assumes no responsibility for the consequences of use - * of such information nor for any infringement of patents or other rights - * of third parties which may result from its use. No license is granted by - * implication or otherwise under any patent or patent rights of the copyright - * holder. - */ - -#include -#include - -#include "lis3dh.h" - -#if defined(LIS3DH_DEBUG_LEVEL_2) -#define debug(s, f, ...) printf("%s %s: " s "\n", "LIS3DH", f, ## __VA_ARGS__) -#define debug_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "LIS3DH", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define debug(s, f, ...) -#define debug_dev(s, f, d, ...) -#endif - -#if defined(LIS3DH_DEBUG_LEVEL_1) || defined(LIS3DH_DEBUG_LEVEL_2) -#define error(s, f, ...) printf("%s %s: " s "\n", "LIS3DH", f, ## __VA_ARGS__) -#define error_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "LIS3DH", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define error(s, f, ...) -#define error_dev(s, f, d, ...) -#endif - -// register addresses -#define LIS3DH_REG_STATUS_AUX 0x07 -#define LIS3DH_REG_OUT_ADC1_L 0x08 -#define LIS3DH_REG_OUT_ADC1_H 0x09 -#define LIS3DH_REG_OUT_ADC2_L 0x0a -#define LIS3DH_REG_OUT_ADC2_H 0x0b -#define LIS3DH_REG_OUT_ADC3_L 0x0c -#define LIS3DH_REG_OUT_ADC3_H 0x0d -#define LIS3DH_REG_INT_COUNTER 0x0e -#define LIS3DH_REG_WHO_AM_I 0x0f -#define LIS3DH_REG_TEMP_CFG 0x1f -#define LIS3DH_REG_CTRL1 0x20 -#define LIS3DH_REG_CTRL2 0x21 -#define LIS3DH_REG_CTRL3 0x22 -#define LIS3DH_REG_CTRL4 0x23 -#define LIS3DH_REG_CTRL5 0x24 -#define LIS3DH_REG_CTRL6 0x25 -#define LIS3DH_REG_REFERENCE 0x26 -#define LIS3DH_REG_STATUS 0x27 -#define LIS3DH_REG_OUT_X_L 0x28 -#define LIS3DH_REG_OUT_X_H 0x29 -#define LIS3DH_REG_OUT_Y_L 0x2a -#define LIS3DH_REG_OUT_Y_H 0x2b -#define LIS3DH_REG_OUT_Z_L 0x2c -#define LIS3DH_REG_OUT_Z_H 0x2d -#define LIS3DH_REG_FIFO_CTRL 0x2e -#define LIS3DH_REG_FIFO_SRC 0x2f -#define LIS3DH_REG_INT1_CFG 0x30 -#define LIS3DH_REG_INT1_SRC 0x31 -#define LIS3DH_REG_INT1_THS 0x32 -#define LIS3DH_REG_INT1_DUR 0x33 -#define LIS3DH_REG_INT2_CFG 0x34 -#define LIS3DH_REG_INT2_SRC 0x35 -#define LIS3DH_REG_INT2_THS 0x36 -#define LIS3DH_REG_INT2_DUR 0x37 -#define LIS3DH_REG_CLICK_CFG 0x38 -#define LIS3DH_REG_CLICK_SRC 0x39 -#define LIS3DH_REG_CLICK_THS 0x3a -#define LIS3DH_REG_TIME_LIMIT 0x3b -#define LIS3DH_REG_TIME_LATENCY 0x3c -#define LIS3DH_REG_TIME_WINDOW 0x3d - -// register structure definitions -struct lis3dh_reg_status -{ - uint8_t XDA :1; // STATUS<0> X axis new data available - uint8_t YDA :1; // STATUS<1> Y axis new data available - uint8_t ZDA :1; // STATUS<2> Z axis new data available - uint8_t ZYXDA :1; // STATUS<3> X, Y and Z axis new data available - uint8_t XOR :1; // STATUS<4> X axis data overrun - uint8_t YOR :1; // STATUS<5> Y axis data overrun - uint8_t ZOR :1; // STATUS<6> Z axis data overrun - uint8_t ZYXOR :1; // STATUS<7> X, Y and Z axis data overrun -}; - -#define LIS3DH_ANY_DATA_READY 0x0f // LIS3DH_REG_STATUS<3:0> - -struct lis3dh_reg_ctrl1 -{ - uint8_t Xen :1; // CTRL1<0> X axis enable - uint8_t Yen :1; // CTRL1<1> Y axis enable - uint8_t Zen :1; // CTRL1<2> Z axis enable - uint8_t LPen :1; // CTRL1<3> Low power mode enable - uint8_t ODR :4; // CTRL1<7:4> Data rate selection -}; - -struct lis3dh_reg_ctrl2 -{ - uint8_t HPIS1 :1; // CTRL2<0> HPF enabled for AOI on INT2 - uint8_t HPIS2 :1; // CTRL2<1> HPF enabled for AOI on INT2 - uint8_t HPCLICK :1; // CTRL2<2> HPF enabled for CLICK - uint8_t FDS :1; // CTRL2<3> Filter data selection - uint8_t HPCF :2; // CTRL2<5:4> HPF cutoff frequency - uint8_t HPM :2; // CTRL2<7:6> HPF mode -}; - -struct lis3dh_reg_ctrl3 -{ - uint8_t unused :1; // CTRL3<0> unused - uint8_t I1_OVERRUN :1; // CTRL3<1> FIFO Overrun interrupt on INT1 - uint8_t I1_WTM1 :1; // CTRL3<2> FIFO Watermark interrupt on INT1 - uint8_t IT_DRDY2 :1; // CTRL3<3> DRDY2 (ZYXDA) interrupt on INT1 - uint8_t IT_DRDY1 :1; // CTRL3<4> DRDY1 (321DA) interrupt on INT1 - uint8_t I1_AOI2 :1; // CTRL3<5> AOI2 interrupt on INT1 - uint8_t I1_AOI1 :1; // CTRL3<6> AOI1 interrupt on INT1 - uint8_t I1_CLICK :1; // CTRL3<7> CLICK interrupt on INT1 -}; - -struct lis3dh_reg_ctrl4 -{ - uint8_t SIM :1; // CTRL4<0> SPI serial interface selection - uint8_t ST :2; // CTRL4<2:1> Self test enable - uint8_t HR :1; // CTRL4<3> High resolution output mode - uint8_t FS :2; // CTRL4<5:4> Full scale selection - uint8_t BLE :1; // CTRL4<6> Big/litle endian data selection - uint8_t BDU :1; // CTRL4<7> Block data update -}; - -struct lis3dh_reg_ctrl5 -{ - uint8_t D4D_INT2 :1; // CTRL5<0> 4D detection enabled on INT1 - uint8_t LIR_INT2 :1; // CTRL5<1> Latch interrupt request on INT1 - uint8_t D4D_INT1 :1; // CTRL5<2> 4D detection enabled on INT2 - uint8_t LIR_INT1 :1; // CTRL5<3> Latch interrupt request on INT1 - uint8_t unused :2; // CTRL5<5:4> unused - uint8_t FIFO_EN :1; // CTRL5<6> FIFO enabled - uint8_t BOOT :1; // CTRL5<7> Reboot memory content -}; - -struct lis3dh_reg_ctrl6 -{ - uint8_t unused1 :1; // CTRL6<0> unused - uint8_t H_LACTIVE:1; // CTRL6<1> Interrupt polarity - uint8_t unused2 :1; // CTRL6<2> unused - uint8_t I2_ACT :1; // CTRL6<3> ? - uint8_t I2_BOOT :1; // CTRL6<4> ? - uint8_t I2_AOI2 :1; // CTRL6<5> AOI2 interrupt on INT1 - uint8_t I2_AOI1 :1; // CTRL6<6> AOI1 interrupt on INT1 - uint8_t I2_CLICK :1; // CTRL6<7> CLICK interrupt on INT2 -}; - -struct lis3dh_reg_fifo_ctrl -{ - uint8_t FTH :5; // FIFO_CTRL<4:0> FIFO threshold - uint8_t TR :1; // FIFO_CTRL<5> Trigger selection INT1 / INT2 - uint8_t FM :2; // FIFO_CTRL<7:6> FIFO mode -}; - -struct lis3dh_reg_fifo_src -{ - uint8_t FFS :5; // FIFO_SRC<4:0> FIFO samples stored - uint8_t EMPTY :1; // FIFO_SRC<5> FIFO is empty - uint8_t OVRN_FIFO :1; // FIFO_SRC<6> FIFO buffer full - uint8_t WTM :1; // FIFO_SRC<7> FIFO content exceeds watermark -}; - -struct lis3dh_reg_intx_cfg -{ - uint8_t XLIE :1; // INTx_CFG<0> X axis below threshold enabled - uint8_t XHIE :1; // INTx_CFG<1> X axis above threshold enabled - uint8_t YLIE :1; // INTx_CFG<2> Y axis below threshold enabled - uint8_t YHIE :1; // INTx_CFG<3> Y axis above threshold enabled - uint8_t ZLIE :1; // INTx_CFG<4> Z axis below threshold enabled - uint8_t ZHIE :1; // INTx_CFG<5> Z axis above threshold enabled - uint8_t SIXD :1; // INTx_CFG<6> 6D/4D orientation detecetion enabled - uint8_t AOI :1; // INTx_CFG<7> AND/OR combination of interrupt events -}; - -struct lis3dh_reg_intx_src -{ - uint8_t XL :1; // INTx_SRC<0> X axis below threshold enabled - uint8_t XH :1; // INTx_SRC<1> X axis above threshold enabled - uint8_t YL :1; // INTx_SRC<2> Y axis below threshold enabled - uint8_t YH :1; // INTx_SRC<3> Y axis above threshold enabled - uint8_t ZL :1; // INTx_SRC<4> Z axis below threshold enabled - uint8_t ZH :1; // INTx_SRC<5> Z axis above threshold enabled - uint8_t IA :1; // INTx_SRC<6> Interrupt active - uint8_t unused:1; // INTx_SRC<7> unused -}; - - -struct lis3dh_reg_click_cfg -{ - uint8_t XS :1; // CLICK_CFG<0> X axis single click enabled - uint8_t XD :1; // CLICK_CFG<1> X axis double click enabled - uint8_t YS :1; // CLICK_CFG<2> Y axis single click enabled - uint8_t YD :1; // CLICK_CFG<3> Y axis double click enabled - uint8_t ZS :1; // CLICK_CFG<4> Z axis single click enabled - uint8_t ZD :1; // CLICK_CFG<5> Z axis double click enabled - uint8_t unused:2; // CLICK_CFG<7:6> unused -}; - - -/** Forward declaration of functions for internal use */ - -static bool lis3dh_reset (lis3dh_sensor_t* dev); -static bool lis3dh_is_available(lis3dh_sensor_t* dev); - -static bool lis3dh_i2c_read (lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lis3dh_i2c_write (lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lis3dh_spi_read (lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lis3dh_spi_write (lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); - -#define msb_lsb_to_type(t,b,o) (t)(((t)b[o] << 8) | b[o+1]) -#define lsb_msb_to_type(t,b,o) (t)(((t)b[o+1] << 8) | b[o]) -#define lsb_to_type(t,b,o) (t)(b[o]) - -#define lis3dh_update_reg(dev,addr,type,elem,value) \ - { \ - struct type __reg; \ - if (!lis3dh_reg_read (dev, (addr), (uint8_t*)&__reg, 1)) \ - return false; \ - __reg.elem = (value); \ - if (!lis3dh_reg_write (dev, (addr), (uint8_t*)&__reg, 1)) \ - return false; \ - } - -lis3dh_sensor_t* lis3dh_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs) -{ - lis3dh_sensor_t* dev; - - if ((dev = malloc (sizeof(lis3dh_sensor_t))) == NULL) - return NULL; - - // init sensor data structure - dev->bus = bus; - dev->addr = addr; - dev->cs = cs; - - dev->error_code = LIS3DH_OK; - dev->scale = lis3dh_scale_2_g; - dev->fifo_mode = lis3dh_bypass; - dev->fifo_first = true; - - // if addr==0 then SPI is used and has to be initialized - if (!addr && !spi_device_init (bus, cs)) - { - error_dev ("Could not initialize SPI interface.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // check availability of the sensor - if (!lis3dh_is_available (dev)) - { - error_dev ("Sensor is not available.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // reset the sensor - if (!lis3dh_reset(dev)) - { - error_dev ("Could not reset the sensor device.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - lis3dh_update_reg (dev, LIS3DH_REG_CTRL4, lis3dh_reg_ctrl4, FS, lis3dh_scale_2_g); - lis3dh_update_reg (dev, LIS3DH_REG_CTRL4, lis3dh_reg_ctrl4, BDU, 1); - - return dev; -} - -bool lis3dh_set_mode (lis3dh_sensor_t* dev, - lis3dh_odr_mode_t odr, lis3dh_resolution_t res, - bool x, bool y, bool z) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - dev->res = res; - - struct lis3dh_reg_ctrl1 reg; - uint8_t old_odr; - - // read current register values - if (!lis3dh_reg_read (dev, LIS3DH_REG_CTRL1, (uint8_t*)®, 1)) - return false; - - old_odr = reg.ODR; - - // set mode - reg.Xen = x; - reg.Yen = y; - reg.Zen = z; - reg.ODR = odr; - reg.LPen = (res == lis3dh_low_power); - - lis3dh_update_reg (dev, LIS3DH_REG_CTRL4, lis3dh_reg_ctrl4, - HR, (res == lis3dh_high_res)); - - if (!lis3dh_reg_write (dev, LIS3DH_REG_CTRL1, (uint8_t*)®, 1)) - return false; - - // if sensor was in power down mode it takes at least 100 ms to start in another mode - if (old_odr == lis3dh_power_down && odr != lis3dh_power_down) - vTaskDelay (15); - - return false; -} - - -bool lis3dh_set_scale (lis3dh_sensor_t* dev, lis3dh_scale_t scale) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - dev->scale = scale; - - // read CTRL4 register and write scale - lis3dh_update_reg (dev, LIS3DH_REG_CTRL4, lis3dh_reg_ctrl4, FS, scale); - - return true; -} - - -bool lis3dh_set_fifo_mode (lis3dh_sensor_t* dev, lis3dh_fifo_mode_t mode, - uint8_t thresh, lis3dh_int_signal_t trigger) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - dev->fifo_mode = mode; - - // read CTRL5 register and write FIFO_EN flag - lis3dh_update_reg (dev, LIS3DH_REG_CTRL5, lis3dh_reg_ctrl5, FIFO_EN, mode != lis3dh_bypass); - - struct lis3dh_reg_fifo_ctrl fifo_ctrl = { - .FTH = thresh, - .TR = trigger, - .FM = mode, - }; - - // write FIFO_CTRL register - if (!lis3dh_reg_write (dev, LIS3DH_REG_FIFO_CTRL, (uint8_t*)&fifo_ctrl, 1)) - return false; - - return true; -} - - -bool lis3dh_new_data (lis3dh_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - - if (dev->fifo_mode == lis3dh_bypass) - { - struct lis3dh_reg_status status; - - if (!lis3dh_reg_read (dev, LIS3DH_REG_STATUS, (uint8_t*)&status, 1)) - { - error_dev ("Could not get sensor status", __FUNCTION__, dev); - return false; - } - return status.ZYXDA; - } - else - { - struct lis3dh_reg_fifo_src fifo_src; - - if (!lis3dh_reg_read (dev, LIS3DH_REG_FIFO_SRC, (uint8_t*)&fifo_src, 1)) - { - error_dev ("Could not get fifo source register data", __FUNCTION__, dev); - return false; - } - return !fifo_src.EMPTY; - } -} - -/** - * Scaling factors for the conversion of raw sensor data to floating point g - * values. Scaling factors are from mechanical characteristics in datasheet. - * - * scale/sensitivity resolution - * +-1g 1 mg/digit - * +-2g 2 mg/digit - * +-4g 4 mg/digit - * +-16g 12 mg/digit - */ -const static double LIS3DH_SCALES[4] = { 0.001, 0.002, 0.004, 0.012 }; - -bool lis3dh_get_float_data (lis3dh_sensor_t* dev, lis3dh_float_data_t* data) -{ - if (!dev || !data) return false; - - lis3dh_raw_data_t raw; - - if (!lis3dh_get_raw_data (dev, &raw)) - return false; - - data->ax = LIS3DH_SCALES[dev->scale] * (raw.ax >> 4); - data->ay = LIS3DH_SCALES[dev->scale] * (raw.ay >> 4); - data->az = LIS3DH_SCALES[dev->scale] * (raw.az >> 4); - - return true; -} - - -uint8_t lis3dh_get_float_data_fifo (lis3dh_sensor_t* dev, lis3dh_float_data_fifo_t data) -{ - if (!dev || !data) return false; - - lis3dh_raw_data_fifo_t raw; - - uint8_t num = lis3dh_get_raw_data_fifo (dev, raw); - - for (int i = 0; i < num; i++) - { - data[i].ax = LIS3DH_SCALES[dev->scale] * (raw[i].ax >> 4); - data[i].ay = LIS3DH_SCALES[dev->scale] * (raw[i].ay >> 4); - data[i].az = LIS3DH_SCALES[dev->scale] * (raw[i].az >> 4); - } - return num; -} - - -bool lis3dh_get_raw_data (lis3dh_sensor_t* dev, lis3dh_raw_data_t* raw) -{ - if (!dev || !raw) return false; - - dev->error_code = LIS3DH_OK; - - // abort if not in bypass mode - if (dev->fifo_mode != lis3dh_bypass) - { - dev->error_code = LIS3DH_SENSOR_IN_BYPASS_MODE; - error_dev ("Sensor is in FIFO mode, use lis3dh_get_*_data_fifo to get data", - __FUNCTION__, dev); - return false; - } - - // read raw data sample - if (!lis3dh_reg_read (dev, LIS3DH_REG_OUT_X_L, (uint8_t*)raw, 6)) - { - error_dev ("Could not get raw data sample", __FUNCTION__, dev); - dev->error_code |= LIS3DH_GET_RAW_DATA_FAILED; - return false; - } - - return true; -} - - -uint8_t lis3dh_get_raw_data_fifo (lis3dh_sensor_t* dev, lis3dh_raw_data_fifo_t raw) -{ - if (!dev) return 0; - - dev->error_code = LIS3DH_OK; - - // in bypass mode, use lis3dh_get_raw_data to return one sample - if (dev->fifo_mode == lis3dh_bypass) - return lis3dh_get_raw_data (dev, raw) ? 1 : 0; - - struct lis3dh_reg_fifo_src fifo_src; - - // read FIFO state - if (!lis3dh_reg_read (dev, LIS3DH_REG_FIFO_SRC, (uint8_t*)&fifo_src, 1)) - { - error_dev ("Could not get fifo source register data", __FUNCTION__, dev); - return 0; - } - - // if nothing is in the FIFO, just return with 0 - if (fifo_src.EMPTY) - return 0; - - uint8_t samples = fifo_src.FFS + (fifo_src.OVRN_FIFO ? 1 : 0); - - // read samples from FIFO - for (int i = 0; i < samples; i++) - if (!lis3dh_reg_read (dev, LIS3DH_REG_OUT_X_L, (uint8_t*)&raw[i], 6)) - { - error_dev ("Could not get raw data samples", __FUNCTION__, dev); - dev->error_code |= LIS3DH_GET_RAW_DATA_FIFO_FAILED; - return i; - } - - lis3dh_reg_read (dev, LIS3DH_REG_FIFO_SRC, (uint8_t*)&fifo_src, 1); - - // if FFS is not 0 after all samples read, ODR is higher than fetching rate - if (fifo_src.FFS) - { - dev->error_code = LIS3DH_ODR_TOO_HIGH; - error_dev ("New samples stored in FIFO while reading, " - "output data rate (ODR) too high", __FUNCTION__, dev); - return 0; - } - - if (dev->fifo_mode == lis3dh_fifo && samples == 32) - { - // clean FIFO (see app note) - lis3dh_update_reg (dev, LIS3DH_REG_FIFO_CTRL, lis3dh_reg_fifo_ctrl, FM, lis3dh_bypass); - lis3dh_update_reg (dev, LIS3DH_REG_FIFO_CTRL, lis3dh_reg_fifo_ctrl, FM, lis3dh_fifo); - } - - return samples; -} - - -bool lis3dh_enable_int (lis3dh_sensor_t* dev, - lis3dh_int_type_t type, - lis3dh_int_signal_t signal, bool value) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - - struct lis3dh_reg_ctrl3 ctrl3; - struct lis3dh_reg_ctrl6 ctrl6; - - uint8_t* reg = NULL; - uint8_t addr; - - // determine the addr of the register to change - if (type == lis3dh_int_data_ready || - type == lis3dh_int_fifo_watermark || - type == lis3dh_int_fifo_overrun) - { - reg = (uint8_t*)&ctrl3; - addr = LIS3DH_REG_CTRL3; - } - else if (signal == lis3dh_int1_signal) - { - reg = (uint8_t*)&ctrl3; - addr = LIS3DH_REG_CTRL3; - } - else - { - reg = (uint8_t*)&ctrl6; - addr = LIS3DH_REG_CTRL6; - } - - // read the register - if (!lis3dh_reg_read (dev, addr, reg, 1)) - { - error_dev ("Could not read interrupt control registers", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_INT_FAILED; - return false; - } - - // change the register - switch (type) - { - case lis3dh_int_data_ready: ctrl3.IT_DRDY1 = value; - break; - - case lis3dh_int_fifo_watermark: ctrl3.I1_WTM1 = value; - break; - - case lis3dh_int_fifo_overrun: ctrl3.I1_OVERRUN = value; - break; - - case lis3dh_int_event1: if (signal == lis3dh_int1_signal) - ctrl3.I1_AOI1 = value; - else - ctrl6.I2_AOI1 = value; - break; - - case lis3dh_int_event2: if (signal == lis3dh_int1_signal) - ctrl3.I1_AOI2 = value; - else - ctrl6.I2_AOI2 = value; - break; - - case lis3dh_int_click: if (signal == lis3dh_int1_signal) - ctrl3.I1_CLICK = value; - else - ctrl6.I2_CLICK = value; - break; - - default: dev->error_code = LIS3DH_WRONG_INT_TYPE; - error_dev ("Wrong interrupt type", __FUNCTION__, dev); - return false; - } - - if (!lis3dh_reg_write (dev, addr, reg, 1)) - { - error_dev ("Could not enable/disable interrupt", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_INT_FAILED; - return false; - } - - return true; -} - - -bool lis3dh_get_int_data_source (lis3dh_sensor_t* dev, - lis3dh_int_data_source_t* source) -{ - if (!dev || !source) return false; - - dev->error_code = LIS3DH_OK; - - struct lis3dh_reg_ctrl3 ctrl3; - struct lis3dh_reg_status status; - struct lis3dh_reg_fifo_src fifo_src; - - if (!lis3dh_reg_read (dev, LIS3DH_REG_CTRL3 , (uint8_t*)&ctrl3 , 1) || - !lis3dh_reg_read (dev, LIS3DH_REG_STATUS , (uint8_t*)&status , 1) || - !lis3dh_reg_read (dev, LIS3DH_REG_FIFO_SRC, (uint8_t*)&fifo_src, 1)) - { - error_dev ("Could not read source of interrupt INT2 from sensor", __FUNCTION__, dev); - dev->error_code |= LIS3DH_INT_SOURCE_FAILED; - return false; - } - - source->data_ready = status.ZYXDA & ctrl3.IT_DRDY1; - source->fifo_watermark = fifo_src.WTM & ctrl3.I1_WTM1; - source->fifo_overrun = fifo_src.OVRN_FIFO & ctrl3.I1_OVERRUN; - - return true; -} - - -bool lis3dh_set_int_event_config (lis3dh_sensor_t* dev, - lis3dh_int_event_config_t* config, - lis3dh_int_event_gen_t gen) -{ - if (!dev || !config) return false; - - dev->error_code = LIS3DH_OK; - - struct lis3dh_reg_intx_cfg intx_cfg; - - intx_cfg.XLIE = config->x_low_enabled; - intx_cfg.XHIE = config->x_high_enabled; - - intx_cfg.YLIE = config->y_low_enabled; - intx_cfg.YHIE = config->y_high_enabled; - - intx_cfg.ZLIE = config->z_low_enabled; - intx_cfg.ZHIE = config->z_high_enabled; - - bool d4d_int = false; - - switch (config->mode) - { - case lis3dh_wake_up : intx_cfg.AOI = 0; intx_cfg.SIXD = 0; break; - case lis3dh_free_fall : intx_cfg.AOI = 1; intx_cfg.SIXD = 0; break; - - case lis3dh_4d_movement : d4d_int = true; - case lis3dh_6d_movement : intx_cfg.AOI = 0; intx_cfg.SIXD = 1; break; - - case lis3dh_4d_position : d4d_int = true; - case lis3dh_6d_position : intx_cfg.AOI = 1; intx_cfg.SIXD = 1; break; - } - - uint8_t intx_cfg_addr = (gen == lis3dh_int_event1_gen) ? LIS3DH_REG_INT1_CFG : LIS3DH_REG_INT2_CFG; - uint8_t intx_ths_addr = (gen == lis3dh_int_event1_gen) ? LIS3DH_REG_INT1_THS : LIS3DH_REG_INT2_THS; - uint8_t intx_dur_addr = (gen == lis3dh_int_event1_gen) ? LIS3DH_REG_INT1_DUR : LIS3DH_REG_INT2_DUR; - - if (// write the thresholds to registers IG_THS_* - !lis3dh_reg_write (dev, intx_ths_addr, &config->threshold, 1) || - - // write duration configuration to IG_DURATION - !lis3dh_reg_write (dev, intx_dur_addr, &config->duration, 1) || - - // write INT1 configuration to IG_CFG - !lis3dh_reg_write (dev, intx_cfg_addr, (uint8_t*)&intx_cfg, 1)) - { - error_dev ("Could not configure interrupt INT1", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_INT_FAILED; - return false; - } - - if (gen == lis3dh_int_event1_gen) - { - lis3dh_update_reg (dev, LIS3DH_REG_CTRL5, lis3dh_reg_ctrl5, LIR_INT1, config->latch); - lis3dh_update_reg (dev, LIS3DH_REG_CTRL5, lis3dh_reg_ctrl5, D4D_INT1, d4d_int); - } - else - { - lis3dh_update_reg (dev, LIS3DH_REG_CTRL5, lis3dh_reg_ctrl5, LIR_INT2, config->latch); - lis3dh_update_reg (dev, LIS3DH_REG_CTRL5, lis3dh_reg_ctrl5, D4D_INT2, d4d_int); - } - - return true; -} - - -bool lis3dh_get_int_event_config (lis3dh_sensor_t* dev, - lis3dh_int_event_config_t* config, - lis3dh_int_event_gen_t gen) -{ - if (!dev || !config) return false; - - dev->error_code = LIS3DH_OK; - - uint8_t intx_cfg_addr = (gen == lis3dh_int_event1_gen) ? LIS3DH_REG_INT1_CFG : LIS3DH_REG_INT2_CFG; - uint8_t intx_ths_addr = (gen == lis3dh_int_event1_gen) ? LIS3DH_REG_INT1_THS : LIS3DH_REG_INT2_THS; - uint8_t intx_dur_addr = (gen == lis3dh_int_event1_gen) ? LIS3DH_REG_INT1_DUR : LIS3DH_REG_INT2_DUR; - - struct lis3dh_reg_intx_cfg intx_cfg; - struct lis3dh_reg_ctrl5 ctrl5; - - if (!lis3dh_reg_read (dev, intx_cfg_addr, (uint8_t*)&intx_cfg, 1) || - !lis3dh_reg_read (dev, intx_ths_addr, (uint8_t*)&config->threshold, 1) || - !lis3dh_reg_read (dev, intx_dur_addr, (uint8_t*)&config->duration, 1) || - !lis3dh_reg_read (dev, LIS3DH_REG_CTRL5, (uint8_t*)&ctrl5, 1)) - { - error_dev ("Could not read interrupt configuration from sensor", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_INT_FAILED; - return false; - } - - config->x_low_enabled = intx_cfg.XLIE; - config->x_high_enabled = intx_cfg.XHIE; - - config->y_low_enabled = intx_cfg.YLIE; - config->y_high_enabled = intx_cfg.YHIE; - - config->z_low_enabled = intx_cfg.ZLIE; - config->z_high_enabled = intx_cfg.ZHIE; - - bool d4d_int = false; - - if (gen == lis3dh_int_event1_gen) - { - config->latch = ctrl5.LIR_INT1; - d4d_int = ctrl5.D4D_INT1; - } - else - { - config->latch = ctrl5.LIR_INT2; - d4d_int = ctrl5.D4D_INT2; - } - - if (intx_cfg.AOI) - { - if (intx_cfg.SIXD && d4d_int) - config->mode = lis3dh_4d_position; - else if (intx_cfg.SIXD && !d4d_int) - config->mode = lis3dh_6d_position; - else - config->mode = lis3dh_free_fall; - } - else - { - if (intx_cfg.SIXD && d4d_int) - config->mode = lis3dh_4d_movement; - else if (intx_cfg.SIXD && !d4d_int) - config->mode = lis3dh_6d_movement; - else - config->mode = lis3dh_wake_up; - } - - return true; -} - - -bool lis3dh_get_int_event_source (lis3dh_sensor_t* dev, - lis3dh_int_event_source_t* source, - lis3dh_int_event_gen_t gen) -{ - if (!dev || !source) return false; - - dev->error_code = LIS3DH_OK; - - struct lis3dh_reg_intx_cfg intx_cfg; - struct lis3dh_reg_intx_src intx_src; - - uint8_t intx_cfg_addr = (gen == lis3dh_int_event1_gen) ? LIS3DH_REG_INT1_CFG : LIS3DH_REG_INT2_CFG; - uint8_t intx_src_addr = (gen == lis3dh_int_event1_gen) ? LIS3DH_REG_INT1_SRC : LIS3DH_REG_INT2_SRC; - - if (!lis3dh_reg_read (dev, intx_src_addr, (uint8_t*)&intx_src, 1) || - !lis3dh_reg_read (dev, intx_cfg_addr, (uint8_t*)&intx_cfg, 1)) - { - error_dev ("Could not read source of interrupt INT1/INT2 from sensor", __FUNCTION__, dev); - dev->error_code |= LIS3DH_INT_SOURCE_FAILED; - return false; - } - - source->active = intx_src.IA; - source->x_low = intx_src.XL & intx_cfg.XLIE; - source->x_high = intx_src.XH & intx_cfg.XHIE; - source->y_low = intx_src.YL & intx_cfg.YLIE; - source->y_high = intx_src.YH & intx_cfg.YHIE; - source->z_low = intx_src.ZL & intx_cfg.ZLIE; - source->z_high = intx_src.ZH & intx_cfg.ZHIE; - - return true; -} - - -bool lis3dh_set_int_click_config (lis3dh_sensor_t* dev, - lis3dh_int_click_config_t* config) -{ - if (!dev || !config) return false; - - dev->error_code = LIS3DH_OK; - - struct lis3dh_reg_click_cfg click_cfg; - - click_cfg.XS = config->x_single; - click_cfg.XD = config->x_double; - - click_cfg.YS = config->y_single; - click_cfg.YD = config->y_double; - - click_cfg.ZS = config->z_single; - click_cfg.ZD = config->z_double; - - uint8_t click_ths = config->threshold | ((config->latch) ? 0x80 : 0x00); - - if (!lis3dh_reg_write (dev, LIS3DH_REG_CLICK_CFG , (uint8_t*)&click_cfg, 1) || - !lis3dh_reg_write (dev, LIS3DH_REG_CLICK_THS , (uint8_t*)&click_ths, 1) || - !lis3dh_reg_write (dev, LIS3DH_REG_TIME_LIMIT , (uint8_t*)&config->time_limit, 1) || - !lis3dh_reg_write (dev, LIS3DH_REG_TIME_LATENCY, (uint8_t*)&config->time_latency, 1) || - !lis3dh_reg_write (dev, LIS3DH_REG_TIME_WINDOW , (uint8_t*)&config->time_window, 1)) - { - error_dev ("Could not configure click detection interrupt", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_CLICK_FAILED; - return false; - } - - return true; -} - -bool lis3dh_get_int_click_config (lis3dh_sensor_t* dev, - lis3dh_int_click_config_t* config) -{ - if (!dev || !config) return false; - - dev->error_code = LIS3DH_OK; - - struct lis3dh_reg_click_cfg click_cfg; - uint8_t click_ths; - - if (!lis3dh_reg_read (dev, LIS3DH_REG_CLICK_CFG , (uint8_t*)&click_cfg, 1) || - !lis3dh_reg_read (dev, LIS3DH_REG_CLICK_THS , (uint8_t*)&click_ths, 1) || - !lis3dh_reg_read (dev, LIS3DH_REG_TIME_LIMIT , (uint8_t*)&config->time_limit, 1) || - !lis3dh_reg_read (dev, LIS3DH_REG_TIME_LATENCY, (uint8_t*)&config->time_latency, 1) || - !lis3dh_reg_read (dev, LIS3DH_REG_TIME_WINDOW , (uint8_t*)&config->time_window, 1)) - { - error_dev ("Could not configure click detection interrupt", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_CLICK_FAILED; - return false; - } - - config->x_single = click_cfg.XS; - config->x_double = click_cfg.XD; - - config->y_single = click_cfg.YS; - config->y_double = click_cfg.YD; - - config->z_single = click_cfg.ZS; - config->z_double = click_cfg.ZD; - - config->threshold= click_ths & 0x7f; - config->latch = click_ths & 0x80; - - return true; -} - -bool lis3dh_get_int_click_source (lis3dh_sensor_t* dev, - lis3dh_int_click_source_t* source) -{ - if (!dev || !source) return false; - - dev->error_code = LIS3DH_OK; - - if (!lis3dh_reg_read (dev, LIS3DH_REG_CLICK_SRC, (uint8_t*)source, 1)) - { - error_dev ("Could not read source of click interrupt from sensor", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CLICK_SOURCE_FAILED; - return false; - } - - return true; -} - - - -bool lis3dh_config_int_signals (lis3dh_sensor_t* dev, lis3dh_int_signal_level_t level) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - - lis3dh_update_reg (dev, LIS3DH_REG_CTRL6, lis3dh_reg_ctrl6, H_LACTIVE, level); - - return true; -} - - -bool lis3dh_config_hpf (lis3dh_sensor_t* dev, - lis3dh_hpf_mode_t mode, uint8_t cutoff, - bool data, bool click, bool int1, bool int2) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - - struct lis3dh_reg_ctrl2 reg; - - reg.HPM = mode; - reg.HPCF = cutoff; - reg.FDS = data; - reg.HPCLICK = click; - reg.HPIS1 = int1; - reg.HPIS2 = int2; - - if (!lis3dh_reg_write (dev, LIS3DH_REG_CTRL2, (uint8_t*)®, 1)) - { - error_dev ("Could not configure high pass filter", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_HPF_FAILED; - return false; - } - - return true; -} - - -bool lis3dh_set_hpf_ref (lis3dh_sensor_t* dev, int8_t ref) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - - if (!lis3dh_reg_write (dev, LIS3DH_REG_REFERENCE, (uint8_t*)&ref, 1)) - { - error_dev ("Could not set high pass filter reference", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_HPF_FAILED; - return false; - } - - return true; -} - - -int8_t lis3dh_get_hpf_ref (lis3dh_sensor_t* dev) -{ - if (!dev) return 0; - - dev->error_code = LIS3DH_OK; - - int8_t ref; - - if (!lis3dh_reg_read (dev, LIS3DH_REG_REFERENCE, (uint8_t*)&ref, 1)) - { - error_dev ("Could not get high pass filter reference", __FUNCTION__, dev); - dev->error_code |= LIS3DH_CONFIG_HPF_FAILED; - return 0; - } - - return ref; -} - -int8_t lis3dh_enable_adc (lis3dh_sensor_t* dev, bool adc, bool tmp) -{ - if (!dev) return 0; - - dev->error_code = LIS3DH_OK; - - uint8_t reg = 0; - - reg |= (adc) ? 0x80 : 0; - reg |= (tmp) ? 0x40 : 0; - - return lis3dh_reg_write (dev, LIS3DH_REG_TEMP_CFG, (uint8_t*)®, 1); -} - - -bool lis3dh_get_adc (lis3dh_sensor_t* dev, - uint16_t* adc1, uint16_t* adc2, uint16_t* adc3) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - - uint8_t data[6]; - uint8_t temp_cfg; - struct lis3dh_reg_ctrl1 ctrl1; - - if (!lis3dh_reg_read (dev, LIS3DH_REG_OUT_ADC1_L, data, 6) || - !lis3dh_reg_read (dev, LIS3DH_REG_CTRL1, (uint8_t*)&ctrl1, 1) || - !lis3dh_reg_read (dev, LIS3DH_REG_TEMP_CFG, &temp_cfg, 1)) - { - error_dev ("Could not get adc data", __FUNCTION__, dev); - dev->error_code |= LIS3DH_GET_ADC_DATA_FAILED; - return false; - } - - if (adc1) *adc1 = lsb_msb_to_type ( int16_t, data, 0) >> (ctrl1.LPen ? 8 : 6); - if (adc2) *adc2 = lsb_msb_to_type ( int16_t, data, 2) >> (ctrl1.LPen ? 8 : 6); - - // temperature is always 8 bit - if (adc3 && temp_cfg & 0x40) - *adc3 = (lsb_msb_to_type ( int16_t, data, 4) >> 8) + 25; - else if (adc3) - *adc3 = lsb_msb_to_type ( int16_t, data, 4) >> (ctrl1.LPen ? 8 : 6); - - return true; -} - - -/** Functions for internal use only */ - -/** - * @brief Check the chip ID to test whether sensor is available - */ -static bool lis3dh_is_available (lis3dh_sensor_t* dev) -{ - uint8_t chip_id; - - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - - if (!lis3dh_reg_read (dev, LIS3DH_REG_WHO_AM_I, &chip_id, 1)) - return false; - - if (chip_id != LIS3DH_CHIP_ID) - { - error_dev ("Chip id %02x is wrong, should be %02x.", - __FUNCTION__, dev, chip_id, LIS3DH_CHIP_ID); - dev->error_code = LIS3DH_WRONG_CHIP_ID; - return false; - } - - return true; -} - -static bool lis3dh_reset (lis3dh_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = LIS3DH_OK; - - uint8_t reg[8] = { 0 }; - - // initialize sensor completely including setting in power down mode - lis3dh_reg_write (dev, LIS3DH_REG_TEMP_CFG , reg, 8); - lis3dh_reg_write (dev, LIS3DH_REG_FIFO_CTRL, reg, 1); - lis3dh_reg_write (dev, LIS3DH_REG_INT1_CFG , reg, 1); - lis3dh_reg_write (dev, LIS3DH_REG_INT1_THS , reg, 2); - lis3dh_reg_write (dev, LIS3DH_REG_INT2_CFG , reg, 1); - lis3dh_reg_write (dev, LIS3DH_REG_INT2_THS , reg, 2); - lis3dh_reg_write (dev, LIS3DH_REG_CLICK_CFG, reg, 1); - lis3dh_reg_write (dev, LIS3DH_REG_CLICK_THS, reg, 4); - - return true; -} - - -bool lis3dh_reg_read(lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? lis3dh_i2c_read (dev, reg, data, len) - : lis3dh_spi_read (dev, reg, data, len); -} - - -bool lis3dh_reg_write(lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? lis3dh_i2c_write (dev, reg, data, len) - : lis3dh_spi_write (dev, reg, data, len); -} - - -#define LIS3DH_SPI_BUF_SIZE 64 // SPI register data buffer size of ESP866 - -#define LIS3DH_SPI_READ_FLAG 0x80 -#define LIS3DH_SPI_WRITE_FLAG 0x00 -#define LIS3DH_SPI_AUTO_INC_FLAG 0x40 - -static bool lis3dh_spi_read(lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - if (len >= LIS3DH_SPI_BUF_SIZE) - { - dev->error_code |= LIS3DH_SPI_BUFFER_OVERFLOW; - error_dev ("Error on read from SPI slave on bus 1. Tried to transfer " - "more than %d byte in one read operation.", - __FUNCTION__, dev, LIS3DH_SPI_BUF_SIZE); - return false; - } - - uint8_t addr = (reg & 0x3f) | LIS3DH_SPI_READ_FLAG | LIS3DH_SPI_AUTO_INC_FLAG; - - static uint8_t mosi[LIS3DH_SPI_BUF_SIZE]; - static uint8_t miso[LIS3DH_SPI_BUF_SIZE]; - - memset (mosi, 0xff, LIS3DH_SPI_BUF_SIZE); - memset (miso, 0xff, LIS3DH_SPI_BUF_SIZE); - - mosi[0] = addr; - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, miso, len+1)) - { - error_dev ("Could not read data from SPI", __FUNCTION__, dev); - dev->error_code |= LIS3DH_SPI_READ_FAILED; - return false; - } - - // shift data one by left, first byte received while sending register address is invalid - for (int i=0; i < len; i++) - data[i] = miso[i+1]; - - #ifdef LIS3DH_DEBUG_LEVEL_2 - printf("LIS3DH %s: read the following bytes from reg %02x: ", __FUNCTION__, reg); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); - #endif - - return true; -} - - -static bool lis3dh_spi_write(lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - uint8_t addr = (reg & 0x3f) | LIS3DH_SPI_WRITE_FLAG | LIS3DH_SPI_AUTO_INC_FLAG; - - static uint8_t mosi[LIS3DH_SPI_BUF_SIZE]; - - if (len >= LIS3DH_SPI_BUF_SIZE) - { - dev->error_code |= LIS3DH_SPI_BUFFER_OVERFLOW; - error_dev ("Error on write to SPI slave on bus 1. Tried to transfer more" - "than %d byte in one write operation.", - __FUNCTION__, dev, LIS3DH_SPI_BUF_SIZE); - - return false; - } - - reg &= 0x7f; - - // first byte in output is the register address - mosi[0] = addr; - - // shift data one byte right, first byte in output is the register address - for (int i = 0; i < len; i++) - mosi[i+1] = data[i]; - - #ifdef LIS3DH_DEBUG_LEVEL_2 - printf("LIS3DH %s: Write the following bytes to reg %02x: ", __FUNCTION__, reg); - for (int i = 1; i < len+1; i++) - printf("%02x ", mosi[i]); - printf("\n"); - #endif - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, NULL, len+1)) - { - error_dev ("Could not write data to SPI.", __FUNCTION__, dev); - dev->error_code |= LIS3DH_SPI_WRITE_FAILED; - return false; - } - - return true; -} - - -#define I2C_AUTO_INCREMENT (0x80) - -static bool lis3dh_i2c_read(lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Read %d byte from i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - if (len > 1) - reg |= I2C_AUTO_INCREMENT; - - int result = i2c_slave_read(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? LIS3DH_I2C_BUSY : LIS3DH_I2C_READ_FAILED; - error_dev ("Error %d on read %d byte from I2C slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef LIS3DH_DEBUG_LEVEL_2 - printf("LIS3DH %s: Read following bytes: ", __FUNCTION__); - printf("%02x: ", reg & 0x7f); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif - - return true; -} - - -static bool lis3dh_i2c_write(lis3dh_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Write %d byte to i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - if (len > 1) - reg |= I2C_AUTO_INCREMENT; - - int result = i2c_slave_write(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? LIS3DH_I2C_BUSY : LIS3DH_I2C_WRITE_FAILED; - error_dev ("Error %d on write %d byte to i2c slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef LIS3DH_DEBUG_LEVEL_2 - printf("LIS3DH %s: Wrote the following bytes: ", __FUNCTION__); - printf("%02x: ", reg & 0x7f); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif - - return true; -} diff --git a/extras/lis3dh/lis3dh.h b/extras/lis3dh/lis3dh.h deleted file mode 100644 index c1fd52e..0000000 --- a/extras/lis3dh/lis3dh.h +++ /dev/null @@ -1,456 +0,0 @@ -/** - * Driver for LIS3DH 3-axes digital accelerometer connected to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef __LIS3DH_H__ -#define __LIS3DH_H__ - -// Uncomment one of the following defines to enable debug output -// #define LIS3DH_DEBUG_LEVEL_1 // only error messages -// #define LIS3DH_DEBUG_LEVEL_2 // debug and error messages - -// LIS3DH addresses (also used for LIS2DH, LIS2DH12 and LIS2DE12) -#define LIS3DH_I2C_ADDRESS_1 0x18 // SDO pin is low -#define LIS3DH_I2C_ADDRESS_2 0x19 // SDO pin is high - -// LIS3DE addresse (also used for LIS2DE) -#define LIS3DE_I2C_ADDRESS_1 0x28 // SDO pin is low -#define LIS3DE_I2C_ADDRESS_2 0x29 // SDO pin is high - -// LIS3DH chip id -#define LIS3DH_CHIP_ID 0x33 // LIS3DH_REG_WHO_AM_I<7:0> - -// Definition of error codes -#define LIS3DH_OK 0 -#define LIS3DH_NOK -1 - -#define LIS3DH_INT_ERROR_MASK 0x000f -#define LIS3DH_DRV_ERROR_MASK 0xfff0 - -// Error codes for I2C and SPI interfaces ORed with LIS3DH driver error codes -#define LIS3DH_I2C_READ_FAILED 1 -#define LIS3DH_I2C_WRITE_FAILED 2 -#define LIS3DH_I2C_BUSY 3 -#define LIS3DH_SPI_WRITE_FAILED 4 -#define LIS3DH_SPI_READ_FAILED 5 -#define LIS3DH_SPI_BUFFER_OVERFLOW 6 - -// LIS3DH driver error codes ORed with error codes for I2C and SPI interfaces -#define LIS3DH_WRONG_CHIP_ID ( 1 << 8) -#define LIS3DH_WRONG_BANDWIDTH ( 2 << 8) -#define LIS3DH_GET_RAW_DATA_FAILED ( 3 << 8) -#define LIS3DH_GET_RAW_DATA_FIFO_FAILED ( 4 << 8) -#define LIS3DH_WRONG_INT_TYPE ( 5 << 8) -#define LIS3DH_CONFIG_INT_SIGNALS_FAILED ( 6 << 8) -#define LIS3DH_CONFIG_INT_FAILED ( 7 << 8) -#define LIS3DH_INT_SOURCE_FAILED ( 8 << 8) -#define LIS3DH_CONFIG_HPF_FAILED ( 9 << 8) -#define LIS3DH_ENABLE_HPF_FAILED (10 << 8) -#define LIS3DH_CONFIG_CLICK_FAILED (11 << 8) -#define LIS3DH_CLICK_SOURCE_FAILED (12 << 8) -#define LIS3DH_GET_ADC_DATA_FAILED (13 << 8) -#define LIS3DH_SENSOR_IN_BYPASS_MODE (14 << 8) -#define LIS3DH_SENSOR_IN_FIFO_MODE (15 << 8) -#define LIS3DH_ODR_TOO_HIGH (16 << 8) - -#include "lis3dh_platform.h" -#include "lis3dh_types.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief Initialize the sensor - * - * Reset the sensor and switch to power down mode. All registers are reset to - * default values. FIFO is cleared. - * - * @param bus I2C or SPI bus at which LIS3DH sensor is connected - * @param addr I2C addr of the LIS3DH sensor, 0 for using SPI - * @param cs SPI CS GPIO, ignored for I2C - * @return pointer to sensor data structure, or NULL on error - */ -lis3dh_sensor_t* lis3dh_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs); - - -/** - * @brief Set sensor mode - * - * @param dev pointer to the sensor device data structure - * @param odr sensor output data rate (ODR) - * @param res sensor resolution - * @param x true enable x-axis, false disable x-axis - * @param y true enable y-axis, false disable y-axis - * @param z true enable z-axis, false disable z-axis - * @return true on success, false on error - */ -bool lis3dh_set_mode (lis3dh_sensor_t* dev, - lis3dh_odr_mode_t odr, lis3dh_resolution_t res, - bool x, bool y, bool z); - - -/** - * @brief Set scale (full scale range) - * - * @param dev pointer to the sensor device data structure - * @param scale full range scale - * @return true on success, false on error - */ -bool lis3dh_set_scale (lis3dh_sensor_t* dev, lis3dh_scale_t scale); - - -/** - * @brief Set FIFO mode - * - * FIFO watermark can be used to generate an interrupt when FIFO content - * exceeds the value. It is ignored in bypass mode. - * - * - * @param dev pointer to the sensor device data structure - * @param mode FIFO mode - * @param thresh FIFO watermark (ignored in bypass mode) - * @param trigger interrupt signal used as trigger (only in Stream-to-FIFO) - * @return true on success, false on error - */ -bool lis3dh_set_fifo_mode (lis3dh_sensor_t* dev, lis3dh_fifo_mode_t mode, - uint8_t thresh, lis3dh_int_signal_t trigger); - - -/** - * @brief Test whether new data samples are available - * - * @param dev pointer to the sensor device data structure - * @return true on new data, otherwise false - */ -bool lis3dh_new_data (lis3dh_sensor_t* dev); - - -/** - * @brief Get one sample of sensor data as floating point values (unit g) - * - * Function works only in bypass mode and fails in FIFO modes. In FIFO modes, - * function *lis3dh_get_float_data_fifo* has to be used instead to get data. - * - * @param dev pointer to the sensor device data structure - * @param data pointer to float data structure filled with g values - * @return true on success, false on error - */ -bool lis3dh_get_float_data (lis3dh_sensor_t* dev, - lis3dh_float_data_t* data); - - -/** - * @brief Get all samples of sensor data stored in the FIFO (unit g) - * - * In bypass mode, it returns only one sensor data sample. - * - * @param dev pointer to the sensor device data structure - * @param data array of 32 float data structures filled with g values - * @return number of data sets read from fifo on success or 0 on error - */ -uint8_t lis3dh_get_float_data_fifo (lis3dh_sensor_t* dev, - lis3dh_float_data_fifo_t data); - - -/** - * @brief Get one sample of raw sensor data as 16 bit two's complements - * - * Function works only in bypass mode and fails in FIFO modes. In FIFO modes, - * function *lis3dh_get_raw_data_fifo* has to be used instead to get data. - * - * @param dev pointer to the sensor device data structure - * @param raw pointer to raw data structure filled with values - * @return true on success, false on error - */ -bool lis3dh_get_raw_data (lis3dh_sensor_t* dev, lis3dh_raw_data_t* raw); - - -/** - * @brief Get all samples of raw sensor data stored in the FIFO - * - * In bypass mode, it returns only one raw data sample. - * - * @param dev pointer to the sensor device data structure - * @param raw array of 32 raw data structures - * @return number of data sets read from fifo on success or 0 on error - */ -uint8_t lis3dh_get_raw_data_fifo (lis3dh_sensor_t* dev, - lis3dh_raw_data_fifo_t raw); - - -/** - * @brief Enable / disable an interrupt on signal INT1 or INT2 - * - * @param dev pointer to the sensor device data structure - * @param type interrupt to be enabled or disabled - * @param signal interrupt signal that is activated for the interrupt - * @param value true to enable or false to disable the interrupt - * @return true on success, false on error - */ -bool lis3dh_enable_int (lis3dh_sensor_t* dev, - lis3dh_int_type_t type, - lis3dh_int_signal_t signal, bool value); - - -/** - * @brief Get the source of data ready and FIFO interrupts on INT1 - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source - * @return true on success, false on error - */ -bool lis3dh_get_int_data_source (lis3dh_sensor_t* dev, - lis3dh_int_data_source_t* source); - - -/** - * @brief Set the configuration of an inertial event interrupt generator - * - * Inertial interrupt generators produce interrupts when certain inertial event - * occures (event interrupts), that is, the acceleration of defined axes is - * higher or lower than a defined threshold and one of the following event is - * recognized: axis movement / wake up, free fall, 6D/4D orientation detection. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @param gen interrupt generator to which the function is applied - * @return true on success, false on error - */ -bool lis3dh_set_int_event_config (lis3dh_sensor_t* dev, - lis3dh_int_event_config_t* config, - lis3dh_int_event_gen_t gen); - - -/** - * @brief Get the configuration of an inertial event interrupt generator - * - * Inertial interrupt generators produce interrupts when certain inertial event - * occures (event interrupts), that is, the acceleration of defined axes is - * higher or lower than a defined threshold and one of the following event is - * recognized: axis movement / wake up, free fall, 6D/4D orientation detection. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @param gen interrupt generator to which the function is applied - * @return true on success, false on error - */ -bool lis3dh_get_int_event_config (lis3dh_sensor_t* dev, - lis3dh_int_event_config_t* config, - lis3dh_int_event_gen_t gen); - - -/** - * @brief Get the source of an inertial event interrupt INT1/INT2 - * - * Returns a byte with flags that indicate the event which triggered - * the interrupt signal (see INTx_SRC register in datasheet for details) - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source data structure - * @param gen interrupt generator to which the function is applied - * @return true on success, false on error - */ -bool lis3dh_get_int_event_source (lis3dh_sensor_t* dev, - lis3dh_int_event_source_t* source, - lis3dh_int_event_gen_t gen); - - -/** - * @brief Set the configuration of the click detection interrupt generator - * - * Set the configuration for interrupts that are generated when single or - * double clicks are detected. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @return true on success, false on error - */ -bool lis3dh_set_int_click_config (lis3dh_sensor_t* dev, - lis3dh_int_click_config_t* config); - -/** - * @brief Get the configuration of the click detection interrupt generator - * - * Set the configuration for interrupts that are generated when single or - * double clicks are detected. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @return true on success, false on error - */ -bool lis3dh_get_int_click_config (lis3dh_sensor_t* dev, - lis3dh_int_click_config_t* config); - - -/** - * @brief Get the source of the click detection interrupt on signal INT1/INT2 - * - * Returns a byte with flags that indicate the activity which triggered - * the interrupt signal (see CLICK_SRC register in datasheet for details) - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source - * @return true on success, false on error - */ -bool lis3dh_get_int_click_source (lis3dh_sensor_t* dev, - lis3dh_int_click_source_t* source); - - -/** - * @brief Set signal configuration for INT1 and INT2 signals - * - * @param dev pointer to the sensor device data structure - * @param level define interrupt signal as low or high active - * @return true on success, false on error - */ -bool lis3dh_config_int_signals (lis3dh_sensor_t* dev, - lis3dh_int_signal_level_t level); - - -/** - * @brief Config HPF (high pass filter) - * - * @param dev pointer to the sensor device data structure - * @param mode filter mode - * @param cutoff filter cutoff frequency (depends on ODR) [0 ... 3] - * @param data if true, use filtered data as sensor output - * @param click if true, use filtered data for CLICK function - * @param int1 if true, use filtered data for interrupt INT1 generation - * @param int2 if true, use filtered data for interrupt INT2 generation - * @return true on success, false on error - */ -bool lis3dh_config_hpf (lis3dh_sensor_t* dev, - lis3dh_hpf_mode_t mode, uint8_t cutoff, - bool data, bool click, bool int1, bool int2); - - -/** - * @brief Set HPF (high pass filter) reference - * - * Used to set the reference of HPF in reference mode *lis3dh_hpf_reference*. - * Used to reset the HPF in autoreset mode *lis3dh_hpf_autoreset*. - * Reference is given as two's complement. - * - * @param dev pointer to the sensor device data structure - * @param ref reference *lis3dh_hpf_reference* mode, otherwise ignored - * @return true on success, false on error - */ -bool lis3dh_set_hpf_ref (lis3dh_sensor_t* dev, int8_t ref); - - -/** - * @brief Get HPF (high pass filter) reference - * - * Used to reset the HPF in normal mode *lis3dh_hpf_normal*. - * - * @param dev pointer to the sensor device data structure - * @return HPF reference as two's complement - */ -int8_t lis3dh_get_hpf_ref (lis3dh_sensor_t* dev); - -/** - * @brief Enable / disable ADC or temperature sensor - * - * @param dev pointer to the sensor device data structure - * @param enable if true, ADC inputs are enabled - * @param temp if true, ADC input 3 is the output of temperature sensor - * @return true on success, false on error - */ -int8_t lis3dh_enable_adc (lis3dh_sensor_t* dev, bool enable, bool temp); - - -/** - * @brief Get ADC input or temperature - * - * @param dev pointer to the sensor device data structure - * @param adc1 ADC input 1 - * @param adc2 ADC input 2 - * @param adc3 ADC input 3 or temperature in degree if enabled - * @return true on success, false on error - */ -bool lis3dh_get_adc (lis3dh_sensor_t* dev, - uint16_t* adc1, uint16_t* adc2, uint16_t* adc3); - - -// ---- Low level interface functions ----------------------------- - -/** - * @brief Direct write to register - * - * PLEASE NOTE: This function should only be used to do something special that - * is not covered by the high level interface AND if you exactly know what you - * do and what effects it might have. Please be aware that it might affect the - * high level interface. - * - * @param dev pointer to the sensor device data structure - * @param reg address of the first register to be changed - * @param data pointer to the data to be written to the register - * @param len number of bytes to be written to the register - * @return true on success, false on error - */ -bool lis3dh_reg_write (lis3dh_sensor_t* dev, - uint8_t reg, uint8_t *data, uint16_t len); - -/** - * @brief Direct read from register - * - * PLEASE NOTE: This function should only be used to do something special that - * is not covered by the high level interface AND if you exactly know what you - * do and what effects it might have. Please be aware that it might affect the - * high level interface. - * - * @param dev pointer to the sensor device data structure - * @param reg address of the first register to be read - * @param data pointer to the data to be read from the register - * @param len number of bytes to be read from the register - * @return true on success, false on error - */ -bool lis3dh_reg_read (lis3dh_sensor_t* dev, - uint8_t reg, uint8_t *data, uint16_t len); - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __LIS3DH_H__ */ diff --git a/extras/lis3dh/lis3dh_platform.c b/extras/lis3dh/lis3dh_platform.c deleted file mode 100644 index 17eabf8..0000000 --- a/extras/lis3dh/lis3dh_platform.c +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Driver for LIS3DH 3-axes digital accelerometer connected to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#include "lis3dh_platform.h" - -// platform specific SPI functions - -static const spi_settings_t bus_settings = { - .mode = SPI_MODE0, - .freq_divider = SPI_FREQ_DIV_1M, - .msb = true, - .minimal_pins = false, - .endianness = SPI_LITTLE_ENDIAN -}; - -bool spi_device_init (uint8_t bus, uint8_t cs) -{ - gpio_enable(cs, GPIO_OUTPUT); - gpio_write (cs, true); - return true; -} - -size_t spi_transfer_pf(uint8_t bus, uint8_t cs, const uint8_t *mosi, uint8_t *miso, uint16_t len) -{ - spi_settings_t old_settings; - - spi_get_settings(bus, &old_settings); - spi_set_settings(bus, &bus_settings); - gpio_write(cs, false); - - size_t transfered = spi_transfer (bus, (const void*)mosi, (void*)miso, len, SPI_8BIT); - - gpio_write(cs, true); - spi_set_settings(bus, &old_settings); - - return transfered; -} - diff --git a/extras/lis3dh/lis3dh_platform.h b/extras/lis3dh/lis3dh_platform.h deleted file mode 100644 index 0903533..0000000 --- a/extras/lis3dh/lis3dh_platform.h +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Driver for LIS3DH 3-axes digital accelerometer connected to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#ifndef __LIS3DH_PLATFORM_H__ -#define __LIS3DH_PLATFORM_H__ - -#if !defined(ESP_OPEN_RTOS) -#define ESP_OPEN_RTOS 1 -#endif - -#ifdef ESP_OPEN_RTOS // ESP8266 - -// platform specific includes - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" - -#include "espressif/esp_common.h" -#include "espressif/sdk_private.h" - -#include "esp/uart.h" -#include "esp/spi.h" -#include "i2c/i2c.h" - -// platform specific SPI functions - -#define spi_bus_init(bus,sck,miso,mosi) // not needed on ESP8266 - -extern bool spi_device_init (uint8_t bus, uint8_t cs); -extern size_t spi_transfer_pf (uint8_t bus, uint8_t cs, - const uint8_t *mosi, uint8_t *miso, - uint16_t len); - -#endif // ESP_OPEN_RTOS - -#endif // __LIS3DH_PLATFORM_H__ diff --git a/extras/lis3dh/lis3dh_types.h b/extras/lis3dh/lis3dh_types.h deleted file mode 100644 index 122075e..0000000 --- a/extras/lis3dh/lis3dh_types.h +++ /dev/null @@ -1,355 +0,0 @@ -/** - * Driver for LIS3DH 3-axes digital accelerometer connected to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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 Activity 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. - */ - -#ifndef __LIS3DH_TYPES_H__ -#define __LIS3DH_TYPES_H__ - -#include "stdint.h" -#include "stdbool.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief Output data rates (ODR), related to resolution modes - */ -typedef enum { - - lis3dh_power_down = 0, // power down mode - lis3dh_odr_1, // high resolution / normal / low power 1 Hz - lis3dh_odr_10, // high resolution / normal / low power 10 Hz - lis3dh_odr_25, // high resolution / normal / low power 25 Hz - lis3dh_odr_50, // high resolution / normal / low power 50 Hz - lis3dh_odr_100, // high resolution / normal / low power 100 Hz - lis3dh_odr_200, // high resolution / normal / low power 200 Hz - lis3dh_odr_400, // high resolution / normal / low power 400 Hz - lis3dh_odr_1600, // low power mode 1.6 kHz - lis3dh_odr_5000, // normal 1.25 kHz / low power 5 kHz - -} lis3dh_odr_mode_t; - -/** - * @brief Resolution modes, related to output data rates (ODR) - */ -typedef enum { - - lis3dh_low_power, // low power mode resolution ( 8 bit data) - lis3dh_normal, // normal mode resolution (10 bit data) - lis3dh_high_res // high resolution mode (12 bit data) - -} lis3dh_resolution_t; - -/** - * @brief Full scale measurement range - */ -typedef enum { - - lis3dh_scale_2_g = 0, // default - lis3dh_scale_4_g, - lis3dh_scale_8_g, - lis3dh_scale_16_g - -} lis3dh_scale_t; - - -/** - * @brief FIFO mode - */ -typedef enum { - - lis3dh_bypass = 0, // default - lis3dh_fifo = 1, - lis3dh_stream = 2, - lis3dh_trigger= 3 - -} lis3dh_fifo_mode_t; - - -/** - * @brief Interrupt signals - */ -typedef enum { - - lis3dh_int1_signal = 0, - lis3dh_int2_signal = 1 - -} lis3dh_int_signal_t; - - -/** - * @brief Inertial event interrupt generators - */ -typedef enum { - - lis3dh_int_event1_gen = 0, - lis3dh_int_event2_gen = 1 - -} lis3dh_int_event_gen_t; - - -/** - * @brief Interrupt types for interrupt signals INT1/INT2 - */ -typedef enum { - - lis3dh_int_data_ready, // data ready for read interrupt (only INT1) - - lis3dh_int_fifo_watermark, // FIFO exceeds the threshold (only INT1) - lis3dh_int_fifo_overrun, // FIFO is completely filled (only INT1) - - lis3dh_int_event1, // inertial event interrupt 1 - lis3dh_int_event2, // inertial event interrupt 2 - - lis3dh_int_click // click detection interrupt - -} lis3dh_int_type_t; - - -/** - * @brief Data ready and FIFO status interrupt source for INT1 - */ -typedef struct { - - bool data_ready; // true when acceleration data are ready to read - - bool fifo_watermark; // true when FIFO exceeds the FIFO threshold - bool fifo_overrun; // true when FIFO is completely filled - -} lis3dh_int_data_source_t; - - -/** - * @brief Inertial interrupt generator configuration for INT1/INT2 - * - * Inertial events are: wake-up, free-fall, 6D/4D detection. - */ -typedef struct { - - enum { // interrupt mode - - lis3dh_wake_up, // AOI = 0, 6D = 0 - lis3dh_free_fall, // AOI = 1, 6D = 0 - - lis3dh_6d_movement, // AOI = 0, 6D = 1, D4D = 0 - lis3dh_6d_position, // AOI = 1, 6D = 1, D4D = 0 - - lis3dh_4d_movement, // AOI = 0, 6D = 1, D4D = 1 - lis3dh_4d_position, // AOI = 1, 6D = 1, D4D = 1 - - } mode; - - uint8_t threshold; // threshold used for comparison for all axes - - bool x_low_enabled; // x lower than threshold interrupt enabled - bool x_high_enabled; // x higher than threshold interrupt enabled - - bool y_low_enabled; // y lower than threshold interrupt enabled - bool y_high_enabled; // y higher than threshold interrupt enabled - - bool z_low_enabled; // z lower than threshold interrupt enabled - bool z_high_enabled; // z higher than threshold interrupt enabled - - bool latch; // latch the interrupt when true until the - // interrupt source has been read - - uint8_t duration; // duration in 1/ODR an interrupt condition has - // to be given before the interrupt is generated -} lis3dh_int_event_config_t; - - -/** - * @brief Inertial event source type for interrupt generator INT1/INT2 - */ -typedef struct { - - bool active:1; // true - one ore more events occured - - bool x_low :1; // true - x lower than threshold event - bool x_high:1; // true - x higher than threshold event - - bool y_low :1; // true - z lower than threshold event - bool y_high:1; // true - z higher than threshold event - - bool z_low :1; // true - z lower than threshold event - bool z_high:1; // true - z higher than threshold event - -} lis3dh_int_event_source_t; - - -/** - * @brief Click interrupt configuration for interrupt signals INT1/INT2 - */ -typedef struct { - - bool x_single; // x-axis single tap interrupt enabled - bool x_double; // x-axis double tap interrupt enabled - - bool y_single; // y-axis single tap interrupt enabled - bool y_double; // y-axis double tap interrupt enabled - - bool z_single; // z-axis single tap interrupt enabled - bool z_double; // z-axis double tap interrupt enabled - - uint8_t threshold; // threshold used for comparison for all axes - - bool latch; // latch the interrupt when true until the - // interrupt source has been read - - uint8_t time_limit; // maximum time interval between the start and the - // end of a cick (accel increases and falls back) - uint8_t time_latency; // click detection is disabled for that time after - // a was click detected (in 1/ODR) - uint8_t time_window; // time interval in which the second click has to - // to be detected in double clicks (in 1/ODR) - -} lis3dh_int_click_config_t; - - -/** - * @brief Click interrupt source for interrupt signals INT1/INT2 - */ -typedef struct { - - bool x_click:1; // click detected in x direction - bool y_click:1; // click detected in y direction - bool z_click:1; // click detected in z direction - - bool sign :1; // click sign (0 - posisitive, 1 - negative) - - bool s_click:1; // single click detected - bool d_click:1; // double click detected - - bool active :1; // true - one ore more event occured - -} lis3dh_int_click_source_t; - - -/** - * @brief INT1, INT2 signal activity level - */ -typedef enum { - - lis3dh_high_active = 0, - lis3dh_low_active - -} lis3dh_int_signal_level_t; - - -/** - * @brief Raw data set as two complements - */ -typedef struct { - - int16_t ax; // acceleration on x axis - int16_t ay; // acceleration on y axis - int16_t az; // acceleration on z axis - -} lis3dh_raw_data_t; - - -/** - * @brief Raw data FIFO type - */ -typedef lis3dh_raw_data_t lis3dh_raw_data_fifo_t[32]; - - -/** - * @brief Floating point output value set in g - */ -typedef struct { - - float ax; // acceleration on x axis - float ay; // acceleration on y axis - float az; // acceleration on z axis - -} lis3dh_float_data_t; - - -/** - * @brief Floating point output value FIFO type - */ -typedef lis3dh_float_data_t lis3dh_float_data_fifo_t[32]; - - -/** - * @brief HPF (high pass filter) modes - */ -typedef enum { - - lis3dh_hpf_normal = 0, // normal mode (reset by reading reference) - lis3dh_hpf_reference, // reference signal for filtering - lis3dh_hpf_normal_x, // normal mode - lis3dh_hpf_autoreset // autoreset on interrupt Activity - -} lis3dh_hpf_mode_t; - - -/** - * @brief LIS3DH sensor device data structure type - */ -typedef struct { - - int error_code; // error code of last operation - - uint8_t bus; // I2C = x, SPI = 1 - uint8_t addr; // I2C = slave address, SPI = 0 - - uint8_t cs; // ESP8266, ESP32: GPIO used as SPI CS - // __linux__: device index - - lis3dh_scale_t scale; // full range scale (default 2 g) - lis3dh_resolution_t res; // resolution used - - lis3dh_fifo_mode_t fifo_mode; // FIFO operation mode (default bypass) - bool fifo_first; // first FIFO access - -} lis3dh_sensor_t; - - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __LIS3DH_TYPES_H__ */ diff --git a/extras/lis3mdl/README.md b/extras/lis3mdl/README.md deleted file mode 100644 index 268c97c..0000000 --- a/extras/lis3mdl/README.md +++ /dev/null @@ -1,694 +0,0 @@ -# Driver for the LIS3MDL 3-axes digital output magnetometer - -The driver is for the usage with the ESP8266 and [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos). If you can't find it in folder [extras/lis3mdl](https://github.com/SuperHouse/esp-open-rtos/tree/master/extras) of original repository, it is not yet merged. Please take a look to branch [lis3mdl](https://github.com/gschorcht/esp-open-rtos/tree/lis3mdl) of my fork in that case. - -It is also working with ESP32 and [ESP-IDF](https://github.com/espressif/esp-idf.git) using a wrapper component for ESP8266 functions, see folder ```components/esp8266_wrapper```, as well as Linux based systems using a wrapper library. - -## About the sensor - -The LIS3MDL is an ultra-low-power high-performance three-axis magnetic sensor connected to **I2C** or **SPI** with a full scale of up to **±16 Gauss**. It supports different measuring rates. - -**Main features** of the sensor are: - -- 4 selectable full scales of ±4, ±8, ±12, and ±16 Gauss -- 12 different measuring rates from 0.625 Hz up to 1 kHz -- 16 bit magnetic data output -- interrupt generators for magnetic thresholds -- embedded temperature sensor -- I2C and SPI digital output interface - -## Sensor operation - -### Sensor operation modes - -LIS3MDL provides different operating modes (OM): - -- **Power Down mode** is configured automatically after power up boot sequence. In this mode, almost all internal blocks of the device are switched off. Register content is preserved, but there are no measurements performed. - -- **Measurement modes** are a set of operation modes in which measurements are performed with a different output data rates (**ODR**) and different power consumtions. - -### Output Data Rates - -In measurement modes, measurements are performed at a defined output rate. Following output data rates (ODR) are supported in the different modes operation modes (OM): - - Power Mode | Output data rate (ODR) | Driver symbol -:------------- |---------:|:--------------- -Power-down mode| - | ```lis3mdl_power_down``` -Low-power mode | 0.625 Hz | ```lis3mdl_lpm_0_625```, ```lis3mdl_low_power``` -Low-power mode | 1.25 Hz | ```lis3mdl_lpm_1_25``` -Low-power mode | 2.5 Hz | ```lis3mdl_lpm_2_5``` -Low-power mode | 5 Hz | ```lis3mdl_lpm_5``` -Low-power mode | 10 Hz | ```lis3mdl_lpm_10``` -Low-power mode | 20 Hz | ```lis3mdl_lpm_20``` -Low-power mode | 40 Hz | ```lis3mdl_lpm_40``` -Low-power mode | 80 Hz | ```lis3mdl_lpm_80``` -Low-power mode | 1000 Hz | ```lis3mdl_lpm_1000``` -Medium-performance mode | 560 Hz | ```lis3mdl_mpm_560``` -High-performance mode | 300 Hz | ```lis3mdl_hpm_300``` -Ultra-high-performance mode | 155 Hz | ```lis3mdl_uhpm_155``` - -The **easiest way to use the sensor** is to initialize it with the ```lis3mdl_init_sensor``` function and then switch it to any measurement mode with the ```lis3mdl_set_mode``` function to start measurements with the given output data rate (ODR). - -``` -... -static lis3mdl_sensor_t* sensor = 0; -... -if ((sensor = lis3mdl_init_sensor (I2C_BUS, LIS3MDL_I2C_ADDRESS_2, 0))) -{ - ... - lis3mdl_set_mode (sensor, lis3mdl_lpm_10); - ... -} -... - -``` -In this example, a LIS3MDL sensor is connected to I2C bus. It is initialized and set to low-power measurement mode with an output data rate (ODR) of 10 Hz to start the measurements. - -**Please note:** -- ```lis3mdl_init_sensor``` function resets the sensor completely. That is, all sensor registers are reset to their default values and the sensor is switched to the power-down mode. The function returns a pointer to an sensor device data structure on success which is allocated from memory. -- All sensor configurations should be done before calling ```lis3mdl_set_mode``` function. In particular, the interrupt configuration should be performed before to avoid loosing the first interrupt and locking the system. - -## Measurement results - -### Output data format - -The sensor determines periodically the magnetic values for all axes and produces output data with the selected output data rate (ODR). - -Raw **output data** (**raw data**) are given as 16-bit signed integer values in 2’s complement representation and are always left-aligned. The range and the resolution of raw data depend on the sensitivity of the sensor which is selected by the **full scale** parameter. The LIS3MDL allows to select the following full scales: - -Full Scale | Resolution | Driver symbol ----------------------:|:-----------|:------ - ±4 Gauss | 1/6.842 mGauss | ```lis3mdl_scale_4_Gs``` - ±8 Gauss | 1/3.421 mGauss | ```lis3mdl_scale_8_Gs``` -±12 Gauss | 1/2.281 mGauss | ```lis3mdl_scale_12_Gs``` -±16 Gauss | 1/1.711 mGauss | ```lis3mdl_scale_16_Gs``` - -By default, a full scale of ±4 Gauss is used. ```lis3mdl_set_scale``` function can be used to change it. - -``` -lis3mdl_set_scale(sensor, lis3mdl_scale_4_Gs); -``` - -### Fetching output data - -To get the information whether new data are available, the user task can either use - -- the ```lis3mdl_new_data``` function to **check periodically** whether new output data are available, or -- the **data ready interrupt** on ```DRDY``` signal which becomes active as soon as complete sample of new output data are available (see below). - -Last measurement results can then be fetched either - -- as **raw data** using ```lis3mdl_get_raw_data``` function or -- as **floating point values in Gauss (Gs)** using ```lis3mdl_get_float_data``` function. - -It is recommended to use ```lis3mdl_get_float_data``` function since it already converts measurement results to real values according to the selected full scale. - -``` -void user_task_periodic(void *pvParameters) -{ - lis3mdl_float_data_t data; - - while (1) - { - // execute task every 10 ms - vTaskDelay (10/portTICK_PERIOD_MS); - ... - // test for new data - if (!lis3mdl_new_data (sensor)) - continue; - - // fetch new data - if (lis3mdl_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } -} -``` - -**Please note:** -```lis3mdl_get_float_data``` and ```lis3mdl_get_raw_data``` functions always return the last available results. If these functions are called more often than measurements are taken, some measurement results are retrieved multiple times. If these functions are called too rarely, some measurement results will be lost. - -## Interrupts - -The LIS3MDL supports two dedicated interrupt signals for two different types of interrupts: - -- **data ready** interrupts on the **```DRDY```** signal, and -- **magnetic threshold** interrupts on the **```INT```** signal. - -While magnetic threshold interrupts can be configured as well as enabled or disabled, data-ready interrupts are always enabled and can not be explicitly configured. - -### Data ready interrupts - -Whenever an interrupt is generated at interrupt signal ```DRDY```, new data are available and can be read with ```lis3mdl_get_float_data``` function or ```lis3mdl_get_raw_data``` function. - -``` -void drdy_handler () -{ - // fetch new data - if (lis3mdl_get_float_data (sensor, &data)) - { - // do something with data - ... - } -} -``` - -### Magnetic threshold interrupts - -Magnetic threshold detection of LIS3MDL allows to generate interrupts on ```INT``` signal whenever measured magnetic data exceed a defined threshold value at positive or negative side. It can be enabled for each axis separatly. The defined threshhold is valid for all enabled axes. - -Magnetic threshold interrupts can be configured with ```lis3mdl_get_int_config``` function . This function requires configuration of type ```lis3mdl_int_config_t``` as paramater. - -``` -lis3mdl_int_config_t int_config; - -int_config.threshold = 1000; -int_config.x_enabled = true; -int_config.y_enabled = true; -int_config.z_enabled = true; -int_config.latch = true; -int_config.signal_level= lis3mdl_high_active; - -lis3mdl_set_int_config (sensor, &int_config); -``` - -In this example, magnetic threshold detection is enabled for all axes and a threshold of 1000 is defined. - -The parameter of type ```lis3mdl_int_config_t``` also configures - -- whether the interrupt signal should latched until the interrupt source is read, and -- whether the interrupt signal is high (default) or low active. - -```lis3mdl_get_int_source``` function can be used to determine the source of an magnetic threshold interrupt whenever it is generated. This function returns a data structure of type ```lis3mdl_int_source_t``` which contains a boolean member for each source that can be tested for true. - -``` -void int_handler () -{ - lis3mdl_int_source_t int_src; - - // get the source of the interrupt and reset the INT signal - lis3mdl_get_int_source (sensor, &int_src); - - // test the source of the interrupt - if (int_src.active) - { - if (int_src.x_pos || int_src.x_neg) ... ; // do something - if (int_src.y_pos || int_src.y_neg) ... ; // do something - if (int_src.z_pos || int_src.z_neg) ... ; // do something - } - ... -} -``` -**Please note:** If the interrupt is configured to be latched, the interrupt signal is active until the interrupt source is read. Otherwise the interrupt signal is only active as long as the interrupt condition is satisfied. - -## Temperature sensor - -The LIS3MDL sensor contains an internal temperature sensor. It can be activated and deactivated with the ```lis3mdl_enable_temperature``` function. Using ```lis3mdl_get_temperature``` function, the temperature can be determined as a floating point value in degrees. The temperature is measured by the sensor at the same rate as the magnetic data. - -## Low level functions - -The LIS3MDL is a very complex and flexible sensor with a lot of features. It can be used for a big number of different use cases. Since it is quite impossible to implement a high level interface which is generic enough to cover all the functionality of the sensor for all different use cases, there are two low level interface functions that allow direct read and write access to the registers of the sensor. - -``` -bool lis3mdl_reg_read (lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -bool lis3mdl_reg_write (lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -``` - -**Please note** -These functions should only be used to do something special that is not covered by drivers's high level interface AND if you exactly know what you do and what it might affect. Please be aware that it might always affect the high level interface. - - -## Usage - -First, the hardware configuration has to be established. - -### Hardware configurations - -Following figure shows a possible hardware configuration for ESP8266 and ESP32 if I2C interface is used to connect the sensor. - -``` - +-----------------+ +----------+ - | ESP8266 / ESP32 | | LIS3MDL | - | | | | - | GPIO 14 (SCL) >-----> SCL | - | GPIO 13 (SDA) <-----> SDA | - | GPIO 5 <------ INT | - | GPIO 4 <------ DRDY | - +-----------------+ +----------+ -``` - -If SPI interface is used, configuration for ESP8266 and ESP32 could look like following. - -``` - +-----------------+ +----------+ +-----------------+ +----------+ - | ESP8266 | | LIS3MDL | | ESP32 | | LIS3MDL | - | | | | | | | | - | GPIO 14 (SCK) ------> SCK | | GPIO 16 (SCK) ------> SCK | - | GPIO 13 (MOSI)------> SDI | | GPIO 17 (MOSI)------> SDI | - | GPIO 12 (MISO)<------ SDO | | GPIO 18 (MISO)<------ SDO | - | GPIO 2 (CS) ------> CS | | GPIO 19 (CS) ------> CS | - | GPIO 5 <------ INT | | GPIO 5 <------ INT | - | GPIO 4 <------ DRDY | | GPIO 4 <------ DRDY | - +-----------------+ +----------+ +-----------------+ +----------+ -``` - -### Communication interface settings - -Dependent on the hardware configuration, the communication interface and interrupt settings have to be defined. In case ESP32 is used, the configuration could look like - -``` -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define PIN_INT 5 -#define PIN_DRDY 4 - -``` - -### Main program - -#### Initialization - -If I2C interfaces are used, they have to be initialized first. - -``` -i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); -``` - -SPI interface has only to be initialized explicitly on ESP32 platform to declare the GPIOs that are used for SPI interface. - -``` -spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); -``` - -Once the interfaces are initialized, function ```lis3mdl_init_sensor``` has to be called for each LIS3MDL sensor in order to initialize the sensor and to check its availability as well as its error state. This function returns a pointer to a sensor device data structure or NULL in case of error. - -The parameter *bus* specifies the ID of the I2C or SPI bus to which the sensor is connected. - -``` -static lis3mdl_sensor_t* sensor; -``` - -For sensors connected to an I2C interface, a valid I2C slave address has to be defined as parameter *addr*. In that case parameter *cs* is ignored. - -``` -sensor = lis3mdl_init_sensor (I2C_BUS, LIS3MDL_I2C_ADDRESS_2, 0); - -``` - -If parameter *addr* is 0, the sensor is connected to a SPI bus. In that case, parameter *cs* defines the GPIO used as CS signal. - -``` -sensor = lis3mdl_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - -``` - -The remaining of the program is independent on the communication interface. - -#### Configuring the sensor - -Optionally, you could wish to set some measurement parameters. For details see the sections above, the header file of the driver ```lis3mdl.h```, and of course the data sheet of the sensor. - -#### Starting measurements - -As last step, the sensor mode has be set to start periodic measurement. The sensor mode can be changed anytime later. - -``` -... -// start periodic measurement with output data rate of 10 Hz -lis3mdl_set_mode (sensor, lis3mdl_lpm_10); -... -``` - -#### Periodic user task - -Finally, a user task that uses the sensor has to be created. - -**Please note:** To avoid concurrency situations when driver functions are used to access the sensor, for example to read data, the user task must not be created until the sensor configuration is completed. - -The user task can use different approaches to fetch new data. Either new data are fetched periodically or interrupt signals are used when new data are available or a configured event happens. - -If new data are fetched **periodically** the implementation of the user task is quite simple and could look like following. - -``` -void user_task_periodic(void *pvParameters) -{ - lis3mdl_float_data_t data; - - while (1) - { - // execute task every 10 ms - vTaskDelay (10/portTICK_PERIOD_MS); - ... - // test for new data - if (!lis3mdl_new_data (sensor)) - continue; - - // fetch new data - if (lis3mdl_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } -} -... -// create a user task that fetches data from sensor periodically -xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); -``` - -The user task simply tests periodically with a rate higher than the output data rate (ODR) of the sensor whether new data are available. If new data are available, it fetches the data. - -#### Interrupt user task - -A different approach is to use one of the **interrupt signals** ```INT``` or ```DRDY```. In this case, the user has to implement an interrupt handler that either fetches the data directly or triggers a task, that is waiting to fetch the data. - -``` -static QueueHandle_t gpio_evt_queue = NULL; - -// Interrupt handler which resumes sends an event to the waiting user_task_interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -// User task that fetches the sensor values - -void user_task_interrupt (void *pvParameters) -{ - uint32_t gpio_num; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - // test for new data - if (!lis3mdl_new_data (sensor)) - continue; - - // fetch new data - if (lis3mdl_get_float_data (sensor, &data)) - { - // do something with data - ... - } - } - } -} -... - -// create a task that is triggered only in case of interrupts to fetch the data - -xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); -... -``` - -In this example, there is - -- a task that is fetching data when it receives an event, and -- an interrupt handler that generates the event on interrupt. - -Finally, interrupt handlers have to be activated for the GPIOs which are connected to the interrupt signals. - -``` -// configure interrupt pins for *INT1* and *INT2* signals and set the interrupt handler -gpio_set_interrupt(PIN_INT , GPIO_INTTYPE_EDGE_POS, int_signal_handler); -gpio_set_interrupt(PIN_DRDY, GPIO_INTTYPE_EDGE_POS, int_signal_handler); -``` - -Furthermore, the interrupts have to be enabled and configured in the LIS3MDL sensor, see section **Interrupts** above. - -## Full Example - -``` -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED // if defined SPI is used, otherwise I2C -// #define INT_DATA // data ready interrupt used -// #define INT_THRESH // threshold interrupt used - -#if defined(INT_DATA) || defined(INT_THRESH) -#define INT_USED -#endif - -/* -- includes ----------------------------------------------------- */ - -#include "lis3mdl.h" - -/** -- platform dependent definitions ------------------------------ */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define PIN_INT 5 -#define PIN_DRDY 4 - -/* -- user tasks --------------------------------------------------- */ - -static lis3mdl_sensor_t* sensor; - -/** - * Common function used to get sensor data. - */ -void read_data () -{ - lis3mdl_float_data_t data; - - if (lis3mdl_new_data (sensor) && - lis3mdl_get_float_data (sensor, &data)) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LIS3MDL (xyz)[Gs] mx=%+7.3f my=%+7.3f mz=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - data.mx, data.my, data.mz); -} - - -#ifdef INT_USED -/** - * In this case, any of the possible interrupts on interrupt signal *INT1* is - * used to fetch the data. - * - * When interrupts are used, the user has to define interrupt handlers that - * either fetches the data directly or triggers a task which is waiting to - * fetch the data. In this example, the interrupt handler sends an event to - * a waiting task to trigger the data gathering. - */ - -static QueueHandle_t gpio_evt_queue = NULL; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint8_t gpio_num; - - while (1) - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - if (gpio_num == PIN_DRDY) - { - read_data (); - } - else if (gpio_num == PIN_INT) - { - lis3mdl_int_source_t int_src; - - // get the source of the interrupt and reset INT signals - lis3mdl_get_int_source (sensor, &int_src); - - // in case of DRDY interrupt or activity interrupt read one data sample - if (int_src.active) - read_data (); - } - } -} - -// Interrupt handler which resumes user_task_interrupt on interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -#else // !INT_USED - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - vTaskDelay (100/portTICK_PERIOD_MS); - - while (1) - { - // read sensor data - read_data (); - - // passive waiting until 1 second is over - vTaskDelay(100/portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - // init the sensor connnected to SPI - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = lis3mdl_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else - - // init all I2C bus interfaces at which LIS3MDL sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address LIS3MDL_I2C_ADDRESS_2 connected to I2C_BUS. - sensor = lis3mdl_init_sensor (I2C_BUS, LIS3MDL_I2C_ADDRESS_2, 0); - - #endif - - if (sensor) - { - #ifdef INT_USED - - /** --- INTERRUPT CONFIGURATION PART ---- */ - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode to avoid losing interrupts - - // create an event queue to send interrupt events from interrupt - // handler to the interrupt task - gpio_evt_queue = xQueueCreate(10, sizeof(uint8_t)); - - // configure interupt pins for *INT* and *DRDY* signals and set the interrupt handler - gpio_enable(PIN_INT , GPIO_INPUT); - gpio_enable(PIN_DRDY, GPIO_INPUT); - gpio_set_interrupt(PIN_INT , GPIO_INTTYPE_EDGE_POS, int_signal_handler); - gpio_set_interrupt(PIN_DRDY, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - - #endif // !defined(INT_USED) - - // -- SENSOR CONFIGURATION PART --- - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode - - #ifdef INT_THRESH - // enable threshold interrupts on INT1 - lis3mdl_int_config_t int_config; - - int_config.threshold = 1000; - int_config.x_enabled = true; - int_config.y_enabled = true; - int_config.z_enabled = true; - int_config.latch = true; - int_config.signal_level= lis3mdl_high_active; - - lis3mdl_set_int_config (sensor, &int_config); - #endif // INT_THRESH - - // LAST STEP: Finally set scale and mode to start measurements - lis3mdl_set_scale(sensor, lis3mdl_scale_4_Gs); - lis3mdl_set_mode (sensor, lis3mdl_lpm_10); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - #ifdef INT_USED - - // create a task that is triggered only in case of interrupts to fetch the data - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a user task that fetches data from sensor periodically - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #endif - } - else - printf("Could not initialize LIS3MDL sensor\n"); -} - -``` diff --git a/extras/lis3mdl/component.mk b/extras/lis3mdl/component.mk deleted file mode 100644 index df5aec0..0000000 --- a/extras/lis3mdl/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/lis3mdl - -# expected anyone using LIS3MDL driver includes it as 'lis3mld/lis3mld.h' -INC_DIRS += $(lis3mdl_ROOT).. -INC_DIRS += $(lis3mdl_ROOT) - -# args for passing into compile rule generation -lis3mdl_SRC_DIR = $(lis3mdl_ROOT) - -$(eval $(call component_compile_rules,lis3mdl)) diff --git a/extras/lis3mdl/lis3mdl.c b/extras/lis3mdl/lis3mdl.c deleted file mode 100644 index affe259..0000000 --- a/extras/lis3mdl/lis3mdl.c +++ /dev/null @@ -1,738 +0,0 @@ -/* - * Driver for LIS3MDL 3-axes digital magnetometer connected to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - * - * The information provided is believed to be accurate and reliable. The - * copyright holder assumes no responsibility for the consequences of use - * of such information nor for any infringement of patents or other rights - * of third parties which may result from its use. No license is granted by - * implication or otherwise under any patent or patent rights of the copyright - * holder. - */ - -#include -#include - -#include "lis3mdl.h" - -#if defined(LIS3MDL_DEBUG_LEVEL_2) -#define debug(s, f, ...) printf("%s %s: " s "\n", "LIS3MDL", f, ## __VA_ARGS__) -#define debug_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "LIS3MDL", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define debug(s, f, ...) -#define debug_dev(s, f, d, ...) -#endif - -#if defined(LIS3MDL_DEBUG_LEVEL_1) || defined(LIS3MDL_DEBUG_LEVEL_2) -#define error(s, f, ...) printf("%s %s: " s "\n", "LIS3MDL", f, ## __VA_ARGS__) -#define error_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "LIS3MDL", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define error(s, f, ...) -#define error_dev(s, f, d, ...) -#endif - -// register addresses -#define LIS3MDL_REG_WHO_AM_I 0x0f -#define LIS3MDL_REG_CTRL1 0x20 -#define LIS3MDL_REG_CTRL2 0x21 -#define LIS3MDL_REG_CTRL3 0x22 -#define LIS3MDL_REG_CTRL4 0x23 -#define LIS3MDL_REG_CTRL5 0x24 -#define LIS3MDL_REG_STATUS 0x27 -#define LIS3MDL_REG_OUT_X_L 0x28 -#define LIS3MDL_REG_OUT_X_H 0x29 -#define LIS3MDL_REG_OUT_Y_L 0x2a -#define LIS3MDL_REG_OUT_Y_H 0x2b -#define LIS3MDL_REG_OUT_Z_L 0x2c -#define LIS3MDL_REG_OUT_Z_H 0x2d -#define LIS3MDL_REG_TEMP_OUT_L 0x2e -#define LIS3MDL_REG_TEMP_OUT_H 0x2f -#define LIS3MDL_REG_INT_CFG 0x30 -#define LIS3MDL_REG_INT_SRC 0x31 -#define LIS3MDL_REG_INT_THS_L 0x32 -#define LIS3MDL_REG_INT_THS_H 0x33 - -// register structure definitions -struct lis3mdl_reg_status -{ - uint8_t XDA :1; // STATUS<0> X axis new data available - uint8_t YDA :1; // STATUS<1> Y axis new data available - uint8_t ZDA :1; // STATUS<2> Z axis new data available - uint8_t ZYXDA :1; // STATUS<3> X, Y and Z axis new data available - uint8_t XOR :1; // STATUS<4> X axis data overrun - uint8_t YOR :1; // STATUS<5> Y axis data overrun - uint8_t ZOR :1; // STATUS<6> Z axis data overrun - uint8_t ZYXOR :1; // STATUS<7> X, Y and Z axis data overrun -}; - -#define LIS3MDL_ANY_DATA_READY 0x0f // LIS3MDL_REG_STATUS<3:0> - -struct lis3mdl_reg_ctrl1 -{ - uint8_t ST :1; // CTRL1<0> Self-test enable - uint8_t FAST_ODR :1; // CTRL1<1> Data rates higher 80 Hz enabled - uint8_t DO :3; // CTRL1<4:2> Output data rate - uint8_t OM :2; // CTRL1<6:5> X and Y axes operative mode - uint8_t TEMP_EN :1; // CTRL1<7> Temperature sensor enabled -}; - -struct lis3mdl_reg_ctrl2 -{ - uint8_t unused1 :2; // CTRL2<1:0> unused - uint8_t SOFT_RST :1; // CTRL2<2> configuration and user regs reset - uint8_t REBOOT :1; // CTRL2<3> Reboot memory content - uint8_t unused2 :1; // CTRL2<4> unused - uint8_t FS :2; // CTRL2<6:5> - uint8_t unused3 :1; // CTRL2<7> unused -}; - -struct lis3mdl_reg_ctrl3 -{ - uint8_t MD :2; // CTRL3<1:0> Operation mode selection - uint8_t SIM :1; // CTRL3<2> SPI serial interface mode selection - uint8_t unused1 :2; // CTRL3<4:3> unused - uint8_t LP :1; // CTRL3<5> Low power mode configuration - uint8_t unused2 :2; // CTRL3<7:6> unused -}; - -struct lis3mdl_reg_ctrl4 -{ - uint8_t unused1 :1; // CTRL4<0> unused - uint8_t BLE :1; // CTRL4<1> Big/litle endian data selection - uint8_t OMZ :2; // CTRL4<3:2> Z axis operative mode - uint8_t unused2 :4; // CTRL4<7:4> unused -}; - -struct lis3mdl_reg_ctrl5 -{ - uint8_t unused :6; // CTRL5<5:0> unused - uint8_t BDU :1; // CTRL5<6> Block data update - uint8_t FAST_READ:1; // CTRL5<7> Fast read enabled -}; - - -struct lis3mdl_reg_int_cfg -{ - uint8_t IEN :1; // INT_CFG<0> Interrupt enabled - uint8_t LIR :1; // INT_CFG<1> Latch interrupt request - uint8_t IEA :1; // INT_CFG<2> Interrupt active - uint8_t unused :2; // INT_CFG<4:3> unused - uint8_t ZIEN :1; // INT_CFG<5> Z axis threshold interrupt enabled - uint8_t YIEN :1; // INT_CFG<6> Y axis threshold interrupt enabled - uint8_t XIEN :1; // INT_CFG<7> X axis threshold interrupt enabled -}; - -struct lis3mdl_reg_int_src -{ - uint8_t PTH_X :1; // INT_SRC<0> X exceeds threshold on positive side - uint8_t PTH_Y :1; // INT_SRC<1> Y exceeds threshold on positive side - uint8_t PTH_Z :1; // INT_SRC<2> Z exceeds threshold on positive side - uint8_t NTH_X :1; // INT_SRC<3> X exceeds threshold on negative side - uint8_t NTH_Y :1; // INT_SRC<4> Y exceeds threshold on negative side - uint8_t NTH_Z :1; // INT_SRC<5> Z exceeds threshold on negative side - uint8_t MROI :1; // INT_SRC<6> Internal measurement range overflow - uint8_t INT :1; // INT_SRC<7> Interrupt event occurs -}; - -/** Forward declaration of functions for internal use */ - -static bool lis3mdl_reset (lis3mdl_sensor_t* dev); -static bool lis3mdl_is_available(lis3mdl_sensor_t* dev); - -static bool lis3mdl_i2c_read (lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lis3mdl_i2c_write (lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lis3mdl_spi_read (lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lis3mdl_spi_write (lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); - -#define msb_lsb_to_type(t,b,o) (t)(((t)b[o] << 8) | b[o+1]) -#define lsb_msb_to_type(t,b,o) (t)(((t)b[o+1] << 8) | b[o]) -#define lsb_to_type(t,b,o) (t)(b[o]) - -#define lis3mdl_update_reg(dev,addr,type,elem,value) \ - { \ - struct type __reg; \ - if (!lis3mdl_reg_read (dev, (addr), (uint8_t*)&__reg, 1)) \ - return false; \ - __reg.elem = (value); \ - if (!lis3mdl_reg_write (dev, (addr), (uint8_t*)&__reg, 1)) \ - return false; \ - } - -lis3mdl_sensor_t* lis3mdl_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs) -{ - lis3mdl_sensor_t* dev; - - if ((dev = malloc (sizeof(lis3mdl_sensor_t))) == NULL) - return NULL; - - // init sensor data structure - dev->bus = bus; - dev->addr = addr; - dev->cs = cs; - - dev->error_code = LIS3MDL_OK; - dev->scale = lis3mdl_scale_4_Gs; - - // if addr==0 then SPI is used and has to be initialized - if (!addr && !spi_device_init (bus, cs)) - { - error_dev ("Could not initialize SPI interface.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // check availability of the sensor - if (!lis3mdl_is_available (dev)) - { - error_dev ("Sensor is not available.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // reset the sensor - if (!lis3mdl_reset(dev)) - { - error_dev ("Could not reset the sensor device.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - lis3mdl_update_reg (dev, LIS3MDL_REG_CTRL2, lis3mdl_reg_ctrl2, FS, lis3mdl_scale_4_Gs); - lis3mdl_update_reg (dev, LIS3MDL_REG_CTRL5, lis3mdl_reg_ctrl5, BDU, 1); - - return dev; -} - -// switching times -// LP 0.90 -// MP 1.65 -// HP 3.23 -// UHP 6.40 - -bool lis3mdl_set_mode (lis3mdl_sensor_t* dev, lis3mdl_mode_t mode) -{ - if (!dev) return false; - - dev->error_code = LIS3MDL_OK; - - struct lis3mdl_reg_ctrl1 ctrl1; - struct lis3mdl_reg_ctrl3 ctrl3; - struct lis3mdl_reg_ctrl4 ctrl4; - - // read current register values - if (!lis3mdl_reg_read (dev, LIS3MDL_REG_CTRL1, (uint8_t*)&ctrl1, 1) || - !lis3mdl_reg_read (dev, LIS3MDL_REG_CTRL3, (uint8_t*)&ctrl3, 1) || - !lis3mdl_reg_read (dev, LIS3MDL_REG_CTRL4, (uint8_t*)&ctrl4, 1)) - return false; - - if (mode < lis3mdl_lpm_1000) - { - ctrl1.FAST_ODR = 0; - - ctrl3.MD = 0; // continuous measurement - ctrl3.LP = 0; - - ctrl1.DO = mode; - ctrl1.OM = 0; - ctrl4.OMZ = ctrl1.OM; - } - else if (mode < lis3mdl_low_power) - { - ctrl1.FAST_ODR = 1; - - ctrl3.MD = 0; // continuous measurement - ctrl3.LP = 0; - - ctrl1.DO = 0; - ctrl1.OM = mode - lis3mdl_lpm_1000; - ctrl4.OMZ = ctrl1.OM; - } - else if (mode == lis3mdl_low_power) - { - ctrl1.FAST_ODR = 0; - - ctrl3.MD = 0; // continuous measurement - ctrl3.LP = 1; // at lowest data rate 0.625 Hz - - ctrl1.DO = 0; - ctrl1.OM = 0; - ctrl4.OMZ = ctrl1.OM; - } - else // lis3mdl_power_down - { - ctrl3.MD = 3; - } - - if (!lis3mdl_reg_write (dev, LIS3MDL_REG_CTRL1, (uint8_t*)&ctrl1, 1) || - !lis3mdl_reg_write (dev, LIS3MDL_REG_CTRL3, (uint8_t*)&ctrl3, 1) || - !lis3mdl_reg_write (dev, LIS3MDL_REG_CTRL4, (uint8_t*)&ctrl4, 1)) - return false; - - // wait until mode switch happened - vTaskDelay (50/portTICK_PERIOD_MS); - - // dummy read last data register set - lis3mdl_raw_data_t raw; - lis3mdl_get_raw_data (dev, &raw); - - return false; -} - - -bool lis3mdl_set_scale (lis3mdl_sensor_t* dev, lis3mdl_scale_t scale) -{ - if (!dev) return false; - - dev->error_code = LIS3MDL_OK; - dev->scale = scale; - - // read CTRL2 register and write scale - lis3mdl_update_reg (dev, LIS3MDL_REG_CTRL2, lis3mdl_reg_ctrl2, FS, scale); - - return true; -} - - -bool lis3mdl_new_data (lis3mdl_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = LIS3MDL_OK; - - struct lis3mdl_reg_status status; - - if (!lis3mdl_reg_read (dev, LIS3MDL_REG_STATUS, (uint8_t*)&status, 1)) - { - error_dev ("Could not get sensor status", __FUNCTION__, dev); - return false; - } - return status.ZYXDA; -} - -/** - * Scaling factors for the conversion of raw sensor data to floating point _Gs - * values. Scaling factors are from mechanical characteristics in datasheet. - * - * scale/sensitivity resolution sensitivity - * +-4 gauss 6842 LSB/gauss 1.461561e-4 - * +-8 gauss 3421 LSB/gauss 2,923122e-4 - * +-12 gauss 2281 LSB/gauss 4,384042e-4 - * +-16 gauss 1711 LSB/gauss 5,844535e-4 - */ -const static double LIS3MDL_SCALES[4] = { 1.0/6842, 1.0/3421, 1.0/2281, 1.0/1711 }; - -bool lis3mdl_get_float_data (lis3mdl_sensor_t* dev, lis3mdl_float_data_t* data) -{ - if (!dev || !data) return false; - - lis3mdl_raw_data_t raw; - - if (!lis3mdl_get_raw_data (dev, &raw)) - return false; - - data->mx = LIS3MDL_SCALES[dev->scale] * raw.mx; - data->my = LIS3MDL_SCALES[dev->scale] * raw.my; - data->mz = LIS3MDL_SCALES[dev->scale] * raw.mz; - - return true; -} - - -bool lis3mdl_get_raw_data (lis3mdl_sensor_t* dev, lis3mdl_raw_data_t* raw) -{ - if (!dev || !raw) return false; - - dev->error_code = LIS3MDL_OK; - - uint8_t regs[6]; - - // read raw data sample - if (!lis3mdl_reg_read (dev, LIS3MDL_REG_OUT_X_L, regs, 6)) - { - error_dev ("Could not get raw data sample", __FUNCTION__, dev); - dev->error_code |= LIS3MDL_GET_RAW_DATA_FAILED; - return false; - } - - raw->mx = ((uint16_t)regs[1] << 8) | regs[0]; - raw->my = ((uint16_t)regs[3] << 8) | regs[2]; - raw->mz = ((uint16_t)regs[5] << 8) | regs[4]; - - return true; -} - - -bool lis3mdl_set_int_config (lis3mdl_sensor_t* dev, - lis3mdl_int_config_t* cfg) -{ - if (!dev || !cfg) return false; - - dev->error_code = LIS3MDL_OK; - - struct lis3mdl_reg_int_cfg int_cfg; - - int_cfg.unused = 0; - - int_cfg.XIEN = cfg->x_enabled; - int_cfg.YIEN = cfg->y_enabled; - int_cfg.ZIEN = cfg->z_enabled; - - int_cfg.LIR = cfg->latch; - int_cfg.IEA = cfg->signal_level; - int_cfg.IEN = cfg->x_enabled | cfg->y_enabled | cfg->z_enabled; - - if (// write the threshold to registers INT_THS_* - !lis3mdl_reg_write (dev, LIS3MDL_REG_INT_THS_L, (uint8_t*)&cfg->threshold, 2) || - - // write configuration to INT_CFG - !lis3mdl_reg_write (dev, LIS3MDL_REG_INT_CFG, (uint8_t*)&int_cfg, 1)) - { - error_dev ("Could not configure interrupt INT", __FUNCTION__, dev); - dev->error_code |= LIS3MDL_CONFIG_INT_FAILED; - return false; - } - - return true; -} - - -bool lis3mdl_get_int_config (lis3mdl_sensor_t* dev, - lis3mdl_int_config_t* cfg) -{ - if (!dev || !cfg) return false; - - dev->error_code = LIS3MDL_OK; - - struct lis3mdl_reg_int_cfg int_cfg; - - if (!lis3mdl_reg_read (dev, LIS3MDL_REG_INT_THS_L, (uint8_t*)&cfg->threshold, 2) || - !lis3mdl_reg_read (dev, LIS3MDL_REG_INT_CFG , (uint8_t*)&int_cfg, 1)) - { - error_dev ("Could not read configuration of interrupt INT from sensor", __FUNCTION__, dev); - dev->error_code |= LIS3MDL_CONFIG_INT_FAILED; - return false; - } - - cfg->x_enabled = int_cfg.XIEN; - cfg->y_enabled = int_cfg.YIEN; - cfg->z_enabled = int_cfg.ZIEN; - - cfg->latch = int_cfg.LIR; - cfg->signal_level = int_cfg.IEA; - - return true; -} - - -bool lis3mdl_get_int_source (lis3mdl_sensor_t* dev, - lis3mdl_int_source_t* src) -{ - if (!dev || !src) return false; - - dev->error_code = LIS3MDL_OK; - - struct lis3mdl_reg_int_src int_src; - struct lis3mdl_reg_int_cfg int_cfg; - - if (!lis3mdl_reg_read (dev, LIS3MDL_REG_INT_SRC, (uint8_t*)&int_src, 1) || - !lis3mdl_reg_read (dev, LIS3MDL_REG_INT_CFG, (uint8_t*)&int_cfg, 1)) - { - error_dev ("Could not read source of interrupt INT from sensor", __FUNCTION__, dev); - dev->error_code |= LIS3MDL_INT_SOURCE_FAILED; - return false; - } - - src->active = int_src.INT; - - src->x_pos = int_src.PTH_X & int_cfg.XIEN; - src->x_neg = int_src.NTH_X & int_cfg.XIEN; - - src->y_pos = int_src.PTH_Y & int_cfg.YIEN; - src->y_neg = int_src.NTH_Y & int_cfg.YIEN; - - src->z_pos = int_src.PTH_Z & int_cfg.ZIEN; - src->z_neg = int_src.NTH_Z & int_cfg.ZIEN; - - return true; -} - - -bool lis3mdl_enable_temperature (lis3mdl_sensor_t* dev, bool enable) -{ - lis3mdl_update_reg (dev, LIS3MDL_REG_CTRL1, lis3mdl_reg_ctrl1, TEMP_EN, enable); - - return true; -} - -float lis3mdl_get_temperature (lis3mdl_sensor_t* dev) -{ - uint8_t regs[2]; - - // read raw data sample - if (!lis3mdl_reg_read (dev, LIS3MDL_REG_TEMP_OUT_L, regs, 2)) - { - error_dev ("Could not get temperature data sample", __FUNCTION__, dev); - dev->error_code |= LIS3MDL_GET_RAW_DATA_FAILED; - return false; - } - - return (((int16_t)((regs[1] << 8) | regs[0])) >> 3) + 25.0; -} - -/** Functions for internal use only */ - -/** - * @brief Check the chip ID to test whether sensor is available - */ -static bool lis3mdl_is_available (lis3mdl_sensor_t* dev) -{ - uint8_t chip_id; - - if (!dev) return false; - - dev->error_code = LIS3MDL_OK; - - if (!lis3mdl_reg_read (dev, LIS3MDL_REG_WHO_AM_I, &chip_id, 1)) - return false; - - if (chip_id != LIS3MDL_CHIP_ID) - { - error_dev ("Chip id %02x is wrong, should be %02x.", - __FUNCTION__, dev, chip_id, LIS3MDL_CHIP_ID); - dev->error_code = LIS3MDL_WRONG_CHIP_ID; - return false; - } - - return true; -} - -static bool lis3mdl_reset (lis3mdl_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = LIS3MDL_OK; - - uint8_t ctrl_regs[5] = { 0x10, 0x00, 0x03, 0x00, 0x00 }; - uint8_t int_cfg = 0x00; - - // initialize sensor completely including setting in power down mode - lis3mdl_reg_write (dev, LIS3MDL_REG_CTRL1 , ctrl_regs, 5); - lis3mdl_reg_write (dev, LIS3MDL_REG_INT_CFG, &int_cfg , 1); - - return true; -} - - -bool lis3mdl_reg_read(lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? lis3mdl_i2c_read (dev, reg, data, len) - : lis3mdl_spi_read (dev, reg, data, len); -} - - -bool lis3mdl_reg_write(lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? lis3mdl_i2c_write (dev, reg, data, len) - : lis3mdl_spi_write (dev, reg, data, len); -} - - -#define LIS3MDL_SPI_BUF_SIZE 64 // SPI register data buffer size of ESP866 - -#define LIS3MDL_SPI_READ_FLAG 0x80 -#define LIS3MDL_SPI_WRITE_FLAG 0x00 -#define LIS3MDL_SPI_AUTO_INC_FLAG 0x40 - -static bool lis3mdl_spi_read(lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - if (len >= LIS3MDL_SPI_BUF_SIZE) - { - dev->error_code |= LIS3MDL_SPI_BUFFER_OVERFLOW; - error_dev ("Error on read from SPI slave on bus 1. Tried to transfer " - "more than %d byte in one read operation.", - __FUNCTION__, dev, LIS3MDL_SPI_BUF_SIZE); - return false; - } - - uint8_t addr = (reg & 0x3f) | LIS3MDL_SPI_READ_FLAG | LIS3MDL_SPI_AUTO_INC_FLAG; - - static uint8_t mosi[LIS3MDL_SPI_BUF_SIZE]; - static uint8_t miso[LIS3MDL_SPI_BUF_SIZE]; - - memset (mosi, 0xff, LIS3MDL_SPI_BUF_SIZE); - memset (miso, 0xff, LIS3MDL_SPI_BUF_SIZE); - - mosi[0] = addr; - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, miso, len+1)) - { - error_dev ("Could not read data from SPI", __FUNCTION__, dev); - dev->error_code |= LIS3MDL_SPI_READ_FAILED; - return false; - } - - // shift data one by left, first byte received while sending register address is invalid - for (int i=0; i < len; i++) - data[i] = miso[i+1]; - - #ifdef LIS3MDL_DEBUG_LEVEL_2 - printf("LIS3MDL %s: read the following bytes from reg %02x: ", __FUNCTION__, reg); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); - #endif - - return true; -} - - -static bool lis3mdl_spi_write(lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - uint8_t addr = (reg & 0x3f) | LIS3MDL_SPI_WRITE_FLAG | LIS3MDL_SPI_AUTO_INC_FLAG; - - static uint8_t mosi[LIS3MDL_SPI_BUF_SIZE]; - - if (len >= LIS3MDL_SPI_BUF_SIZE) - { - dev->error_code |= LIS3MDL_SPI_BUFFER_OVERFLOW; - error_dev ("Error on write to SPI slave on bus 1. Tried to transfer more" - "than %d byte in one write operation.", - __FUNCTION__, dev, LIS3MDL_SPI_BUF_SIZE); - - return false; - } - - reg &= 0x7f; - - // first byte in output is the register address - mosi[0] = addr; - - // shift data one byte right, first byte in output is the register address - for (int i = 0; i < len; i++) - mosi[i+1] = data[i]; - - #ifdef LIS3MDL_DEBUG_LEVEL_2 - printf("LIS3MDL %s: Write the following bytes to reg %02x: ", __FUNCTION__, reg); - for (int i = 1; i < len+1; i++) - printf("%02x ", mosi[i]); - printf("\n"); - #endif - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, NULL, len+1)) - { - error_dev ("Could not write data to SPI.", __FUNCTION__, dev); - dev->error_code |= LIS3MDL_SPI_WRITE_FAILED; - return false; - } - - return true; -} - - -#define I2C_AUTO_INCREMENT (0x80) - -static bool lis3mdl_i2c_read(lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Read %d byte from i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - if (len > 1) - reg |= I2C_AUTO_INCREMENT; - - int result = i2c_slave_read(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? LIS3MDL_I2C_BUSY : LIS3MDL_I2C_READ_FAILED; - error_dev ("Error %d on read %d byte from I2C slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef LIS3MDL_DEBUG_LEVEL_2 - printf("LIS3MDL %s: Read following bytes: ", __FUNCTION__); - printf("%02x: ", reg & 0x7f); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif - - return true; -} - - -static bool lis3mdl_i2c_write(lis3mdl_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Write %d byte to i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - if (len > 1) - reg |= I2C_AUTO_INCREMENT; - - int result = i2c_slave_write(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? LIS3MDL_I2C_BUSY : LIS3MDL_I2C_WRITE_FAILED; - error_dev ("Error %d on write %d byte to i2c slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef LIS3MDL_DEBUG_LEVEL_2 - printf("LIS3MDL %s: Wrote the following bytes: ", __FUNCTION__); - printf("%02x: ", reg & 0x7f); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif - - return true; -} diff --git a/extras/lis3mdl/lis3mdl.h b/extras/lis3mdl/lis3mdl.h deleted file mode 100644 index c21b725..0000000 --- a/extras/lis3mdl/lis3mdl.h +++ /dev/null @@ -1,248 +0,0 @@ -/** - * Driver for LIS3MDL 3-axes digital magnetometer connected to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef __LIS3MDL_H__ -#define __LIS3MDL_H__ - -// Uncomment one of the following defines to enable debug output -// #define LIS3MDL_DEBUG_LEVEL_1 // only error messages -// #define LIS3MDL_DEBUG_LEVEL_2 // debug and error messages - -// LIS3MDL addresses -#define LIS3MDL_I2C_ADDRESS_1 0x1c // SDO pin is low -#define LIS3MDL_I2C_ADDRESS_2 0x1e // SDO pin is high - -// LIS3MDL chip id -#define LIS3MDL_CHIP_ID 0x3d // LIS3MDL_REG_WHO_AM_I<7:0> - -// Definition of error codes -#define LIS3MDL_OK 0 -#define LIS3MDL_NOK -1 - -#define LIS3MDL_INT_ERROR_MASK 0x000f -#define LIS3MDL_DRV_ERROR_MASK 0xfff0 - -// Error codes for I2C and SPI interfaces ORed with LIS3MDL driver error codes -#define LIS3MDL_I2C_READ_FAILED 1 -#define LIS3MDL_I2C_WRITE_FAILED 2 -#define LIS3MDL_I2C_BUSY 3 -#define LIS3MDL_SPI_WRITE_FAILED 4 -#define LIS3MDL_SPI_READ_FAILED 5 -#define LIS3MDL_SPI_BUFFER_OVERFLOW 6 - -// LIS3MDL driver error codes ORed with error codes for I2C and SPI interfaces -#define LIS3MDL_WRONG_CHIP_ID ( 1 << 8) -#define LIS3MDL_GET_RAW_DATA_FAILED ( 2 << 8) -#define LIS3MDL_CONFIG_INT_FAILED ( 3 << 8) -#define LIS3MDL_INT_SOURCE_FAILED ( 4 << 8) -#define LIS3MDL_GET_ADC_DATA_FAILED ( 5 << 8) - -#include "lis3mdl_platform.h" -#include "lis3mdl_types.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief Initialize the sensor - * - * Reset the sensor and switch to power down mode. All registers are reset to - * default values. - * - * @param bus I2C or SPI bus at which LIS3MDL sensor is connected - * @param addr I2C addr of the LIS3MDL sensor, 0 for using SPI - * @param cs SPI CS GPIO, ignored for I2C - * @return pointer to sensor data structure, or NULL on error - */ -lis3mdl_sensor_t* lis3mdl_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs); - - -/** - * @brief Set sensor operation mode (OM) and output data rate (ODR) - * - * @param dev pointer to the sensor device data structure - * @param mode sensor operation mode (OM) at output data rate (ODR) - * @return true on success, false on error - */ -bool lis3mdl_set_mode (lis3mdl_sensor_t* dev, lis3mdl_mode_t mode); - - -/** - * @brief Set scale (full scale range) - * - * @param dev pointer to the sensor device data structure - * @param scale full range scale - * @return true on success, false on error - */ -bool lis3mdl_set_scale (lis3mdl_sensor_t* dev, lis3mdl_scale_t scale); - - -/** - * @brief Test whether new data samples are available - * - * @param dev pointer to the sensor device data structure - * @return true on new data, otherwise false - */ -bool lis3mdl_new_data (lis3mdl_sensor_t* dev); - - -/** - * @brief Get one sample of sensor data as floating point values (unit Gauss) - * - * @param dev pointer to the sensor device data structure - * @param data pointer to float data structure filled with g values - * @return true on success, false on error - */ -bool lis3mdl_get_float_data (lis3mdl_sensor_t* dev, - lis3mdl_float_data_t* data); - - -/** - * @brief Get one sample of raw sensor data as 16 bit two's complements - * - * @param dev pointer to the sensor device data structure - * @param raw pointer to raw data structure filled with values - * @return true on success, false on error - */ -bool lis3mdl_get_raw_data (lis3mdl_sensor_t* dev, lis3mdl_raw_data_t* raw); - - -/** - * @brief Set configuration for threshold interrupt signal INT - * - * The function enables the interrupt signal if one of the possible sources - * is enabled for interrupts. - * - * @param dev pointer to the sensor device data structure - * @param config configuration for the specified interrupt signal - * @return true on success, false on error - */ -bool lis3mdl_set_int_config (lis3mdl_sensor_t* dev, - lis3mdl_int_config_t* config); - - -/** - * @brief Get configuration for threshold interrupt signal INT - * - * @param dev pointer to the sensor device data structure - * @param config configuration for the specified interrupt signal - * @return true on success, false on error - */ -bool lis3mdl_get_int_config (lis3mdl_sensor_t* dev, - lis3mdl_int_config_t* config); - - -/** - * @brief Get the source of the threshold interrupt signal INT - * - * Returns a byte with flags that indicate the value(s) that triggered - * the interrupt signal (see INT_SRC register in datasheet for details) - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source - * @return true on success, false on error - */ -bool lis3mdl_get_int_source (lis3mdl_sensor_t* dev, - lis3mdl_int_source_t* source); - -/** - * @brief Enable/Disable temperature sensor - * - * @param dev pointer to the sensor device data structure - * @param enable if true, temperature sensor is enabled - * @return true on success, false on error - */ -bool lis3mdl_enable_temperature (lis3mdl_sensor_t* dev, bool enable); - - -/** - * @brief Get temperature - * - * @param dev pointer to the sensor device data structure - * @return temperature in degree - */ -float lis3mdl_get_temperature (lis3mdl_sensor_t* dev); - -// ---- Low level interface functions ----------------------------- - -/** - * @brief Direct write to register - * - * PLEASE NOTE: This function should only be used to do something special that - * is not covered by the high level interface AND if you exactly know what you - * do and what effects it might have. Please be aware that it might affect the - * high level interface. - * - * @param dev pointer to the sensor device data structure - * @param reg address of the first register to be changed - * @param data pointer to the data to be written to the register - * @param len number of bytes to be written to the register - * @return true on success, false on error - */ -bool lis3mdl_reg_write (lis3mdl_sensor_t* dev, - uint8_t reg, uint8_t *data, uint16_t len); - -/** - * @brief Direct read from register - * - * PLEASE NOTE: This function should only be used to do something special that - * is not covered by the high level interface AND if you exactly know what you - * do and what effects it might have. Please be aware that it might affect the - * high level interface. - * - * @param dev pointer to the sensor device data structure - * @param reg address of the first register to be read - * @param data pointer to the data to be read from the register - * @param len number of bytes to be read from the register - * @return true on success, false on error - */ -bool lis3mdl_reg_read (lis3mdl_sensor_t* dev, - uint8_t reg, uint8_t *data, uint16_t len); - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __LIS3MDL_H__ */ diff --git a/extras/lis3mdl/lis3mdl_platform.c b/extras/lis3mdl/lis3mdl_platform.c deleted file mode 100644 index 734b8ae..0000000 --- a/extras/lis3mdl/lis3mdl_platform.c +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Driver for LIS3MDL 3-axes digital magnetometer to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#include "lis3mdl_platform.h" - -// platform specific SPI functions - -static const spi_settings_t bus_settings = { - .mode = SPI_MODE0, - .freq_divider = SPI_FREQ_DIV_1M, - .msb = true, - .minimal_pins = false, - .endianness = SPI_LITTLE_ENDIAN -}; - -bool spi_device_init (uint8_t bus, uint8_t cs) -{ - gpio_enable(cs, GPIO_OUTPUT); - gpio_write (cs, true); - return true; -} - -size_t spi_transfer_pf(uint8_t bus, uint8_t cs, const uint8_t *mosi, uint8_t *miso, uint16_t len) -{ - spi_settings_t old_settings; - - spi_get_settings(bus, &old_settings); - spi_set_settings(bus, &bus_settings); - gpio_write(cs, false); - - size_t transfered = spi_transfer (bus, (const void*)mosi, (void*)miso, len, SPI_8BIT); - - gpio_write(cs, true); - spi_set_settings(bus, &old_settings); - - return transfered; -} - diff --git a/extras/lis3mdl/lis3mdl_platform.h b/extras/lis3mdl/lis3mdl_platform.h deleted file mode 100644 index 686c9ac..0000000 --- a/extras/lis3mdl/lis3mdl_platform.h +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Driver for LIS3MDL 3-axes digital magnetometer to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#ifndef __LIS3MDL_PLATFORM_H__ -#define __LIS3MDL_PLATFORM_H__ - -#if !defined(ESP_OPEN_RTOS) -#define ESP_OPEN_RTOS 1 -#endif - -#ifdef ESP_OPEN_RTOS // ESP8266 - -// platform specific includes - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" - -#include "espressif/esp_common.h" -#include "espressif/sdk_private.h" - -#include "esp/uart.h" -#include "esp/spi.h" -#include "i2c/i2c.h" - -// platform specific SPI functions - -#define spi_bus_init(bus,sck,miso,mosi) // not needed on ESP8266 - -extern bool spi_device_init (uint8_t bus, uint8_t cs); -extern size_t spi_transfer_pf (uint8_t bus, uint8_t cs, - const uint8_t *mosi, uint8_t *miso, - uint16_t len); - -#endif // ESP_OPEN_RTOS - -#endif // __LIS3MDL_PLATFORM_H__ diff --git a/extras/lis3mdl/lis3mdl_types.h b/extras/lis3mdl/lis3mdl_types.h deleted file mode 100644 index d5cef93..0000000 --- a/extras/lis3mdl/lis3mdl_types.h +++ /dev/null @@ -1,178 +0,0 @@ -/** - * Driver for LIS3MDL 3-axes digital accelerometer connected to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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 Activity 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. - */ - -#ifndef __LIS3MDL_TYPES_H__ -#define __LIS3MDL_TYPES_H__ - -#include "stdint.h" -#include "stdbool.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief Operation mode (OM) and output data rates (ODR) - */ -typedef enum { - - lis3mdl_lpm_0_625 = 0, // low power mode at 0.625 Hz - lis3mdl_lpm_1_25, // low power mode at 1.25 Hz - lis3mdl_lpm_2_5, // low power mode at 2.5 Hz - lis3mdl_lpm_5, // low power mode at 5 Hz - lis3mdl_lpm_10, // low power mode at 10 Hz - lis3mdl_lpm_20, // low power mode at 20 Hz - lis3mdl_lpm_40, // low power mode at 40 Hz - lis3mdl_lpm_80, // low power mode at 80 Hz - lis3mdl_lpm_1000, // low power mode at 1000 Hz - lis3mdl_mpm_560, // medium performance mode at 560 Hz - lis3mdl_hpm_300, // high performance mode at 300 Hz - lis3mdl_uhpm_155, // ultra high performance mode at 155 Hz - lis3mdl_low_power, // low power mode at 0.625 Hz - lis3mdl_power_down // power down mode - -} lis3mdl_mode_t; - - -/** - * @brief Full scale measurement range in Gauss - */ -typedef enum { - - lis3mdl_scale_4_Gs = 0, // default - lis3mdl_scale_8_Gs, - lis3mdl_scale_12_Gs, - lis3mdl_scale_16_Gs - -} lis3mdl_scale_t; - -/** - * @brief Magnetic threshold interrupt configuration for INT signal - */ -typedef struct { - - uint16_t threshold; // threshold used for interrupt generation - - bool x_enabled; // true - x exceeds threshold on positive side - bool y_enabled; // true - y exceeds threshold on positive side - bool z_enabled; // true - z exceeds threshold on positive side - - bool latch; // true - latch the interrupt until the interrupt - // source has been read - enum - { - lis3mdl_low_active = 0, - lis3mdl_high_active = 1 - - } signal_level; // level of interrupt signal - -} lis3mdl_int_config_t; - - -/** - * @brief Magnetic threshold interrupt source of INT signal - */ -typedef struct { - - bool x_pos :1; // true - x exceeds threshold on positive side - bool y_pos :1; // true - y exceeds threshold on positive side - bool z_pos :1; // true - z exceeds threshold on positive side - - bool x_neg :1; // true - x exceeds threshold on negative side - bool y_neg :1; // true - y exceeds threshold on negative side - bool z_neg :1; // true - z exceeds threshold on negative side - - bool mroi :1; // true - internal measurement range overflow - bool active:1; // true - interrupt event occured - -} lis3mdl_int_source_t; - - -/** - * @brief Raw data set as two's complements - */ -typedef struct { - - int16_t mx; // magnetic value on x axis - int16_t my; // magnetic value on y axis - int16_t mz; // magnetic value on z axis - -} lis3mdl_raw_data_t; - - -/** - * @brief Floating point output value set in Gauss - */ -typedef struct { - - float mx; // magnetic value on x axis - float my; // magnetic value on y axis - float mz; // magnetic value on z axis - -} lis3mdl_float_data_t; - - -/** - * @brief LIS3MDL sensor device data structure type - */ -typedef struct { - - int error_code; // error code of last operation - - uint8_t bus; // I2C = x, SPI = 1 - uint8_t addr; // I2C = slave address, SPI = 0 - - uint8_t cs; // ESP8266, ESP32: GPIO used as SPI CS - // __linux__: device index - - lis3mdl_scale_t scale; // full range scale (default 4 Gauss) - -} lis3mdl_sensor_t; - - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __LIS3MDL_TYPES_H__ */ diff --git a/extras/lsm303d/README.md b/extras/lsm303d/README.md deleted file mode 100644 index c5ea142..0000000 --- a/extras/lsm303d/README.md +++ /dev/null @@ -1,1216 +0,0 @@ -# Driver for the LSM303D e-Compass 3D accelerometer and 3D magnetometer module - -The driver is for the usage with the ESP8266 and [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos). If you can't find it in folder [extras/lsm303d](https://github.com/SuperHouse/esp-open-rtos/tree/master/extras) of original repository, it is not yet merged. Please take a look to branch [lsm303d](https://github.com/gschorcht/esp-open-rtos/tree/lsm303d) of my fork in that case. - -It is also working with ESP32 and [ESP-IDF](https://github.com/espressif/esp-idf.git) using a wrapper component for ESP8266 functions, see folder ```components/esp8266_wrapper```, as well as Linux based systems using a wrapper library. - -## About the sensor - -LSM303D is a high performance **3D digital linear acceleration and magnetic sensor** connected to **I2C** or **SPI** with a full scale of up to **±16 g** and **±12 Gauss**. - -**Main features** of the sensor are: - -- 3 magnetic field channels -- 3 acceleration channels -- ±2/±4/±8/±12 Gauss dynamically selectable magnetic full-scale -- ±2/±4/±6/±8/±16 g dynamically selectable linear acceleration full-scale -- different measuring rates for accelerator and magnetometer -- 16-bit data output -- embedded temperature sensor -- embedded 32 levels of 16 bit data output FIFO -- integrated high-pass filters -- programmable interrupt generators -- 6D/4D orientation detection -- free-fall detection -- motion detection -- single click and double click detection -- magnetic field detection - -## Sensor operation - -### Sensor modes - -LSM303D provides different operating modes. - -- **Power-down mode** is configured automatically after power up boot sequence. In this mode, almost all internal blocks of the device are switched off. Register content is preserved, but there are no measurements performed. - -- **Normal mode**: is the operation mode in which measurements are performed at a defined output data rate (**ODR**). - -The operation mode can be defined separately for the accelerator and the magnetometer. - -### Output Data Rates - -In normal mode, the accelerator and/or the magnetometer perform measurements with a defined output data rates (ODR). This output data rate can be defined separately for the accelerometer and the magnetometer. - -**Acceleration sensor** supports the following output data rates - -Mode | Output data rate (ODR) | Driver symbol -:------------- |---------:|:--------------- -Power-down | - | ```lsm303d_a_power_down``` -Normal mode | 3.125 Hz | ```lsm303d_a_odr_3_125``` -Normal mode | 6.25 Hz | ```lsm303d_a_odr_6_25``` -Normal mode | 12.5 Hz | ```lsm303d_a_odr_12_5``` -Normal mode | 25 Hz | ```lsm303d_a_odr_25``` -Normal mode | 50 Hz | ```lsm303d_a_odr_50``` -Normal mode | 100 Hz | ```lsm303d_a_odr_100``` -Normal mode | 200 Hz | ```lsm303d_a_odr_200``` -Normal mode | 400 Hz | ```lsm303d_a_odr_400``` -Normal mode | 800 Hz | ```lsm303d_a_odr_800``` -Normal mode | 1600 Hz | ```lsm303d_a_odr_1600``` - -**Magnetic sensor** supports the following output data rates - -Mode | Output data rate (ODR) | Driver symbol -:------------- |---------:|:--------------- -Power-down | - | ```lsm303d_m_do_not_use``` -Normal mode | 3.125 Hz | ```lsm303d_m_odr_3_125``` -Normal mode | 6.25 Hz | ```lsm303d_m_odr_6_25``` -Normal mode | 12.5 Hz | ```lsm303d_m_odr_12_5``` -Normal mode | 25 Hz | ```lsm303d_m_odr_25``` -Normal mode | 50 Hz | ```lsm303d_m_odr_50``` -Normal mode | 100 Hz | ```lsm303d_m_odr_100``` - -**Please note**: An output data rate of 100 Hz is only available for the magnetometer if the output data rate of the accelerometer is greater than 50 Hz or the accelerometer is in power-down mode. - -### Setting operation mode and output data rate - -The **easiest way to use the sensor** is to initialize it with the ```lsm303d_init_sensor``` function and then switch it to any measurement mode to start measurement with a given output data rate (ODR). The acceleration sensor mode is set with the ```lsm303d_set_a_mode``` function and the magnetometer mode is set with lsm303d_set_m_mode function. -``` -... -static lsm303d_sensor_t* sensor = 0; -... -if ((sensor = lsm303d_init_sensor (I2C_BUS, LSM303D_I2C_ADDRESS_2, 0))) -{ - ... - lsm303d_set_a_mode (sensor, lsm303d_a_odr_12_5, lsm303d_a_aaf_bw_773, true, true, true); - lsm303d_set_m_mode (sensor, lsm303d_m_odr_12_5, lsm303d_m_low_res, lsm303d_m_continuous); - ... -} -... - -``` -In this example, the LSM303D sensor is connected to I2C. After its initialization, both the accelerometer and the magnetometer are switched to the normal measuring mode with an output data rate of 12.5 Hz each. - -```lsm303d_set_a_mode``` function requires the bandwidth of the anti-alias filter (AAF) and the activated axes x, y and z as additional parameters. Possible bandwidths of the accelerator anti-alias filter are: - -AAF Bandwidth | Driver symbol --------------:|:------------- -773 Hz | ```lsm303d_a_aaf_bw_773``` -362 Hz | ```lsm303d_a_aaf_bw_362``` -194 Hz | ```lsm303d_a_aaf_bw_194``` -50 Hz | ```lsm303d_a_aaf_bw_50``` - -```lsm303d_set_m_mode``` function requires the resolution and the measurement mode as additional parameters. It is possible to define - -- low resolution (```lsm303d_m_low_res```) and -- high resolution (```lsm303d_m_low_res```). - -Unfortunately, it is not documented what it exactly means. As measurement mode, the user can select - -- continuous conversion mode (```lsm303d_m_continuous```), -- single conversion mode (```lsm303d_m_single```), or -- power-down mode (```lsm303d_m_power_down```). - -During single-conversion mode, the device performs a single measurement and switches then back to the power-down mode. During continuous-conversion mode, the device continuously performs measurements with defined output data rate. In power-down mode the magnetometer is switched off. - -**Please note:** -- ```lsm303d_init_sensor``` function resets the sensor completely. That is, all sensor registers are reset to their default values and the sensor is switched to the power-down mode. The function returns a pointer to an sensor device data structure on success which is allocated from memory. -- All sensor configurations should be done before calling ```lsm303d_a_set_mode``` or ```lsm303d_a_set_mode``` function. In particular, the interrupt configuration should be performed before to avoid loosing the first interrupt and locking the system. - -## Measurement results - -### Output data format - -The sensor determines periodically the accelerations and/or magnetic values for all axes that are enabled for measurement and produces output data with the selected output data rate (ODR). - -Raw **output data** (**raw data**) are given as 16-bit signed integer values in 2’s complement representation and are always left-aligned. The range and the resolution of raw data depend on the sensitivity of the sensor which is selected by the **full scale** parameter. LSM303D allows to select the following full scales: - -Accelerometer full scale | Resolution | Driver symbol ----------------------:|-----------:|:----------- - ±2 g | 0.061 mg | ```lsm303d_a_scale_2_g``` - ±4 g | 0.122 mg | ```lsm303d_a_scale_4_g``` - ±6 g | 0.183 mg | ```lsm303d_a_scale_6_g``` - ±8 g | 0.244 mg | ```lsm303d_a_scale_8_g``` -±16 g | 0.732 mg | ```lsm303d_a_scale_16_g``` - -Magnetormeter full scale | Resolution | Driver symbol ----------------------:|:-----------|:------ - ±2 Gauss | 0.080 mGauss | ```lsm303d_m_scale_2_Gs``` - ±4 Gauss | 0.160 mGauss | ```lsm303d_m_scale_4_Gs``` - ±8 Gauss | 0.320 mGauss | ```lsm303d_m_scale_8_Gs``` -±12 Gauss | 0.479 mGauss | ```lsm303d_m_scale_12_Gs``` - -By default, a full scale of ±2 g is used for the acceleration and ±2 Gauss for the magnetic measurement. ```lsm303d_set_a_scale``` and ```lsm303d_set_m_scale``` functions can be used to change these values. - -``` -lsm303d_set_a_scale(sensor, lsm303d_a_scale_4_g); -lsm303d_set_m_scale(sensor, lsm303d_m_scale_8_Gs); -``` - -### Fetching output data - -To get the information whether new data are available, the user task can either use - -- the ```lsm303d_new_a_data``` and ```lsm303d_new_m_data``` functions to check periodically whether new output data are available, or -- the data ready interrupt (DRDY) which are thrown as soon as new output data are available (see below). - -Once new new data are available, they can be retrieved either - -- as raw data with the ```lsm303d_get_raw_a_data``` and ```lsm303d_get_raw_m_data``` functions, or -- as floating-point values with the ```lsm303d_get_float_a_data``` and ```lsm303d_get_float_m_data``` functions in g and Gauss, respectively. - -It is recommended to use ```lsm303d_get_a_float_data``` and ```lsm303d_get_float_m_data``` functions since they already converts measurement results to real values according to the selected full scales. - -``` -void user_task_periodic(void *pvParameters) -{ - lsm303d_float_a_data_t a_data; - - while (1) - { - // execute task every 10 ms - vTaskDelay (10/portTICK_PERIOD_MS); - ... - // test for new accelerator data and fetch them - if (lsm303d_new_a_data (sensor) && - lsm303d_get_float_a_data (sensor, &a_data)) - { - // do something with data - ... - } - - lsm303d_float_m_data_t m_data; - - // test for new magnetometer data and fetch them - if (lsm303d_new_m_data (sensor) && - lsm303d_get_float_m_data (sensor, &m_data)) - - { - // do something with data - ... - } - ... - } -} -``` - -**Please note:** -```lsm303d_get_float_a_data```, ```lsm303d_get_raw_a_data```, ```lsm303d_get_float_m_data```, and ```lsm303d_get_raw_m_data``` functions always return the last available results. If these functions are called more often than measurements are taken, some measurement results are retrieved multiple times. If these functions are called too rarely, some measurement results will be lost. - -### High pass filtering - -LSM303D provides embedded high-pass filtering capabilities for acceleration data to improve measurement results. Please refer the [datasheet](http://www.st.com/resource/en/datasheet/lsm303d.pdf). - -The high pass filter (HPF) can independently apply to - -- the raw accelerator output data, -- the accelerator data used for click detection, and -- the accelerator data used for inertial interrupt generation like wake-up, free fall or 6D/4D orientation detection. - -The mode of the high pass filter can be configured using ```lsm303d_config_a_hpf``` function. Following HPF modes are available: - -HPF mode | Driver symbol -:--------------|:--------- -Normal mode | ```lsm303d_hpf_normal``` -Reference mode | ```lsm303d_hpf_reference``` -Auto-reset on interrupt | ```lsm303d_hpf_autoreset``` - -The cutoff frequencies of the HPF are fixed and not documented. - -``` -... -// configure HPF and implicitly reset the reference by a dummy read -lsm303d_config_a_hpf (sensor, lsm303d_hpf_normal, true, true, true, true); -... -``` - -If HPF normal mode (```lsm303d_hpf_normal```) is used, ```lsm303d_config_a_hpf``` function implicitly reads the reference registers to reset the reference. - -### FIFO - -In order to limit the rate at which the host processor has to fetch the data, the LSM303D embeds a first-in first-out buffer (FIFO) for accelerator output data. This is in particular helpful at high output data rates. The FIFO buffer can work in different modes and is able to store up to 32 accelerometer samples. Please refer the [datasheet](http://www.st.com/resource/en/datasheet/lsm303d.pdf). - -FIFO mode | Driver symbol ---------------|------------------------- -Bypass mode (FIFO is not used) | ```lsm303d_bypass``` -FIFO mode | ```lsm303d_fifo``` -Stream mode | ```lsm303d_stream``` -Stream-to-FIFO mode | ```lsm303d_stream_to_fifo``` -Bypass-to-Stream mode | ```lsm303d_bypass_to_stream``` - -The FIFO mode can be set using function ```lsm303d_set_fifo_mode```. This function takes as parameters - -- the FIFO mode, and -- a threshold value. - -The threshold value is used by the sensor to set a flag and to generate optionally an interrupt when the FIFO content exceeds this value. It can be used to gather a minimum number of axes acceleration samples by the sensor before the data are fetched from the sensor as a single read operation. - -``` -... -// clear FIFO -lsm303d_set_fifo_mode (sensor, lsm303d_bypass, 0); - -// activate FIFO mode -lsm303d_set_fifo_mode (sensor, lsm303d_stream, 10); -... -``` - -In this example an the threshold flag would be set, when 11 acceleration samples are stored in the FIFO. - -**Please note**: -- To clear the FIFO at any time, set the FIFO mode to ```lsm303d_bypass``` and back to the desired FIFO mode. -- When FIFO is used, ```lsm303d_new_a_data``` function can also be used to check whether there are new data stored in the FIFO. It returns true if at least one acceleration data sample is stored in the FIFO. - -To read data from the FIFO, simply use either ```lsm303d_get_raw_a_data_fifo``` or ```lsm303d_get_float_a_data_fifo``` function to all get accelerator output data stored in the FIFO. Both functions clear the FIFO implicitly and return the number of samples read from the FIFO. - -``` -void user_task_periodic (void *pvParameters) -{ - lsm303d_float_a_data_fifo_t fifo; - - while (1) - { - // execute task every 500 ms - vTaskDelay (500/portTICK_PERIOD_MS); - ... - - // test for new accelerator data data - if (lsm303d_new_a_data (sensor)) - { - // fetch the accelerator data stored in FIFO - uint8_t num = lsm303d_get_float_a_data_fifo (sensor, fifo); - - for (int i = 0; i < num; i++) - { - // do something with data[i] ... - } - } - ... -} -``` - -## Interrupts - -The LSM303D supports two dedicated interrupt signals **```INT1```** and **```INT2```** and four different types of interrupts: - -- **data** interrupts (data ready, FIFO status), -- **inertial event** interrupts (axis movement, free fall, 6D/4D orientation detection), -- **click detection** interrupts (single click, double click) -- **magnetic threshold** detection interrupts. - -### Data interrupts (data ready and FIFO status) - -Following sources can generate data interrupts: - -Interrupt source | Interrupt Signals | Driver symbol -:-----------------|:-------------|:---------------- -Accelerator data become ready to read | ```INT1```, ```INT2``` | ```lsm303d_int_a_data_ready``` -Magnetometer data become ready to read | ```INT1```, ```INT2``` | ```lsm303d_int_m_data_ready``` -FIFO becomes empty | ```INT1``` | ```lsm303d_int_fifo_thresh``` -FIFO content exceeds the threshold value | ```INT2``` | ```lsm303d_int_fifo_thresh``` -FIFO is completely filled | ```INT2``` | ```lsm303d_int_fifo_overrun``` - -Each of these interrupt sources can be enabled or disabled separately using the ```lsm303d_enable_int``` function. By default, all interrupt sources are disabled. - -``` -lsm303d_enable_int (sensor, lsm303d_int_a_data_ready, lsm303d_int2_signal, true); -``` - -Whenever a data interrupt is generated at the specified interrupt signal, the ```lsm303d_get_int_data_source``` function can be used to determine the source of the data interrupt. This function returns a data structure of type ```lsm303d_int_data_source_t``` that contain a boolean member for each source that can be tested for true. - -``` -void int2_handler () -{ - lsm303d_int_data_source_t data_src; - - // get the source of the interrupt on *INT2* signal - lsm303d_get_int_data_source (sensor, &data_src); - - // in case of data ready interrupt, get the results and do something with them - if (data_src.a_data_ready) - ... // read accelerator data - - // in case of FIFO interrupts read the whole FIFO - else if (data_src.fifo_thresh || data_src.fifo_overrun) - ... // read FIFO data - ... -} -``` - -**Please note:** While FIFO interrupts are reset as soon as the interrupt source is read, the data-ready interrupts are not reset until the data has been read. - -### Inertial event interrupts - -Inertial interrupt generators allow to generate interrupts when certain inertial events occur (event interrupts), that is, the acceleration of defined axes is higher or lower than a defined threshold. If activated, the acceleration of each axis is compared with a defined threshold to check whether it is below or above the threshold. The results of all activated comparisons are then combined OR or AND to generate the interrupt signal. - -The configuration of the threshold, the activated comparisons and the selected AND/OR combination allows to recognize special situations: - -- **Axis movement** refers the special condition that the acceleration measured along any axis is above the defined threshold (```lsm303d_or```). -- **Free fall detection** refers the special condition that the acceleration measured along all the axes goes to zero (```lsm303d_and```). -- **6D/4D orientation detection** refers to the special condition that the measured acceleration along certain axes is above and along the other axes is below the threshold which indicates a particular orientation (```lsm303d_6d_movement```, ```lsm303d_6d_position```, ```lsm303d_4d_movement```, ```lsm303d_4d_position```). - -Inertial event interrupts can be configured with the ```lsm303d_set_int_event_config``` function. This function requires as parameters the configuration of type ```lsm303d_int_event_config_t``` and the interrupt generator to be used for inertial event interrupts. - -Inertial event interrupts have to be enabled or disabled using ```lsm303d_enable_int``` function. The interrupt signal on which the interrupts are generated is given as parameter. - -For example, axis movement detection interrupt generated by inertial interrupt generator 2 on signal ```INT1``` could be configured as following: - -``` -lsm303d_int_event_config_t event_config; - -event_config.mode = lsm303d_or; -event_config.threshold = 50; -event_config.x_low_enabled = false; -event_config.x_high_enabled = true; -event_config.y_low_enabled = false; -event_config.y_high_enabled = true; -event_config.z_low_enabled = false; -event_config.z_high_enabled = true; - -event_config.duration = 0; -event_config.latch = true; - -lsm303d_set_int_event_config (sensor, &event_config, lsm303d_int_event2_gen); -lsm303d_enable_int (sensor, lsm303d_int_event1, lsm303d_int1_signal, true); -``` - -The parameter of type ```lsm303d_int_event_config_t``` also configures - -- whether the interrupt should be latched until the interrupt source is read, and -- which time given in 1/ODR an interrupt condition has to be given before the interrupt is generated. - -As with data ready and FIFO status interrupts, ```lsm303d_get_int_event_source``` function can be used to determine the source of an inertial event interrupt whenever it is generated. This function returns a data structure of type ```lsm303d_int_event_source_t``` which contains a boolean member for each source that can be tested for true. - -``` -void int1_handler () -{ - lsm303d_int_event_source_t event_src; - - // get the source of the interrupt from interrupt generator 2 on *INT1* signal - lsm303d_get_int_event_source (sensor, &event_src, lsm303d_int_event2_gen); - - // in case of inertial event interrupt from interrupt generator 2 - if (event_src.active) - ... // do something - ... -} -``` - -**Please note:** If the interrupt is configured to be latched, the interrupt signal is active until the interrupt source is read. Otherwise the interrupt signal is only active as long as the interrupt condition is satisfied. - -**Please note** Activating all threshold comparisons and the OR combination (```lsm303d_or```) is the most flexible way to deal with inertial event interrupts. Functions such as free fall detection and so on can then be realized by suitably combining the various interrupt sources by the user task. Following example realizes the free fall detection in user task. - -``` -lsm303d_int_event_config_t event_config; - -event_config.mode = lsm303d_or; -event_config.threshold = 10; -event_config.x_low_enabled = true; -event_config.x_high_enabled = true; -event_config.y_low_enabled = true; -event_config.y_high_enabled = true; -event_config.z_low_enabled = true; -event_config.z_high_enabled = true; - -event_config.duration = 0; -event_config.latch = true; - -lsm303d_set_int_event_config (sensor, &event_config, lsm303d_int_event2_gen); -lsm303d_enable_int (sensor, lsm303d_int_event1, lsm303d_int1_signal, true); -``` - -``` -void int1_handler () -{ - lsm303d_int_event_source_t event_src; - - // get the source of the interrupt from interrupt generator 2 on *INT1* signal - lsm303d_get_int_event_source (sensor, &event_src, lsm303d_int_event2_gen); - - // test for free fall condition (all accelerations are below the threshold) - if (event_src.x_low && event_src.y_low && event_src.z_low) - ... // do something - ... -} - -``` - -### Click detection interrupts - -A sequence of acceleration values over time measured along certain axes can be used to detect single and double clicks. Please refer the [datasheet](http://www.st.com/resource/en/datasheet/lsm303d.pdf). - -Click detection interrupts are configured using the ``` lsm303d_set_int_click_config``` function. This function requires the configuration of type ```lsm303d_int_click_config_t``` as parameter. The interrupt has to be activated or deactivated using the ```lsm303d_enable_int``` function with the interrupt signal on which the interrupts are generated as parameter. - -In following example, the single click detection for z-axis is enabled with a time limit of 1/ODR, a time latency of 1/ODR and a time window of 3/ODR. - -``` -lsm303d_int_click_config_t click_config; - -click_config.threshold = 10; -click_config.x_single = false; -click_config.x_double = false; -click_config.y_single = false; -click_config.y_double = false; -click_config.z_single = true; -click_config.z_double = false; -click_config.latch = true; -click_config.time_limit = 1; -click_config.time_latency = 1; -click_config.time_window = 3; - -lsm303d_set_int_click_config (sensor, &click_config); -lsm303d_enable_int (sensor, lsm303d_int_click, lsm303d_int1_signal, true); -``` - -**Please note:** Because there is no application note for the LSM303D sensor, please refer to the [application note](http://www.st.com/resource/en/application_note/cd00290365.pdf) for the LIS3DH sensor for more information about the configuration parameters that are used in the same way. - -As with other interrupts, the function ```lsm303d_get_int_click_source``` can be used to determine the source of the interrupt signal whenever it is generated. This function returns a data structure of type ```lsm303d_int_click_source_t``` that contains a boolean member for each source that can be tested for true. - -``` -void int1_handler () -{ - lsm303d_int_click_source_t click_src; - - // get the source of the interrupt on *INT1* signal - lsm303d_get_int_click_source (sensor, &click_src); - - // detect single click along z-axis - if (click_src.z_click && click_src.s_click) - ... // do something - ... -} - -``` -**Please note:** If the interrupt is configured to be latched, the interrupt signal is active until the interrupt source is read. Otherwise the interrupt signal is only active as long as the interrupt condition is satisfied. - -### Magnetic threshold interrupts - -Magnetic threshold detection of LSM303D allows to generate interrupts whenever measured magnetic data exceed a defined threshold value at positive or negative side. It can be enabled for each axis separately. The defined threshold is valid for all enabled axes. - -Magnetic threshold interrupts can be configured with ```lsm303d_set_int_m_thresh_config``` function . This function requires configuration of type ```lsm303d_int_m_thresh_config_t``` as parameter. The interrupt has to be activated or deactivated using the ```lsm303d_enable_int``` function with the interrupt signal on which the interrupts are generated as parameter. - - -``` -lsm303d_int_m_thresh_config_t m_thresh_config; - -m_thresh_config.threshold = 2000; -m_thresh_config.x_enabled = true; -m_thresh_config.y_enabled = true; -m_thresh_config.z_enabled = true; -m_thresh_config.latch = true; -m_thresh_config.signal_level = lsm303d_high_active; - -lsm303d_set_int_m_thresh_config (sensor, &m_thresh_config); -lsm303d_enable_int (sensor, lsm303d_int_m_thresh, lsm303d_int1_signal, true); - -``` - -In this example, magnetic threshold detection is enabled for all axes and a threshold of 2000 is defined. - -The parameter of type ```lsm303d_int_m_thresh_config_t``` also configures - -- whether the interrupt signal should latched until the interrupt source is read, and -- whether the interrupt signal is high (default) or low active. - -```lsm303d_get_int_m_thresh_source``` function can be used to determine the source of an magnetic threshold interrupt whenever it is generated. This function returns a data structure of type ```lsm303d_int_m_thresh_config_t``` which contains a boolean member for each source that can be tested for true. - -``` -void int1_handler () -{ - lsm303d_int_m_thresh_source_t thresh_src; - - // get the source of the interrupt on signal *INT1* - lsm303d_get_int_m_thresh_source(sensor, &thresh_src); - - // test the source of the interrupt - if (thresh_src.active) - { - if (thresh_srcx_pos || thresh_srcx_neg) ... ; // do something - if (thresh_srcy_pos || thresh_srcy_neg) ... ; // do something - if (thresh_srcz_pos || thresh_srcz_neg) ... ; // do something - } - ... -} -``` - -**Please note:** If the interrupt is configured to be latched, the interrupt signal is active until the interrupt source is read. Otherwise the interrupt signal is only active as long as the interrupt condition is satisfied. - -### Interrupt signal properties - -By default, interrupt signals are high active. For magnetic threshold interrupts this can be changed using the configuration. The type of the interrupt outputs can be changed using the ```lsm303d_config_int_signals``` function. - -Type | Driver symbol -:-------------|:------- -Interrupt output is pushed/pulled | ```lsm303d_push_pull``` -Interrupt output is open-drain | ```lsm303d_open_drain``` - - -``` -lsm303d_config_int_signals (sensor, lsm303d_push_pull); -``` - -## Temperature sensor - -The LIS3MDL sensor contains an internal temperature sensor. It can be activated and deactivated with the ```lsm303d_enable_temperature``` function. Using ```lsm303d_get_temperature``` function, the temperature can be determined as a floating point value in degrees. The temperature is measured by the sensor at the same rate as the magnetic data. - -## Low level functions - -The LSM303D is a very complex and flexible sensor with a lot of features. It can be used for a big number of different use cases. Since it is quite impossible to implement a high level interface which is generic enough to cover all the functionality of the sensor for all different use cases, there are two low level interface functions that allow direct read and write access to the registers of the sensor. - -``` -bool lsm303d_reg_read (lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -bool lsm303d_reg_write (lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -``` - -**Please note** -These functions should only be used to do something special that is not covered by driver's high level interface AND if you exactly know what you do and what it might affect. Please be aware that it might always affect the high level interface. - - -## Usage - -First, the hardware configuration has to be established. - -### Hardware configurations - -Following figure shows a possible hardware configuration for ESP8266 and ESP32 if I2C interface is used to connect the sensor. - -``` - +-----------------+ +----------+ - | ESP8266 / ESP32 | | LSM303D | - | | | | - | GPIO 14 (SCL) >-----> SCL | - | GPIO 13 (SDA) <-----> SDA | - | GPIO 5 <------ INT1 | - | GPIO 4 <------ INT2 | - +-----------------+ +----------+ -``` - -If SPI interface is used, configuration for ESP8266 and ESP32 could look like following. - -``` - +-----------------+ +----------+ +-----------------+ +----------+ - | ESP8266 | | LSM303D | | ESP32 | | LSM303D | - | | | | | | | | - | GPIO 14 (SCK) ------> SCK | | GPIO 16 (SCK) ------> SCK | - | GPIO 13 (MOSI)------> SDI | | GPIO 17 (MOSI)------> SDI | - | GPIO 12 (MISO)<------ SDO | | GPIO 18 (MISO)<------ SDO | - | GPIO 2 (CS) ------> CS | | GPIO 19 (CS) ------> CS | - | GPIO 5 <------ INT1 | | GPIO 5 <------ INT1 | - | GPIO 4 <------ INT2 | | GPIO 4 <------ INT2 | - +-----------------+ +----------+ +-----------------+ +----------+ -``` - -### Communication interface settings - -Dependent on the hardware configuration, the communication interface and interrupt settings have to be defined. In case ESP32 is used, the configuration could look like - -``` -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define INT1_PIN 5 -#define INT2_PIN 4 -``` - -### Main program - -#### Initialization - -If I2C interfaces are used, they have to be initialized first. - -``` -i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); -``` - -SPI interface has only to be initialized explicitly on ESP32 platform to declare the GPIOs that are used for SPI interface. - -``` -spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); -``` - -Once the interfaces are initialized, function ```lsm303d_init_sensor``` has to be called for each LSM303D sensor in order to initialize the sensor and to check its availability as well as its error state. This function returns a pointer to a sensor device data structure or NULL in case of error. - -The parameter *bus* specifies the ID of the I2C or SPI bus to which the sensor is connected. - -``` -static lsm303d_sensor_t* sensor; -``` - -For sensors connected to an I2C interface, a valid I2C slave address has to be defined as parameter *addr*. In that case parameter *cs* is ignored. - -``` -sensor = lsm303d_init_sensor (I2C_BUS, LSM303D_I2C_ADDRESS_2, 0); - -``` - -If parameter *addr* is 0, the sensor is connected to a SPI bus. In that case, parameter *cs* defines the GPIO used as CS signal. - -``` -sensor = lsm303d_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - -``` - -The remaining of the program is independent on the communication interface. - -#### Configuring the sensor - -Optionally, you could wish to set some measurement parameters. For details see the sections above, the header file of the driver ```lsm303d.h```, and of course the data sheet of the sensor. - -#### Starting measurements - -As last step, the sensor mode has be set to start periodic measurement. The sensor mode can be changed anytime later. - -``` -... -// start periodic measurement with output data rate of 12.5 Hz -lsm303d_set_a_mode (sensor, lsm303d_a_odr_12_5, lsm303d_a_aaf_bw_773, true, true, true); -lsm303d_set_m_mode (sensor, lsm303d_m_odr_12_5, lsm303d_m_low_res, lsm303d_m_continuous); -... -``` - -#### Periodic user task - -Finally, a user task that uses the sensor has to be created. - -**Please note:** To avoid concurrency situations when driver functions are used to access the sensor, for example to read data, the user task must not be created until the sensor configuration is completed. - -The user task can use different approaches to fetch new data. Either new data are fetched periodically or interrupt signals are used when new data are available or a configured event happens. - -If new data are fetched **periodically** the implementation of the user task is quite simple and could look like following. - -``` -void user_task_periodic(void *pvParameters) -{ - lsm303d_float_a_data_t a_data; - lsm303d_float_m_data_t m_data; - - while (1) - { - // execute task every 10 ms - vTaskDelay (10/portTICK_PERIOD_MS); - ... - // test for new accelerator data and fetch them - if (lsm303d_new_a_data (sensor) && - lsm303d_get_float_a_data (sensor, &a_data)) - { - // do something with accelerator data - ... - } - - // test for new magnetometer data and fetch them - if (lsm303d_new_m_data (sensor) && - lsm303d_get_float_m_data (sensor, &m_data)) - { - // do something with magnetometer data - ... - } - - } -} -... -// create a user task that fetches data from sensor periodically -xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); -``` - -The user task simply tests periodically with a rate higher than the output data rate (ODR) of the sensor whether new data are available. If new data are available, it fetches the data. - -#### Interrupt user task - -A different approach is to use one of the **interrupt** signals INT1 or INT2. In this case, the user has to implement an interrupt handler that either fetches the data directly or triggers a task, that is waiting to fetch the data. - -``` -static QueueHandle_t gpio_evt_queue = NULL; - -// Interrupt handler which resumes sends an event to the waiting user_task_interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -// User task that fetches the sensor values - -void user_task_interrupt (void *pvParameters) -{ - uint32_t gpio_num; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio_num, portMAX_DELAY)) - { - // test for new accelerator data and fetch them - if (lsm303d_new_a_data (sensor) && - lsm303d_get_float_a_data (sensor, &a_data)) - { - // do something with accelerator data - ... - } - - // test for new magnetometer data and fetch them - if (lsm303d_new_m_data (sensor) && - lsm303d_get_float_m_data (sensor, &m_data)) - { - // do something with magnetometer data - ... - } - } - } -} -... - -// create a task that is triggered only in case of interrupts to fetch the data - -xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); -... -``` - -In this example, there is - -- a task that is fetching data when it receives an event, and -- an interrupt handler that generates the event on interrupt. - -Finally, interrupt handlers have to be activated for the GPIOs which are connected to the interrupt signals. - -``` -// configure interrupt pins for *INT1* and *INT2* signals and set the interrupt handler -gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); -gpio_set_interrupt(INT2_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); -``` - -Furthermore, the interrupts have to be enabled and configured in the LSM303D sensor, see section **Interrupts** above. - -## Full Example - -``` -/* -- use following constants to define the example mode ----------- */ - -// #define SPI_USED // SPI interface is used, otherwise I2C -// #define FIFO_MODE // multiple sample read mode -// #define TEMP_USED // temperature sensor used -// #define INT_DATA // data interrupts used (data ready and FIFO status) -// #define INT_EVENT // inertial event interrupts used (axis movement or 6D/4D orientation) -// #define INT_CLICK // click detection interrupts used -// #define INT_THRESH // magnetic value exceeds threshold interrupt used - -#if defined(INT_DATA) || defined(INT_EVENT) || defined(INT_CLICK) || defined(INT_THRESH) -#define INT_USED -#endif - -/* -- includes ----------------------------------------------------- */ - -#include "lsm303d.h" - -/** -- platform dependent definitions ------------------------------ */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -// SPI interface definitions for ESP32 -#define SPI_BUS HSPI_HOST -#define SPI_SCK_GPIO 16 -#define SPI_MOSI_GPIO 17 -#define SPI_MISO_GPIO 18 -#define SPI_CS_GPIO 19 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -// SPI interface definitions for ESP8266 -#define SPI_BUS 1 -#define SPI_SCK_GPIO 14 -#define SPI_MOSI_GPIO 13 -#define SPI_MISO_GPIO 12 -#define SPI_CS_GPIO 2 // GPIO 15, the default CS of SPI bus 1, can't be used - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -// interrupt GPIOs defintions for ESP8266 and ESP32 -#define INT1_PIN 5 -#define INT2_PIN 4 - -/* -- user tasks --------------------------------------------------- */ - -static lsm303d_sensor_t* sensor; - -/** - * Common function used to get sensor data. - */ -void read_data () -{ - #ifdef FIFO_MODE - - lsm303d_float_a_data_fifo_t fifo; - - // test for new accelerator data data - if (lsm303d_new_a_data (sensor)) - { - // fetch the accelerator data stored in FIFO - uint8_t num = lsm303d_get_float_a_data_fifo (sensor, fifo); - - printf("%.3f LSM303D num=%d\n", (double)sdk_system_get_time()*1e-3, num); - - for (int i=0; i < num; i++) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LSM303D (xyz)[g] ax=%+7.3f ay=%+7.3f az=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - fifo[i].ax, fifo[i].ay, fifo[i].az); - } - - #else - - lsm303d_float_a_data_t a_data; - - // test for new accelerator data and fetch them - if (lsm303d_new_a_data (sensor) && - lsm303d_get_float_a_data (sensor, &a_data)) - // max. full scale is +-16 g and best resolution is 1 mg, i.e. 5 digits - printf("%.3f LSM303D (xyz)[g] ax=%+7.3f ay=%+7.3f az=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - a_data.ax, a_data.ay, a_data.az); - - #endif // FIFO_MODE - - lsm303d_float_m_data_t m_data; - - // test for new magnetometer data and fetch them - if (lsm303d_new_m_data (sensor) && - lsm303d_get_float_m_data (sensor, &m_data)) - // max. full scale is +-12 Gs and best resolution is 1 mGs, i.e. 5 digits - printf("%.3f LSM303D (xyz)[Gs] mx=%+7.3f my=%+7.3f mz=%+7.3f\n", - (double)sdk_system_get_time()*1e-3, - m_data.mx, m_data.my, m_data.mz); - - #ifdef TEMP_USED - float temp = lsm303d_get_temperature (sensor); - - printf("%.3f LSM303D (tmp)[°C] %+7.3f\n", (double)sdk_system_get_time()*1e-3, temp); - #endif -} - - -#ifdef INT_USED -/** - * In this case, any of the possible interrupts on interrupt signal *INT1* is - * used to fetch the data. - * - * When interrupts are used, the user has to define interrupt handlers that - * either fetches the data directly or triggers a task which is waiting to - * fetch the data. In this example, the interrupt handler sends an event to - * a waiting task to trigger the data gathering. - */ - -static QueueHandle_t gpio_evt_queue = NULL; - -// User task that fetches the sensor values. - -void user_task_interrupt (void *pvParameters) -{ - uint8_t gpio; - - while (1) - { - if (xQueueReceive(gpio_evt_queue, &gpio, portMAX_DELAY)) - { - lsm303d_int_data_source_t data_src = {}; - lsm303d_int_event_source_t event_src = {}; - lsm303d_int_click_source_t click_src = {}; - lsm303d_int_m_thresh_source_t thresh_src = {}; - - // get the source of the interrupt that reset *INTx* signals - #ifdef INT_DATA - lsm303d_get_int_data_source (sensor, &data_src); - #endif - #ifdef INT_THRESH - lsm303d_get_int_m_thresh_source(sensor, &thresh_src); - #endif - #ifdef INT_EVENT - lsm303d_get_int_event_source (sensor, &event_src, lsm303d_int_event1_gen); - #endif - #ifdef INT_CLICK - lsm303d_get_int_click_source (sensor, &click_src); - #endif - - // in case of DRDY interrupt - if (data_src.a_data_ready || data_src.m_data_ready) - read_data (); - - // in case of FIFO interrupts read the whole FIFO - else if (data_src.fifo_thresh || data_src.fifo_overrun) - read_data (); - - // in case of magnetic threshold interrupt - else if (thresh_src.active) - { - printf("%.3f LSM303D ", (double)sdk_system_get_time()*1e-3); - if (thresh_src.x_pos) printf("x exceeds threshold on positive side\n"); - if (thresh_src.y_pos) printf("y exceeds threshold on positive side\n"); - if (thresh_src.z_pos) printf("z exceeds threshold on positive side\n"); - if (thresh_src.x_neg) printf("x exceeds threshold on negative side\n"); - if (thresh_src.y_neg) printf("y exceeds threshold on negative side\n"); - if (thresh_src.z_neg) printf("z exceeds threshold on negative side\n"); - } - - // in case of event interrupt - else if (event_src.active) - { - printf("%.3f LSM303D ", (double)sdk_system_get_time()*1e-3); - if (event_src.x_low) printf("x is lower than threshold\n"); - if (event_src.y_low) printf("y is lower than threshold\n"); - if (event_src.z_low) printf("z is lower than threshold\n"); - if (event_src.x_high) printf("x is higher than threshold\n"); - if (event_src.y_high) printf("y is higher than threshold\n"); - if (event_src.z_high) printf("z is higher than threshold\n"); - } - - // in case of click detection interrupt - else if (click_src.active) - printf("%.3f LSM303D %s\n", (double)sdk_system_get_time()*1e-3, - click_src.s_click ? "single click" : "double click"); - } - } -} - -// Interrupt handler which resumes user_task_interrupt on interrupt - -void IRAM int_signal_handler (uint8_t gpio) -{ - // send an event with GPIO to the interrupt user task - xQueueSendFromISR(gpio_evt_queue, &gpio, NULL); -} - -#else // !INT_USED - -/* - * In this example, user task fetches the sensor values every seconds. - */ - -void user_task_periodic(void *pvParameters) -{ - vTaskDelay (100/portTICK_PERIOD_MS); - - while (1) - { - // read sensor data - read_data (); - - // passive waiting until 1 second is over - vTaskDelay(200/portTICK_PERIOD_MS); - } -} - -#endif // INT_USED - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - /** -- MANDATORY PART -- */ - - #ifdef SPI_USED - - // init the SPI interface at which LMS303D sensors are connected - spi_bus_init (SPI_BUS, SPI_SCK_GPIO, SPI_MISO_GPIO, SPI_MOSI_GPIO); - - // init the sensor connected to SPI_BUS with SPI_CS_GPIO as chip select. - sensor = lsm303d_init_sensor (SPI_BUS, 0, SPI_CS_GPIO); - - #else - - // init all I2C busses at which LSM303D sensors are connected - i2c_init (I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // init the sensor with slave address LSM303D_I2C_ADDRESS_2 connected to I2C_BUS. - sensor = lsm303d_init_sensor (I2C_BUS, LSM303D_I2C_ADDRESS_2, 0); - - #endif - - if (sensor) - { - #ifdef INT_USED - - /** --- INTERRUPT CONFIGURATION PART ---- */ - - // Interrupt configuration has to be done before the sensor is set - // into measurement mode to avoid losing interrupts - - // create an event queue to send interrupt events from interrupt - // handler to the interrupt task - gpio_evt_queue = xQueueCreate(10, sizeof(uint8_t)); - - // configure interupt pins for *INT1* and *INT2* signals and set the interrupt handler - gpio_enable(INT1_PIN, GPIO_INPUT); - gpio_enable(INT2_PIN, GPIO_INPUT); - gpio_set_interrupt(INT1_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - gpio_set_interrupt(INT2_PIN, GPIO_INTTYPE_EDGE_POS, int_signal_handler); - - #endif // INT_USED - - /** -- SENSOR CONFIGURATION PART --- */ - - // set the type of INTx signals if necessary - // lsm303d_config_int_signals (sensor, lsm303d_push_pull); - - #ifdef INT_DATA - // enable data interrupts on *INT2* (data ready or FIFO overrun and FIFO threshold) - // data ready and FIFO status interrupts must not be enabled at the same time - #ifdef FIFO_MODE - lsm303d_enable_int (sensor, lsm303d_int_fifo_overrun, lsm303d_int2_signal, true); - lsm303d_enable_int (sensor, lsm303d_int_fifo_thresh , lsm303d_int2_signal, true); - #else - lsm303d_enable_int (sensor, lsm303d_int_a_data_ready, lsm303d_int2_signal, true); - lsm303d_enable_int (sensor, lsm303d_int_m_data_ready, lsm303d_int2_signal, true); - #endif // FIFO_MODE - #endif // INT_DATA - - #ifdef INT_THRESH - // enable magnetic threshold interrupts on signal *INT1* - lsm303d_int_m_thresh_config_t m_thresh_config; - - m_thresh_config.threshold = 2000; - m_thresh_config.x_enabled = true; - m_thresh_config.y_enabled = true; - m_thresh_config.z_enabled = true; - m_thresh_config.latch = true; - m_thresh_config.signal_level = lsm303d_high_active; - - lsm303d_set_int_m_thresh_config (sensor, &m_thresh_config); - lsm303d_enable_int (sensor, lsm303d_int_m_thresh, lsm303d_int1_signal, true); - #endif // INT_THRESH - - #ifdef INT_EVENT - // enable inertial event interrupts on *INT1* - lsm303d_int_event_config_t event_config; - - event_config.mode = lsm303d_or; // axes movement wake-up - // event_config.mode = lsm303d_and; // free fall - // event_config.mode = lsm303d_6d_movement; - // event_config.mode = lsm303d_6d_position; - // event_config.mode = lsm303d_4d_movement; - // event_config.mode = lsm303d_4d_position; - event_config.threshold = 50; - event_config.x_low_enabled = false; - event_config.x_high_enabled = true; - event_config.y_low_enabled = false; - event_config.y_high_enabled = true; - event_config.z_low_enabled = false; - event_config.z_high_enabled = true; - event_config.duration = 0; - event_config.latch = true; - - lsm303d_set_int_event_config (sensor, &event_config, lsm303d_int_event1_gen); - lsm303d_enable_int (sensor, lsm303d_int_event1, lsm303d_int1_signal, true); - #endif // INT_EVENT - - #ifdef INT_CLICK - // enable single click interrupt for z-axis on signal *INT1* - lsm303d_int_click_config_t click_config; - - click_config.threshold = 10; - click_config.x_single = false; - click_config.x_double = false; - click_config.y_single = false; - click_config.y_double = false; - click_config.z_single = true; - click_config.z_double = false; - click_config.latch = true; - click_config.time_limit = 1; - click_config.time_latency = 1; - click_config.time_window = 3; - - lsm303d_set_int_click_config (sensor, &click_config); - lsm303d_enable_int (sensor, lsm303d_int_click, lsm303d_int1_signal, true); - #endif // INT_CLICK - - #ifdef FIFO_MODE - // clear the FIFO - lsm303d_set_fifo_mode (sensor, lsm303d_bypass, 0); - - // activate the FIFO with a threshold of 10 samples (max. 31); if - // interrupt *lsm303d_fifo_thresh* is enabled, an interrupt is - // generated when the FIFO content exceeds this threshold, i.e., - // when 11 samples are stored in FIFO - lsm303d_set_fifo_mode (sensor, lsm303d_stream, 10); - #endif - - // configure HPF and implicitly reset the reference by a dummy read - lsm303d_config_a_hpf (sensor, lsm303d_hpf_normal, true, true, true, true); - - #ifdef TEMP_USED - // enable the temperature sensor - lsm303d_enable_temperature (sensor, true); - #endif - - // LAST STEP: Finally set scale and mode to start measurements - lsm303d_set_a_scale(sensor, lsm303d_a_scale_2_g); - lsm303d_set_m_scale(sensor, lsm303d_m_scale_4_Gs); - lsm303d_set_a_mode (sensor, lsm303d_a_odr_12_5, lsm303d_a_aaf_bw_773, true, true, true); - lsm303d_set_m_mode (sensor, lsm303d_m_odr_12_5, lsm303d_m_low_res, lsm303d_m_continuous); - - /** -- TASK CREATION PART --- */ - - // must be done last to avoid concurrency situations with the sensor - // configuration part - - #ifdef INT_USED - - // create a task that is triggered only in case of interrupts to fetch the data - xTaskCreate(user_task_interrupt, "user_task_interrupt", TASK_STACK_DEPTH, NULL, 2, NULL); - - #else // INT_USED - - // create a user task that fetches data from sensor periodically - xTaskCreate(user_task_periodic, "user_task_periodic", TASK_STACK_DEPTH, NULL, 2, NULL); - - #endif - } - else - printf("Could not initialize LSM303D sensor\n"); -} - -``` diff --git a/extras/lsm303d/component.mk b/extras/lsm303d/component.mk deleted file mode 100644 index 40a5202..0000000 --- a/extras/lsm303d/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/lsm303d - -# expected anyone using LIS3MDL driver includes it as 'lis3mld/lis3mld.h' -INC_DIRS += $(lsm303d_ROOT).. -INC_DIRS += $(lsm303d_ROOT) - -# args for passing into compile rule generation -lsm303d_SRC_DIR = $(lsm303d_ROOT) - -$(eval $(call component_compile_rules,lsm303d)) diff --git a/extras/lsm303d/lsm303d.c b/extras/lsm303d/lsm303d.c deleted file mode 100644 index 1e0171f..0000000 --- a/extras/lsm303d/lsm303d.c +++ /dev/null @@ -1,1693 +0,0 @@ -/* - * Driver for LSM303D 3-axes digital accelerometer and magnetometer connected - * either to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2018 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - * - * The information provided is believed to be accurate and reliable. The - * copyright holder assumes no responsibility for the consequences of use - * of such information nor for any infringement of patents or other rights - * of third parties which may result from its use. No license is granted by - * implication or otherwise under any patent or patent rights of the copyright - * holder. - */ - -#include -#include - -#include "lsm303d.h" - -#ifdef debug -#undef debug -#undef debug_dev -#endif - -#ifdef error -#undef error -#undef error_dev -#endif - -#if defined(LSM303D_DEBUG_LEVEL_2) -#define debug(s, f, ...) printf("%s %s: " s "\n", "LSM303D", f, ## __VA_ARGS__) -#define debug_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "LSM303D", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define debug(s, f, ...) -#define debug_dev(s, f, d, ...) -#endif - -#if defined(LSM303D_DEBUG_LEVEL_1) || defined(LSM303D_DEBUG_LEVEL_2) -#define error(s, f, ...) printf("%s %s: " s "\n", "LSM303D", f, ## __VA_ARGS__) -#define error_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "LSM303D", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define error(s, f, ...) -#define error_dev(s, f, d, ...) -#endif - -// -- register addresses --------------------------- - -#define LSM303D_REG_TEMP_OUT_L 0x05 -#define LSM303D_REG_TEMP_OUT_H 0x06 - -#define LSM303D_REG_STATUS_M 0x07 -#define LSM303D_REG_OUT_X_L_M 0x08 -#define LSM303D_REG_OUT_X_H_M 0x09 -#define LSM303D_REG_OUT_Y_L_M 0x0a -#define LSM303D_REG_OUT_Y_H_M 0x0b -#define LSM303D_REG_OUT_Z_L_M 0x0c -#define LSM303D_REG_OUT_Z_H_M 0x0d - -#define LSM303D_REG_WHO_AM_I 0x0f - -#define LSM303D_REG_INT_CTRL_M 0x12 -#define LSM303D_REG_INT_SRC_M 0x13 -#define LSM303D_REG_INT_THS_L_M 0x14 -#define LSM303D_REG_INT_THS_H_M 0x15 -#define LSM303D_REG_OFFSET_X_L_M 0x16 -#define LSM303D_REG_OFFSET_X_M_M 0x17 -#define LSM303D_REG_OFFSET_Y_L_M 0x18 -#define LSM303D_REG_OFFSET_Y_M_M 0x19 -#define LSM303D_REG_OFFSET_Z_L_M 0x1a -#define LSM303D_REG_OFFSET_Z_M_M 0x1b - -#define LSM303D_REG_REFERENCE_X 0x1c -#define LSM303D_REG_REFERENCE_Y 0x1d -#define LSM303D_REG_REFERENCE_Z 0x1e - -#define LSM303D_REG_CTRL0 0x1f -#define LSM303D_REG_CTRL1 0x20 -#define LSM303D_REG_CTRL2 0x21 -#define LSM303D_REG_CTRL3 0x22 -#define LSM303D_REG_CTRL4 0x23 -#define LSM303D_REG_CTRL5 0x24 -#define LSM303D_REG_CTRL6 0x25 -#define LSM303D_REG_CTRL7 0x26 - -#define LSM303D_REG_STATUS_A 0x27 -#define LSM303D_REG_OUT_X_L_A 0x28 -#define LSM303D_REG_OUT_X_H_A 0x29 -#define LSM303D_REG_OUT_Y_L_A 0x2a -#define LSM303D_REG_OUT_Y_H_A 0x2b -#define LSM303D_REG_OUT_Z_L_A 0x2c -#define LSM303D_REG_OUT_Z_H_A 0x2d - -#define LSM303D_REG_FIFO_CTRL 0x2e -#define LSM303D_REG_FIFO_SRC 0x2f - -#define LSM303D_REG_IG_CFG1 0x30 -#define LSM303D_REG_IG_SRC1 0x31 -#define LSM303D_REG_IG_THS1 0x32 -#define LSM303D_REG_IG_DUR1 0x33 -#define LSM303D_REG_IG_CFG2 0x34 -#define LSM303D_REG_IG_SRC2 0x35 -#define LSM303D_REG_IG_THS2 0x36 -#define LSM303D_REG_IG_DUR2 0x37 -#define LSM303D_REG_CLICK_CFG 0x38 -#define LSM303D_REG_CLICK_SRC 0x39 -#define LSM303D_REG_CLICK_THS 0x3a -#define LSM303D_REG_TIME_LIMIT 0x3b -#define LSM303D_REG_TIME_LATENCY 0x3c -#define LSM303D_REG_TIME_WINDOW 0x3d - -// -- register structure definitions --------------- -// -// ACC = accelerator -// MAG = magnetometer - -// magnetometer data status (LSM303D_REG_STATUS_M = 0x07) -struct lsm303d_reg_status_m -{ - uint8_t XMDA :1; // STATUS_M<0> MAG X axis new data available - uint8_t YMDA :1; // STATUS_M<1> MAG Y axis new data available - uint8_t ZMDA :1; // STATUS_M<2> MAG Z axis new data available - uint8_t ZYXMDA :1; // STATUS_M<3> MAG X, Y and Z axis new data available - uint8_t XMOR :1; // STATUS_M<4> MAG X axis data overrun - uint8_t YMOR :1; // STATUS_M<5> MAG Y axis data overrun - uint8_t ZMOR :1; // STATUS_M<6> MAG Z axis data overrun - uint8_t ZYXMOR :1; // STATUS_M<7> MAG X, Y and Z axis data overrun -}; - -#define LSM303D_ANY_M_DATA_READY 0x07 // LSM303D_REG_STATUS_M<3:0> - -// accelerometer data status (LSM303D_REG_STATUS_A = 0x27) -struct lsm303d_reg_status_a -{ - uint8_t XADA :1; // STATUS_A<0> ACC X axis new data available - uint8_t YADA :1; // STATUS_A<1> ACC Y axis new data available - uint8_t ZADA :1; // STATUS_A<2> ACC Z axis new data available - uint8_t ZYXADA:1; // STATUS_A<3> ACC X, Y and Z axis new data available - uint8_t XAOR :1; // STATUS_A<4> ACC X axis data overrun - uint8_t YAOR :1; // STATUS_A<5> ACC Y axis data overrun - uint8_t ZAOR :1; // STATUS_A<6> ACC Z axis data overrun - uint8_t ZYXAOR:1; // STATUS_A<7> ACC X, Y and Z axis data overrun -}; - -#define LSM303D_ANY_A_DATA_READY 0x07 // LSM303D_REG_STATUS_A<3:0> - -// MAG interrupt control register (LSM303D_REG_INT_CTRL_M = 0x12) -struct lsm303d_reg_int_ctrl_m -{ - uint8_t MIEN :1; // INT_CTRL_M<0> Enable interrupt generation for magnetic data - uint8_t D4D :1; // INT_CTRL_M<1> 4D enable - uint8_t MIEL :1; // INT_CTRL_M<2> Latch interrupt request - uint8_t MIEA :1; // INT_CTRL_M<3> Interrupt polarity - uint8_t PP_OD :1; // INT_CTRL_M<4> Interrupt pin configuration - uint8_t ZMIEN :1; // INT_CTRL_M<5> Enable interrupt recognition for Z axis - uint8_t YMIEN :1; // INT_CTRL_M<6> Enable interrupt recognition for Y axis - uint8_t XMIEN :1; // INT_CTRL_M<7> Enable interrupt recognition for X axis -}; - -// MAG interrupt source register (LSM303D_REG_INT_SRC_M = 0x13) -struct lsm303d_reg_int_src_m -{ - uint8_t MINT :1; // INT_SRC_M<0> MAG interrupt event occurs - uint8_t MROI :1; // INT_SRC_M<1> Internal measurement range overflow - uint8_t M_NTH_Z :1; // INT_SRC_M<2> MAG z value exceeds threshold on negative side - uint8_t M_NTH_Y :1; // INT_SRC_M<3> MAG y value exceeds threshold on negative side - uint8_t M_NTH_X :1; // INT_SRC_M<4> MAG x value exceeds threshold on negative side - uint8_t M_PTH_Z :1; // INT_SRC_M<5> MAG z value exceeds threshold on positive side - uint8_t M_PTH_Y :1; // INT_SRC_M<6> MAG y value exceeds threshold on positive side - uint8_t M_PTH_X :1; // INT_SRC_M<7> MAG x value exceeds threshold on positive side -}; - -// control register 0 (LSM303D_REG_CTRL1 = 0x1f) -struct lsm303d_reg_ctrl0 -{ - uint8_t HPIS2 :1; // CTRL0<0> HPF enabled for interrupt generator 2 - uint8_t HPIS1 :1; // CTRL0<1> HPF enabled for interrupt generator 1 - uint8_t HP_Click:1; // CTRL0<2> HPF enabled for click detection - uint8_t unused :2; // CTRL0<4:3> unused - uint8_t FTH_EN :1; // CTRL0<5> FIFO programmable threshold enable - uint8_t FIFO_EN :1; // CTRL0<6> FIFO enable - uint8_t BOOT :1; // CTRL0<7> Reboot memory content -}; - -// control register 1 (LSM303D_REG_CTRL1 = 0x20) -struct lsm303d_reg_ctrl1 -{ - uint8_t AXEN :1; // CTRL1<0> ACC X axis enable - uint8_t AYEN :1; // CTRL1<1> ACC Y axis enable - uint8_t AZEN :1; // CTRL1<2> ACC Z axis enable - uint8_t BDU :1; // CTRL1<3> ACC and MAG block data update - uint8_t AODR :4; // CTRL1<7:4> ACC data rate selection -}; - -// control register 2 (LSM303D_REG_CTRL2 = 0x21) -struct lsm303d_reg_ctrl2 -{ - uint8_t SIM :1; // CTRL2<0> SPI serial interface mode - uint8_t AST :1; // CTRL2<1> ACC self test enable - uint8_t unused:1; // CTRL2<2> unused - uint8_t AFS :3; // CTRL2<5:3> ACC full scale selection - uint8_t ABW :2; // CTRL2<7:6> ACC anti-alias filter bandwidth selection -}; - -// control register 3 (LSM303D_REG_CTRL3 = 0x22) -struct lsm303d_reg_ctrl3 -{ - uint8_t INT1_EMPTY :1; // CTRL3<0> FIFO empty indication on INT1 enable - uint8_t INT1_DRDY_M :1; // CTRL3<1> MAG data ready signal on INT1 enable - uint8_t INT1_DRDY_A :1; // CTRL3<2> ACC data ready signal on INT1 enable - uint8_t INT1_IGM :1; // CTRL3<3> MAG interrupt generator on INT1 enable - uint8_t INT1_IG2 :1; // CTRL3<4> ACC inertial interrupt generator 2 on INT1 enable - uint8_t INT1_IG1 :1; // CTRL3<5> ACC inertial interrupt generator 1 on INT1 enable - uint8_t INT1_Click :1; // CTRL3<6> CLICK generator interrupt on INT1 enable - uint8_t INT1_BOOT :1; // CTRL3<7> BOOT on INT1 enable -}; - -// control register 4 (LSM303D_REG_CTRL4 = 0x23) -struct lsm303d_reg_ctrl4 -{ - uint8_t INT2_FTH :1; // CTRL4<0> FIFO threshold interrupt on INT2 enable - uint8_t INT2_Overrun:1; // CTRL4<1> FIFO Overrun interrupt on INT2 - uint8_t INT2_DRDY_M :1; // CTRL4<2> MAG data ready signal on INT2 enable - uint8_t INT2_DRDY_A :1; // CTRL4<3> ACC data ready signal on INT2 enable - uint8_t INT2_IGM :1; // CTRL4<4> MAG interrupt generator on INT2 enable - uint8_t INT2_IG2 :1; // CTRL4<5> ACC inertial interrupt generator 2 on INT2 enable - uint8_t INT2_IG1 :1; // CTRL4<6> ACC inertial interrupt generator 1 on INT2 enable - uint8_t INT2_Click :1; // CTRL4<7> CLICK generator interrupt on INT2 enable -}; - -// control register 5 (LSM303D_REG_CTRL5 = 0x24) -struct lsm303d_reg_ctrl5 -{ - uint8_t LIR1 :1; // CTRL5<0> Latch interrupt request on INT1 - uint8_t LIR2 :1; // CTRL5<1> Latch interrupt request on INT2 - uint8_t M_ODR :3; // CTRL5<4:2> MAG data rate selection - uint8_t M_RES :2; // CTRL5<6:5> MAG resolution - uint8_t TEMP_EN :1; // CTRL5<7> Temperature sensor enable -}; - -// control register 6 (LSM303D_REG_CTRL6 = 0x25) -struct lsm303d_reg_ctrl6 -{ - uint8_t unused1 :5; // CTRL6<4:0> unused - uint8_t MFS :2; // CTRL6<6:5> MAG full scale selection - uint8_t unused2 :1; // CTRL6<7> unused -}; - -// control register 7 (LSM303D_REG_CTRL7 = 0x26) -struct lsm303d_reg_ctrl7 -{ - uint8_t MD :2; // CTRL7<1:0> MAG sensor mode - uint8_t MLP :1; // CTRL7<2> MAG data low-power mode - uint8_t unused :1; // CTRL7<3> unused - uint8_t T_ONLY :1; // CTRL7<4> Temperature sensor only mode - uint8_t AFDS :1; // CTRL7<5> ACC data filtered - uint8_t AHPM :2; // CTRL7<7:6> ACC HPF mode -}; - -// FIFO control (LSM303D_REG_FIFO_CTRL = 0x2e) -struct lsm303d_reg_fifo_ctrl -{ - uint8_t FTH :5; // FIFO_CTRL<4:0> FIFO threshold level - uint8_t FM :3; // FIFO_CTRL<7:5> FIFO mode selection -}; - -// FIFO source (LSM303D_REG_FIFO_SRC = 0x2f) -struct lsm303d_reg_fifo_src -{ - uint8_t FFS :5; // FIFO_SRC<4:0> FIFO samples stored - uint8_t EMPTY:1; // FIFO_SRC<5> FIFO is empty - uint8_t OVRN :1; // FIFO_SRC<6> FIFO buffer full - uint8_t FTH :1; // FIFO_SRC<7> FIFO content exceeds watermark -}; - -// ACC interrupt generator IG_CFGx (LSM303D_REG_IG_CFGx = 0x30, 0x34) -struct lsm303d_reg_ig_cfgx -{ - uint8_t XLIE :1; // IG_CFGx<0> ACC x value below threshold enabled - uint8_t XHIE :1; // IG_CFGx<1> ACC x value above threshold enabled - uint8_t YLIE :1; // IG_CFGx<2> ACC y value below threshold enabled - uint8_t YHIE :1; // IG_CFGx<3> ACC y value above threshold enabled - uint8_t ZLIE :1; // IG_CFGx<4> ACC z value below threshold enabled - uint8_t ZHIE :1; // IG_CFGx<5> ACC z value above threshold enabled - uint8_t D6D :1; // IG_CFGx<6> 6D/4D detection detecetion enabled - uint8_t AOI :1; // IG_CFGx<7> AND/OR combination of interrupt events -}; - -// ACC interrupt source IG_SRCx (LSM303D_REG_IG_SRCx = 0x31, 0x35) -struct lsm303d_reg_ig_srcx -{ - uint8_t XL :1; // IG_SRCx<0> ACC x value is below threshold - uint8_t XH :1; // IG_SRCx<1> ACC x value is above threshold - uint8_t YL :1; // IG_SRCx<2> ACC y value is below threshold - uint8_t YH :1; // IG_SRCx<3> ACC y value is above threshold - uint8_t ZL :1; // IG_SRCx<4> ACC z value is below threshold - uint8_t ZH :1; // IG_SRCx<5> ACC z value is above threshold - uint8_t IA :1; // IG_SRCx<6> ACC interrupt active - uint8_t unused:1; // IG_SRCx<7> unused -}; - -// CLICK_CFGx (LSM303D_REG_CLICL_CFG = 0x38) -struct lsm303d_reg_click_cfg -{ - uint8_t XS :1; // CLICK_CFG<0> X axis single click enabled - uint8_t XD :1; // CLICK_CFG<1> X axis double click enabled - uint8_t YS :1; // CLICK_CFG<2> Y axis single click enabled - uint8_t YD :1; // CLICK_CFG<3> Y axis double click enabled - uint8_t ZS :1; // CLICK_CFG<4> Z axis single click enabled - uint8_t ZD :1; // CLICK_CFG<5> Z axis double click enabled - uint8_t unused:2; // CLICK_CFG<7:6> unused -}; - - -/** Forward declaration of functions for internal use */ - -static bool lsm303d_reset (lsm303d_sensor_t* dev); -static bool lsm303d_is_available(lsm303d_sensor_t* dev); - -static bool lsm303d_i2c_read (lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lsm303d_i2c_write (lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lsm303d_spi_read (lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); -static bool lsm303d_spi_write (lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len); - -#define msb_lsb_to_type(t,b,o) (t)(((t)b[o] << 8) | b[o+1]) -#define lsb_msb_to_type(t,b,o) (t)(((t)b[o+1] << 8) | b[o]) -#define lsb_to_type(t,b,o) (t)(b[o]) - -#define lsm303d_update_reg(dev,addr,type,elem,value) \ - { \ - struct type __reg; \ - if (!lsm303d_reg_read (dev, (addr), (uint8_t*)&__reg, 1)) \ - return false; \ - __reg.elem = (value); \ - if (!lsm303d_reg_write (dev, (addr), (uint8_t*)&__reg, 1)) \ - return false; \ - } - -lsm303d_sensor_t* lsm303d_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs) -{ - lsm303d_sensor_t* dev; - - if ((dev = malloc (sizeof(lsm303d_sensor_t))) == NULL) - return NULL; - - // init sensor data structure - dev->bus = bus; - dev->addr = addr; - dev->cs = cs; - - dev->error_code = LSM303D_OK; - dev->a_scale = lsm303d_a_scale_2_g; - dev->m_scale = lsm303d_m_scale_4_Gs; - dev->m_res = lsm303d_m_low_res; - dev->fifo_mode = lsm303d_bypass; - dev->fifo_first = true; - - // if addr==0 then SPI is used and has to be initialized - if (!addr && !spi_device_init (bus, cs)) - { - error_dev ("Could not initialize SPI interface.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // check availability of the sensor - if (!lsm303d_is_available (dev)) - { - error_dev ("Sensor is not available.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // reset the sensor - if (!lsm303d_reset(dev)) - { - error_dev ("Could not reset the sensor device.", __FUNCTION__, dev); - free (dev); - return NULL; - } - - // set block data update as default - lsm303d_update_reg (dev, LSM303D_REG_CTRL1, lsm303d_reg_ctrl1, BDU, 1); - - // not necessary, following values are the defaults - // lsm303d_update_reg (dev, LSM303D_REG_CTRL2, lsm303d_reg_ctrl2, AFS, lsm303d_a_scale_2_g); - // lsm303d_update_reg (dev, LSM303D_REG_CTRL6, lsm303d_reg_ctrl6, MFS, lsm303d_m_scale_4_Gs); - - // clear FIFO - // lsm303d_set_fifo_mode (sensor, lsm303d_bypass, 0); - - return dev; -} - -bool lsm303d_set_a_mode (lsm303d_sensor_t* dev, - lsm303d_a_odr_t odr, lsm303d_a_aaf_bw_t bw, - bool x, bool y, bool z) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_ctrl1 ctrl1; - struct lsm303d_reg_ctrl2 ctrl2; - - // read current register values - if (!lsm303d_reg_read (dev, LSM303D_REG_CTRL1, (uint8_t*)&ctrl1, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_CTRL2, (uint8_t*)&ctrl2, 1)) - return false; - - // set mode - ctrl1.AXEN = x; - ctrl1.AYEN = y; - ctrl1.AZEN = z; - ctrl1.AODR = odr; - - ctrl2.ABW = bw; - - if (!lsm303d_reg_write (dev, LSM303D_REG_CTRL1, (uint8_t*)&ctrl1, 1) || - !lsm303d_reg_write (dev, LSM303D_REG_CTRL2, (uint8_t*)&ctrl2, 1)) - return false; - - // switching times - vTaskDelay (50/portTICK_PERIOD_MS); - - return false; -} - - -bool lsm303d_set_m_mode (lsm303d_sensor_t* dev, - lsm303d_m_odr_t odr, - lsm303d_m_resolution_t res, - lsm303d_m_mode_t mode) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_ctrl5 ctrl5; - struct lsm303d_reg_ctrl7 ctrl7; - - // read current register values - if (!lsm303d_reg_read (dev, LSM303D_REG_CTRL5, (uint8_t*)&ctrl5, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_CTRL7, (uint8_t*)&ctrl7, 1)) - return false; - - // set mode - if (odr == lsm303d_m_low_power) - { - ctrl7.MLP = true; - ctrl5.M_ODR = lsm303d_m_odr_3_125; - } - else - { - ctrl7.MLP = false; - ctrl5.M_ODR = odr; - } - - ctrl7.MD = mode; - ctrl5.M_RES = res; - - // write register values - if (!lsm303d_reg_write (dev, LSM303D_REG_CTRL5, (uint8_t*)&ctrl5, 1) || - !lsm303d_reg_write (dev, LSM303D_REG_CTRL7, (uint8_t*)&ctrl7, 1)) - return false; - - // switching times - vTaskDelay (50/portTICK_PERIOD_MS); - - return false; -} - - -bool lsm303d_set_a_scale (lsm303d_sensor_t* dev, lsm303d_a_scale_t scale) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - dev->a_scale = scale; - - // read CTRL2 register and write scale - lsm303d_update_reg (dev, LSM303D_REG_CTRL2, lsm303d_reg_ctrl2, AFS, scale); - - return true; -} - - -bool lsm303d_set_m_scale (lsm303d_sensor_t* dev, lsm303d_m_scale_t scale) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - dev->m_scale = scale; - - // read CTRL5 register and write scale - lsm303d_update_reg (dev, LSM303D_REG_CTRL6, lsm303d_reg_ctrl6, MFS, scale); - - return true; -} - - -bool lsm303d_set_fifo_mode (lsm303d_sensor_t* dev, lsm303d_fifo_mode_t mode, - uint8_t thresh) -{ - if (!dev) return false; - - if (thresh > 31) - { - error_dev ("FIFO threshold is greate than the maximum of 31.", __FUNCTION__, dev); - dev->error_code = LSM303D_FIFO_THRESHOLD_INVALID; - return false; - } - - dev->error_code = LSM303D_OK; - dev->fifo_mode = mode; - - // read CTRL1 register and write FIFO_EN flag - lsm303d_update_reg (dev, LSM303D_REG_CTRL0, lsm303d_reg_ctrl0, FIFO_EN, mode != lsm303d_bypass); - lsm303d_update_reg (dev, LSM303D_REG_CTRL0, lsm303d_reg_ctrl0, FTH_EN , mode != lsm303d_bypass); - - struct lsm303d_reg_fifo_ctrl fifo_ctrl = { - .FTH = thresh, - .FM = mode, - }; - - // write FIFO_CTRL register - if (!lsm303d_reg_write (dev, LSM303D_REG_FIFO_CTRL, (uint8_t*)&fifo_ctrl, 1)) - return false; - - return true; -} - - -bool lsm303d_new_a_data (lsm303d_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - if (dev->fifo_mode == lsm303d_bypass) - { - struct lsm303d_reg_status_a status; - - if (!lsm303d_reg_read (dev, LSM303D_REG_STATUS_A, (uint8_t*)&status, 1)) - { - error_dev ("Could not get sensor status", __FUNCTION__, dev); - return false; - } - return status.XADA || status.YADA || status.ZADA; - } - else - { - struct lsm303d_reg_fifo_src fifo_src; - - if (!lsm303d_reg_read (dev, LSM303D_REG_FIFO_SRC, (uint8_t*)&fifo_src, 1)) - { - error_dev ("Could not get fifo source register data", __FUNCTION__, dev); - return false; - } - return !fifo_src.EMPTY; - } -} - -bool lsm303d_new_m_data (lsm303d_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_status_m status; - - if (!lsm303d_reg_read (dev, LSM303D_REG_STATUS_M, (uint8_t*)&status, 1)) - { - error_dev ("Could not get sensor status", __FUNCTION__, dev); - return false; - } - return status.XMDA || status.YMDA || status.ZMDA; -} - - -/** - * Scaling factors for the conversion of raw sensor data to floating point g - * values. Scaling factors are from mechanical characteristics in datasheet. - * - * scale/sensitivity resolution - * +-2 g 0.061 mg/LSB - * +-4 g 0.122 mg/LSB - * +-6 g 0.183 mg/LSB - * +-8 g 0.244 mg/LSB - * +-16 g 0.732 mg/LSB - */ -const static double LSM303D_A_SCALES[5] = -{ 0.061/1000, 0.122/1000, 0.183/1000, 0.244/1000, 0.732/1000 }; - -bool lsm303d_get_float_a_data (lsm303d_sensor_t* dev, lsm303d_float_a_data_t* data) -{ - if (!dev || !data) return false; - - lsm303d_raw_a_data_t raw; - - if (!lsm303d_get_raw_a_data (dev, &raw)) - return false; - - data->ax = LSM303D_A_SCALES[dev->a_scale] * raw.ax; - data->ay = LSM303D_A_SCALES[dev->a_scale] * raw.ay; - data->az = LSM303D_A_SCALES[dev->a_scale] * raw.az; - - return true; -} - - -uint8_t lsm303d_get_float_a_data_fifo (lsm303d_sensor_t* dev, lsm303d_float_a_data_fifo_t data) -{ - if (!dev || !data) return false; - - lsm303d_raw_a_data_fifo_t raw; - - uint8_t num = lsm303d_get_raw_a_data_fifo (dev, raw); - - for (int i = 0; i < num; i++) - { - data[i].ax = LSM303D_A_SCALES[dev->a_scale] * raw[i].ax; - data[i].ay = LSM303D_A_SCALES[dev->a_scale] * raw[i].ay; - data[i].az = LSM303D_A_SCALES[dev->a_scale] * raw[i].az; - } - return num; -} - - -/** - * Scaling factors for the conversion of raw sensor data to floating point Gauss - * values. Scaling factors are from sensor characteristics in datasheet. - * - * scale/sensitivity resolution - * +-2 Gauss 0.080 mGauss/LSB - * +-4 Gauss 0.160 mGauss/LSB - * +-8 Gauss 0.320 mGauss/LSB - * +-12 Gauss 0.479 mGauss/LSB - */ -const static double LSM303D_M_SCALES[5] = { 0.080/1000, 0.160/1000, 0.320/1000, 0.479/1000 }; - -bool lsm303d_get_float_m_data (lsm303d_sensor_t* dev, lsm303d_float_m_data_t* data) -{ - if (!dev || !data) return false; - - lsm303d_raw_m_data_t raw; - - if (!lsm303d_get_raw_m_data (dev, &raw)) - return false; - - data->mx = LSM303D_M_SCALES[dev->m_scale] * raw.mx; - data->my = LSM303D_M_SCALES[dev->m_scale] * raw.my; - data->mz = LSM303D_M_SCALES[dev->m_scale] * raw.mz; - - return true; -} - - -bool lsm303d_get_raw_a_data (lsm303d_sensor_t* dev, lsm303d_raw_a_data_t* raw) -{ - if (!dev || !raw) return false; - - dev->error_code = LSM303D_OK; - - // abort if not in bypass mode - if (dev->fifo_mode != lsm303d_bypass) - { - dev->error_code = LSM303D_SENSOR_IN_BYPASS_MODE; - error_dev ("Sensor is in FIFO mode, use lsm303d_get_*_data_fifo to get data", - __FUNCTION__, dev); - return false; - } - - uint8_t buf[6]; - - // read raw data sample - if (!lsm303d_reg_read (dev, LSM303D_REG_OUT_X_L_A, buf, 6)) - { - error_dev ("Could not get raw data sample", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_RAW_A_DATA_FAILED; - return false; - } - - raw->ax = buf[1] << 8 | buf[0]; - raw->ay = buf[3] << 8 | buf[2]; - raw->az = buf[5] << 8 | buf[4]; - - return true; -} - - -uint8_t lsm303d_get_raw_a_data_fifo (lsm303d_sensor_t* dev, lsm303d_raw_a_data_fifo_t raw) -{ - if (!dev) return 0; - - dev->error_code = LSM303D_OK; - - // in bypass mode, use lsm303d_get_raw_data to return one sample - if (dev->fifo_mode == lsm303d_bypass) - return lsm303d_get_raw_a_data (dev, raw) ? 1 : 0; - - struct lsm303d_reg_fifo_src fifo_src; - - // read FIFO state - if (!lsm303d_reg_read (dev, LSM303D_REG_FIFO_SRC, (uint8_t*)&fifo_src, 1)) - { - dev->error_code |= LSM303D_FIFO_GET_SRC_FAILED; - error_dev ("Could not get fifo source register data", __FUNCTION__, dev); - return 0; - } - - // if nothing is in the FIFO, just return with 0 - if (fifo_src.EMPTY) - return 0; - - uint8_t samples = fifo_src.FFS + (fifo_src.OVRN ? 1 : 0); - uint8_t buf[6]; - - // read samples from FIFO - for (int i = 0; i < samples; i++) - { - if (!lsm303d_reg_read (dev, LSM303D_REG_OUT_X_L_A, buf, 6)) - { - error_dev ("Could not get raw data samples", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_RAW_A_DATA_FIFO_FAILED; - return i; - } - - raw[i].ax = buf[1] << 8 | buf[0]; - raw[i].ay = buf[3] << 8 | buf[2]; - raw[i].az = buf[5] << 8 | buf[4]; - } - lsm303d_reg_read (dev, LSM303D_REG_FIFO_SRC, (uint8_t*)&fifo_src, 1); - - // if FFS is not 0 after all samples read, ODR is higher than fetching rate - if (fifo_src.FFS) - { - dev->error_code = LSM303D_ODR_TOO_HIGH; - error_dev ("New samples were stored in FIFO while reading, " - "output data rate (ODR) might be too high", __FUNCTION__, dev); - return 0; - } - - if (dev->fifo_mode == lsm303d_fifo && samples == 32) - { - // clean FIFO - lsm303d_update_reg (dev, LSM303D_REG_FIFO_CTRL, lsm303d_reg_fifo_ctrl, FM, lsm303d_bypass); - lsm303d_update_reg (dev, LSM303D_REG_FIFO_CTRL, lsm303d_reg_fifo_ctrl, FM, lsm303d_fifo); - } - - return samples; -} - - -bool lsm303d_get_raw_m_data (lsm303d_sensor_t* dev, lsm303d_raw_m_data_t* raw) -{ - if (!dev || !raw) return false; - - dev->error_code = LSM303D_OK; - - uint8_t buf[6]; - - // read raw data sample - if (!lsm303d_reg_read (dev, LSM303D_REG_OUT_X_L_M, buf, 6)) - { - error_dev ("Could not get raw data sample", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_RAW_M_DATA_FAILED; - return false; - } - - raw->mx = buf[1] << 8 | buf[0]; - raw->my = buf[3] << 8 | buf[2]; - raw->mz = buf[5] << 8 | buf[4]; - - return true; -} - - -bool lsm303d_enable_int (lsm303d_sensor_t* dev, - lsm303d_int_type_t type, - lsm303d_int_signal_t signal, bool value) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_int_ctrl_m int_ctrl_m; - struct lsm303d_reg_ctrl3 ctrl3; - struct lsm303d_reg_ctrl4 ctrl4; - - uint8_t* reg1 = NULL; - uint8_t* reg2 = NULL; - uint8_t addr1 = 0; - uint8_t addr2 = 0; - - // determine the addr of the register to change - if (type == lsm303d_int_m_thresh) - { - reg1 = (uint8_t*)&int_ctrl_m; - addr1 = LSM303D_REG_INT_CTRL_M; - - reg2 = (signal == lsm303d_int1_signal) ? (uint8_t*)&ctrl3 : (uint8_t*)&ctrl4; - addr2 = (signal == lsm303d_int1_signal) ? LSM303D_REG_CTRL3 : LSM303D_REG_CTRL4; - } - else if (type == lsm303d_int_fifo_empty || signal == lsm303d_int1_signal) - { - reg1 = (uint8_t*)&ctrl3; - addr1 = LSM303D_REG_CTRL3; - } - else - { - reg1 = (uint8_t*)&ctrl4; - addr1 = LSM303D_REG_CTRL4; - } - - // read the register - if ((reg1 && !lsm303d_reg_read (dev, addr1, reg1, 1)) || - (reg2 && !lsm303d_reg_read (dev, addr2, reg2, 1))) - { - error_dev ("Could not read interrupt control registers", __FUNCTION__, dev); - dev->error_code |= LSM303D_INT_ENABLE_FAILED; - return false; - } - - // change the register - switch (type) - { - case lsm303d_int_a_data_ready: if (signal == lsm303d_int1_signal) - ctrl3.INT1_DRDY_A = value; - else - ctrl4.INT2_DRDY_A = value; - break; - - case lsm303d_int_m_data_ready: if (signal == lsm303d_int1_signal) - ctrl3.INT1_DRDY_M = value; - else - ctrl4.INT2_DRDY_M = value; - break; - - case lsm303d_int_m_thresh: int_ctrl_m.MIEN = value; - if (signal == lsm303d_int1_signal) - ctrl3.INT1_IGM = value; - else - ctrl4.INT2_IGM = value; - break; - - case lsm303d_int_fifo_empty: ctrl3.INT1_EMPTY = value; - break; - - case lsm303d_int_fifo_thresh: ctrl4.INT2_FTH = value; - break; - - case lsm303d_int_fifo_overrun: ctrl4.INT2_FTH = value; - break; - - case lsm303d_int_event1: if (signal == lsm303d_int1_signal) - ctrl3.INT1_IG1 = value; - else - ctrl4.INT2_IG1 = value; - break; - - case lsm303d_int_event2: if (signal == lsm303d_int1_signal) - ctrl3.INT1_IG2 = value; - else - ctrl4.INT2_IG2 = value; - break; - - case lsm303d_int_click: if (signal == lsm303d_int1_signal) - ctrl3.INT1_Click = value; - else - ctrl4.INT2_Click = value; - break; - - default: error_dev ("Wrong interrupt type in enable function", __FUNCTION__, dev); - dev->error_code |= LSM303D_INT_TYPE_WRONG; - return false; - } - - if ((reg1 && !lsm303d_reg_write (dev, addr1, reg1, 1)) || - (reg2 && !lsm303d_reg_write (dev, addr2, reg2, 1))) - { - error_dev ("Could not enable/disable interrupt", __FUNCTION__, dev); - dev->error_code |= LSM303D_INT_ENABLE_FAILED; - return false; - } - - return true; -} - - -bool lsm303d_get_int_data_source (lsm303d_sensor_t* dev, - lsm303d_int_data_source_t* source) -{ - if (!dev || !source) return false; - - dev->error_code = LSM303D_OK; - - uint8_t status_a; - uint8_t status_m; - struct lsm303d_reg_fifo_src fifo_src; - - if (!lsm303d_reg_read (dev, LSM303D_REG_STATUS_A, &status_a, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_STATUS_M, &status_m, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_FIFO_SRC, (uint8_t*)&fifo_src, 1)) - { - error_dev ("Could not read source of interrupt INT1/INT2 from sensor", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_INT_DATA_SOURCE_FAILED; - return false; - } - - source->a_data_ready = status_a & LSM303D_ANY_A_DATA_READY; - source->m_data_ready = status_m & LSM303D_ANY_M_DATA_READY; - - source->fifo_empty = fifo_src.EMPTY; - source->fifo_thresh = fifo_src.FTH; - source->fifo_overrun = fifo_src.OVRN; - - return true; -} - - -bool lsm303d_set_int_m_thresh_config (lsm303d_sensor_t* dev, - lsm303d_int_m_thresh_config_t* config) -{ - if (!dev || !config) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_int_ctrl_m int_ctrl_m; - - if (!lsm303d_reg_read (dev, LSM303D_REG_INT_CTRL_M, (uint8_t*)&int_ctrl_m, 1)) - { - error_dev ("Could not read configuration of magnetic threshold interrupt", __FUNCTION__, dev); - dev->error_code |= LSM303D_SET_M_THRESH_CONFIG_FAILED; - return false; - } - - int_ctrl_m.XMIEN = config->x_enabled; - int_ctrl_m.YMIEN = config->y_enabled; - int_ctrl_m.ZMIEN = config->z_enabled; - - int_ctrl_m.MIEL = config->latch; - int_ctrl_m.MIEA = config->signal_level; - - uint8_t int_ths_m [2] = { config->threshold & 0xff, config->threshold >> 8 }; - - if (// write the threshold to registers INT_THS_*_M - !lsm303d_reg_write (dev, LSM303D_REG_INT_THS_L_M, int_ths_m, 2) || - - // write configuration to INT_CTRL_M - !lsm303d_reg_write (dev, LSM303D_REG_INT_CTRL_M, (uint8_t*)&int_ctrl_m, 1)) - { - error_dev ("Could not configure magnetic threshold interrupt", __FUNCTION__, dev); - dev->error_code |= LSM303D_SET_M_THRESH_CONFIG_FAILED; - return false; - } - - return true; -} - - -bool lsm303d_get_int_m_thresh_config (lsm303d_sensor_t* dev, - lsm303d_int_m_thresh_config_t* config) -{ - if (!dev || !config) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_int_ctrl_m int_ctrl_m; - uint8_t int_ths_m [2]; - - if (!lsm303d_reg_read (dev, LSM303D_REG_INT_THS_L_M, int_ths_m, 2) || - !lsm303d_reg_read (dev, LSM303D_REG_INT_CTRL_M , (uint8_t*)&int_ctrl_m, 1)) - { - error_dev ("Could not read configuration of magnetic threshold interrupt", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_M_THRESH_CONFIG_FAILED; - return false; - } - - config->x_enabled = int_ctrl_m.XMIEN; - config->y_enabled = int_ctrl_m.YMIEN; - config->z_enabled = int_ctrl_m.ZMIEN; - - config->latch = int_ctrl_m.MIEL; - config->signal_level = int_ctrl_m.MIEA; - - config->threshold = int_ths_m[1] << 8 | int_ths_m[0]; - - return true; -} - - -bool lsm303d_get_int_m_thresh_source (lsm303d_sensor_t* dev, - lsm303d_int_m_thresh_source_t* source) -{ - if (!dev || !source) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_int_src_m int_src_m; - struct lsm303d_reg_int_ctrl_m int_ctrl_m; - - if (!lsm303d_reg_read (dev, LSM303D_REG_INT_SRC_M , (uint8_t*)&int_src_m , 1) || - !lsm303d_reg_read (dev, LSM303D_REG_INT_CTRL_M, (uint8_t*)&int_ctrl_m, 1)) - { - error_dev ("Could not read source of interrupt INT from sensor", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_M_THRESH_SOURCE_FAILED; - return false; - } - - source->active = int_src_m.MINT; - - source->x_pos = int_src_m.M_PTH_X & int_ctrl_m.XMIEN; - source->x_neg = int_src_m.M_NTH_X & int_ctrl_m.XMIEN; - - source->y_pos = int_src_m.M_PTH_Y & int_ctrl_m.YMIEN; - source->y_neg = int_src_m.M_NTH_Y & int_ctrl_m.YMIEN; - - source->z_pos = int_src_m.M_PTH_Z & int_ctrl_m.ZMIEN; - source->z_neg = int_src_m.M_NTH_Z & int_ctrl_m.ZMIEN; - - return true; -} - - -bool lsm303d_set_int_event_config (lsm303d_sensor_t* dev, - lsm303d_int_event_config_t* config, - lsm303d_int_event_gen_t gen) -{ - if (!dev || !config) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_ig_cfgx ig_cfgx; - - ig_cfgx.XLIE = config->x_low_enabled; - ig_cfgx.XHIE = config->x_high_enabled; - - ig_cfgx.YLIE = config->y_low_enabled; - ig_cfgx.YHIE = config->y_high_enabled; - - ig_cfgx.ZLIE = config->z_low_enabled; - ig_cfgx.ZHIE = config->z_high_enabled; - - bool d4d_int = false; - - switch (config->mode) - { - case lsm303d_or : ig_cfgx.AOI = 0; ig_cfgx.D6D = 0; break; - case lsm303d_and : ig_cfgx.AOI = 1; ig_cfgx.D6D = 0; break; - - case lsm303d_4d_movement : d4d_int = true; - case lsm303d_6d_movement : ig_cfgx.AOI = 0; ig_cfgx.D6D = 1; break; - - case lsm303d_4d_position : d4d_int = true; - case lsm303d_6d_position : ig_cfgx.AOI = 1; ig_cfgx.D6D = 1; break; - } - - uint8_t ig_cfgx_addr = (gen == lsm303d_int_event1_gen) ? LSM303D_REG_IG_CFG1 : LSM303D_REG_IG_CFG2; - uint8_t ig_thsx_addr = (gen == lsm303d_int_event1_gen) ? LSM303D_REG_IG_THS1 : LSM303D_REG_IG_THS2; - uint8_t ig_durx_addr = (gen == lsm303d_int_event1_gen) ? LSM303D_REG_IG_DUR1 : LSM303D_REG_IG_DUR2; - - if (// write the thresholds to registers IG_THSx - !lsm303d_reg_write (dev, ig_thsx_addr, &config->threshold, 1) || - - // write duration configuration to IG_DURx - !lsm303d_reg_write (dev, ig_durx_addr, &config->duration, 1) || - - // write configuration to IG_CFGx - !lsm303d_reg_write (dev, ig_cfgx_addr, (uint8_t*)&ig_cfgx, 1)) - { - error_dev ("Could not configure interrupt INT1", __FUNCTION__, dev); - dev->error_code |= LSM303D_SET_EVENT_CONFIG_FAILED; - return false; - } - - if (gen == lsm303d_int_event1_gen) - { - lsm303d_update_reg (dev, LSM303D_REG_CTRL5, lsm303d_reg_ctrl5, LIR1, config->latch); - } - else - { - lsm303d_update_reg (dev, LSM303D_REG_CTRL5, lsm303d_reg_ctrl5, LIR2, config->latch); - } - lsm303d_update_reg (dev, LSM303D_REG_INT_CTRL_M, lsm303d_reg_int_ctrl_m, D4D, d4d_int); - - return true; -} - - -bool lsm303d_get_int_event_config (lsm303d_sensor_t* dev, - lsm303d_int_event_config_t* config, - lsm303d_int_event_gen_t gen) -{ - if (!dev || !config) return false; - - dev->error_code = LSM303D_OK; - - uint8_t ig_cfgx_addr = (gen == lsm303d_int_event1_gen) ? LSM303D_REG_IG_CFG1 : LSM303D_REG_IG_CFG2; - uint8_t ig_thsx_addr = (gen == lsm303d_int_event1_gen) ? LSM303D_REG_IG_THS1 : LSM303D_REG_IG_THS2; - uint8_t ig_durx_addr = (gen == lsm303d_int_event1_gen) ? LSM303D_REG_IG_DUR1 : LSM303D_REG_IG_DUR2; - - struct lsm303d_reg_int_ctrl_m int_ctrl_m; - struct lsm303d_reg_ig_cfgx ig_cfgx; - struct lsm303d_reg_ctrl3 ctrl3; - struct lsm303d_reg_ctrl5 ctrl5; - - if (!lsm303d_reg_read (dev, ig_cfgx_addr, (uint8_t*)&ig_cfgx, 1) || - !lsm303d_reg_read (dev, ig_thsx_addr, (uint8_t*)&config->threshold, 1) || - !lsm303d_reg_read (dev, ig_durx_addr, (uint8_t*)&config->duration, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_INT_CTRL_M, (uint8_t*)&int_ctrl_m, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_CTRL3, (uint8_t*)&ctrl3, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_CTRL5, (uint8_t*)&ctrl5, 1)) - { - error_dev ("Could not read interrupt configuration from sensor", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_EVENT_CONFIG_FAILED; - return false; - } - - config->x_low_enabled = ig_cfgx.XLIE; - config->x_high_enabled = ig_cfgx.XHIE; - - config->y_low_enabled = ig_cfgx.YLIE; - config->y_high_enabled = ig_cfgx.YHIE; - - config->z_low_enabled = ig_cfgx.ZLIE; - config->z_high_enabled = ig_cfgx.ZHIE; - - config->latch = (gen == lsm303d_int_event1_gen) ? ctrl5.LIR1 : ctrl5.LIR2; - - bool d4d_int = int_ctrl_m.D4D; - - if (ig_cfgx.AOI) - { - if (ig_cfgx.D6D && d4d_int) - config->mode = lsm303d_4d_position; - else if (ig_cfgx.D6D && !d4d_int) - config->mode = lsm303d_6d_position; - else - config->mode = lsm303d_and; - } - else - { - if (ig_cfgx.D6D && d4d_int) - config->mode = lsm303d_4d_movement; - else if (ig_cfgx.D6D && !d4d_int) - config->mode = lsm303d_6d_movement; - else - config->mode = lsm303d_or; - } - - return true; -} - - -bool lsm303d_get_int_event_source (lsm303d_sensor_t* dev, - lsm303d_int_event_source_t* source, - lsm303d_int_event_gen_t gen) -{ - if (!dev || !source) return false; - - dev->error_code = LSM303D_OK; - - uint8_t ig_cfgx_addr = (gen == lsm303d_int_event1_gen) ? LSM303D_REG_IG_CFG1 : LSM303D_REG_IG_CFG2; - uint8_t ig_srcx_addr = (gen == lsm303d_int_event1_gen) ? LSM303D_REG_IG_SRC1 : LSM303D_REG_IG_SRC2; - - struct lsm303d_reg_ig_cfgx ig_cfgx; - struct lsm303d_reg_ig_srcx ig_srcx; - - if (!lsm303d_reg_read (dev, ig_srcx_addr, (uint8_t*)&ig_srcx, 1) || - !lsm303d_reg_read (dev, ig_cfgx_addr, (uint8_t*)&ig_cfgx, 1)) - { - error_dev ("Could not read source of interrupt INT1/INT2 from sensor", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_EVENT_SOURCE_FAILED; - return false; - } - - - source->active = ig_srcx.IA; - source->x_low = ig_srcx.XL & ig_cfgx.XLIE; - source->x_high = ig_srcx.XH & ig_cfgx.XHIE; - source->y_low = ig_srcx.YL & ig_cfgx.YLIE; - source->y_high = ig_srcx.YH & ig_cfgx.YHIE; - source->z_low = ig_srcx.ZL & ig_cfgx.ZLIE; - source->z_high = ig_srcx.ZH & ig_cfgx.ZHIE; - - return true; -} - - -bool lsm303d_set_int_click_config (lsm303d_sensor_t* dev, - lsm303d_int_click_config_t* config) -{ - if (!dev || !config) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_click_cfg click_cfg; - - click_cfg.XS = config->x_single; - click_cfg.XD = config->x_double; - - click_cfg.YS = config->y_single; - click_cfg.YD = config->y_double; - - click_cfg.ZS = config->z_single; - click_cfg.ZD = config->z_double; - - uint8_t click_ths = config->threshold | ((config->latch) ? 0x80 : 0x00); - - if (!lsm303d_reg_write (dev, LSM303D_REG_CLICK_CFG , (uint8_t*)&click_cfg, 1) || - !lsm303d_reg_write (dev, LSM303D_REG_CLICK_THS , (uint8_t*)&click_ths, 1) || - !lsm303d_reg_write (dev, LSM303D_REG_TIME_LIMIT , (uint8_t*)&config->time_limit, 1) || - !lsm303d_reg_write (dev, LSM303D_REG_TIME_LATENCY, (uint8_t*)&config->time_latency, 1) || - !lsm303d_reg_write (dev, LSM303D_REG_TIME_WINDOW , (uint8_t*)&config->time_window, 1)) - { - error_dev ("Could not configure click detection interrupt", __FUNCTION__, dev); - dev->error_code |= LSM303D_SET_CLICK_CONFIG_FAILED; - return false; - } - - return true; -} - -bool lsm303d_get_int_click_config (lsm303d_sensor_t* dev, - lsm303d_int_click_config_t* config) -{ - if (!dev || !config) return false; - - dev->error_code = LSM303D_OK; - - struct lsm303d_reg_click_cfg click_cfg; - uint8_t click_ths; - - if (!lsm303d_reg_read (dev, LSM303D_REG_CLICK_CFG , (uint8_t*)&click_cfg, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_CLICK_THS , (uint8_t*)&click_ths, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_TIME_LIMIT , (uint8_t*)&config->time_limit, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_TIME_LATENCY, (uint8_t*)&config->time_latency, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_TIME_WINDOW , (uint8_t*)&config->time_window, 1)) - { - error_dev ("Could not configure click detection interrupt", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_CLICK_CONFIG_FAILED; - return false; - } - - config->x_single = click_cfg.XS; - config->x_double = click_cfg.XD; - - config->y_single = click_cfg.YS; - config->y_double = click_cfg.YD; - - config->z_single = click_cfg.ZS; - config->z_double = click_cfg.ZD; - - config->threshold= click_ths & 0x7f; - config->latch = click_ths & 0x80; - - return true; -} - -bool lsm303d_get_int_click_source (lsm303d_sensor_t* dev, - lsm303d_int_click_source_t* source) -{ - if (!dev || !source) return false; - - dev->error_code = LSM303D_OK; - - if (!lsm303d_reg_read (dev, LSM303D_REG_CLICK_SRC, (uint8_t*)source, 1)) - { - error_dev ("Could not read source of click interrupt from sensor", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_CLICK_SOURCE_FAILED; - return false; - } - - return true; -} - - - -bool lsm303d_config_int_signals (lsm303d_sensor_t* dev, - lsm303d_int_signal_type_t type) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - lsm303d_update_reg (dev, LSM303D_REG_INT_CTRL_M, lsm303d_reg_int_ctrl_m, PP_OD, type); - - return true; -} - - -bool lsm303d_config_a_hpf (lsm303d_sensor_t* dev, - lsm303d_hpf_mode_t mode, - bool data, bool click, bool int1, bool int2) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - lsm303d_update_reg (dev, LSM303D_REG_CTRL7, lsm303d_reg_ctrl7, AHPM , mode); - lsm303d_update_reg (dev, LSM303D_REG_CTRL7, lsm303d_reg_ctrl7, AFDS , data); - lsm303d_update_reg (dev, LSM303D_REG_CTRL0, lsm303d_reg_ctrl0, HP_Click, click); - lsm303d_update_reg (dev, LSM303D_REG_CTRL0, lsm303d_reg_ctrl0, HPIS1 , int1); - lsm303d_update_reg (dev, LSM303D_REG_CTRL0, lsm303d_reg_ctrl0, HPIS2 , int2); - - int8_t x_ref; - int8_t y_ref; - int8_t z_ref; - - if (mode == lsm303d_hpf_normal) - lsm303d_get_a_hpf_ref (dev, &x_ref, &y_ref, &z_ref); - - return true; -} - - -bool lsm303d_set_a_hpf_ref (lsm303d_sensor_t* dev, - int8_t x_ref, int8_t y_ref, int8_t z_ref) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - if (!lsm303d_reg_write (dev, LSM303D_REG_REFERENCE_X, (uint8_t*)&x_ref, 1) || - !lsm303d_reg_write (dev, LSM303D_REG_REFERENCE_Y, (uint8_t*)&y_ref, 1) || - !lsm303d_reg_write (dev, LSM303D_REG_REFERENCE_Z, (uint8_t*)&z_ref, 1)) - { - error_dev ("Could not set high pass filter reference", __FUNCTION__, dev); - dev->error_code |= LSM303D_SET_HPF_REF_FAILED; - return false; - } - - return true; -} - - -bool lsm303d_get_a_hpf_ref (lsm303d_sensor_t* dev, - int8_t* x_ref, int8_t* y_ref, int8_t* z_ref) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - if (!lsm303d_reg_read (dev, LSM303D_REG_REFERENCE_X, (uint8_t*)x_ref, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_REFERENCE_Y, (uint8_t*)y_ref, 1) || - !lsm303d_reg_read (dev, LSM303D_REG_REFERENCE_Z, (uint8_t*)z_ref, 1)) - { - error_dev ("Could not get high pass filter reference", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_HPF_REF_FAILED; - return false; - } - - return true; -} - - -bool lsm303d_set_m_offset (lsm303d_sensor_t* dev, - int16_t x_off, int16_t y_off, int16_t z_off) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - uint8_t buf [6] = { - x_off & 0xff, x_off >> 8, - y_off & 0xff, y_off >> 8, - z_off & 0xff, z_off >> 8 - }; - - if (!lsm303d_reg_write (dev, LSM303D_REG_OFFSET_X_L_M, buf, 6)) - { - error_dev ("Could not set magnetic offset", __FUNCTION__, dev); - dev->error_code |= LSM303D_SET_M_OFFSET_FAILED; - return false; - } - - return true; -} - - -bool lsm303d_get_m_offset (lsm303d_sensor_t* dev, - int16_t* x_off, int16_t* y_off, int16_t* z_off) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - uint8_t buf [6]; - - if (!lsm303d_reg_read (dev, LSM303D_REG_OFFSET_X_L_M, buf, 6)) - { - error_dev ("Could not get magnetic offset", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_M_OFFSET_FAILED; - return false; - } - - *x_off = buf[1] << 8 | buf[0]; - *y_off = buf[3] << 8 | buf[2]; - *z_off = buf[5] << 8 | buf[4]; - - return true; -} - - -bool lsm303d_enable_temperature (lsm303d_sensor_t* dev, bool enable) -{ - lsm303d_update_reg (dev, LSM303D_REG_CTRL5, lsm303d_reg_ctrl5, TEMP_EN, enable); - - return true; -} - - -float lsm303d_get_temperature (lsm303d_sensor_t* dev) -{ - uint8_t regs[2]; - - // read raw data sample - if (!lsm303d_reg_read (dev, LSM303D_REG_TEMP_OUT_L, regs, 2)) - { - error_dev ("Could not get temperature data sample", __FUNCTION__, dev); - dev->error_code |= LSM303D_GET_RAW_T_DATA_FAILED; - return false; - } - - return (int16_t)(regs[1] << 8 | regs[0]) / 8.0 + 25.0; -} - - -/** Functions for internal use only */ - -/** - * @brief Check the chip ID to test whether sensor is available - */ -static bool lsm303d_is_available (lsm303d_sensor_t* dev) -{ - uint8_t chip_id; - - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - if (!lsm303d_reg_read (dev, LSM303D_REG_WHO_AM_I, &chip_id, 1)) - return false; - - if (chip_id != LSM303D_CHIP_ID) - { - error_dev ("Chip id %02x is wrong, should be %02x.", - __FUNCTION__, dev, chip_id, LSM303D_CHIP_ID); - dev->error_code = LSM303D_WRONG_CHIP_ID; - return false; - } - - return true; -} - -static bool lsm303d_reset (lsm303d_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = LSM303D_OK; - - uint8_t int_ctrl_m = 0x08; // 0xe8 - uint8_t ctrl_regs[] = { 0x00, 0x00 /*0x07*/, 0x00, 0x00, 0x00, 0x18, 0x20, 0x01 }; - uint8_t null_regs[11] = { 0 }; - - // initialize sensor completely including setting in power down mode - lsm303d_reg_write (dev, LSM303D_REG_INT_CTRL_M , &int_ctrl_m, 1 ); - lsm303d_reg_write (dev, LSM303D_REG_INT_THS_L_M, null_regs , 11); - lsm303d_reg_write (dev, LSM303D_REG_CTRL0 , ctrl_regs , 8 ); - lsm303d_reg_write (dev, LSM303D_REG_FIFO_CTRL , null_regs , 1 ); - lsm303d_reg_write (dev, LSM303D_REG_IG_CFG1 , null_regs , 1 ); - lsm303d_reg_write (dev, LSM303D_REG_IG_THS1 , null_regs , 2 ); - lsm303d_reg_write (dev, LSM303D_REG_IG_CFG2 , null_regs , 1 ); - lsm303d_reg_write (dev, LSM303D_REG_IG_THS2 , null_regs , 2 ); - lsm303d_reg_write (dev, LSM303D_REG_CLICK_CFG , null_regs , 1 ); - lsm303d_reg_write (dev, LSM303D_REG_CLICK_THS , null_regs , 4 ); - - return true; -} - - -bool lsm303d_reg_read(lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? lsm303d_i2c_read (dev, reg, data, len) - : lsm303d_spi_read (dev, reg, data, len); -} - - -bool lsm303d_reg_write(lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - return (dev->addr) ? lsm303d_i2c_write (dev, reg, data, len) - : lsm303d_spi_write (dev, reg, data, len); -} - - -#define LSM303D_SPI_BUF_SIZE 64 // SPI register data buffer size of ESP866 - -#define LSM303D_SPI_READ_FLAG 0x80 -#define LSM303D_SPI_WRITE_FLAG 0x00 -#define LSM303D_SPI_AUTO_INC_FLAG 0x40 - -static bool lsm303d_spi_read(lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - if (len >= LSM303D_SPI_BUF_SIZE) - { - dev->error_code |= LSM303D_SPI_BUFFER_OVERFLOW; - error_dev ("Error on read from SPI slave on bus 1. Tried to transfer " - "more than %d byte in one read operation.", - __FUNCTION__, dev, LSM303D_SPI_BUF_SIZE); - return false; - } - - uint8_t addr = (reg & 0x3f) | LSM303D_SPI_READ_FLAG | LSM303D_SPI_AUTO_INC_FLAG; - - static uint8_t mosi[LSM303D_SPI_BUF_SIZE]; - static uint8_t miso[LSM303D_SPI_BUF_SIZE]; - - memset (mosi, 0xff, LSM303D_SPI_BUF_SIZE); - memset (miso, 0xff, LSM303D_SPI_BUF_SIZE); - - mosi[0] = addr; - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, miso, len+1)) - { - error_dev ("Could not read data from SPI", __FUNCTION__, dev); - dev->error_code |= LSM303D_SPI_READ_FAILED; - return false; - } - - // shift data one by left, first byte received while sending register address is invalid - for (int i=0; i < len; i++) - data[i] = miso[i+1]; - - #ifdef LSM303D_DEBUG_LEVEL_2 - printf("LSM303D %s: read the following bytes from reg %02x: ", __FUNCTION__, reg); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); - #endif - - return true; -} - - -static bool lsm303d_spi_write(lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - uint8_t addr = (reg & 0x3f) | LSM303D_SPI_WRITE_FLAG | LSM303D_SPI_AUTO_INC_FLAG; - - static uint8_t mosi[LSM303D_SPI_BUF_SIZE]; - - if (len >= LSM303D_SPI_BUF_SIZE) - { - dev->error_code |= LSM303D_SPI_BUFFER_OVERFLOW; - error_dev ("Error on write to SPI slave on bus 1. Tried to transfer more" - "than %d byte in one write operation.", - __FUNCTION__, dev, LSM303D_SPI_BUF_SIZE); - - return false; - } - - reg &= 0x7f; - - // first byte in output is the register address - mosi[0] = addr; - - // shift data one byte right, first byte in output is the register address - for (int i = 0; i < len; i++) - mosi[i+1] = data[i]; - - #ifdef LSM303D_DEBUG_LEVEL_2 - printf("LSM303D %s: Write the following bytes to reg %02x: ", __FUNCTION__, reg); - for (int i = 1; i < len+1; i++) - printf("%02x ", mosi[i]); - printf("\n"); - #endif - - if (!spi_transfer_pf (dev->bus, dev->cs, mosi, NULL, len+1)) - { - error_dev ("Could not write data to SPI.", __FUNCTION__, dev); - dev->error_code |= LSM303D_SPI_WRITE_FAILED; - return false; - } - - return true; -} - - -#define I2C_AUTO_INCREMENT (0x80) - -static bool lsm303d_i2c_read(lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Read %d byte from i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - if (len > 1) - reg |= I2C_AUTO_INCREMENT; - - int result = i2c_slave_read(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? LSM303D_I2C_BUSY : LSM303D_I2C_READ_FAILED; - error_dev ("Error %d on read %d byte from I2C slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef LSM303D_DEBUG_LEVEL_2 - printf("LSM303D %s: Read following bytes: ", __FUNCTION__); - printf("%02x: ", reg & 0x7f); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif - - return true; -} - - -static bool lsm303d_i2c_write(lsm303d_sensor_t* dev, uint8_t reg, uint8_t *data, uint16_t len) -{ - if (!dev || !data) return false; - - debug_dev ("Write %d byte to i2c slave register %02x.", __FUNCTION__, dev, len, reg); - - if (len > 1) - reg |= I2C_AUTO_INCREMENT; - - int result = i2c_slave_write(dev->bus, dev->addr, ®, data, len); - - if (result) - { - dev->error_code |= (result == -EBUSY) ? LSM303D_I2C_BUSY : LSM303D_I2C_WRITE_FAILED; - error_dev ("Error %d on write %d byte to i2c slave register %02x.", - __FUNCTION__, dev, result, len, reg); - return false; - } - -# ifdef LSM303D_DEBUG_LEVEL_2 - printf("LSM303D %s: Wrote the following bytes: ", __FUNCTION__); - printf("%02x: ", reg & 0x7f); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif - - return true; -} diff --git a/extras/lsm303d/lsm303d.h b/extras/lsm303d/lsm303d.h deleted file mode 100644 index 514469a..0000000 --- a/extras/lsm303d/lsm303d.h +++ /dev/null @@ -1,587 +0,0 @@ -/** - * Driver for LSM303D 3-axes digital accelerometer and magnetometer connected - * either to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2018 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef __LSM303D_H__ -#define __LSM303D_H__ - -// Uncomment one of the following defines to enable debug output -// #define LSM303D_DEBUG_LEVEL_1 // only error messages -// #define LSM303D_DEBUG_LEVEL_2 // debug and error messages - -// LSM303D addresses -#define LSM303D_I2C_ADDRESS_1 0x1e // SDO pin is low -#define LSM303D_I2C_ADDRESS_2 0x1d // SDO pin is high - -// LSM303D chip id -#define LSM303D_CHIP_ID 0x49 // LSM303D_REG_WHO_AM_I<7:0> - -// Definition of error codes -#define LSM303D_OK 0 -#define LSM303D_NOK -1 - -#define LSM303D_INT_ERROR_MASK 0x000f -#define LSM303D_DRV_ERROR_MASK 0xfff0 - -// Error codes for I2C and SPI interfaces ORed with LSM303D driver error codes -#define LSM303D_I2C_READ_FAILED 1 -#define LSM303D_I2C_WRITE_FAILED 2 -#define LSM303D_I2C_BUSY 3 -#define LSM303D_SPI_WRITE_FAILED 4 -#define LSM303D_SPI_READ_FAILED 5 -#define LSM303D_SPI_BUFFER_OVERFLOW 6 - -// LSM303D driver error codes ORed with error codes for I2C and SPI interfaces -#define LSM303D_WRONG_CHIP_ID ( 1 << 8) -#define LSM303D_WRONG_BANDWIDTH ( 2 << 8) -#define LSM303D_GET_RAW_A_DATA_FAILED ( 3 << 8) -#define LSM303D_GET_RAW_A_DATA_FIFO_FAILED ( 4 << 8) -#define LSM303D_GET_RAW_M_DATA_FAILED ( 5 << 8) -#define LSM303D_GET_RAW_T_DATA_FAILED ( 6 << 8) -#define LSM303D_INT_TYPE_WRONG ( 8 << 8) -#define LSM303D_INT_ENABLE_FAILED ( 9 << 8) -#define LSM303D_CONFIG_INT_SIGNALS_FAILED (10 << 8) -#define LSM303D_GET_INT_DATA_SOURCE_FAILED (11 << 8) -#define LSM303D_SET_M_THRESH_CONFIG_FAILED (12 << 8) -#define LSM303D_GET_M_THRESH_CONFIG_FAILED (13 << 8) -#define LSM303D_GET_M_THRESH_SOURCE_FAILED (14 << 8) -#define LSM303D_SET_EVENT_CONFIG_FAILED (15 << 8) -#define LSM303D_GET_EVENT_CONFIG_FAILED (16 << 8) -#define LSM303D_GET_EVENT_SOURCE_FAILED (17 << 8) -#define LSM303D_SET_CLICK_CONFIG_FAILED (18 << 8) -#define LSM303D_GET_CLICK_CONFIG_FAILED (19 << 8) -#define LSM303D_GET_CLICK_SOURCE_FAILED (20 << 8) -#define LSM303D_CONFIG_HPF_FAILED (21 << 8) -#define LSM303D_SET_HPF_REF_FAILED (22 << 8) -#define LSM303D_GET_HPF_REF_FAILED (23 << 8) -#define LSM303D_SET_M_OFFSET_FAILED (24 << 8) -#define LSM303D_GET_M_OFFSET_FAILED (25 << 8) -#define LSM303D_GET_ADC_DATA_FAILED (26 << 8) -#define LSM303D_SENSOR_IN_BYPASS_MODE (27 << 8) -#define LSM303D_SENSOR_IN_FIFO_MODE (28 << 8) -#define LSM303D_ODR_TOO_HIGH (29 << 8) -#define LSM303D_FIFO_THRESHOLD_INVALID (30 << 8) -#define LSM303D_FIFO_GET_SRC_FAILED (31 << 8) - -#include "lsm303d_platform.h" -#include "lsm303d_types.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief Initialize the sensor - * - * Reset the sensor and switch to power down mode. All registers are reset to - * default values. FIFO is cleared. - * - * @param bus I2C or SPI bus at which LSM303D sensor is connected - * @param addr I2C addr of the LSM303D sensor, 0 for using SPI - * @param cs SPI CS GPIO, ignored for I2C - * @return pointer to sensor data structure, or NULL on error - */ -lsm303d_sensor_t* lsm303d_init_sensor (uint8_t bus, uint8_t addr, uint8_t cs); - - -/** - * @brief Set accelerator sensor mode - * - * @param dev pointer to the sensor device data structure - * @param odr accelerator output data rate (ODR) - * @param bw accelerator anti-alias filter bandwidth - * @param x true enable x-axis, false disable x-axis - * @param y true enable y-axis, false disable y-axis - * @param z true enable z-axis, false disable z-axis - * @return true on success, false on error - */ -bool lsm303d_set_a_mode (lsm303d_sensor_t* dev, - lsm303d_a_odr_t odr, lsm303d_a_aaf_bw_t bw, - bool x, bool y, bool z); - -/** - * @brief Set magnetometer sensor mode - * - * @param dev pointer to the sensor device data structure - * @param odr magnetometer output data rate (ODR) - * @param res magnetometer resolution - * @param mode magnetometer mode (ODR) - * @return true on success, false on error - */ -bool lsm303d_set_m_mode (lsm303d_sensor_t* dev, - lsm303d_m_odr_t odr, - lsm303d_m_resolution_t res, - lsm303d_m_mode_t mode); - -/** - * @brief Set accelerator scale (full scale) - * - * @param dev pointer to the sensor device data structure - * @param scale full scale (default 2 g) - * @return true on success, false on error - */ -bool lsm303d_set_a_scale (lsm303d_sensor_t* dev, lsm303d_a_scale_t scale); - - -/** - * @brief Set magnetometer scale (full scale) - * - * @param dev pointer to the sensor device data structure - * @param scale full scale (default 4 Gauss) - * @return true on success, false on error - */ -bool lsm303d_set_m_scale (lsm303d_sensor_t* dev, lsm303d_m_scale_t scale); - - -/** - * @brief Test whether new acceleration data samples are available - * - * When the FIFO is used, it returns true if at least one acceleration - * data sample is stored in the FIFO. Otherwise it returns true when new - * acceleration data are available in the output registers. - * - * @param dev pointer to the sensor device data structure - * @return true on new data, otherwise false - */ -bool lsm303d_new_a_data (lsm303d_sensor_t* dev); - - -/** - * @brief Test whether new magnetometer data samples are available - * - * @param dev pointer to the sensor device data structure - * @return true on new data, otherwise false - */ -bool lsm303d_new_m_data (lsm303d_sensor_t* dev); - - -/** - * @brief Get one acceleration data sample as floating point values (unit g) - * - * Function works only in bypass mode and fails in FIFO modes. In FIFO modes, - * function *lsm303d_get_a_float_data_fifo* has to be used instead to get data. - * - * @param dev pointer to the sensor device data structure - * @param data pointer to float data structure filled with g values - * @return true on success, false on error - */ -bool lsm303d_get_float_a_data (lsm303d_sensor_t* dev, - lsm303d_float_a_data_t* data); - - -/** - * @brief Get all samples of acceleration data stored in the FIFO (unit g) - * - * In bypass mode, it returns only one sensor data sample. - * - * @param dev pointer to the sensor device data structure - * @param data array of 32 float data structures filled with g values - * @return number of data sets read from fifo on success or 0 on error - */ -uint8_t lsm303d_get_float_a_data_fifo (lsm303d_sensor_t* dev, - lsm303d_float_a_data_fifo_t data); - - -/** - * @brief Get one magnetic data sample as floating point values (unit Gauss) - * - * @param dev pointer to the sensor device data structure - * @param data pointer to float data structure filled with magnetic values - * @return true on success, false on error - */ -bool lsm303d_get_float_m_data (lsm303d_sensor_t* dev, - lsm303d_float_m_data_t* data); - - -/** - * @brief Get one sample of raw acceleration data as 16 bit two's complements - * - * Function works only in bypass mode and fails in FIFO modes. In FIFO modes, - * function *lsm303d_get_a_raw_data_fifo* has to be used instead to get data. - * - * @param dev pointer to the sensor device data structure - * @param raw pointer to raw data structure filled with values - * @return true on success, false on error - */ -bool lsm303d_get_raw_a_data (lsm303d_sensor_t* dev, lsm303d_raw_a_data_t* raw); - - -/** - * @brief Get all samples of raw sensor data stored in the FIFO - * - * In bypass mode, it returns only one raw data sample. - * - * @param dev pointer to the sensor device data structure - * @param raw array of 32 raw data structures - * @return number of data sets read from fifo on success or 0 on error - */ -uint8_t lsm303d_get_raw_a_data_fifo (lsm303d_sensor_t* dev, - lsm303d_raw_a_data_fifo_t raw); - - -/** - * @brief Get one sample of raw magnetic data as 16 bit two's complements - * - * @param dev pointer to the sensor device data structure - * @param raw pointer to raw data structure filled with values - * @return true on success, false on error - */ -bool lsm303d_get_raw_m_data (lsm303d_sensor_t* dev, lsm303d_raw_m_data_t* raw); - - -/** - * @brief Set FIFO mode (for acceleration data only) - * - * FIFO threshold can be used to generate an interrupt when FIFO content - * exceeds the value. It is ignored in bypass mode. - * - * @param dev pointer to the sensor device data structure - * @param mode FIFO mode - * @param thresh FIFO threshold (ignored in bypass mode) - * @return true on success, false on error - */ -bool lsm303d_set_fifo_mode (lsm303d_sensor_t* dev, lsm303d_fifo_mode_t mode, - uint8_t thresh); - - -/** - * @brief Enable / disable an interrupt on signal INT1 or INT2 - * - * @param dev pointer to the sensor device data structure - * @param type interrupt to be enabled or disabled - * @param signal interrupt signal that is activated for the interrupt - * @param value true to enable or false to disable the interrupt - * @return true on success, false on error - */ -bool lsm303d_enable_int (lsm303d_sensor_t* dev, - lsm303d_int_type_t type, - lsm303d_int_signal_t signal, bool value); - - -/** - * @brief Get the source of data ready and FIFO interrupts on INT1 or INT2 - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source - * @return true on success, false on error - */ -bool lsm303d_get_int_data_source (lsm303d_sensor_t* dev, - lsm303d_int_data_source_t* source); - -/** - * @brief Set the configuration of the magnetic threshold interrupt generator - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @return true on success, false on error - */ -bool lsm303d_set_int_m_thresh_config (lsm303d_sensor_t* dev, - lsm303d_int_m_thresh_config_t* config); - - -/** - * @brief Get the configuration of the magnetic threshold interrupt generator - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @return true on success, false on error - */ -bool lsm303d_get_int_m_thresh_config (lsm303d_sensor_t* dev, - lsm303d_int_m_thresh_config_t* config); - - -/** - * @brief Get the source of the magnetic threshold interrupt on INT/INT2 - * - * Returns a byte with flags that indicate the value(s) that triggered - * the interrupt signal (see INT_SRC_M register in datasheet for details) - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source - * @return true on success, false on error - */ -bool lsm303d_get_int_m_thresh_source (lsm303d_sensor_t* dev, - lsm303d_int_m_thresh_source_t* source); - - -/** - * @brief Set the configuration of an inertial event interrupt generator - * - * Inertial interrupt generators produce interrupts when certain inertial event - * occures (event interrupts), that is, the acceleration of defined axes is - * higher or lower than a defined threshold and one of the following event is - * recognized: axis movement or 6D/4D orientation detection. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @param gen interrupt generator to which the function is applied - * @return true on success, false on error - */ -bool lsm303d_set_int_event_config (lsm303d_sensor_t* dev, - lsm303d_int_event_config_t* config, - lsm303d_int_event_gen_t gen); - - -/** - * @brief Get the configuration of an inertial interrupt generator - * - * Inertial interrupt generators produce interrupts when certain inertial event - * occures (event interrupts), that is, the acceleration of defined axes is - * higher or lower than a defined threshold and one of the following event is - * recognized: axis movement or 6D/4D orientation detection. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @param gen interrupt generator to which the function is applied - * @return true on success, false on error - */ -bool lsm303d_get_int_event_config (lsm303d_sensor_t* dev, - lsm303d_int_event_config_t* config, - lsm303d_int_event_gen_t gen); - - -/** - * @brief Get the source of an inertial event interrupt on signal INT1/INT2 - * - * Returns a byte with flags that indicate the event that triggered - * the interrupt signal (see IG_SRCx register in datasheet for details) - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source data structure - * @param gen interrupt generator to which the function is applied - * @return true on success, false on error - */ -bool lsm303d_get_int_event_source (lsm303d_sensor_t* dev, - lsm303d_int_event_source_t* source, - lsm303d_int_event_gen_t gen); - - -/** - * @brief Set the configuration of the click detection interrupt generator - * - * Set the configuration for interrupts that are generated when single or - * double clicks are detected. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @return true on success, false on error - */ -bool lsm303d_set_int_click_config (lsm303d_sensor_t* dev, - lsm303d_int_click_config_t* config); - -/** - * @brief Get the configuration of the click detection interrupt generator - * - * Set the configuration for interrupts that are generated when single or - * double clicks are detected. - * - * @param dev pointer to the sensor device data structure - * @param config pointer to the interrupt generator configuration - * @return true on success, false on error - */ -bool lsm303d_get_int_click_config (lsm303d_sensor_t* dev, - lsm303d_int_click_config_t* config); - - -/** - * @brief Get the source of the click detection interrupt on signal INT1/INT2 - * - * Returns a byte with flags that indicate the activity which triggered - * the interrupt signal (see CLICK_SRC register in datasheet for details) - * - * @param dev pointer to the sensor device data structure - * @param source pointer to the interrupt source - * @return true on success, false on error - */ -bool lsm303d_get_int_click_source (lsm303d_sensor_t* dev, - lsm303d_int_click_source_t* source); - - -/** - * @brief Set signal configuration for INT1 and INT2 signals - * - * @param dev pointer to the sensor device data structure - * @param type define interrupt signal as pushed/pulled or open drain - * @return true on success, false on error - */ -bool lsm303d_config_int_signals (lsm303d_sensor_t* dev, - lsm303d_int_signal_type_t type); - - -/** - * @brief Configure HPF (high pass filter) for acceleration data - * - * The function resets implicitly reset the reference by a dummy read. - * - * @param dev pointer to the sensor device data structure - * @param mode filter mode - * @param data if true, use filtered data as sensor output - * @param click if true, use filtered data for CLICK function - * @param int1 if true, use filtered data for interrupt generator INT1 - * @param int2 if true, use filtered data for interrupt generator INT2 - * @return true on success, false on error - */ -bool lsm303d_config_a_hpf (lsm303d_sensor_t* dev, - lsm303d_hpf_mode_t mode, - bool data, bool click, bool int1, bool int2); - - -/** - * @brief Set HPF (high pass filter) reference for acceleration data - * - * Used to set the reference of HPF in reference mode *lsm303d_hpf_reference*. - * Used to reset the HPF in autoreset mode *lsm303d_hpf_autoreset*. - * Reference is given as two's complement. - * - * @param dev pointer to the sensor device data structure - * @param x_ref x reference *lsm303d_hpf_reference* mode, otherwise ignored - * @param y_ref y reference *lsm303d_hpf_reference* mode, otherwise ignored - * @param z_ref z reference *lsm303d_hpf_reference* mode, otherwise ignored - * @return true on success, false on error - */ -bool lsm303d_set_a_hpf_ref (lsm303d_sensor_t* dev, - int8_t x_ref, int8_t y_ref, int8_t z_ref); - - -/** - * @brief Get HPF (high pass filter) reference - * - * Used to reset the HPF in normal mode *lsm303d_hpf_normal*. - * - * @param dev pointer to the sensor device data structure - * @param x_ref pointer to variable filled with x reference - * @param y_ref pointer to variable filled with y reference - * @param z_ref pointer to variable filled with z reference - * @return true on success, false on error - */ -bool lsm303d_get_a_hpf_ref (lsm303d_sensor_t* dev, - int8_t* x_ref, int8_t* y_ref, int8_t* z_ref); - - -/** - * @brief Set magnetic offset - * - * @param dev pointer to the sensor device data structure - * @param x magnetic offset for x axis - * @param y magnetic offset for y axis - * @param z magnetic offset for z axis - * @return true on success, false on error - */ -bool lsm303d_set_m_offset (lsm303d_sensor_t* dev, - int16_t x, int16_t y, int16_t z); - - -/** - * @brief Get magnetic offset - * - * @param dev pointer to the sensor device data structure - * @param x magnetic offset for x axis - * @param y magnetic offset for y axis - * @param z magnetic offset for z axis - * @return true on success, false on error - */ -bool lsm303d_get_m_offset (lsm303d_sensor_t* dev, - int16_t* x, int16_t* y, int16_t* z); - - -/** - * @brief Enable/Disable temperature sensor - * - * @param dev pointer to the sensor device data structure - * @param enable if true, temperature sensor is enabled - * @return true on success, false on error - */ -bool lsm303d_enable_temperature (lsm303d_sensor_t* dev, bool enable); - - -/** - * @brief Get temperature - * - * @param dev pointer to the sensor device data structure - * @return temperature in degree - */ -float lsm303d_get_temperature (lsm303d_sensor_t* dev); - - -// ---- Low level interface functions ----------------------------- - -/** - * @brief Direct write to register - * - * PLEASE NOTE: This function should only be used to do something special that - * is not covered by the high level interface AND if you exactly know what you - * do and what effects it might have. Please be aware that it might affect the - * high level interface. - * - * @param dev pointer to the sensor device data structure - * @param reg address of the first register to be changed - * @param data pointer to the data to be written to the register - * @param len number of bytes to be written to the register - * @return true on success, false on error - */ -bool lsm303d_reg_write (lsm303d_sensor_t* dev, - uint8_t reg, uint8_t *data, uint16_t len); - -/** - * @brief Direct read from register - * - * PLEASE NOTE: This function should only be used to do something special that - * is not covered by the high level interface AND if you exactly know what you - * do and what effects it might have. Please be aware that it might affect the - * high level interface. - * - * @param dev pointer to the sensor device data structure - * @param reg address of the first register to be read - * @param data pointer to the data to be read from the register - * @param len number of bytes to be read from the register - * @return true on success, false on error - */ -bool lsm303d_reg_read (lsm303d_sensor_t* dev, - uint8_t reg, uint8_t *data, uint16_t len); - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __LSM303D_H__ */ diff --git a/extras/lsm303d/lsm303d_platform.c b/extras/lsm303d/lsm303d_platform.c deleted file mode 100644 index 118d295..0000000 --- a/extras/lsm303d/lsm303d_platform.c +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Driver for LSM303D 3-axes digital accelerometer and magnetometer connected - * either to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#include "lsm303d_platform.h" - -// platform specific SPI functions - -static const spi_settings_t bus_settings = { - .mode = SPI_MODE0, - .freq_divider = SPI_FREQ_DIV_1M, - .msb = true, - .minimal_pins = false, - .endianness = SPI_LITTLE_ENDIAN -}; - -bool spi_device_init (uint8_t bus, uint8_t cs) -{ - gpio_enable(cs, GPIO_OUTPUT); - gpio_write (cs, true); - return true; -} - -size_t spi_transfer_pf(uint8_t bus, uint8_t cs, const uint8_t *mosi, uint8_t *miso, uint16_t len) -{ - spi_settings_t old_settings; - - spi_get_settings(bus, &old_settings); - spi_set_settings(bus, &bus_settings); - gpio_write(cs, false); - - size_t transfered = spi_transfer (bus, (const void*)mosi, (void*)miso, len, SPI_8BIT); - - gpio_write(cs, true); - spi_set_settings(bus, &old_settings); - - return transfered; -} - diff --git a/extras/lsm303d/lsm303d_platform.h b/extras/lsm303d/lsm303d_platform.h deleted file mode 100644 index 7daac4e..0000000 --- a/extras/lsm303d/lsm303d_platform.h +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Driver for LSM303D 3-axes digital accelerometer and magnetometer connected - * either to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#ifndef __LSM303D_PLATFORM_H__ -#define __LSM303D_PLATFORM_H__ - -#if !defined(ESP_OPEN_RTOS) -#define ESP_OPEN_RTOS 1 -#endif - -#ifdef ESP_OPEN_RTOS // ESP8266 - -// platform specific includes - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" - -#include "espressif/esp_common.h" -#include "espressif/sdk_private.h" - -#include "esp/uart.h" -#include "esp/spi.h" -#include "i2c/i2c.h" - -// platform specific SPI functions - -#define spi_bus_init(bus,sck,miso,mosi) // not needed on ESP8266 - -extern bool spi_device_init (uint8_t bus, uint8_t cs); -extern size_t spi_transfer_pf (uint8_t bus, uint8_t cs, - const uint8_t *mosi, uint8_t *miso, - uint16_t len); - -#endif // ESP_OPEN_RTOS - -#endif // __LSM303D_PLATFORM_H__ diff --git a/extras/lsm303d/lsm303d_types.h b/extras/lsm303d/lsm303d_types.h deleted file mode 100644 index 8b6787f..0000000 --- a/extras/lsm303d/lsm303d_types.h +++ /dev/null @@ -1,483 +0,0 @@ -/** - * Driver for LSM303D 3-axes digital accelerometer and magnetometer connected - * either to I2C or SPI. - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * --------------------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2018 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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 Activity 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. - */ - -#ifndef __LSM303D_TYPES_H__ -#define __LSM303D_TYPES_H__ - -#include "stdint.h" -#include "stdbool.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/** - * @brief Accelerator output data rates (A_ODR) - */ -typedef enum { - - lsm303d_a_power_down = 0, // power down mode (default) - lsm303d_a_odr_3_125, // normal power mode 3.125 Hz - lsm303d_a_odr_6_25, // normal power mode 6.25 Hz - lsm303d_a_odr_12_5, // normal power mode 12.5 Hz - lsm303d_a_odr_25, // normal power mode 25 Hz - lsm303d_a_odr_50, // normal power mode 50 Hz - lsm303d_a_odr_100, // normal power mode 100 Hz - lsm303d_a_odr_200, // normal power mode 200 Hz - lsm303d_a_odr_400, // normal power mode 400 Hz - lsm303d_a_odr_800, // normal power mode 800 Hz - lsm303d_a_odr_1600, // normal power mode 1.6 kHz - -} lsm303d_a_odr_t; - -/** - * @brief Accelerator anti-alias filter (A_AAF) bandwidth (BW) in Hz - */ -typedef enum { - - lsm303d_a_aaf_bw_773 = 0, // default - lsm303d_a_aaf_bw_194, - lsm303d_a_aaf_bw_362, - lsm303d_a_aaf_bw_50 - -} lsm303d_a_aaf_bw_t; - -/** - * @brief Accelerator full scale ranges (A_SCALE) in g - */ -typedef enum { - - lsm303d_a_scale_2_g = 0, // default - lsm303d_a_scale_4_g, - lsm303d_a_scale_6_g, - lsm303d_a_scale_8_g, - lsm303d_a_scale_16_g - -} lsm303d_a_scale_t; - -/** - * @brief Magnetometer output data rates (M_ODR) - */ -typedef enum { - - lsm303d_m_odr_3_125 = 0, // normal power mode at 3.125 Hz - lsm303d_m_odr_6_25, // normal power mode at 6.25 Hz - lsm303d_m_odr_12_5, // normal power mode at 12.5 Hz - lsm303d_m_odr_25, // normal power mode at 25 Hz - lsm303d_m_odr_50, // normal power mode at 50 Hz - lsm303d_m_odr_100, // normal power mode at 100 Hz - lsm303d_m_do_not_use, // power down mode (default) - lsm303d_m_low_power // low power mode at 3.125 Hz - -} lsm303d_m_odr_t; - -/** - * @brief Magnetometer sensor mode (M_MODE) - */ -typedef enum { - - lsm303d_m_continuous = 0, // continuous conversion mode - lsm303d_m_single, // single conversion mode (default) - lsm303d_m_power_down // power-down mode - -} lsm303d_m_mode_t; - - -/** - * @brief Magnetometer resolution selection - */ -typedef enum { - - lsm303d_m_low_res, // low resolution (default) - lsm303d_m_high_res // high resolution - -} lsm303d_m_resolution_t; - -/** - * @brief Magnetometer full scale ranges (M_SCALE) in Gauss (Gs) - */ -typedef enum { - - lsm303d_m_scale_2_Gs = 0, - lsm303d_m_scale_4_Gs, // default - lsm303d_m_scale_8_Gs, - lsm303d_m_scale_12_Gs - -} lsm303d_m_scale_t; - -/** - * @brief FIFO mode for accelerator data - */ -typedef enum { - - lsm303d_bypass = 0, // default - lsm303d_fifo, - lsm303d_stream, - lsm303d_stream_to_fifo, - lsm303d_bypass_to_stream - -} lsm303d_fifo_mode_t; - -/** - * @brief Interrupt signals - */ -typedef enum { - - lsm303d_int1_signal = 0, - lsm303d_int2_signal = 1 - -} lsm303d_int_signal_t; - - -/** - * @brief INT1, INT2 signal type - */ -typedef enum { - - lsm303d_push_pull = 0, - lsm303d_open_drain - -} lsm303d_int_signal_type_t; - - -/** - * @brief Inertial event interrupt generators - */ -typedef enum { - - lsm303d_int_event1_gen = 0, - lsm303d_int_event2_gen = 1 - -} lsm303d_int_event_gen_t; - - -/** - * @brief Interrupt types for interrupt signals INT1/INT2 - */ -typedef enum { - - lsm303d_int_a_data_ready, // acceleration data ready for read interrupt - lsm303d_int_m_data_ready, // magnetic data ready for read interrupt - - lsm303d_int_fifo_empty, // FIFO is empty (only INT1) - lsm303d_int_fifo_thresh, // FIFO exceeds the threshold (only INT2) - lsm303d_int_fifo_overrun, // FIFO is completely filled (only INT2) - - lsm303d_int_event1, // inertial event interrupt 1 - lsm303d_int_event2, // inertial event interrupt 2 - - lsm303d_int_click, // click detection interrupt - - lsm303d_int_m_thresh // magnetic threshold interrupt - -} lsm303d_int_type_t; - - -/** - * @brief Data ready and FIFO interrupt source for INT1/INT2 - */ -typedef struct { - - bool a_data_ready; // true when acceleration data are ready to read - bool m_data_ready; // true when magnetic data are ready to read - - bool fifo_empty; // true when FIFO is empty - bool fifo_thresh; // true when FIFO exceeds the FIFO threshold - bool fifo_overrun; // true when FIFO is completely filled - -} lsm303d_int_data_source_t; - - -/** - * @brief Magnetic threshold interrupt configuration for INT1/INT2 signals - */ -typedef struct { - - uint16_t threshold; // threshold used for interrupt generation - - bool x_enabled; // true - x exceeds threshold on positive side - bool y_enabled; // true - y exceeds threshold on positive side - bool z_enabled; // true - z exceeds threshold on positive side - - bool latch; // true - latch the interrupt until the interrupt - // source has been read - enum - { - lsm303d_low_active = 0, - lsm303d_high_active = 1 - - } signal_level; // level of interrupt signal - -} lsm303d_int_m_thresh_config_t; - - -/** - * @brief Magnetic threshold interrupt source of INT1/INT2 signals - */ -typedef struct { - - bool x_pos :1; // true - x exceeds threshold on positive side - bool y_pos :1; // true - y exceeds threshold on positive side - bool z_pos :1; // true - z exceeds threshold on positive side - - bool x_neg :1; // true - x exceeds threshold on negative side - bool y_neg :1; // true - y exceeds threshold on negative side - bool z_neg :1; // true - z exceeds threshold on negative side - - bool mroi :1; // true - internal measurement range overflow - bool active:1; // true - interrupt event occured - -} lsm303d_int_m_thresh_source_t; - - -/** - * @brief Inertial interrupt generator configuration for INT1/INT2 - * - * Inertial events are: axis movement and 6D/4D detection. - */ -typedef struct { - - enum // interrupt mode - { // AOI (IG_CFGx), 6D (IG_CFGx), 4D (INT_CTRL_M) - - lsm303d_or, // AOI = 0, 6D = 0, 4D = X - lsm303d_and, // AOI = 1, 6D = 0, 4D = X - - lsm303d_6d_movement, // AOI = 0, 6D = 1, 4D = 0 - lsm303d_6d_position, // AOI = 1, 6D = 1, 4D = 0 - - lsm303d_4d_movement, // AOI = 0, 6D = 1, 4D = 1 - lsm303d_4d_position, // AOI = 1, 6D = 1, 4D = 1 - - } mode; - - uint8_t threshold; // threshold used for comparison for all axes - - bool x_low_enabled; // x lower than threshold interrupt enabled - bool x_high_enabled; // x higher than threshold interrupt enabled - - bool y_low_enabled; // y lower than threshold interrupt enabled - bool y_high_enabled; // y higher than threshold interrupt enabled - - bool z_low_enabled; // z lower than threshold interrupt enabled - bool z_high_enabled; // z higher than threshold interrupt enabled - - bool latch; // latch the interrupt when true until the - // interrupt source has been read - - uint8_t duration; // duration in 1/ODR an interrupt condition has - // to be given before the interrupt is generated - -} lsm303d_int_event_config_t; - - -/** - * @brief Inertial event source type for interrupt generator INT1/INT2 - */ -typedef struct { - - bool active:1; // true - one ore more events occured - - bool x_low :1; // true - x is lower than threshold event - bool x_high:1; // true - x is higher than threshold event - - bool y_low :1; // true - z is lower than threshold event - bool y_high:1; // true - z is higher than threshold event - - bool z_low :1; // true - z is lower than threshold event - bool z_high:1; // true - z is higher than threshold event - -} lsm303d_int_event_source_t; - - -/** - * @brief Click interrupt configuration for interrupt signals INT1/INT2 - */ -typedef struct { - - bool x_single; // x-axis single tap interrupt enabled - bool x_double; // x-axis double tap interrupt enabled - - bool y_single; // y-axis single tap interrupt enabled - bool y_double; // y-axis double tap interrupt enabled - - bool z_single; // z-axis single tap interrupt enabled - bool z_double; // z-axis double tap interrupt enabled - - uint8_t threshold; // threshold used for comparison for all axes - - bool latch; // latch the interrupt when true until the - // interrupt source has been read - - uint8_t time_limit; // maximum time interval between the start and the - // end of a cick (accel increases and falls back) - uint8_t time_latency; // click detection is disabled for that time after - // a was click detected (in 1/ODR) - uint8_t time_window; // time interval in which the second click has to - // to be detected in double clicks (in 1/ODR) - -} lsm303d_int_click_config_t; - - -/** - * @brief Click interrupt source for interrupt signals INT1/INT2 - */ -typedef struct { - - bool x_click:1; // click detected in x direction - bool y_click:1; // click detected in y direction - bool z_click:1; // click detected in z direction - - bool sign :1; // click sign (0 - posisitive, 1 - negative) - - bool s_click:1; // single click detected - bool d_click:1; // double click detected - - bool active :1; // true - one ore more event occured - -} lsm303d_int_click_source_t; - - -/** - * @brief HPF (high pass filter) modes for acceleration data - */ -typedef enum { - - lsm303d_hpf_normal = 0, // normal mode (reset by reading references) - lsm303d_hpf_reference, // reference signal used for filtering - lsm303d_hpf_normal_x, // normal mode - lsm303d_hpf_autoreset // autoreset on interrupt event - -} lsm303d_hpf_mode_t; - - -/** - * @brief Raw accelerations data set of as two complements - */ -typedef struct { - - int16_t ax; // acceleration on x axis - int16_t ay; // acceleration on y axis - int16_t az; // acceleration on z axis - -} lsm303d_raw_a_data_t; - - -/** - * @brief Raw acceleration data FIFO type - */ -typedef lsm303d_raw_a_data_t lsm303d_raw_a_data_fifo_t[32]; - - -/** - * @brief Floating point accelerations output value set in g - */ -typedef struct { - - float ax; // acceleration on x axis - float ay; // acceleration on y axis - float az; // acceleration on z axis - -} lsm303d_float_a_data_t; - - -/** - * @brief Floating point accelerations output value FIFO type - */ -typedef lsm303d_float_a_data_t lsm303d_float_a_data_fifo_t[32]; - - -/** - * @brief Raw magnetic data set as two's complements - */ -typedef struct { - - int16_t mx; // magnetic value on x axis - int16_t my; // magnetic value on y axis - int16_t mz; // magnetic value on z axis - -} lsm303d_raw_m_data_t; - - -/** - * @brief Floating point magnetic output value set in Gauss - */ -typedef struct { - - float mx; // magnetic value on x axis - float my; // magnetic value on y axis - float mz; // magnetic value on z axis - -} lsm303d_float_m_data_t; - - -/** - * @brief LSM303D sensor device data structure type - */ -typedef struct { - - int error_code; // error code of last operation - - uint8_t bus; // I2C = x, SPI = 1 - uint8_t addr; // I2C = slave address, SPI = 0 - - uint8_t cs; // ESP8266, ESP32: GPIO used as SPI CS - // __linux__: device index - - lsm303d_a_scale_t a_scale; // acceleration full scale (default 2 g) - lsm303d_m_scale_t m_scale; // magnetic full scale (default 4 Gauss) - lsm303d_m_resolution_t m_res; // magnetic resolution (default low) - - lsm303d_fifo_mode_t fifo_mode; // FIFO operation mode (default bypass) - bool fifo_first; // first FIFO access - -} lsm303d_sensor_t; - - -#ifdef __cplusplus -} -#endif /* End of CPP guard */ - -#endif /* __LSM303D_TYPES_H__ */ diff --git a/extras/mactimer/component.mk b/extras/mactimer/component.mk deleted file mode 100644 index 9575109..0000000 --- a/extras/mactimer/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/mactimer - -# Expected anyone using mactimer includes it as 'mactimer/mactimer.h' -INC_DIRS += $(mactimer_ROOT).. - -# args for passing into compile rule generation -mactimer_INC_DIR = -mactimer_SRC_DIR = $(mactimer_ROOT) - -$(eval $(call component_compile_rules,mactimer)) diff --git a/extras/mactimer/mactimer.c b/extras/mactimer/mactimer.c deleted file mode 100644 index a323b7d..0000000 --- a/extras/mactimer/mactimer.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - * MAC NMI interrupt based timer support. - * - * Copyright (C) 2018 to 2019 OurAirQuality.org - * - * Licensed under the Apache License, Version 2.0, January 2004 (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/ - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS WITH THE SOFTWARE. - * - */ - -#include -#include -#include -#include -#include "esp/dport_regs.h" -#include "mactimer/mactimer.h" - -/* The MAC timer handler offers a higher priority timer interrupt, but comes - * with some significant practical limitations. - */ - -static mactimer_t* timer_list = 0; - -void mactimer_setfn(mactimer_t *timer, mactimer_func_t *func, void *parg) -{ - timer->callback = func; - timer->timer_arg = parg; - timer->trigger_usec = 0; - timer->next = NULL; -} - -/* Return the Mac timer count, a 64 bit value. - * This can be called without the NMI interrupt disabled. */ -uint64_t IRAM mactime_get_count(void) { - uint32_t high1 = *(uint32_t volatile *)0x3FF21008; - uint32_t low = *(uint32_t volatile *)0x3FF21004; - uint32_t high2 = *(uint32_t volatile *)0x3FF21008; - - if (high1 != high2) { - /* The high word just clocked over, so resample the low value to - * match. It will not change for some time now so the new low word - * matches high2. */ - low = *(uint32_t volatile *)0x3FF21004; - } - - return ((uint64_t)high2 << 32UL) | (uint32_t)low; -} - -/* Set the Mac timer to trigger at the given absolute count. This is expected - * to be called with the NMI disabled, such as from a handler. */ -static inline void IRAM mactime_set_trigger(uint64_t count) { - *(uint32_t volatile *)0x3FF2109C = (uint32_t)count; - *(uint32_t volatile *)0x3FF210A0 = (uint32_t)(count >> 32UL); - *(uint32_t volatile *)0x3FF21098 |= 0x80000000; -} - -/* Insert the timer into the queue to trigger at the given absolute - * count. This does not actually set the timer trigger, and the caller is - * expected to do so. This is typically called from a handler to set the next - * trigger time, and the MAC timer handler sets the next trigger count if - * necessary before returning. */ -void IRAM mactime_add_pending(mactimer_t *timer, uint64_t count) -{ - mactimer_t *prev = NULL; - mactimer_t *curr = timer_list; - while (curr) { - if (((int64_t)count - (int64_t)curr->trigger_usec) < 1) { - break; - } - prev = curr; - curr = curr->next; - } - - timer->next = curr; - timer->trigger_usec = count; - - if (prev != NULL) { - prev->next = timer; - } else { - timer_list = timer; - } -} - -/* This is called outside the NMI context, with the NMI enabled, and it - * disables the NMI to synchronize access to the data structures. If a MAC - * timer handler wishes to set another timeout, such as for a periodic timer, - * then it need only call mactime_add_pending() before returning. - */ -void mactimer_arm(mactimer_t *timer, uint64_t count) -{ - /* Guard against being called withing the NMI handler. */ - if (sdk_NMIIrqIsOn == 0) { - /* Disable the maskable interrupts. */ - vPortEnterCritical(); - /* Disable the NMI. */ - do { - DPORT.DPORT0 &= 0xFFFFFFE0; - } while (DPORT.DPORT0 & 1); - } - - mactime_add_pending(timer, mactime_get_count() + count); - mactime_set_trigger(timer_list->trigger_usec); - - if (sdk_NMIIrqIsOn == 0) { - /* Reenable the NMI. */ - DPORT.DPORT0 = (DPORT.DPORT0 & 0xFFFFFFE0) | 1; - /* Enable the maskable interrupts. */ - vPortExitCritical(); - } -} - -/* This is called outside the NMI context, with the NMI enabled, and it - * disables the NMI to synchronize access to the data structures. - */ -void mactimer_disarm(mactimer_t *timer) -{ - /* Guard against being called withing the NMI handler. */ - if (sdk_NMIIrqIsOn == 0) { - /* Disable the maskable interrupts. */ - vPortEnterCritical(); - /* Disable the NMI. */ - do { - DPORT.DPORT0 &= 0xFFFFFFE0; - } while (DPORT.DPORT0 & 1); - } - - /* Remove timer from the timer_list. */ - mactimer_t *timers = timer_list; - if (timers == timer) { - timer_list = timers->next; - } else { - while (timers) { - mactimer_t *next = timers->next; - if (next == timer) { - timers->next = next->next; - break; - } - timers = next; - } - } - - if (sdk_NMIIrqIsOn == 0) { - /* Reenable the NMI. */ - DPORT.DPORT0 = (DPORT.DPORT0 & 0xFFFFFFE0) | 1; - /* Enable the maskable interrupts. */ - vPortExitCritical(); - } -} - -/* - * NMI handler. The callbacks are called in this NMI context. If there are - * pending timers remaining when done then a new timeout is set. - * - * This is a fragile context that can be called even when processor interrupts - * are masked, so it can not touch data synchronized by disabling maskable - * interrupts. So don't expect to be able call into the FreeRTOS functions or - * the C library etc. - * - * It can be called with a flash operation in progress, so that the flash is - * not readable, so handlers can not depend on code or data stored in - * flash. Keep handlers in IRAM, and watch our for constant data that might be - * linked into flash. - * - * It might delay handling of MAC interrupts which could compromise the Wifi - * handling, so keep any handlers as quick as possible. - */ -static IRAM void mactimer_handler() -{ - while (timer_list) { - if (((int64_t)timer_list->trigger_usec - (int64_t)mactime_get_count()) > 0) { - /* Nothing remaining to handle now. */ - break; - } - - mactimer_t *timer = timer_list; - timer_list = timer->next; - timer->next = NULL; - timer->callback(timer->timer_arg); - } - - if (timer_list) { - /* Reset the trigger. */ - mactime_set_trigger(timer_list->trigger_usec); - } -} - -extern void IRAM sdk_wDev_MacTimSetFunc(void * arg0); - -void mactimer_init() -{ - timer_list = NULL; - - sdk_wDev_MacTimSetFunc(mactimer_handler); -} diff --git a/extras/mactimer/mactimer.h b/extras/mactimer/mactimer.h deleted file mode 100644 index 0a7ad31..0000000 --- a/extras/mactimer/mactimer.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * MAC NMI interrupt based timer support. - * - * Copyright (C) 2018 to 2019 OurAirQuality.org - * - * Licensed under the Apache License, Version 2.0, January 2004 (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/ - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS WITH THE SOFTWARE. - * - */ - -typedef void mactimer_func_t(void *); - -typedef struct mactimer_st { - struct mactimer_st *next; - mactimer_func_t *callback; - uint64_t trigger_usec; - void *timer_arg; -} mactimer_t; - -void mactimer_setfn(mactimer_t *timer, mactimer_func_t *func, void *parg); -uint64_t mactime_get_count(void); -void mactime_add_pending(mactimer_t *timer, uint64_t count); -void mactimer_arm(mactimer_t *timer, uint64_t count); -void mactimer_disarm(mactimer_t *timer); -void mactimer_init(void); diff --git a/extras/max7219/component.mk b/extras/max7219/component.mk deleted file mode 100644 index 29dcf2e..0000000 --- a/extras/max7219/component.mk +++ /dev/null @@ -1,7 +0,0 @@ -# include it as 'max7219/max7219.h' -INC_DIRS += $(max7219_ROOT).. - -# args for passing into compile rule generation -max7219_SRC_DIR = $(max7219_ROOT) - -$(eval $(call component_compile_rules,max7219)) diff --git a/extras/max7219/max7219.c b/extras/max7219/max7219.c deleted file mode 100644 index 34ad069..0000000 --- a/extras/max7219/max7219.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Driver for MAX7219/MAX7221 - * Serially Interfaced, 8-Digit LED Display Drivers - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "max7219.h" -#include -#include -#include - -#include "max7219_priv.h" - -#define SPI_BUS 1 - -//#define MAX7219_DEBUG - -#ifdef MAX7219_DEBUG -#include -#define debug(fmt, ...) printf("%s: " fmt "\n", "MAX7219", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -#define ALL_CHIPS 0xff -#define ALL_DIGITS 8 - -#define REG_DIGIT_0 (1 << 8) -#define REG_DECODE_MODE (9 << 8) -#define REG_INTENSITY (10 << 8) -#define REG_SCAN_LIMIT (11 << 8) -#define REG_SHUTDOWN (12 << 8) -#define REG_DISPLAY_TEST (15 << 8) - -#define VAL_CLEAR_BCD 0x0f -#define VAL_CLEAR_NORMAL 0x00 - -static const spi_settings_t bus_settings = { - .mode = SPI_MODE0, - .freq_divider = SPI_FREQ_DIV_10M, - .msb = true, - .minimal_pins = true, - .endianness = SPI_BIG_ENDIAN -}; - -static void send(const max7219_display_t *disp, uint8_t chip, uint16_t value) -{ - uint16_t buf[MAX7219_MAX_CASCADE_SIZE] = { 0 }; - if (chip == ALL_CHIPS) - { - for (uint8_t i = 0; i < disp->cascade_size; i++) - buf[i] = value; - } - else buf[chip] = value; - - spi_settings_t old_settings; - spi_get_settings(SPI_BUS, &old_settings); - spi_set_settings(SPI_BUS, &bus_settings); - gpio_write(disp->cs_pin, false); - - spi_transfer(SPI_BUS, buf, NULL, disp->cascade_size, SPI_16BIT); - - gpio_write(disp->cs_pin, true); - spi_set_settings(SPI_BUS, &old_settings); -} - -bool max7219_init(max7219_display_t *disp) -{ - if (!disp->cascade_size || disp->cascade_size > MAX7219_MAX_CASCADE_SIZE) - { - debug("Invalid cascade size %d", disp->cascade_size); - return false; - } - - uint8_t max_digits = disp->cascade_size * ALL_DIGITS; - if (!disp->digits || disp->digits > max_digits) - { - debug("Invalid digits count %d, max %d", disp->cascade_size, max_digits); - return false; - } - - gpio_enable(disp->cs_pin, GPIO_OUTPUT); - gpio_write(disp->cs_pin, true); - - // Shutdown all chips - max7219_set_shutdown_mode(disp, true); - // Disable test - send(disp, ALL_CHIPS, REG_DISPLAY_TEST); - // Set max scan limit - send(disp, ALL_CHIPS, REG_SCAN_LIMIT | (ALL_DIGITS - 1)); - // Set normal decode mode & clear display - max7219_set_decode_mode(disp, false); - // Set minimal brightness - max7219_set_brightness(disp, 0); - // Wake up - max7219_set_shutdown_mode(disp, false); - - return true; -} - -void max7219_set_decode_mode(max7219_display_t *disp, bool bcd) -{ - disp->bcd = bcd; - send(disp, ALL_CHIPS, REG_DECODE_MODE | (bcd ? 0xff : 0)); - max7219_clear(disp); -} - -void max7219_set_brightness(const max7219_display_t *disp, uint8_t value) -{ - send(disp, ALL_CHIPS, REG_INTENSITY | (value > MAX7219_MAX_BRIGHTNESS ? MAX7219_MAX_BRIGHTNESS : value)); -} - -void max7219_set_shutdown_mode(const max7219_display_t *disp, bool shutdown) -{ - send(disp, ALL_CHIPS, REG_SHUTDOWN | !shutdown); -} - -bool max7219_set_digit(const max7219_display_t *disp, uint8_t digit, uint8_t val) -{ - if (digit >= disp->digits) - { - debug("Invalid digit: %d", digit); - return false; - } - - if (disp->mirrored) - digit = disp->digits - digit - 1; - - uint8_t c = digit / ALL_DIGITS; - uint8_t d = digit % ALL_DIGITS; - - send(disp, c, (REG_DIGIT_0 + ((uint16_t)d << 8)) | val); - - return true; -} - -void max7219_clear(const max7219_display_t *disp) -{ - uint8_t val = disp->bcd ? VAL_CLEAR_BCD : VAL_CLEAR_NORMAL; - for (uint8_t i = 0; i < ALL_DIGITS; i++) - send(disp, ALL_CHIPS, (REG_DIGIT_0 + ((uint16_t)i << 8)) | val); -} - -inline static uint8_t get_char(const max7219_display_t *disp, char c) -{ - if (disp->bcd) - { - if (c >= '0' && c <= '9') - return c - '0'; - switch (c) - { - case '-': - return 0x0a; - case 'E': - case 'e': - return 0x0b; - case 'H': - case 'h': - return 0x0c; - case 'L': - case 'l': - return 0x0d; - case 'P': - case 'p': - return 0x0e; - } - return VAL_CLEAR_BCD; - } - - return font_7seg[(c - 0x20) & 0x7f]; -} - -void max7219_draw_text(const max7219_display_t *disp, uint8_t pos, const char *s) -{ - while (s && pos < disp->digits) - { - uint8_t c = get_char(disp, *s); - if (*(s + 1) == '.') - { - c |= 0x80; - s++; - } - max7219_set_digit(disp, pos, c); - pos++; - s++; - } -} diff --git a/extras/max7219/max7219.h b/extras/max7219/max7219.h deleted file mode 100644 index 59756d4..0000000 --- a/extras/max7219/max7219.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Driver for MAX7219/MAX7221 - * Serially Interfaced, 8-Digit LED Display Drivers - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_MAX7219_H_ -#define EXTRAS_MAX7219_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define MAX7219_MAX_CASCADE_SIZE 8 -#define MAX7219_MAX_BRIGHTNESS 31 - -/** - * Display descriptor - */ -typedef struct -{ - uint8_t cs_pin; //!< GPIO connected to CS/LOAD pin - - uint8_t digits; //!< Accessible digits in 7seg. Up to cascade_size * 8 - - uint8_t cascade_size; //!< Up to 8 MAX721xx cascaded - bool mirrored; //!< true for horizontally mirrored displays - - bool bcd; -} max7219_display_t; - -/** - * Initialize display: switch it to normal operation from shutdown mode, - * set scan limit to the max and clear - * @param disp Pointer to display descriptor - * @return false if error occured - */ -bool max7219_init(max7219_display_t *disp); - -/** - * Set decode mode and clear display - * @param disp Pointer to display descriptor - * @param bcd true to set BCD decode mode, false to normal - */ -void max7219_set_decode_mode(max7219_display_t *disp, bool bcd); - -/** - * Set display brightness - * @param disp Pointer to display descriptor - * @param value Brightness value, 0..MAX7219_MAX_BRIGHTNESS - */ -void max7219_set_brightness(const max7219_display_t *disp, uint8_t value); - -/** - * Shutdown display or set it to normal mode - * @param disp Pointer to display descriptor - * @param shutdown Shutdown display if true - */ -void max7219_set_shutdown_mode(const max7219_display_t *disp, bool shutdown); - -/** - * Write data to display digit - * @param disp Pointer to display descriptor - * @param digit Digit index, 0..disp->digits - 1 - * @param val Data - * @return false if error occured - */ -bool max7219_set_digit(const max7219_display_t *disp, uint8_t digit, uint8_t val); - -/** - * Clear display - * @param disp Pointer to display descriptor - */ -void max7219_clear(const max7219_display_t *disp); - -/** - * Draw text. - * Currently only 7-segment displays supported - * @param disp Pointer to display descriptor - * @param pos Start digit - * @param s Text - */ -void max7219_draw_text(const max7219_display_t *disp, uint8_t pos, const char *s); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_MAX7219_H_ */ diff --git a/extras/max7219/max7219_priv.h b/extras/max7219/max7219_priv.h deleted file mode 100644 index f7c03cd..0000000 --- a/extras/max7219/max7219_priv.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Driver for MAX7219/MAX7221 - * Serially Interfaced, 8-Digit LED Display Drivers - * - * Part of esp-open-rtos - * Copyright (C) 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_MAX7219_PRIV_H_ -#define EXTRAS_MAX7219_PRIV_H_ - -static const uint8_t font_7seg[] = { - /* ' ' ! " # $ % & ' ( ) */ - 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4e, 0x78, - /* * + , - . / 0 1 2 3 */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x30, 0x6d, 0x79, - /* 4 5 6 7 8 9 : ; < = */ - 0x33, 0x5b, 0x5f, 0x70, 0x7f, 0x7b, 0x00, 0x00, 0x0d, 0x09, - /* > ? @ A B C D E F G */ - 0x19, 0x65, 0x00, 0x77, 0x1f, 0x4e, 0x3d, 0x4f, 0x47, 0x5e, - /* H I J K L M N O P Q */ - 0x37, 0x06, 0x38, 0x57, 0x0e, 0x76, 0x15, 0x1d, 0x67, 0x73, - /* R S T U V W X Y Z [ */ - 0x05, 0x5b, 0x0f, 0x1c, 0x3e, 0x2a, 0x49, 0x3b, 0x6d, 0x4e, - /* \ ] ^ _ ` a b c d e */ - 0x00, 0x78, 0x00, 0x08, 0x02, 0x77, 0x1f, 0x4e, 0x3d, 0x4f, - /* f g h i j k l m n o */ - 0x47, 0x5e, 0x37, 0x06, 0x38, 0x57, 0x0e, 0x76, 0x15, 0x1d, - /* p q r s t u v w x y */ - 0x67, 0x73, 0x05, 0x5b, 0x0f, 0x1c, 0x3e, 0x2a, 0x49, 0x3b, - /* z { | } ~ */ - 0x6d, 0x4e, 0x06, 0x78, 0x00 -}; - - -#endif /* EXTRAS_MAX7219_PRIV_H_ */ diff --git a/extras/mbedtls/component.mk b/extras/mbedtls/component.mk index 5b7d658..c392471 100644 --- a/extras/mbedtls/component.mk +++ b/extras/mbedtls/component.mk @@ -26,7 +26,7 @@ OBJS_CRYPTO= aes.o aesni.o arc4.o \ padlock.o pem.o pk.o \ pk_wrap.o pkcs12.o pkcs5.o \ pkparse.o pkwrite.o platform.o \ - ripemd160.o rsa.o rsa_internal.o sha1.o \ + ripemd160.o rsa.o sha1.o \ sha256.o sha512.o threading.o \ timing.o version.o \ version_features.o xtea.o diff --git a/extras/mbedtls/include/mbedtls/config.h b/extras/mbedtls/include/mbedtls/config.h index ed01596..54ce5be 100644 --- a/extras/mbedtls/include/mbedtls/config.h +++ b/extras/mbedtls/include/mbedtls/config.h @@ -3,10 +3,6 @@ * * \brief Configuration options (set of defines) * - * This set of compile-time options may be used to enable - * or disable features selectively, and reduce the global - * memory footprint. - * * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved * SPDX-License-Identifier: Apache-2.0 * @@ -25,6 +21,11 @@ * This file is part of mbed TLS (https://tls.mbed.org) */ +/* + * This set of compile-time options may be used to enable + * or disable features selectively, and reduce the global + * memory footprint. + */ #ifndef MBEDTLS_CONFIG_H #define MBEDTLS_CONFIG_H @@ -71,10 +72,6 @@ * The time does not need to be correct, only time differences are used, * by contrast with MBEDTLS_HAVE_TIME_DATE * - * Defining MBEDTLS_HAVE_TIME allows you to specify MBEDTLS_PLATFORM_TIME_ALT, - * MBEDTLS_PLATFORM_TIME_MACRO, MBEDTLS_PLATFORM_TIME_TYPE_MACRO and - * MBEDTLS_PLATFORM_STD_TIME. - * * Comment if your system does not support time functions */ //#define MBEDTLS_HAVE_TIME @@ -135,10 +132,10 @@ //#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS /** - * \def MBEDTLS_PLATFORM_EXIT_ALT + * \def MBEDTLS_PLATFORM_XXX_ALT * - * MBEDTLS_PLATFORM_XXX_ALT: Uncomment a macro to let mbed TLS support the - * function in the platform abstraction layer. + * Uncomment a macro to let mbed TLS support the function in the platform + * abstraction layer. * * Example: In case you uncomment MBEDTLS_PLATFORM_PRINTF_ALT, mbed TLS will * provide a function "mbedtls_platform_set_printf()" that allows you to set an @@ -152,17 +149,13 @@ * \warning MBEDTLS_PLATFORM_XXX_ALT cannot be defined at the same time as * MBEDTLS_PLATFORM_XXX_MACRO! * - * Requires: MBEDTLS_PLATFORM_TIME_ALT requires MBEDTLS_HAVE_TIME - * * Uncomment a macro to enable alternate implementation of specific base * platform function */ //#define MBEDTLS_PLATFORM_EXIT_ALT -//#define MBEDTLS_PLATFORM_TIME_ALT //#define MBEDTLS_PLATFORM_FPRINTF_ALT //#define MBEDTLS_PLATFORM_PRINTF_ALT //#define MBEDTLS_PLATFORM_SNPRINTF_ALT -//#define MBEDTLS_PLATFORM_NV_SEED_ALT /** * \def MBEDTLS_DEPRECATED_WARNING @@ -215,19 +208,19 @@ //#define MBEDTLS_TIMING_ALT /** - * \def MBEDTLS_AES_ALT + * \def MBEDTLS__MODULE_NAME__ALT * - * MBEDTLS__MODULE_NAME__ALT: Uncomment a macro to let mbed TLS use your - * alternate core implementation of a symmetric crypto, an arithmetic or hash - * module (e.g. platform specific assembly optimized implementations). Keep - * in mind that the function prototypes should remain the same. + * Uncomment a macro to let mbed TLS use your alternate core implementation of + * a symmetric crypto or hash module (e.g. platform specific assembly + * optimized implementations). Keep in mind that the function prototypes + * should remain the same. * * This replaces the whole module. If you only want to replace one of the * functions, use one of the MBEDTLS__FUNCTION_NAME__ALT flags. * * Example: In case you uncomment MBEDTLS_AES_ALT, mbed TLS will no longer - * provide the "struct mbedtls_aes_context" definition and omit the base - * function declarations and implementations. "aes_alt.h" will be included from + * provide the "struct mbedtls_aes_context" definition and omit the base function + * declarations and implementations. "aes_alt.h" will be included from * "aes.h" to include the new function definitions. * * Uncomment a macro to enable alternate implementation of the corresponding @@ -246,23 +239,13 @@ //#define MBEDTLS_SHA1_ALT //#define MBEDTLS_SHA256_ALT //#define MBEDTLS_SHA512_ALT -/* - * When replacing the elliptic curve module, pleace consider, that it is - * implemented with two .c files: - * - ecp.c - * - ecp_curves.c - * You can replace them very much like all the other MBEDTLS__MODULE_NAME__ALT - * macros as described above. The only difference is that you have to make sure - * that you provide functionality for both .c files. - */ -//#define MBEDTLS_ECP_ALT /** - * \def MBEDTLS_MD2_PROCESS_ALT + * \def MBEDTLS__FUNCTION_NAME__ALT * - * MBEDTLS__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use you - * alternate core implementation of symmetric crypto or hash function. Keep in - * mind that function prototypes should remain the same. + * Uncomment a macro to let mbed TLS use you alternate core implementation of + * symmetric crypto or hash function. Keep in mind that function prototypes + * should remain the same. * * This replaces only one function. The header file from mbed TLS is still * used, in contrast to the MBEDTLS__MODULE_NAME__ALT flags. @@ -295,76 +278,6 @@ //#define MBEDTLS_AES_ENCRYPT_ALT //#define MBEDTLS_AES_DECRYPT_ALT -/** - * \def MBEDTLS_ECP_INTERNAL_ALT - * - * Expose a part of the internal interface of the Elliptic Curve Point module. - * - * MBEDTLS_ECP__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use your - * alternative core implementation of elliptic curve arithmetic. Keep in mind - * that function prototypes should remain the same. - * - * This partially replaces one function. The header file from mbed TLS is still - * used, in contrast to the MBEDTLS_ECP_ALT flag. The original implementation - * is still present and it is used for group structures not supported by the - * alternative. - * - * Any of these options become available by defining MBEDTLS_ECP_INTERNAL_ALT - * and implementing the following functions: - * unsigned char mbedtls_internal_ecp_grp_capable( - * const mbedtls_ecp_group *grp ) - * int mbedtls_internal_ecp_init( const mbedtls_ecp_group *grp ) - * void mbedtls_internal_ecp_deinit( const mbedtls_ecp_group *grp ) - * The mbedtls_internal_ecp_grp_capable function should return 1 if the - * replacement functions implement arithmetic for the given group and 0 - * otherwise. - * The functions mbedtls_internal_ecp_init and mbedtls_internal_ecp_deinit are - * called before and after each point operation and provide an opportunity to - * implement optimized set up and tear down instructions. - * - * Example: In case you uncomment MBEDTLS_ECP_INTERNAL_ALT and - * MBEDTLS_ECP_DOUBLE_JAC_ALT, mbed TLS will still provide the ecp_double_jac - * function, but will use your mbedtls_internal_ecp_double_jac if the group is - * supported (your mbedtls_internal_ecp_grp_capable function returns 1 when - * receives it as an argument). If the group is not supported then the original - * implementation is used. The other functions and the definition of - * mbedtls_ecp_group and mbedtls_ecp_point will not change, so your - * implementation of mbedtls_internal_ecp_double_jac and - * mbedtls_internal_ecp_grp_capable must be compatible with this definition. - * - * Uncomment a macro to enable alternate implementation of the corresponding - * function. - */ -/* Required for all the functions in this section */ -//#define MBEDTLS_ECP_INTERNAL_ALT -/* Support for Weierstrass curves with Jacobi representation */ -//#define MBEDTLS_ECP_RANDOMIZE_JAC_ALT -//#define MBEDTLS_ECP_ADD_MIXED_ALT -//#define MBEDTLS_ECP_DOUBLE_JAC_ALT -//#define MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT -//#define MBEDTLS_ECP_NORMALIZE_JAC_ALT -/* Support for curves with Montgomery arithmetic */ -//#define MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT -//#define MBEDTLS_ECP_RANDOMIZE_MXZ_ALT -//#define MBEDTLS_ECP_NORMALIZE_MXZ_ALT - -/** - * \def MBEDTLS_TEST_NULL_ENTROPY - * - * Enables testing and use of mbed TLS without any configured entropy sources. - * This permits use of the library on platforms before an entropy source has - * been integrated (see for example the MBEDTLS_ENTROPY_HARDWARE_ALT or the - * MBEDTLS_ENTROPY_NV_SEED switches). - * - * WARNING! This switch MUST be disabled in production builds, and is suitable - * only for development. - * Enabling the switch negates any security provided by the library. - * - * Requires MBEDTLS_ENTROPY_C, MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES - * - */ -//#define MBEDTLS_TEST_NULL_ENTROPY - /** * \def MBEDTLS_ENTROPY_HARDWARE_ALT * @@ -452,11 +365,10 @@ //#define MBEDTLS_CIPHER_NULL_CIPHER /** - * \def MBEDTLS_CIPHER_PADDING_PKCS7 + * \def MBEDTLS_CIPHER_PADDING_XXX * - * MBEDTLS_CIPHER_PADDING_XXX: Uncomment or comment macros to add support for - * specific padding modes in the cipher layer with cipher modes that support - * padding (e.g. CBC) + * Uncomment or comment macros to add support for specific padding modes + * in the cipher layer with cipher modes that support padding (e.g. CBC) * * If you disable all padding modes, only full blocks can be used with CBC. * @@ -496,10 +408,10 @@ #define MBEDTLS_REMOVE_ARC4_CIPHERSUITES /** - * \def MBEDTLS_ECP_DP_SECP192R1_ENABLED + * \def MBEDTLS_ECP_XXXX_ENABLED * - * MBEDTLS_ECP_XXXX_ENABLED: Enables specific curves within the Elliptic Curve - * module. By default all supported curves are enabled. + * Enables specific curves within the Elliptic Curve module. + * By default all supported curves are enabled. * * Comment macros to disable the curve and functions for it */ @@ -783,25 +695,6 @@ */ #define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED -/** - * \def MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED - * - * Enable the ECJPAKE based ciphersuite modes in SSL / TLS. - * - * \warning This is currently experimental. EC J-PAKE support is based on the - * Thread v1.0.0 specification; incompatible changes to the specification - * might still happen. For this reason, this is disabled by default. - * - * Requires: MBEDTLS_ECJPAKE_C - * MBEDTLS_SHA256_C - * MBEDTLS_ECP_DP_SECP256R1_ENABLED - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 - */ -//#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED - /** * \def MBEDTLS_PK_PARSE_EC_EXTENDED * @@ -887,34 +780,6 @@ */ #define MBEDTLS_ENTROPY_FORCE_SHA256 -/** - * \def MBEDTLS_ENTROPY_NV_SEED - * - * Enable the non-volatile (NV) seed file-based entropy source. - * (Also enables the NV seed read/write functions in the platform layer) - * - * This is crucial (if not required) on systems that do not have a - * cryptographic entropy source (in hardware or kernel) available. - * - * Requires: MBEDTLS_ENTROPY_C, MBEDTLS_PLATFORM_C - * - * \note The read/write functions that are used by the entropy source are - * determined in the platform layer, and can be modified at runtime and/or - * compile-time depending on the flags (MBEDTLS_PLATFORM_NV_SEED_*) used. - * - * \note If you use the default implementation functions that read a seedfile - * with regular fopen(), please make sure you make a seedfile with the - * proper name (defined in MBEDTLS_PLATFORM_STD_NV_SEED_FILE) and at - * least MBEDTLS_ENTROPY_BLOCK_SIZE bytes in size that can be read from - * and written to or you will get an entropy source error! The default - * implementation will only use the first MBEDTLS_ENTROPY_BLOCK_SIZE - * bytes from the file. - * - * \note The entropy collector will write to the seed file before entropy is - * given to an external source, to update it. - */ -//#define MBEDTLS_ENTROPY_NV_SEED - /** * \def MBEDTLS_MEMORY_DEBUG * @@ -1004,6 +869,18 @@ */ #define MBEDTLS_SHA256_SMALLER +/** + * \def MBEDTLS_SSL_AEAD_RANDOM_IV + * + * Generate a random IV rather than using the record sequence number as a + * nonce for ciphersuites using and AEAD algorithm (GCM or CCM). + * + * Using the sequence number is generally recommended. + * + * Uncomment this macro to always use random IVs with AEAD ciphersuites. + */ +//#define MBEDTLS_SSL_AEAD_RANDOM_IV + /** * \def MBEDTLS_SSL_ALL_ALERT_MESSAGES * @@ -1163,7 +1040,7 @@ * * Comment this macro to disable support for SSL 3.0 */ -//#define MBEDTLS_SSL_PROTO_SSL3 +#define MBEDTLS_SSL_PROTO_SSL3 /** * \def MBEDTLS_SSL_PROTO_TLS1 @@ -1258,22 +1135,6 @@ */ #define MBEDTLS_SSL_DTLS_HELLO_VERIFY -/** - * \def MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE - * - * Enable server-side support for clients that reconnect from the same port. - * - * Some clients unexpectedly close the connection and try to reconnect using the - * same source port. This needs special support from the server to handle the - * new connection securely, as described in section 4.2.8 of RFC 6347. This - * flag enables that support. - * - * Requires: MBEDTLS_SSL_DTLS_HELLO_VERIFY - * - * Comment this to disable support for clients reusing the source port. - */ -#define MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE - /** * \def MBEDTLS_SSL_DTLS_BADMAC_LIMIT * @@ -1299,16 +1160,6 @@ */ #define MBEDTLS_SSL_SESSION_TICKETS -/** - * \def MBEDTLS_SSL_EXPORT_KEYS - * - * Enable support for exporting key block and master secret. - * This is required for certain users of TLS, e.g. EAP-TLS. - * - * Comment this macro to disable support for key export - */ -#define MBEDTLS_SSL_EXPORT_KEYS - /** * \def MBEDTLS_SSL_SERVER_NAME_INDICATION * @@ -1380,8 +1231,6 @@ * If set, the X509 parser will not break-off when parsing an X509 certificate * and encountering an unknown critical extension. * - * \warning Depending on your PKI use, enabling this can be a security risk! - * * Uncomment to prevent an error. */ //#define MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION @@ -1589,7 +1438,7 @@ * library/pkwrite.c * library/x509_create.c * library/x509write_crt.c - * library/x509write_csr.c + * library/mbedtls_x509write_csr.c */ #define MBEDTLS_ASN1_WRITE_C @@ -1723,19 +1572,6 @@ */ #define MBEDTLS_CIPHER_C -/** - * \def MBEDTLS_CMAC_C - * - * Enable the CMAC (Cipher-based Message Authentication Code) mode for block - * ciphers. - * - * Module: library/cmac.c - * - * Requires: MBEDTLS_AES_C or MBEDTLS_DES_C - * - */ -//#define MBEDTLS_CMAC_C - /** * \def MBEDTLS_CTR_DRBG_C * @@ -1835,25 +1671,6 @@ */ #define MBEDTLS_ECDSA_C -/** - * \def MBEDTLS_ECJPAKE_C - * - * Enable the elliptic curve J-PAKE library. - * - * \warning This is currently experimental. EC J-PAKE support is based on the - * Thread v1.0.0 specification; incompatible changes to the specification - * might still happen. For this reason, this is disabled by default. - * - * Module: library/ecjpake.c - * Caller: - * - * This module is used by the following key exchanges: - * ECJPAKE - * - * Requires: MBEDTLS_ECP_C, MBEDTLS_MD_C - */ -//#define MBEDTLS_ECJPAKE_C - /** * \def MBEDTLS_ECP_C * @@ -1862,7 +1679,6 @@ * Module: library/ecp.c * Caller: library/ecdh.c * library/ecdsa.c - * library/ecjpake.c * * Requires: MBEDTLS_BIGNUM_C and at least one MBEDTLS_ECP_DP_XXX_ENABLED */ @@ -1950,7 +1766,7 @@ * * Enable the generic message digest layer. * - * Module: library/md.c + * Module: library/mbedtls_md.c * Caller: * * Uncomment to enable generic message digest wrappers. @@ -1962,7 +1778,7 @@ * * Enable the MD2 hash algorithm. * - * Module: library/md2.c + * Module: library/mbedtls_md2.c * Caller: * * Uncomment to enable support for (rare) MD2-signed X.509 certs. @@ -1974,7 +1790,7 @@ * * Enable the MD4 hash algorithm. * - * Module: library/md4.c + * Module: library/mbedtls_md4.c * Caller: * * Uncomment to enable support for (rare) MD4-signed X.509 certs. @@ -1986,8 +1802,8 @@ * * Enable the MD5 hash algorithm. * - * Module: library/md5.c - * Caller: library/md.c + * Module: library/mbedtls_md5.c + * Caller: library/mbedtls_md.c * library/pem.c * library/ssl_tls.c * @@ -2015,19 +1831,11 @@ /** * \def MBEDTLS_NET_C * - * Enable the TCP and UDP over IPv6/IPv4 networking routines. + * Enable the TCP/IP networking routines. * - * \note This module only works on POSIX/Unix (including Linux, BSD and OS X) - * and Windows. For other platforms, you'll want to disable it, and write your - * own networking callbacks to be passed to \c mbedtls_ssl_set_bio(). + * Module: library/net.c * - * \note See also our Knowledge Base article about porting to a new - * environment: - * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS - * - * Module: library/net_sockets.c - * - * This module provides networking routines. + * This module provides TCP/IP networking routines. */ #define MBEDTLS_NET_C @@ -2044,11 +1852,11 @@ * library/rsa.c * library/x509.c * library/x509_create.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c + * library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c * library/x509write_crt.c - * library/x509write_csr.c + * library/mbedtls_x509write_csr.c * * This modules translates between OIDs and internal values. */ @@ -2076,9 +1884,9 @@ * Module: library/pem.c * Caller: library/dhm.c * library/pkparse.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c + * library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c * * Requires: MBEDTLS_BASE64_C * @@ -2094,7 +1902,7 @@ * Module: library/pem.c * Caller: library/pkwrite.c * library/x509write_crt.c - * library/x509write_csr.c + * library/mbedtls_x509write_csr.c * * Requires: MBEDTLS_BASE64_C * @@ -2124,8 +1932,8 @@ * Enable the generic public (asymetric) key parser. * * Module: library/pkparse.c - * Caller: library/x509_crt.c - * library/x509_csr.c + * Caller: library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c * * Requires: MBEDTLS_PK_C * @@ -2216,8 +2024,8 @@ * * Enable the RIPEMD-160 hash algorithm. * - * Module: library/ripemd160.c - * Caller: library/md.c + * Module: library/mbedtls_ripemd160.c + * Caller: library/mbedtls_md.c * */ #define MBEDTLS_RIPEMD160_C @@ -2245,15 +2053,14 @@ * * Enable the SHA1 cryptographic hash algorithm. * - * Module: library/sha1.c - * Caller: library/md.c + * Module: library/mbedtls_sha1.c + * Caller: library/mbedtls_md.c * library/ssl_cli.c * library/ssl_srv.c * library/ssl_tls.c * library/x509write_crt.c * - * This module is required for SSL/TLS up to version 1.1, for TLS 1.2 - * depending on the handshake parameters, and for SHA1-signed certificates. + * This module is required for SSL/TLS and SHA1-signed certificates. */ #define MBEDTLS_SHA1_C @@ -2262,9 +2069,9 @@ * * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. * - * Module: library/sha256.c + * Module: library/mbedtls_sha256.c * Caller: library/entropy.c - * library/md.c + * library/mbedtls_md.c * library/ssl_cli.c * library/ssl_srv.c * library/ssl_tls.c @@ -2279,9 +2086,9 @@ * * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. * - * Module: library/sha512.c + * Module: library/mbedtls_sha512.c * Caller: library/entropy.c - * library/md.c + * library/mbedtls_md.c * library/ssl_cli.c * library/ssl_srv.c * @@ -2374,8 +2181,7 @@ * By default mbed TLS assumes it is used in a non-threaded environment or that * contexts are not shared between threads. If you do intend to use contexts * between threads, you will need to enable this layer to prevent race - * conditions. See also our Knowledge Base article about threading: - * https://tls.mbed.org/kb/development/thread-safety-and-multi-threading + * conditions. * * Module: library/threading.c * @@ -2392,18 +2198,7 @@ /** * \def MBEDTLS_TIMING_C * - * Enable the semi-portable timing interface. - * - * \note The provided implementation only works on POSIX/Unix (including Linux, - * BSD and OS X) and Windows. On other platforms, you can either disable that - * module and provide your own implementations of the callbacks needed by - * \c mbedtls_ssl_set_timer_cb() for DTLS, or leave it enabled and provide - * your own implementation of the whole module by setting - * \c MBEDTLS_TIMING_ALT in the current file. - * - * \note See also our Knowledge Base article about porting to a new - * environment: - * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS + * Enable the portable timing interface. * * Module: library/timing.c * Caller: library/havege.c @@ -2429,9 +2224,9 @@ * Enable X.509 core for using certificates. * * Module: library/x509.c - * Caller: library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c + * Caller: library/mbedtls_x509_crl.c + * library/mbedtls_x509_crt.c + * library/mbedtls_x509_csr.c * * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, * MBEDTLS_PK_PARSE_C @@ -2445,7 +2240,7 @@ * * Enable X.509 certificate parsing. * - * Module: library/x509_crt.c + * Module: library/mbedtls_x509_crt.c * Caller: library/ssl_cli.c * library/ssl_srv.c * library/ssl_tls.c @@ -2461,8 +2256,8 @@ * * Enable X.509 CRL parsing. * - * Module: library/x509_crl.c - * Caller: library/x509_crt.c + * Module: library/mbedtls_x509_crl.c + * Caller: library/mbedtls_x509_crt.c * * Requires: MBEDTLS_X509_USE_C * @@ -2475,7 +2270,7 @@ * * Enable X.509 Certificate Signing Request (CSR) parsing. * - * Module: library/x509_csr.c + * Module: library/mbedtls_x509_csr.c * Caller: library/x509_crt_write.c * * Requires: MBEDTLS_X509_USE_C @@ -2552,12 +2347,12 @@ /* MPI / BIGNUM options */ #define MBEDTLS_MPI_WINDOW_SIZE 1 /**< Maximum windows size used. */ -#define MBEDTLS_MPI_MAX_SIZE 512 /**< Maximum number of bytes for usable MPIs. */ +#define MBEDTLS_MPI_MAX_SIZE 512 /**< Maximum number of bytes for usable MPIs. */ /* CTR_DRBG options */ //#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ /* this is normally 10x higher, but reseeding seems quite inexpensive on esp8266 */ -#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 1000 /**< Interval before reseed is performed by default */ +#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 1000 /**< Interval before reseed is performed by default */ //#define MBEDTLS_CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ //#define MBEDTLS_CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ //#define MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ @@ -2576,7 +2371,6 @@ /* Entropy options */ //#define MBEDTLS_ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ //#define MBEDTLS_ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ -//#define MBEDTLS_ENTROPY_MIN_HARDWARE 32 /**< Default minimum number of bytes required for the hardware entropy source mbedtls_hardware_poll() before entropy is released */ /* Memory buffer allocator options */ //#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ @@ -2586,37 +2380,27 @@ //#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */ //#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ //#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_TIME time /**< Default time to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ //#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ //#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ /* Note: your snprintf must correclty zero-terminate the buffer! */ //#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS 0 /**< Default exit value to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE 1 /**< Default exit value to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile" /**< Seed file to read/write with default implementation */ /* To Use Function Macros MBEDTLS_PLATFORM_C must be enabled */ /* MBEDTLS_PLATFORM_XXX_MACRO and MBEDTLS_PLATFORM_XXX_ALT cannot both be defined */ //#define MBEDTLS_PLATFORM_CALLOC_MACRO calloc /**< Default allocator macro to use, can be undefined */ //#define MBEDTLS_PLATFORM_FREE_MACRO free /**< Default free macro to use, can be undefined */ //#define MBEDTLS_PLATFORM_EXIT_MACRO exit /**< Default exit macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_TIME_MACRO time /**< Default time macro to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ -//#define MBEDTLS_PLATFORM_TIME_TYPE_MACRO time_t /**< Default time macro to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ //#define MBEDTLS_PLATFORM_FPRINTF_MACRO fprintf /**< Default fprintf macro to use, can be undefined */ //#define MBEDTLS_PLATFORM_PRINTF_MACRO printf /**< Default printf macro to use, can be undefined */ /* Note: your snprintf must correclty zero-terminate the buffer! */ //#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf /**< Default snprintf macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_NV_SEED_READ_MACRO mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */ -//#define MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */ /* SSL Cache options */ //#define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ //#define MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ /* SSL options */ -#define MBEDTLS_SSL_MAX_CONTENT_LEN 4096 /**< Maxium fragment length in bytes, determines the size of each of the two internal I/O buffers */ +#define MBEDTLS_SSL_MAX_CONTENT_LEN 4096 /**< Maxium fragment length in bytes, determines the size of each of the two internal I/O buffers */ //#define MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ //#define MBEDTLS_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ //#define MBEDTLS_SSL_COOKIE_TIMEOUT 60 /**< Default expiration delay of DTLS cookies, in seconds if HAVE_TIME, or in number of cookies issued */ @@ -2637,35 +2421,11 @@ /* X509 options */ //#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 /**< Maximum number of intermediate CAs in a verification chain. */ -//#define MBEDTLS_X509_MAX_FILE_PATH_LEN 512 /**< Maximum length of a path/filename string in bytes including the null terminator character ('\0'). */ -/** - * Allow SHA-1 in the default TLS configuration for certificate signing. - * Without this build-time option, SHA-1 support must be activated explicitly - * through mbedtls_ssl_conf_cert_profile. Turning on this option is not - * recommended because of it is possible to generte SHA-1 collisions, however - * this may be safe for legacy infrastructure where additional controls apply. - */ -// #define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES +/* \} name SECTION: Module configuration options */ -/** - * Allow SHA-1 in the default TLS configuration for TLS 1.2 handshake - * signature and ciphersuite selection. Without this build-time option, SHA-1 - * support must be activated explicitly through mbedtls_ssl_conf_sig_hashes. - * The use of SHA-1 in TLS <= 1.1 and in HMAC-SHA-1 is always allowed by - * default. At the time of writing, there is no practical attack on the use - * of SHA-1 in handshake signatures, hence this option is turned on by default - * for compatibility with existing peers. - */ -#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE - -/* \} name SECTION: Customisation configuration options */ - -/* Target and application specific configurations */ -//#define YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE "mbedtls/target_config.h" - -#if defined(TARGET_LIKE_MBED) && defined(YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE) -#include YOTTA_CFG_MBEDTLS_TARGET_CONFIG_FILE +#if defined(TARGET_LIKE_MBED) +#include "mbedtls/target_config.h" #endif /* diff --git a/extras/mbedtls/mbedtls b/extras/mbedtls/mbedtls index 1bf6123..0a0c22e 160000 --- a/extras/mbedtls/mbedtls +++ b/extras/mbedtls/mbedtls @@ -1 +1 @@ -Subproject commit 1bf6123fca97a9a35c2f403ab0c96495f9580db6 +Subproject commit 0a0c22e0efcf2f8f71d7e16712f80b8f77326f72 diff --git a/extras/mbedtls/net_lwip.c b/extras/mbedtls/net_lwip.c index 3926458..e6f7183 100644 --- a/extras/mbedtls/net_lwip.c +++ b/extras/mbedtls/net_lwip.c @@ -1,7 +1,6 @@ /* * TCP/IP or UDP/IP networking functions - * Based on mbedtls/library/net_sockets.c - * Modified for LWIP support on ESP8266 + * modified for LWIP support on ESP8266 * * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved * Additions Copyright (C) 2015 Angus Gratton @@ -30,74 +29,18 @@ #if defined(MBEDTLS_NET_C) -#define ESP_OPEN_RTOS 1 -#define _SOCKLEN_T_DECLARED 1 - -#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \ - !defined(__APPLE__) && !defined(_WIN32) && !defined(ESP_OPEN_RTOS) -#error "This module only works on Unix and Windows, see MBEDTLS_NET_C in config.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "mbedtls/platform.h" -#else -#include -#endif - -#include "mbedtls/net_sockets.h" +#include "mbedtls/net.h" #include -#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \ - !defined(EFI32) - -#ifdef _WIN32_WINNT -#undef _WIN32_WINNT -#endif -/* Enables getaddrinfo() & Co */ -#define _WIN32_WINNT 0x0501 -#include - -#include -#include - -#if defined(_MSC_VER) -#if defined(_WIN32_WCE) -#pragma comment( lib, "ws2.lib" ) -#else -#pragma comment( lib, "ws2_32.lib" ) -#endif -#endif /* _MSC_VER */ - -#define read(fd,buf,len) recv( fd, (char*)( buf ), (int)( len ), 0 ) -#define write(fd,buf,len) send( fd, (char*)( buf ), (int)( len ), 0 ) -#define close(fd) closesocket(fd) - -static int wsa_init_done = 0; - -#else /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ - #include #include -//#include -#include #include #include -#include -#include #include #include -#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ - -/* Some MS functions want int and MSVC warns if we pass size_t, - * but the standard functions use socklen_t, so cast only for MSVC */ -#if defined(_MSC_VER) -#define MSVC_INT_CAST (int) -#else -#define MSVC_INT_CAST -#endif - +#include #include #include @@ -121,9 +64,6 @@ static int net_prepare( void ) wsa_init_done = 1; } #else -#if !defined(EFIX64) && !defined(EFI32) && !defined(ESP_OPEN_RTOS) - signal( SIGPIPE, SIG_IGN ); -#endif #endif return( 0 ); } @@ -139,8 +79,7 @@ void mbedtls_net_init( mbedtls_net_context *ctx ) /* * Initiate a TCP connection with host:port and the given protocol */ -int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, - const char *port, int proto ) +int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto ) { int ret; struct addrinfo hints, *addr_list, *cur; @@ -169,11 +108,7 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, continue; } - const struct timeval timeout = { 60, 0 }; /* 60 second timeout */ - setsockopt( ctx->fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout) ); - setsockopt( ctx->fd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout) ); - - if( connect( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) == 0 ) + if( connect( ctx->fd, cur->ai_addr, cur->ai_addrlen ) == 0 ) { ret = 0; break; @@ -194,7 +129,14 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char *port, int proto ) { int n, ret; - struct addrinfo hints, *addr_list, *cur; + struct addrinfo *addr_list, *cur; + + /* Only request desired protocol */ + const struct addrinfo hints = { + .ai_family = AF_UNSPEC, + .ai_socktype = (proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM), + .ai_protocol = (proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP), + }; struct sockaddr_in sockaddr_ipaddr_any = { .sin_len = sizeof(struct sockaddr_in), @@ -205,8 +147,8 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char struct addrinfo all_interfaces_addr = { .ai_family = AF_INET, - .ai_socktype = (proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM), - .ai_protocol = (proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP), + .ai_socktype = hints.ai_socktype, + .ai_protocol = hints.ai_protocol, .ai_addrlen = sizeof(struct sockaddr_in), .ai_addr = (struct sockaddr *)&sockaddr_ipaddr_any, }; @@ -214,22 +156,14 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char if( ( ret = net_prepare() ) != 0 ) return( ret ); - /* Bind to IPv6 and/or IPv4, but only in the desired protocol */ - memset( &hints, 0, sizeof( hints ) ); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; - hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; - if( bind_ip == NULL ) - hints.ai_flags = AI_PASSIVE; - - if( bind_ip == NULL ) { + if(bind_ip == NULL) { /* mbedTLS docs specify bind_ip == NULL means all interfaces, but lwip getaddrinfo() assumes NULL means localhost. So we swap in a precreated IPADDR_ANY addrinfo result here. */ addr_list = &all_interfaces_addr; } - else - if( getaddrinfo( bind_ip, port, &hints, &addr_list ) != 0 ) + else if( getaddrinfo( bind_ip, port, &hints, &addr_list ) != 0 ) { return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); + } /* Try the sockaddrs until a binding succeeds */ ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; @@ -252,7 +186,7 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char continue; } - if( bind( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) != 0 ) + if( bind( ctx->fd, cur->ai_addr, cur->ai_addrlen ) != 0 ) { close( ctx->fd ); ret = MBEDTLS_ERR_NET_BIND_FAILED; @@ -270,12 +204,12 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char } } - /* Bind was successful */ + /* I we ever get there, it's a success */ ret = 0; break; } - if( bind_ip != NULL ) { + if(bind_ip != NULL) { freeaddrinfo( addr_list ); } @@ -283,18 +217,14 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char } -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) -/* - * Check if the requested operation would be blocking on a non-blocking socket - * and thus 'failed' with a negative return value. - */ -static int net_would_block( const mbedtls_net_context *ctx ) +static int socket_errno( const mbedtls_net_context *ctx ) { - ((void) ctx); - return( WSAGetLastError() == WSAEWOULDBLOCK ); + int sock_errno = 0; + u32_t optlen = sizeof(sock_errno); + lwip_getsockopt(ctx->fd, SOL_SOCKET, SO_ERROR, &sock_errno, &optlen); + return sock_errno; } -#else + /* * Check if the requested operation would be blocking on a non-blocking socket * and thus 'failed' with a negative return value. @@ -303,18 +233,14 @@ static int net_would_block( const mbedtls_net_context *ctx ) */ static int net_would_block( const mbedtls_net_context *ctx ) { - int err = errno; - /* * Never return 'WOULD BLOCK' on a non-blocking socket */ if( ( fcntl( ctx->fd, F_GETFL, 0) & O_NONBLOCK ) != O_NONBLOCK ) - { - errno = err; return( 0 ); - } - switch( errno = err ) + + switch( socket_errno(ctx) ) { #if defined EAGAIN case EAGAIN: @@ -326,7 +252,6 @@ static int net_would_block( const mbedtls_net_context *ctx ) } return( 0 ); } -#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ /* * Accept a connection from a remote client @@ -338,20 +263,14 @@ int mbedtls_net_accept( mbedtls_net_context *bind_ctx, int ret; int type; - struct sockaddr_storage client_addr; + struct sockaddr_in client_addr; -#if defined(__socklen_t_defined) || defined(_SOCKLEN_T) || \ - defined(_SOCKLEN_T_DECLARED) || defined(__DEFINED_socklen_t) socklen_t n = (socklen_t) sizeof( client_addr ); socklen_t type_len = (socklen_t) sizeof( type ); -#else - int n = (int) sizeof( client_addr ); - int type_len = (int) sizeof( type ); -#endif /* Is this a TCP or UDP socket? */ if( getsockopt( bind_ctx->fd, SOL_SOCKET, SO_TYPE, - (void *) &type, &type_len ) != 0 || + (void *) &type, (socklen_t *) &type_len ) != 0 || ( type != SOCK_STREAM && type != SOCK_DGRAM ) ) { return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); @@ -368,7 +287,7 @@ int mbedtls_net_accept( mbedtls_net_context *bind_ctx, /* UDP: wait for a message, but keep it in the queue */ char buf[1] = { 0 }; - ret = (int) recvfrom( bind_ctx->fd, buf, sizeof( buf ), MSG_PEEK, + ret = recvfrom( bind_ctx->fd, buf, sizeof( buf ), MSG_PEEK, (struct sockaddr *) &client_addr, &n ); #if defined(_WIN32) @@ -393,7 +312,7 @@ int mbedtls_net_accept( mbedtls_net_context *bind_ctx, * then bind a new socket to accept new connections */ if( type != SOCK_STREAM ) { - struct sockaddr_storage local_addr; + struct sockaddr_in local_addr; int one = 1; if( connect( bind_ctx->fd, (struct sockaddr *) &client_addr, n ) != 0 ) @@ -402,10 +321,10 @@ int mbedtls_net_accept( mbedtls_net_context *bind_ctx, client_ctx->fd = bind_ctx->fd; bind_ctx->fd = -1; /* In case we exit early */ - n = sizeof( struct sockaddr_storage ); + n = sizeof( struct sockaddr_in ); if( getsockname( client_ctx->fd, (struct sockaddr *) &local_addr, &n ) != 0 || - ( bind_ctx->fd = (int) socket( local_addr.ss_family, + ( bind_ctx->fd = (int) socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP ) ) < 0 || setsockopt( bind_ctx->fd, SOL_SOCKET, SO_REUSEADDR, (const char *) &one, sizeof( one ) ) != 0 ) @@ -421,8 +340,6 @@ int mbedtls_net_accept( mbedtls_net_context *bind_ctx, if( client_ip != NULL ) { - if( client_addr.ss_family == AF_INET ) - { struct sockaddr_in *addr4 = (struct sockaddr_in *) &client_addr; *ip_len = sizeof( addr4->sin_addr.s_addr ); @@ -430,19 +347,6 @@ int mbedtls_net_accept( mbedtls_net_context *bind_ctx, return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); memcpy( client_ip, &addr4->sin_addr.s_addr, *ip_len ); - } - else - { -#if LWIP_IPV6 - struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) &client_addr; - *ip_len = sizeof( addr6->sin6_addr.s6_addr ); - - if( buf_size < *ip_len ) - return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); - - memcpy( client_ip, &addr6->sin6_addr.s6_addr, *ip_len); -#endif - } } return( 0 ); @@ -493,9 +397,7 @@ void mbedtls_net_usleep( unsigned long usec ) #endif } -/* - * Read at most 'len' characters - */ +/* Read at most 'len' characters */ int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ) { int ret; @@ -511,17 +413,13 @@ int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ) if( net_would_block( ctx ) != 0 ) return( MBEDTLS_ERR_SSL_WANT_READ ); -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); -#else - if( errno == EPIPE || errno == ECONNRESET ) + int sock_errno = socket_errno(ctx); + + if( sock_errno == EPIPE || sock_errno == ECONNRESET ) return( MBEDTLS_ERR_NET_CONN_RESET ); - if( errno == EINTR ) + if( sock_errno == EINTR ) return( MBEDTLS_ERR_SSL_WANT_READ ); -#endif return( MBEDTLS_ERR_NET_RECV_FAILED ); } @@ -557,14 +455,8 @@ int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, if( ret < 0 ) { -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - if( WSAGetLastError() == WSAEINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); -#else if( errno == EINTR ) return( MBEDTLS_ERR_SSL_WANT_READ ); -#endif return( MBEDTLS_ERR_NET_RECV_FAILED ); } @@ -591,17 +483,13 @@ int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ) if( net_would_block( ctx ) != 0 ) return( MBEDTLS_ERR_SSL_WANT_WRITE ); -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); -#else - if( errno == EPIPE || errno == ECONNRESET ) + int sock_errno = socket_errno(ctx); + + if( sock_errno == EPIPE || sock_errno == ECONNRESET ) return( MBEDTLS_ERR_NET_CONN_RESET ); - if( errno == EINTR ) + if( sock_errno == EINTR ) return( MBEDTLS_ERR_SSL_WANT_WRITE ); -#endif return( MBEDTLS_ERR_NET_SEND_FAILED ); } diff --git a/extras/mcp4725/component.mk b/extras/mcp4725/component.mk deleted file mode 100644 index 1ba79c8..0000000 --- a/extras/mcp4725/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/mcp4725 - -# expected anyone using this driver includes it as 'mcp4725/mcp4725.h' -INC_DIRS += $(mcp4725_ROOT).. - -# args for passing into compile rule generation -mcp4725_SRC_DIR = $(mcp4725_ROOT) - -$(eval $(call component_compile_rules,mcp4725)) diff --git a/extras/mcp4725/mcp4725.c b/extras/mcp4725/mcp4725.c deleted file mode 100644 index edf2dbb..0000000 --- a/extras/mcp4725/mcp4725.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Driver for 12-bit DAC MCP4725 - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "mcp4725.h" - -#define CMD_DAC 0x40 -#define CMD_EEPROM 0x60 -#define BIT_READY 0x80 - -static void read_data(i2c_dev_t *dev, uint8_t *buf, uint8_t size) -{ - i2c_slave_read(dev->bus, dev->addr, NULL, buf, size); -} - -bool mcp4725_eeprom_busy(i2c_dev_t *dev) -{ - uint8_t res; - read_data(dev, &res, 1); - - return !(res & BIT_READY); -} - -mcp4725_power_mode_t mcp4725_get_power_mode(i2c_dev_t *dev, bool eeprom) -{ - uint8_t buf[4]; - read_data(dev, buf, eeprom ? 4 : 1); - - return (eeprom ? buf[3] >> 5 : buf[0] >> 1) & 0x03; -} - -void mcp4725_set_power_mode(i2c_dev_t *dev, mcp4725_power_mode_t mode, bool eeprom) -{ - uint16_t value = mcp4725_get_raw_output(dev, eeprom); - uint8_t data[] = { - (eeprom ? CMD_EEPROM : CMD_DAC) | ((uint8_t)mode << 1), - value >> 4, - value << 4 - }; - i2c_slave_write(dev->bus, dev->addr, &data[0], &data[1], 2); -} - -uint16_t mcp4725_get_raw_output(i2c_dev_t *dev, bool eeprom) -{ - uint8_t buf[5]; - read_data(dev, buf, eeprom ? 5 : 3); - - return eeprom - ? ((uint16_t)(buf[3] & 0x0f) << 8) | buf[4] - : ((uint16_t)buf[0] << 4) | (buf[1] >> 4); -} - -void mcp4725_set_raw_output(i2c_dev_t *dev, uint16_t value, bool eeprom) -{ - uint8_t data[] = { - (eeprom ? CMD_EEPROM : CMD_DAC), - value >> 4, - value << 4 - }; - i2c_slave_write(dev->bus, dev->addr, &data[0], &data[1], 2); -} diff --git a/extras/mcp4725/mcp4725.h b/extras/mcp4725/mcp4725.h deleted file mode 100644 index 6e69601..0000000 --- a/extras/mcp4725/mcp4725.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Driver for 12-bit DAC MCP4725 - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_MCP4725_H_ -#define _EXTRAS_MCP4725_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define MCP4725A0_ADDR0 0x60 -#define MCP4725A0_ADDR1 0x61 -#define MCP4725A1_ADDR0 0x62 -#define MCP4725A1_ADDR1 0x63 -#define MCP4725A2_ADDR0 0x64 -#define MCP4725A2_ADDR1 0x65 - -#define MCP4725_MAX_VALUE 0x0fff - -/** - * Power mode, see datasheet - */ -typedef enum -{ - MCP4725_PM_NORMAL = 0, //!< Normal mode - MCP4725_PM_PD_1K, //!< Power down, 1kOhm resistor to ground - MCP4725_PM_PD_100K, //!< Power down, 100kOhm resistor to ground - MCP4725_PM_PD_500K, //!< Power down, 500kOhm resistor to ground -} mcp4725_power_mode_t; - -/** - * Get device EEPROM status - * @param addr Device address - * @return true when EEPROM is busy - */ -bool mcp4725_eeprom_busy(i2c_dev_t *dev); - -/** - * Get power mode - * @param addr Device address - * @param eeprom Read power mode from EEPROM if true - * @return Power mode - */ -mcp4725_power_mode_t mcp4725_get_power_mode(i2c_dev_t *dev, bool eeprom); - -/** - * Set power mode - * @param addr Device address - * @param mode Power mode - * @param eeprom Store mode to device EEPROM if true - */ -void mcp4725_set_power_mode(i2c_dev_t *dev, mcp4725_power_mode_t mode, bool eeprom); - -/** - * Get current DAC value - * @param addr Device address - * @param eeprom Read value from device EEPROM if true - * @return Raw output value, 0..4095 - */ -uint16_t mcp4725_get_raw_output(i2c_dev_t *dev, bool eeprom); - -/** - * Set DAC output value - * @param addr Device address - * @param value Raw output value, 0..4095 - * @param eeprom Store value to device EEPROM if true - */ -void mcp4725_set_raw_output(i2c_dev_t *dev, uint16_t value, bool eeprom); - -/** - * Get current DAC output voltage - * @param addr Device address - * @param vdd Device operating voltage, volts - * @param eeprom Read voltage from device EEPROM if true - * @return Current output voltage, volts - */ -inline float mcp4725_get_voltage(i2c_dev_t *dev, float vdd, bool eeprom) -{ - return vdd / MCP4725_MAX_VALUE * mcp4725_get_raw_output(dev, eeprom); -} - -/** - * Set DAC output voltage - * @param addr Device address - * @param vdd Device operating voltage, volts - * @param value Output value, volts - * @param eeprom Store value to device EEPROM if true - */ -inline void mcp4725_set_voltage(i2c_dev_t *dev, float vdd, float value, bool eeprom) -{ - mcp4725_set_raw_output(dev, MCP4725_MAX_VALUE / vdd * value, eeprom); -} - -#ifdef __cplusplus -} -#endif - -#endif /* _EXTRAS_MCP4725_H_ */ diff --git a/extras/mdnsresponder/component.mk b/extras/mdnsresponder/component.mk deleted file mode 100644 index 68c16f1..0000000 --- a/extras/mdnsresponder/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/mdnsresponder - -INC_DIRS += $(mdnsresponder_ROOT) - -# args for passing into compile rule generation -mdnsresponder_INC_DIR = $(mdnsresponder_ROOT) -mdnsresponder_SRC_DIR = $(mdnsresponder_ROOT) - -$(eval $(call component_compile_rules,mdnsresponder)) diff --git a/extras/mdnsresponder/mdnsresponder.c b/extras/mdnsresponder/mdnsresponder.c deleted file mode 100644 index 2288867..0000000 --- a/extras/mdnsresponder/mdnsresponder.c +++ /dev/null @@ -1,887 +0,0 @@ -/* - * Basic multicast DNS responder - * - * Advertises the IP address, port, and characteristics of a service to other - * devices using multicast DNS on the same LAN, so they can find devices with - * addresses dynamically allocated by DHCP. See avahi, Bonjour, etc. See - * RFC6762, RFC6763 - * - * This sample code is in the public domain. - * - * by M J A Hamel 2016 - */ - - -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "mdnsresponder.h" - -#if !LWIP_IGMP -#error "LWIP_IGMP needs to be defined in lwipopts.h" -#endif - -#if MDNS_RESPONDER_DEBUGGING -#define qDebugLog // Log activity generally -#define qLogIncoming // Log all arriving multicast packets -#define qLogAllTraffic // Log and decode all mDNS packets -#endif - -//------------------------------------------------------------------- - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/bpstruct.h" -#endif - -PACK_STRUCT_BEGIN -/** DNS message header */ -struct mdns_hdr { - PACK_STRUCT_FIELD(u16_t id); - PACK_STRUCT_FIELD(u8_t flags1); - PACK_STRUCT_FIELD(u8_t flags2); - PACK_STRUCT_FIELD(u16_t numquestions); - PACK_STRUCT_FIELD(u16_t numanswers); - PACK_STRUCT_FIELD(u16_t numauthrr); - PACK_STRUCT_FIELD(u16_t numextrarr); -}PACK_STRUCT_STRUCT; -PACK_STRUCT_END - -#define SIZEOF_DNS_HDR 12 - -PACK_STRUCT_BEGIN -/** MDNS query message structure */ -struct mdns_query { - /* MDNS query record starts with either a domain name or a pointer - to a name already present somewhere in the packet. */ - PACK_STRUCT_FIELD(u16_t type); - PACK_STRUCT_FIELD(u16_t class); -}PACK_STRUCT_STRUCT; -PACK_STRUCT_END - -#define SIZEOF_DNS_QUERY 4 - -PACK_STRUCT_BEGIN -/** MDNS answer message structure */ -struct mdns_answer { - /* MDNS answer record starts with either a domain name or a pointer - to a name already present somewhere in the packet. */ - PACK_STRUCT_FIELD(u16_t type); - PACK_STRUCT_FIELD(u16_t class); - PACK_STRUCT_FIELD(u32_t ttl); - PACK_STRUCT_FIELD(u16_t len); -}PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#define SIZEOF_DNS_ANSWER 10 - -PACK_STRUCT_BEGIN -struct mdns_rr_srv { - /* RR SRV */ - PACK_STRUCT_FIELD(u16_t prio); - PACK_STRUCT_FIELD(u16_t weight); - PACK_STRUCT_FIELD(u16_t port); -}PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#define SIZEOF_DNS_RR_SRV 6 - - -#ifdef PACK_STRUCT_USE_INCLUDES -# include "arch/epstruct.h" -#endif - -#define vTaskDelayMs(ms) vTaskDelay((ms)/portTICK_PERIOD_MS) -#define UNUSED_ARG(x) (void)x -#define kDummyDataSize 8 // arbitrary, dynamically resized -#define kMaxNameSize 64 -#define kMaxQStr 128 // max incoming question key handled - -typedef struct mdns_rsrc { - struct mdns_rsrc* rNext; - u16_t rType; - u32_t rTTL; - u16_t rKeySize; - u16_t rDataSize; - char rData[kDummyDataSize]; // Key, as C str with . seperators, followed by data in network-ready form - // at rData[rKeySize] -} mdns_rsrc; - -static struct udp_pcb* gMDNS_pcb = NULL; -static const ip_addr_t gMulticastV4Addr = DNS_MQUERY_IPV4_GROUP_INIT; -#if LWIP_IPV6 -#include "lwip/mld6.h" -static const ip_addr_t gMulticastV6Addr = DNS_MQUERY_IPV6_GROUP_INIT; -#endif -static mdns_rsrc* gDictP = NULL; // RR database, linked list - -//---------------------- Debug/logging utilities ------------------------- - - // DNS field TYPE used for "Resource Records", some additions - #define DNS_RRTYPE_AAAA 28 /* IPv6 host address */ - #define DNS_RRTYPE_SRV 33 /* Service record */ - #define DNS_RRTYPE_OPT 41 /* EDNS0 OPT record */ - #define DNS_RRTYPE_NSEC 47 /* NSEC record */ - #define DNS_RRTYPE_TSIG 250 /* Transaction Signature */ - #define DNS_RRTYPE_ANY 255 /* Not a DNS type, but a DNS query type, meaning "all types"*/ - - // DNS field CLASS used for "Resource Records" - #define DNS_RRCLASS_ANY 255 /* Any class (q) */ - - #define DNS_FLAG1_RESP 0x80 - #define DNS_FLAG1_OPMASK 0x78 - #define DNS_FLAG1_AUTH 0x04 - #define DNS_FLAG1_TRUNC 0x02 - #define DNS_FLAG1_RD 0x01 - #define DNS_FLAG2_RA 0x80 - #define DNS_FLAG2_RESMASK 0x0F - -#ifdef qDebugLog - static char qstr[12]; - - static char* mdns_qrtype(uint16_t typ) - { - switch(typ) { - case DNS_RRTYPE_A : return ("A"); - case DNS_RRTYPE_NS : return ("NS"); - case DNS_RRTYPE_PTR : return ("PTR"); - case DNS_RRTYPE_TXT : return ("TXT "); - case DNS_RRTYPE_AAAA : return ("AAAA"); - case DNS_RRTYPE_SRV : return ("SRV "); - case DNS_RRTYPE_NSEC : return ("NSEC "); - case DNS_RRTYPE_ANY : return ("ANY"); - } - sprintf(qstr, "type %d", typ); - return qstr; - } - -#ifdef qLogAllTraffic - - static void mdns_printhex(u8_t* p, int n) - { - int i; - for (i=0; i",n); - n = 0; - } else { - for (i = 0; i < n; i++) - putchar(*cp++); - if (n != 0) putchar('.'); - } - } while (n > 0); - return (u8_t*)cp; - } - - - static u8_t* mdns_print_header(struct mdns_hdr* hdr) - { - if (hdr->flags1 & DNS_FLAG1_RESP) { - printf("Response, ID $%X %s ", htons(hdr->id), (hdr->flags1 & DNS_FLAG1_AUTH) ? "Auth " : "Non-auth "); - if (hdr->flags2 & DNS_FLAG2_RA) printf("RA "); - if ((hdr->flags2 & DNS_FLAG2_RESMASK) == 0) printf("noerr"); - else printf("err %d", hdr->flags2 & DNS_FLAG2_RESMASK); - } else { - printf("Query, ID $%X op %d", htons(hdr->id), (hdr->flags1 >> 4) & 0x7 ); - } - if (hdr->flags1 & DNS_FLAG1_RD) printf("RD "); - if (hdr->flags1 & DNS_FLAG1_TRUNC) printf("[TRUNC] "); - - printf(": %d questions", htons(hdr->numquestions) ); - if (hdr->numanswers != 0) - printf(", %d answers",htons(hdr->numanswers)); - if (hdr->numauthrr != 0) - printf(", %d auth RR",htons(hdr->numauthrr)); - if (hdr->numextrarr != 0) - printf(", %d extra RR",htons(hdr->numextrarr)); - putchar('\n'); - return (u8_t*)hdr + SIZEOF_DNS_HDR; - } - - // Copy needed because it may be misaligned - static u8_t* mdns_print_query(u8_t* p) - { - struct mdns_query q; - uint16_t c; - - memcpy(&q, p, SIZEOF_DNS_QUERY); - c = htons(q.class); - printf(" %s %s", mdns_qrtype(htons(q.type)), mdns_qclass(c & 0x7FFF) ); - if (c & 0x8000) printf(" unicast-req"); - printf("\n"); - return p + SIZEOF_DNS_QUERY; - } - - // Copy needed because it may be misaligned - static u8_t* mdns_print_answer(u8_t* p, struct mdns_hdr* hp) - { - struct mdns_answer ans; - u16_t rrlen, atype, rrClass;; - - memcpy(&ans,p,SIZEOF_DNS_ANSWER); - atype = htons(ans.type); - rrlen = htons(ans.len); - rrClass = htons(ans.class); - printf(" %s %s TTL %d ", mdns_qrtype(atype), mdns_qclass(rrClass & 0x7FFF), htonl(ans.ttl)); - if (rrClass & 0x8000) - printf("cache-flush "); - if (rrlen > 0) { - u8_t* rp = p + SIZEOF_DNS_ANSWER; - if (atype == DNS_RRTYPE_A && rrlen == 4) { - printf("%d.%d.%d.%d\n",rp[0],rp[1],rp[2],rp[3]); - } else if (atype == DNS_RRTYPE_PTR) { - mdns_print_name(rp, hp); - printf("\n"); - } else if (atype == DNS_RRTYPE_TXT) { - mdns_print_pstr(rp); - printf("\n"); - } else if (atype == DNS_RRTYPE_SRV && rrlen > SIZEOF_DNS_RR_SRV) { - struct mdns_rr_srv srvRR; - memcpy(&srvRR, rp, SIZEOF_DNS_RR_SRV); - printf("prio %d, weight %d, port %d, target ", srvRR.prio, srvRR.weight, ntohs(srvRR.port)); - mdns_print_name(rp + SIZEOF_DNS_RR_SRV, hp); - printf("\n"); - } else { - printf("%db:", rrlen); - mdns_printhex(rp, rrlen); - } - } else - printf("\n"); - return p + SIZEOF_DNS_ANSWER + rrlen; - } - - static int mdns_print_msg(u8_t* msgP, int msgLen) - { - int i; - u8_t *tp; - u8_t *limP = msgP + msgLen; - struct mdns_hdr* hdr; - - hdr = (struct mdns_hdr*) msgP; - tp = mdns_print_header(hdr); - for (i = 0; i < htons(hdr->numquestions); i++) { - printf(" Q%d: ", i + 1); - tp = mdns_print_name(tp, hdr); - tp = mdns_print_query(tp); - if (tp > limP) return 0; - } - - for (i = 0; i < htons(hdr->numanswers); i++) { - printf(" A%d: ", i + 1); - tp = mdns_print_name(tp, hdr); - tp = mdns_print_answer(tp, hdr); - if (tp > limP) return 0; - } - - for (i = 0; i < htons(hdr->numauthrr); i++) { - printf(" AuRR%d: ", i + 1); - tp = mdns_print_name(tp, hdr); - tp = mdns_print_answer(tp, hdr); - if (tp > limP) return 0; - } - - for (i = 0; i < htons(hdr->numextrarr); i++) { - printf(" ExRR%d: ", i + 1); - tp = mdns_print_name(tp, hdr); - tp = mdns_print_answer(tp, hdr); - if (tp > limP) return 0; - } - return 1; - } -#endif // qLogAllTraffic -#endif // qDebugLog - -//--------------------------------------------------------------------------- - -// Convert a DNS domain name label sequence into C string with . seperators -// Handles compression -static u8_t* mdns_labels2str(u8_t* hdrP, u8_t* p, char* qStr) -{ - int i, n; - - do { - n = *p++; - if ((n & 0xC0) == 0xC0) { - n = (n & 0x3F) << 8; - n |= (u8_t)*p++; - mdns_labels2str( hdrP, hdrP + n, qStr); - return p; - } else if (n & 0xC0) { - printf(">>> mdns_labels2str,label $%X?",n); - return p; - } else { - for (i = 0; i < n; i++) - *qStr++ = *p++; - if (n == 0) *qStr++ = 0; - else *qStr++ = '.'; - } - } while (n>0); - return p; -} - -// Encode a .. as a sequence of labels, return length -static int mdns_str2labels(const char* name, u8_t* lseq, int max) -{ - int i, n, sdx, idx = 0; - int lc = 0; - - do { - sdx = idx; - while (name[idx] != '.' && name[idx] != 0) idx++; - n = idx - sdx; - if (lc + 1 + n > max) { - printf(">>> mdns_str2labels: oversize (%d)\n", lc + 1 + n); - return 0; - } - *lseq++ = n; - lc++; - for (i = 0; i < n; i++) - *lseq++ = name[sdx + i]; - lc += n; - if (name[idx] == '.') - idx++; - } while (n > 0); - return lc; -} - -// Unpack a DNS question RR at qp, return pointer to next RR -static u8_t* mdns_get_question(u8_t* hdrP, u8_t* qp, char* qStr, uint16_t* qClass, uint16_t* qType, u8_t* qUnicast) -{ - struct mdns_query qr; - uint16_t cls; - - qp = mdns_labels2str(hdrP, qp, qStr); - memcpy(&qr, qp, SIZEOF_DNS_QUERY); - *qType = htons(qr.type); - cls = htons(qr.class); - *qUnicast = cls >> 15; - *qClass = cls & 0x7FFF; - return qp + SIZEOF_DNS_QUERY; -} - -//--------------------------------------------------------------------------- - - -// Add a record to the RR database list -static void mdns_add_response(const char* vKey, u16_t vType, u32_t ttl, const void* dataP, u16_t vDataSize) -{ - mdns_rsrc* rsrcP; - int keyLen, recSize; - - keyLen = strlen(vKey) + 1; - recSize = sizeof(mdns_rsrc) - kDummyDataSize + keyLen + vDataSize; - rsrcP = (mdns_rsrc*)malloc(recSize); - if (rsrcP == NULL) { - printf(">>> mdns_add_response: couldn't alloc %d\n",recSize); - } else { - rsrcP->rType = vType; - rsrcP->rTTL = ttl; - rsrcP->rKeySize = keyLen; - rsrcP->rDataSize = vDataSize; - memcpy(rsrcP->rData, vKey, keyLen); - memcpy(&rsrcP->rData[keyLen], dataP, vDataSize); - rsrcP->rNext = gDictP; - gDictP = rsrcP; -#ifdef qDebugLog - printf("mDNS added RR '%s' %s, %d bytes\n", vKey, mdns_qrtype(vType), vDataSize); -#endif - } -} - -void mdns_add_PTR(const char* rKey, u32_t ttl, const char* nmStr) -{ - size_t nl; - u8_t lBuff[kMaxNameSize]; - - nl = mdns_str2labels(nmStr, lBuff, sizeof(lBuff)); - if (nl > 0) { - mdns_add_response(rKey, DNS_RRTYPE_PTR, ttl, lBuff, nl); - } -} - -void mdns_add_SRV(const char* rKey, u32_t ttl, u16_t rPort, const char* targName) -{ - typedef struct SrvRec { - struct mdns_rr_srv srvRR; - u8_t lBuff[kMaxNameSize]; - } __attribute__((packed)) SrvRec; - - int nl; - SrvRec temp; - - temp.srvRR.prio = 0; - temp.srvRR.weight = 0; - temp.srvRR.port = htons(rPort); - nl = mdns_str2labels(targName, temp.lBuff, sizeof(temp.lBuff)); - if (nl > 0) - mdns_add_response(rKey, DNS_RRTYPE_SRV, ttl, &temp, SIZEOF_DNS_RR_SRV + nl); -} - -// Single TXT str, can be concatenated -void mdns_add_TXT(const char* rKey, u32_t ttl, const char* txStr) -{ - u16_t n = strlen(txStr); - if (n > 255) { - printf(">>> mdns_add_TXT oversize (%d)\n",n); - return; - } - - char *pstr = malloc(n + 1); - pstr[0] = n; - memcpy(&pstr[1], txStr, n); - mdns_add_response(rKey, DNS_RRTYPE_TXT, ttl, pstr, n + 1); - free(pstr); -} - -void mdns_add_A(const char* rKey, u32_t ttl, const ip4_addr_t *addr) -{ - mdns_add_response(rKey, DNS_RRTYPE_A, ttl, addr, sizeof(ip4_addr_t)); -} - -#if LWIP_IPV6 -void mdns_add_AAAA(const char* rKey, u32_t ttl, const ip6_addr_t *addr) -{ - mdns_add_response(rKey, DNS_RRTYPE_AAAA, ttl, addr, sizeof(addr->addr)); -} -#endif - -void mdns_add_facility( const char* instanceName, // Friendly name, need not be unique - const char* serviceName, // Must be "_name", e.g. "_hap" or "_http" - const char* addText, // Must be = - mdns_flags flags, // TCP or UDP - u16_t onPort, // port number - u32_t ttl // seconds - ) -{ - size_t key_len = strlen(serviceName) + 12; - char *key = malloc(key_len + 1); - size_t full_name_len = strlen(instanceName) + 1 + key_len; - char *fullName = malloc(full_name_len + 1); - size_t dev_name_len = strlen(instanceName) + 7; - char *devName = malloc(dev_name_len + 1); - -#ifdef qDebugLog - printf("\nmDNS advertising instance %s protocol %s", instanceName, serviceName); - if (addText) { - printf(" text %s", addText); - } - printf(" on port %d %s TTL %d secs\n", onPort, (flags & mdns_UDP) ? "UDP" : "TCP", ttl); -#endif - - snprintf(key, key_len + 1, "%s.%s.local.", serviceName, (flags & mdns_UDP) ? "_udp" :"_tcp"); - snprintf(fullName, full_name_len + 1, "%s.%s", instanceName, key); - snprintf(devName, dev_name_len + 1, "%s.local.", instanceName); - - // Order has significance for extraRR feature - if (addText) { - mdns_add_TXT(fullName, ttl, addText); - } - -#if LWIP_IPV6 - const ip6_addr_t addr6 = { {0ul, 0ul, 0ul, 0ul} }; - mdns_add_AAAA(devName, ttl, &addr6); -#endif - - const ip4_addr_t addr4 = { 0 }; - mdns_add_A(devName, ttl, &addr4); - - mdns_add_SRV(fullName, ttl, onPort, devName); - mdns_add_PTR(key, ttl, fullName); - - // Optional, makes us browsable - if (flags & mdns_Browsable) { - mdns_add_PTR("_services._dns-sd._udp.local.", ttl, key); - } - - free(key); - free(fullName); - free(devName); -} - -static mdns_rsrc* mdns_match(const char* qstr, u16_t qType) -{ - mdns_rsrc* rp = gDictP; - while (rp != NULL) { - if (rp->rType == qType || qType == DNS_RRTYPE_ANY) { - if (strcasecmp(rp->rData, qstr) == 0) { -#ifdef qDebugLog - printf(" - matched '%s' %s\n", qstr, mdns_qrtype(rp->rType)); -#endif - break; - } - } - rp = rp->rNext; - } - return rp; -} - -// Create answer RR and append to resp[respLen], return new length -static int mdns_add_to_answer(mdns_rsrc* rsrcP, u8_t* resp, int respLen) -{ - // Key is stored as C str, convert to labels - size_t rem = MDNS_RESPONDER_REPLY_SIZE - respLen; - size_t len = mdns_str2labels(rsrcP->rData, &resp[respLen], rem); - if (len == 0) { - // Overflow, skip this answer. - return respLen; - } - if ((len + SIZEOF_DNS_ANSWER + rsrcP->rDataSize) > rem) { - // Overflow, skip this answer. - printf(">>> mdns_add_to_answer: oversize (%d)\n", len + SIZEOF_DNS_ANSWER + rsrcP->rDataSize); - return respLen; - } - respLen += len; - - // Answer fields: may be misaligned, so build and memcpy - struct mdns_answer ans; - ans.type = htons(rsrcP->rType); - ans.class = htons(DNS_RRCLASS_IN); - ans.ttl = htonl(rsrcP->rTTL); - ans.len = htons(rsrcP->rDataSize); - memcpy(&resp[respLen], &ans, SIZEOF_DNS_ANSWER); - respLen += SIZEOF_DNS_ANSWER; - - // Data for this key - memcpy(&resp[respLen], &rsrcP->rData[rsrcP->rKeySize], rsrcP->rDataSize); - respLen += rsrcP->rDataSize; - - return respLen; -} - -//--------------------------------------------------------------------------- - -// Send UDP to multicast address -static void mdns_send_mcast(const ip_addr_t *addr, u8_t* msgP, int nBytes) -{ - struct pbuf* p; - err_t err; - -#ifdef qLogAllTraffic - mdns_print_msg(msgP, nBytes); -#endif - - p = pbuf_alloc(PBUF_TRANSPORT, nBytes, PBUF_RAM); - if (p) { - memcpy(p->payload, msgP, nBytes); - const ip_addr_t *dest_addr; - if (IP_IS_V6_VAL(*addr)) { -#if LWIP_IPV6 - dest_addr = &gMulticastV6Addr; -#endif - } else { - dest_addr = &gMulticastV4Addr; - } - struct netif *netif = ip_current_input_netif(); - err = udp_sendto_if(gMDNS_pcb, p, dest_addr, LWIP_IANA_PORT_MDNS, netif); - if (err == ERR_OK) { -#ifdef qDebugLog - printf(" - responded with %d bytes err %d\n", nBytes, err); -#endif - } else - printf(">>> mdns_send failed %d\n", err); - pbuf_free(p); - } else { - printf(">>> mdns_send: alloc failed[%d]\n", nBytes); - } -} - -// Message has passed tests, may want to send an answer -static void mdns_reply(const ip_addr_t *addr, struct mdns_hdr* hdrP) -{ - int i, nquestions, respLen; - struct mdns_hdr* rHdr; - mdns_rsrc* extra; - u8_t* qBase = (u8_t*)hdrP; - u8_t* qp; - u8_t* mdns_response; - - mdns_response = malloc(MDNS_RESPONDER_REPLY_SIZE); - if (mdns_response == NULL) { - printf(">>> mdns_reply could not alloc %d\n", MDNS_RESPONDER_REPLY_SIZE); - return; - } - - // Build response header - rHdr = (struct mdns_hdr*) mdns_response; - rHdr->id = hdrP->id; - rHdr->flags1 = DNS_FLAG1_RESP + DNS_FLAG1_AUTH; - rHdr->flags2 = 0; - rHdr->numquestions = 0; - rHdr->numanswers = 0; - rHdr->numauthrr = 0; - rHdr->numextrarr = 0; - respLen = SIZEOF_DNS_HDR; - - extra = NULL; - qp = qBase + SIZEOF_DNS_HDR; - nquestions = htons(hdrP->numquestions); - - for (i = 0; i < nquestions; i++) { - char qStr[kMaxQStr]; - u16_t qClass, qType; - u8_t qUnicast; - mdns_rsrc* rsrcP; - - qp = mdns_get_question(qBase, qp, qStr, &qClass, &qType, &qUnicast); - if (qClass == DNS_RRCLASS_IN || qClass == DNS_RRCLASS_ANY) { - rsrcP = mdns_match(qStr, qType); - if (rsrcP) { -#if LWIP_IPV6 - if (rsrcP->rType == DNS_RRTYPE_AAAA) { - // Emit an answer for each ipv6 address. - struct netif *netif = ip_current_input_netif(); - for (int i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { - if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i))) { - const ip6_addr_t *addr6 = netif_ip6_addr(netif, i); -#ifdef qDebugLog - char addr6_str[IP6ADDR_STRLEN_MAX]; - ip6addr_ntoa_r(addr6, addr6_str, IP6ADDR_STRLEN_MAX); - printf("Updating AAAA record for '%s' to %s\n", rsrcP->rData, addr6_str); -#endif - memcpy(&rsrcP->rData[rsrcP->rKeySize], addr6, sizeof(addr6->addr)); - size_t new_len = mdns_add_to_answer(rsrcP, mdns_response, respLen); - if (new_len > respLen) { - rHdr->numanswers = htons(htons(rHdr->numanswers) + 1); - respLen = new_len; - } - } - } - continue; - } -#endif - - if (rsrcP->rType == DNS_RRTYPE_A) { - struct netif *netif = ip_current_input_netif(); -#ifdef qDebugLog - char addr4_str[IP4ADDR_STRLEN_MAX]; - ip4addr_ntoa_r(netif_ip4_addr(netif), addr4_str, IP4ADDR_STRLEN_MAX); - printf("Updating A record for '%s' to %s\n", rsrcP->rData, addr4_str); -#endif - memcpy(&rsrcP->rData[rsrcP->rKeySize], netif_ip4_addr(netif), sizeof(ip4_addr_t)); - } - - size_t new_len = mdns_add_to_answer(rsrcP, mdns_response, respLen); - if (new_len > respLen) { - rHdr->numanswers = htons(htons(rHdr->numanswers) + 1); - respLen = new_len; - } - - // Extra RR logic: if SRV follows PTR, or A follows SRV, volunteer it in extraRR - // Not required, but could do more here, see RFC6763 s12 - if (qType == DNS_RRTYPE_PTR) { - if (rsrcP->rNext && rsrcP->rNext->rType == DNS_RRTYPE_SRV) - extra = rsrcP->rNext; - } else if (qType == DNS_RRTYPE_SRV) { - if (rsrcP->rNext && rsrcP->rNext->rType == DNS_RRTYPE_A) - extra = rsrcP->rNext; - } - } - } - } // for nQuestions - - if (respLen > SIZEOF_DNS_HDR) { - if (extra) { - if (extra->rType == DNS_RRTYPE_A) { - struct netif *netif = ip_current_input_netif(); -#ifdef qDebugLog - char addr4_str[IP4ADDR_STRLEN_MAX]; - ip4addr_ntoa_r(netif_ip4_addr(netif), addr4_str, IP4ADDR_STRLEN_MAX); - printf("Updating A record for '%s' to %s\n", extra->rData, addr4_str); -#endif - memcpy(&extra->rData[extra->rKeySize], netif_ip4_addr(netif), sizeof(ip4_addr_t)); - } - size_t new_len = mdns_add_to_answer(extra, mdns_response, respLen); - if (new_len > respLen) { - rHdr->numextrarr = htons(htons(rHdr->numextrarr) + 1); - respLen = new_len; - } - } - mdns_send_mcast(addr, mdns_response, respLen); - } - - free(mdns_response); -} - -// Callback from udp_recv -static void mdns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) -{ - UNUSED_ARG(pcb); - UNUSED_ARG(port); - - u8_t* mdns_payload; - int plen; - - plen = p->tot_len; -#ifdef qLogIncoming - char addr_str[IPADDR_STRLEN_MAX]; - ipaddr_ntoa_r(addr, addr_str, IPADDR_STRLEN_MAX); - printf("\n\nmDNS IPv%d got %d bytes from %s\n", IP_IS_V6(addr) ? 6 : 4, plen, addr_str); -#endif - - // Sanity checks on size - if (plen > MDNS_RESPONDER_REPLY_SIZE) { -#ifdef qDebugLog - printf(">>> mdns_recv: pbuf too big\n"); -#endif - } else if (plen < (SIZEOF_DNS_HDR + SIZEOF_DNS_QUERY + 1 + SIZEOF_DNS_ANSWER + 1)) { -#ifdef qDebugLog - printf(">>> mdns_recv: pbuf too small\n"); -#endif - } else { - mdns_payload = malloc(plen); - if (!mdns_payload) { - printf(">>> mdns_recv, could not alloc %d\n",plen); - } else { - if (pbuf_copy_partial(p, mdns_payload, plen, 0) == plen) { - struct mdns_hdr* hdrP = (struct mdns_hdr*) mdns_payload; -#ifdef qLogAllTraffic - mdns_print_msg(mdns_payload, plen); -#endif - - if ( (hdrP->flags1 & (DNS_FLAG1_RESP + DNS_FLAG1_OPMASK + DNS_FLAG1_TRUNC) ) == 0 - && hdrP->numquestions > 0 ) - mdns_reply(addr, hdrP); - } - free(mdns_payload); - } - } - pbuf_free(p); -} - -// If we are in station mode and have an IP address, start a multicast UDP receive -void mdns_init() -{ - err_t err; - - struct netif *station_netif = sdk_system_get_netif(STATION_IF); - - if (station_netif) { - // Start IGMP on the netif for our interface: this isn't done for us - if (!(station_netif->flags & NETIF_FLAG_IGMP)) { - station_netif->flags |= NETIF_FLAG_IGMP; - err = igmp_start(station_netif); - if (err != ERR_OK) { - printf(">>> mDNS_init: igmp_start on %c%c failed %d\n", station_netif->name[0], station_netif->name[1],err); - return; - } - } - - if ((err = igmp_joingroup_netif(station_netif, ip_2_ip4(&gMulticastV4Addr))) != ERR_OK) { - printf(">>> mDNS_init: igmp_join failed %d\n",err); - return; - } - -#if LWIP_IPV6 - if ((err = mld6_joingroup_netif(station_netif, ip_2_ip6(&gMulticastV6Addr))) != ERR_OK) { - printf(">>> mDNS_init: igmp_join failed %d\n",err); - return; - } -#endif - } - - struct netif *softap_netif = sdk_system_get_netif(SOFTAP_IF); - if (softap_netif) { - if (softap_netif == NULL) { - printf(">>> mDNS_init: wifi opmode not softap\n"); - return; - } - - // Start IGMP on the netif for our interface: this isn't done for us - if (!(softap_netif->flags & NETIF_FLAG_IGMP)) { - softap_netif->flags |= NETIF_FLAG_IGMP; - err = igmp_start(softap_netif); - if (err != ERR_OK) { - printf(">>> mDNS_init: igmp_start on %c%c failed %d\n", softap_netif->name[0], softap_netif->name[1],err); - return; - } - } - - if ((err = igmp_joingroup_netif(softap_netif, ip_2_ip4(&gMulticastV4Addr))) != ERR_OK) { - printf(">>> mDNS_init: igmp_join failed %d\n",err); - return; - } - -#if LWIP_IPV6 - if ((err = mld6_joingroup_netif(softap_netif, ip_2_ip6(&gMulticastV6Addr))) != ERR_OK) { - printf(">>> mDNS_init: igmp_join failed %d\n",err); - return; - } -#endif - } - - if (station_netif == NULL && softap_netif == NULL) { - printf(">>> mDNS_init: wifi opmode none\n"); - return; - } - - gMDNS_pcb = udp_new_ip_type(IPADDR_TYPE_ANY); - if (!gMDNS_pcb) { - printf(">>> mDNS_init: udp_new failed\n"); - return; - } - - if ((err = udp_bind(gMDNS_pcb, IP_ANY_TYPE, LWIP_IANA_PORT_MDNS)) != ERR_OK) { - printf(">>> mDNS_init: udp_bind failed %d\n",err); - return; - } - - udp_recv(gMDNS_pcb, mdns_recv, NULL); -} diff --git a/extras/mdnsresponder/mdnsresponder.h b/extras/mdnsresponder/mdnsresponder.h deleted file mode 100644 index 257ce7b..0000000 --- a/extras/mdnsresponder/mdnsresponder.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Basic multicast DNS responder - * - * Advertises the IP address, port, and characteristics of a service to other - * devices using multicast DNS on the same LAN, so they can find devices with - * addresses dynamically allocated by DHCP. See avahi, Bonjour, etc See RFC6762, - * RFC6763 - * - * This sample code is in the public domain. - * - * by M J A Hamel 2016 - */ - -#ifndef __MDNSRESPONDER_H__ -#define __MDNSRESPONDER_H__ - -#include - -/* The default maximum reply size, increase as necessary. */ -#ifndef MDNS_RESPONDER_REPLY_SIZE -#define MDNS_RESPONDER_REPLY_SIZE 320 -#endif - -#ifndef MDNS_RESPONDER_DEBUGGING -#define MDNS_RESPONDER_DEBUGGING 0 -#endif - - -// Starts the mDNS responder task, call first -void mdns_init(); - -// Build and advertise an appropriate linked set of PTR/TXT/SRV/A records for the parameters provided -// This is a simple canned way to build a set of records for a single service that will -// be advertised whenever the device is given an IP address by WiFi - -typedef enum { - mdns_TCP, - mdns_UDP, - mdns_Browsable // see RFC6763:11 - adds a standard record that lets browsers find the service without needing to know its name -} mdns_flags; - -void mdns_add_facility( const char* instanceName, // Short user-friendly instance name, should NOT include serial number/MAC/etc - const char* serviceName, // Must be registered, _name, (see RFC6335 5.1 & 5.2) - const char* addText, // Should be =, or "" if unused (see RFC6763 6.3) - mdns_flags flags, // TCP or UDP plus browsable - u16_t onPort, // port number - u32_t ttl // time-to-live, seconds - ); - - -// Low-level RR builders for rolling your own -void mdns_add_PTR(const char* rKey, u32_t ttl, const char* nameStr); -void mdns_add_SRV(const char* rKey, u32_t ttl, u16_t rPort, const char* targname); -void mdns_add_TXT(const char* rKey, u32_t ttl, const char* txtStr); -void mdns_add_A (const char* rKey, u32_t ttl, const ip4_addr_t *addr); -#if LWIP_IPV6 -void mdns_add_AAAA(const char* rKey, u32_t ttl, const ip6_addr_t *addr); -#endif - -/* Sample usage, advertising a secure web service - - mdns_init(); - mdns_add_facility("Fluffy", "_https", "Zoom=1", mdns_TCP+mdns_Browsable, 443, 600); - -*/ - -#endif diff --git a/extras/ms561101ba03/component.mk b/extras/ms561101ba03/component.mk deleted file mode 100644 index b4986d2..0000000 --- a/extras/ms561101ba03/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ms561101ba03 - -# expected anyone using this driver includes it as 'ms561101ba03/ms561101ba03.h' -INC_DIRS += $(ms561101ba03_ROOT).. - -# args for passing into compile rule generation -ms561101ba03_SRC_DIR = $(ms561101ba03_ROOT) - -$(eval $(call component_compile_rules,ms561101ba03)) diff --git a/extras/ms561101ba03/ms561101ba03.c b/extras/ms561101ba03/ms561101ba03.c deleted file mode 100644 index a6f350e..0000000 --- a/extras/ms561101ba03/ms561101ba03.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Driver for barometic pressure sensor MS5611-01BA03 - * - * Copyright (C) 2016 Bernhard Guillon - * - * Loosely based on hmc5831 with: - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "ms561101ba03.h" -#include -#include "FreeRTOS.h" -#include "task.h" - -#define CONVERT_D1 0x40 -#define CONVERT_D2 0x50 -#define ADC_READ 0x00 -#define RESET 0x1E - -/* - * FIXME: - * The chip has different response times for the different oversampling rates - * (0.5 ms/1.1ms/2.1ms/4.1ms/8.22ms) - * For now use a save value. - */ -#define CONVERSION_TIME 20 / portTICK_PERIOD_MS // milliseconds - -static inline int reset(i2c_dev_t *i2c_dev) -{ - uint8_t buf[1] = { RESET }; - return i2c_slave_write(i2c_dev->bus, i2c_dev->addr, NULL, buf, 1); -} - -static inline bool read_prom(ms561101ba03_t *dev) -{ - uint8_t tmp[2] = { 0, 0 }; - uint8_t reg = 0xA2; - - if (i2c_slave_read(dev->i2c_dev.bus, dev->i2c_dev.addr, ®, tmp, 2)) - return false; - dev->config_data.sens = tmp[0] << 8 | tmp[1]; - - reg = 0xA4; - if (i2c_slave_read(dev->i2c_dev.bus, dev->i2c_dev.addr, ®, tmp, 2)) - return false; - dev->config_data.off = tmp[0] << 8 | tmp[1]; - - reg = 0xA6; - if (i2c_slave_read(dev->i2c_dev.bus, dev->i2c_dev.addr, ®, tmp, 2)) - return false; - dev->config_data.tcs = tmp[0] << 8 | tmp[1]; - - reg = 0xA8; - if (i2c_slave_read(dev->i2c_dev.bus, dev->i2c_dev.addr, ®, tmp, 2)) - return false; - dev->config_data.tco = tmp[0] << 8 | tmp[1]; - - reg = 0xAA; - if (i2c_slave_read(dev->i2c_dev.bus, dev->i2c_dev.addr, ®, tmp, 2)) - return false; - dev->config_data.t_ref = tmp[0] << 8 | tmp[1]; - - reg = 0xAC; - if (i2c_slave_read(dev->i2c_dev.bus, dev->i2c_dev.addr, ®, tmp, 2)) - return false; - dev->config_data.tempsens = tmp[0] << 8 | tmp[1]; - - return true; -} - -static inline int start_pressure_conversion(ms561101ba03_t *dev) //D1 -{ - uint8_t buf = CONVERT_D1 + dev->osr; - return i2c_slave_write(dev->i2c_dev.bus, dev->i2c_dev.addr, NULL, &buf, 1); -} - -static inline int start_temperature_conversion(ms561101ba03_t *dev) //D2 -{ - uint8_t buf = CONVERT_D2 + dev->osr; - return i2c_slave_write(dev->i2c_dev.bus, dev->i2c_dev.addr, NULL, &buf, 1); -} - -static inline bool read_adc(i2c_dev_t *i2c_dev, uint32_t *result) -{ - *result = 0; - uint8_t tmp[3]; - uint8_t reg = 0x00; - if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, ®, tmp, 3)) - return false; - - *result = (tmp[0] << 16) | (tmp[1] << 8) | tmp[2]; - - // If we are to fast the ADC will return 0 instead of the actual result - if (*result == 0) - return false; - - return true; -} - -static inline void calc_dt(ms561101ba03_t *dev, uint32_t digital_temperature) -{ - // Difference between actual and reference digital_temperature - // dT = D2 - T_ref = D2 - C5 *2^8 - dev->dT = digital_temperature - ((int32_t)dev->config_data.t_ref << 8); -} - -static inline int32_t calc_temp(ms561101ba03_t *dev) -{ - // Actual temerature (-40...85C with 0.01 resulution) - // TEMP = 20C +dT * TEMPSENSE =2000 + dT * C6 / 2^23 - return (int32_t)(2000 + (int64_t)dev->dT * dev->config_data.tempsens / 8388608); -} - -static inline int64_t calc_off(ms561101ba03_t *dev) -{ - // Offset at actual temperature - // OFF=OFF_t1 + TCO * dT = OFF_t1(C2) * 2^16 + (C4*dT)/2^7 - return (int64_t)((int64_t)dev->config_data.off * (int64_t)65536) - + (((int64_t)dev->config_data.tco * (int64_t)dev->dT) / (int64_t)128); -} - -static inline int64_t calc_sens(ms561101ba03_t *dev) -{ - // Senisitivity at actual temperature - // SENS=SENS_t1 + TCS *dT = SENS_t1(C1) *2^15 + (TCS(C3) *dT)/2^8 - return (int64_t)(((int64_t)dev->config_data.sens) * (int64_t)32768) - + (((int64_t)dev->config_data.tcs * (int64_t)dev->dT) / (int64_t)256); -} - -static inline int32_t calc_p(uint32_t digital_pressure, int64_t sens, int64_t off) -{ - // Temperature compensated pressure (10...1200mbar with 0.01mbar resolution - // P = digital pressure value * SENS - OFF = (D1 * SENS/2^21 -OFF)/2^15 - return (int32_t)(((int64_t)digital_pressure - * (int64_t)((int64_t)sens / (int64_t)0x200000) - (int64_t)off) - / (int64_t)32768); -} - -static inline bool get_raw_temperature(ms561101ba03_t *dev, uint32_t *result) -{ - if (start_temperature_conversion(dev)) - return false; - - vTaskDelay(CONVERSION_TIME); - - if (!read_adc(&dev->i2c_dev, result)) - return false; - - return true; -} - -static inline bool get_raw_pressure(ms561101ba03_t *dev, uint32_t *result) -{ - if (start_pressure_conversion(dev)) - return false; - - vTaskDelay(CONVERSION_TIME); - - if (!read_adc(&dev->i2c_dev, result)) - return false; - - return true; -} - -/////////////////////////Public////////////////////////////////////// - -bool ms561101ba03_get_sensor_data(ms561101ba03_t *dev) -{ - // Second order temperature compensation see datasheet p8 - uint32_t raw_pressure = 0; - if (!get_raw_pressure(dev, &raw_pressure)) - return false; - - uint32_t raw_temperature = 0; - if (!get_raw_temperature(dev, &raw_temperature)) - return false; - - calc_dt(dev, raw_temperature); - int64_t temp = calc_temp(dev); - int64_t off = calc_off(dev); - int64_t sens = calc_sens(dev); - - //Set defaults for temp >= 2000 - int64_t t_2 = 0; - int64_t off_2 = 0; - int64_t sens_2 = 0; - int64_t help = 0; - if (temp < 2000) - { - //Low temperature - t_2 = ((dev->dT * dev->dT) >> 31); // T2 = dT^2/2^31 - help = (temp - 2000); - help = 5 * help * help; - off_2 = help >> 1; // OFF_2 = 5 * (TEMP - 2000)^2/2^1 - sens_2 = help >> 2; // SENS_2 = 5 * (TEMP - 2000)^2/2^2 - if (temp < -1500) - { - // Very low temperature - help = (temp + 1500); - help = help * help; - off_2 = off_2 + 7 * help; // OFF_2 = OFF_2 + 7 * (TEMP + 1500)^2 - sens_2 = sens_2 + ((11 * help) >> 1); // SENS_2 = SENS_2 + 7 * (TEMP + 1500)^2/2^1 - } - } - - temp = temp - t_2; - off = off - off_2; - sens = sens - sens_2; - - dev->result.pressure = calc_p(raw_pressure, sens, off); - dev->result.temperature = (int32_t)temp; - return true; -} - -bool ms561101ba03_init(ms561101ba03_t *dev) -{ - // First of all we need to reset the chip - if (reset(&dev->i2c_dev)) - return false; - // Wait a bit for the device to reset - vTaskDelay(CONVERSION_TIME); - // Get the config - if (!read_prom(dev)) - return false; - // Every thing went fine - return true; -} diff --git a/extras/ms561101ba03/ms561101ba03.h b/extras/ms561101ba03/ms561101ba03.h deleted file mode 100644 index 091f5f6..0000000 --- a/extras/ms561101ba03/ms561101ba03.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Driver for barometic pressure sensor MS5611-01BA03 - * - * Copyright (C) 2016 Bernhard Guillon - * - * Loosely based on hmc5831 with: - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_MS561101BA03_H_ -#define EXTRAS_MS561101BA03_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define MS561101BA03_ADDR_CSB_HIGH 0x76 -#define MS561101BA03_ADDR_CSB_LOW 0x77 - -/** - * Oversampling ratio - */ -typedef enum -{ - MS561101BA03_OSR_256 = 0x00, //!< 256 samples per measurement - MS561101BA03_OSR_512 = 0x02, //!< 512 samples per measurement - MS561101BA03_OSR_1024 = 0x04, //!< 1024 samples per measurement - MS561101BA03_OSR_2048 = 0x06, //!< 2048 samples per measurement - MS561101BA03_OSR_4096 = 0x08 //!< 4096 samples per measurement -} ms561101ba03_osr_t; - -/** - * Configuration data - */ -typedef struct -{ - uint16_t sens; //!< C1 Pressure sensitivity | SENS_t1 - uint16_t off; //!< C2 Pressure offset | OFF_t1 - uint16_t tcs; //!< C3 Temperature coefficient of pressure sensitivity | TCS - uint16_t tco; //!< C4 Temperature coefficient of pressuer offset | TCO - uint16_t t_ref; //!< C5 Reference temperature | T_ref - uint16_t tempsens; //!< C6 Temperature coefficient of the temperature | TEMPSENSE -} ms561101ba03_config_data_t; - -/** - * Result - */ -typedef struct -{ - int32_t pressure; //!< Compensated pressure from 10 mbar to 1200 mbar with 0.01 mbar resolution - int32_t temperature; //!< Temperature from -40 C to 85 C with 0.01 C resulution -} ms561101ba03_result_t; - -/** - * Device descriptor - */ -typedef struct -{ - i2c_dev_t i2c_dev; //!< I2C device settings - ms561101ba03_osr_t osr; //!< Oversampling setting - ms561101ba03_config_data_t config_data; //!< Device configuration, filled upon initalize - ms561101ba03_result_t result; //!< Result, filled upon co - int32_t dT; //!< delta temperature, filled uppon co and for internal use only -} ms561101ba03_t; - -/** - * Initialize device and read its configuration - * @param dev Pointer to device descriptor - * @return true if no errors occured - */ -bool ms561101ba03_init(ms561101ba03_t *dev); - -/** - * Get sensor data with second order temperature compensation - * - * The result will be: - * Compensated pressure from 10 mbar to 1200 mbar with 0.01 mbar resolution - * dev->result.pressure - * - * Temperature from -40 C to 85 C with 0.01 C resulution - * dev->result.temperature - * - * @param dev Pointer to device descriptor - * @return true if no errors occured - */ -bool ms561101ba03_get_sensor_data(ms561101ba03_t *dev); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_MS561101BA03_H_ */ diff --git a/extras/multipwm b/extras/multipwm deleted file mode 160000 index 44ecea5..0000000 --- a/extras/multipwm +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 44ecea5757bee0112c65f33eadb44e91a8923535 diff --git a/extras/onewire/onewire.c b/extras/onewire/onewire.c index 5111271..159360b 100644 --- a/extras/onewire/onewire.c +++ b/extras/onewire/onewire.c @@ -108,7 +108,7 @@ bool onewire_write(int pin, uint8_t v) { bool onewire_write_bytes(int pin, const uint8_t *buf, size_t count) { size_t i; - for (i = 0; i < count; i++) { + for (i = 0 ; i < count ; i++) { if (!onewire_write(pin, buf[i])) { return false; } @@ -138,7 +138,7 @@ bool onewire_read_bytes(int pin, uint8_t *buf, size_t count) { size_t i; int b; - for (i = 0; i < count; i++) { + for (i = 0 ; i < count ; i++) { b = onewire_read(pin); if (b < 0) return false; buf[i] = b; @@ -216,7 +216,7 @@ onewire_addr_t onewire_search_next(onewire_search_t *search, int pin) { uint8_t id_bit_number; uint8_t last_zero, search_result; int rom_byte_number; - int8_t id_bit, cmp_id_bit; + uint8_t id_bit, cmp_id_bit; onewire_addr_t addr; unsigned char rom_byte_mask; bool search_direction; @@ -434,7 +434,7 @@ uint16_t onewire_crc16(const uint8_t* input, size_t len, uint16_t crc_iv) { { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }; uint16_t i; - for (i = 0; i < len; i++) { + for (i = 0 ; i < len ; i++) { // Even though we're just copying a byte from the input, // we'll be doing 16-bit computation with it. uint16_t cdata = input[i]; diff --git a/extras/onewire/onewire.h b/extras/onewire/onewire.h index ddc88dc..89823d7 100644 --- a/extras/onewire/onewire.h +++ b/extras/onewire/onewire.h @@ -4,10 +4,6 @@ #include // sdk_os_delay_us #include "FreeRTOS.h" -#ifdef __cplusplus -extern "C" { -#endif - /** @file onewire.h * * Routines to access devices using the Dallas Semiconductor 1-Wire(tm) @@ -236,8 +232,4 @@ bool onewire_check_crc16(const uint8_t* input, size_t len, const uint8_t* invert */ uint16_t onewire_crc16(const uint8_t* input, size_t len, uint16_t crc_iv); -#ifdef __cplusplus -} #endif - -#endif /* __ONEWIRE_H__ */ diff --git a/extras/paho_mqtt_c/MQTTClient.c b/extras/paho_mqtt_c/MQTTClient.c index c2419c3..a807662 100644 --- a/extras/paho_mqtt_c/MQTTClient.c +++ b/extras/paho_mqtt_c/MQTTClient.c @@ -13,45 +13,63 @@ * Contributors: * Allan Stockdill-Mander/Ian Craggs - initial API and implementation and/or initial documentation *******************************************************************************/ -#include -#include + #include "MQTTClient.h" -static void new_message_data(mqtt_message_data_t* md, mqtt_string_t* aTopicName, mqtt_message_t* aMessgage) { - md->topic = aTopicName; +void NewMessageData(MessageData* md, MQTTString* aTopicName, MQTTMessage* aMessgage) { + md->topicName = aTopicName; md->message = aMessgage; } -static int get_next_packet_id(mqtt_client_t *c) { - return c->next_packetid = (c->next_packetid == MQTT_MAX_PACKET_ID) ? 1 : c->next_packetid + 1; +int getNextPacketId(Client *c) { + return c->next_packetid = (c->next_packetid == MAX_PACKET_ID) ? 1 : c->next_packetid + 1; } -static int send_packet(mqtt_client_t* c, int length, mqtt_timer_t* timer) +int sendPacket(Client* c, int length, Timer* timer) { - int rc = MQTT_FAILURE, + int rc = FAILURE, sent = 0; - - while (sent < length && !mqtt_timer_expired(timer)) + + while (sent < length && !expired(timer)) { - rc = c->ipstack->mqttwrite(c->ipstack, &c->buf[sent], length - sent, mqtt_timer_left_ms(timer)); + rc = c->ipstack->mqttwrite(c->ipstack, &c->buf[sent], length, left_ms(timer)); if (rc < 0) // there was an error writing the data break; sent += rc; } if (sent == length) { - mqtt_timer_countdown(&(c->ping_timer), c->keepAliveInterval); // record the fact that we have successfully sent the packet - rc = MQTT_SUCCESS; + countdown(&c->ping_timer, c->keepAliveInterval); // record the fact that we have successfully sent the packet + rc = SUCCESS; } else - rc = MQTT_FAILURE; + rc = FAILURE; return rc; } -static int decode_packet(mqtt_client_t* c, int* value, int timeout) +void MQTTClient(Client* c, Network* network, unsigned int command_timeout_ms, unsigned char* buf, size_t buf_size, unsigned char* readbuf, size_t readbuf_size) +{ + int i; + c->ipstack = network; + + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) + c->messageHandlers[i].topicFilter = 0; + c->command_timeout_ms = command_timeout_ms; + c->buf = buf; + c->buf_size = buf_size; + c->readbuf = readbuf; + c->readbuf_size = readbuf_size; + c->isconnected = 0; + c->ping_outstanding = 0; + c->defaultMessageHandler = NULL; + InitTimer(&c->ping_timer); +} + + +int decodePacket(Client* c, int* value, int timeout) { unsigned char i; int multiplier = 1; @@ -70,9 +88,7 @@ static int decode_packet(mqtt_client_t* c, int* value, int timeout) } rc = c->ipstack->mqttread(c->ipstack, &i, 1, timeout); if (rc != 1) - { - goto exit; - } + goto exit; *value += (i & 127) * multiplier; multiplier *= 128; } while ((i & 128) != 0); @@ -81,32 +97,26 @@ exit: } -// Return packet type. If no packet avilable, return FAILURE, or READ_ERROR if timeout -static int read_packet(mqtt_client_t* c, mqtt_timer_t* timer) +int readPacket(Client* c, Timer* timer) { - int rc = MQTT_FAILURE; - mqtt_header_t header = {0}; + int rc = FAILURE; + MQTTHeader header = {0}; int len = 0; int rem_len = 0; /* 1. read the header byte. This has the packet type in it */ - if (c->ipstack->mqttread(c->ipstack, c->readbuf, 1, mqtt_timer_left_ms(timer)) != 1) + if (c->ipstack->mqttread(c->ipstack, c->readbuf, 1, left_ms(timer)) != 1) goto exit; + len = 1; /* 2. read the remaining length. This is variable in itself */ - len += decode_packet(c, &rem_len, mqtt_timer_left_ms(timer)); - if (len <= 1 || len + rem_len > c->readbuf_size) /* if packet is too big to fit in our readbuf, abort */ - { - rc = MQTT_READ_ERROR; - goto exit; - } - mqtt_packet_encode(c->readbuf + 1, rem_len); /* put the original remaining length back into the buffer */ + decodePacket(c, &rem_len, left_ms(timer)); + len += MQTTPacket_encode(c->readbuf + 1, rem_len); /* put the original remaining length back into the buffer */ + /* 3. read the rest of the buffer using a callback to supply the rest of the data */ - if (rem_len > 0 && (c->ipstack->mqttread(c->ipstack, c->readbuf + len, rem_len, mqtt_timer_left_ms(timer)) != rem_len)) - { - rc = MQTT_READ_ERROR; + if (rem_len > 0 && (c->ipstack->mqttread(c->ipstack, c->readbuf + len, rem_len, left_ms(timer)) != rem_len)) goto exit; - } + header.byte = c->readbuf[0]; rc = header.bits.type; exit: @@ -117,12 +127,12 @@ exit: // assume topic filter and name is in correct format // # can only be at end // + and # can only be next to separator -static char is_topic_matched(char* topicFilter, mqtt_string_t* topicName) +char isTopicMatched(char* topicFilter, MQTTString* topicName) { char* curf = topicFilter; char* curn = topicName->lenstring.data; char* curn_end = curn + topicName->lenstring.len; - + while (*curf && curn < curn_end) { if (*curn == '/' && *curf != '/') @@ -140,78 +150,65 @@ static char is_topic_matched(char* topicFilter, mqtt_string_t* topicName) curf++; curn++; }; - + return (curn == curn_end) && (*curf == '\0'); } -static int deliver_message(mqtt_client_t* c, mqtt_string_t* topicName, mqtt_message_t* message) +int deliverMessage(Client* c, MQTTString* topicName, MQTTMessage* message) { int i; - int rc = MQTT_FAILURE; + int rc = FAILURE; // we have to find the right message handler - indexed by topic - for (i = 0; i < MQTT_MAX_MESSAGE_HANDLERS; ++i) + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { - if (c->messageHandlers[i].topicFilter != 0 && (mqtt_packet_equals(topicName, (char*)c->messageHandlers[i].topicFilter) || - is_topic_matched((char*)c->messageHandlers[i].topicFilter, topicName))) + if (c->messageHandlers[i].topicFilter != 0 && (MQTTPacket_equals(topicName, (char*)c->messageHandlers[i].topicFilter) || + isTopicMatched((char*)c->messageHandlers[i].topicFilter, topicName))) { if (c->messageHandlers[i].fp != NULL) { - mqtt_message_data_t md; - new_message_data(&md, topicName, message); + MessageData md; + NewMessageData(&md, topicName, message); c->messageHandlers[i].fp(&md); - rc = MQTT_SUCCESS; + rc = SUCCESS; } } } - - if (rc == MQTT_FAILURE && c->defaultMessageHandler != NULL) + + if (rc == FAILURE && c->defaultMessageHandler != NULL) { - mqtt_message_data_t md; - new_message_data(&md, topicName, message); + MessageData md; + NewMessageData(&md, topicName, message); c->defaultMessageHandler(&md); - rc = MQTT_SUCCESS; - } - + rc = SUCCESS; + } + return rc; } -static int keepalive(mqtt_client_t* c) +int keepalive(Client* c) { - int rc = MQTT_SUCCESS; + int rc = FAILURE; if (c->keepAliveInterval == 0) { - rc = MQTT_SUCCESS; + rc = SUCCESS; goto exit; } - if (mqtt_timer_expired(&(c->ping_timer))) + if (expired(&c->ping_timer)) { - if (c->ping_outstanding) + if (!c->ping_outstanding) { - // if ping failure accumulated above MAX_FAIL_ALLOWED, the connection is broken - ++(c->fail_count); - if (c->fail_count >= MQTT_MAX_FAIL_ALLOWED) - { - rc = MQTT_DISCONNECTED; - goto exit; - } + Timer timer; + InitTimer(&timer); + countdown_ms(&timer, 1000); + int len = MQTTSerialize_pingreq(c->buf, c->buf_size); + if (len > 0 && (rc = sendPacket(c, len, &timer)) == SUCCESS) // send the ping packet + c->ping_outstanding = 1; } - else - { - mqtt_timer_t timer; - mqtt_timer_init(&timer); - mqtt_timer_countdown_ms(&timer, 1000); - c->ping_outstanding = 1; - int len = mqtt_serialize_pingreq(c->buf, c->buf_size); - if (len > 0) - send_packet(c, len, &timer); - } - // re-arm ping counter - mqtt_timer_countdown(&(c->ping_timer), c->keepAliveInterval); } exit: @@ -219,347 +216,298 @@ exit: } -static int cycle(mqtt_client_t* c, mqtt_timer_t* timer) +int cycle(Client* c, Timer* timer) { // read the socket, see what work is due - int packet_type = read_packet(c, timer); - + unsigned short packet_type = readPacket(c, timer); + int len = 0, - rc = MQTT_SUCCESS; + rc = SUCCESS; switch (packet_type) { - case MQTTPACKET_CONNACK: - case MQTTPACKET_PUBACK: - case MQTTPACKET_SUBACK: + case CONNACK: + case PUBACK: + case SUBACK: break; - case MQTTPACKET_PUBLISH: + case PUBLISH: { - mqtt_string_t topicName; - mqtt_message_t msg; - if (mqtt_deserialize_publish((unsigned char*)&msg.dup, (int*)&msg.qos, (unsigned char*)&msg.retained, (unsigned short*)&msg.id, &topicName, + MQTTString topicName; + MQTTMessage msg; + if (MQTTDeserialize_publish((unsigned char*)&msg.dup, (int*)&msg.qos, (unsigned char*)&msg.retained, (unsigned short*)&msg.id, &topicName, (unsigned char**)&msg.payload, (int*)&msg.payloadlen, c->readbuf, c->readbuf_size) != 1) goto exit; - deliver_message(c, &topicName, &msg); - if (msg.qos != MQTT_QOS0) + deliverMessage(c, &topicName, &msg); + if (msg.qos != QOS0) { - if (msg.qos == MQTT_QOS1) - len = mqtt_serialize_ack(c->buf, c->buf_size, MQTTPACKET_PUBACK, 0, msg.id); - else if (msg.qos == MQTT_QOS2) - len = mqtt_serialize_ack(c->buf, c->buf_size, MQTTPACKET_PUBREC, 0, msg.id); + if (msg.qos == QOS1) + len = MQTTSerialize_ack(c->buf, c->buf_size, PUBACK, 0, msg.id); + else if (msg.qos == QOS2) + len = MQTTSerialize_ack(c->buf, c->buf_size, PUBREC, 0, msg.id); if (len <= 0) - rc = MQTT_FAILURE; - else - rc = send_packet(c, len, timer); - if (rc == MQTT_FAILURE) + rc = FAILURE; + else + rc = sendPacket(c, len, timer); + if (rc == FAILURE) goto exit; // there was a problem } break; } - case MQTTPACKET_PUBREC: + case PUBREC: { unsigned short mypacketid; unsigned char dup, type; - if (mqtt_deserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) - rc = MQTT_FAILURE; - else if ((len = mqtt_serialize_ack(c->buf, c->buf_size, MQTTPACKET_PUBREL, 0, mypacketid)) <= 0) - rc = MQTT_FAILURE; - else if ((rc = send_packet(c, len, timer)) != MQTT_SUCCESS) // send the PUBREL packet - rc = MQTT_FAILURE; // there was a problem - if (rc == MQTT_FAILURE) + if (MQTTDeserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) + rc = FAILURE; + else if ((len = MQTTSerialize_ack(c->buf, c->buf_size, PUBREL, 0, mypacketid)) <= 0) + rc = FAILURE; + else if ((rc = sendPacket(c, len, timer)) != SUCCESS) // send the PUBREL packet + rc = FAILURE; // there was a problem + if (rc == FAILURE) goto exit; // there was a problem break; } - case MQTTPACKET_PUBCOMP: + case PUBCOMP: break; - case MQTTPACKET_PINGRESP: - { + case PINGRESP: c->ping_outstanding = 0; - c->fail_count = 0; break; - } - case MQTT_READ_ERROR: - { - c->isconnected = 0; // we simulate a disconnect if reading error - rc = MQTT_DISCONNECTED; // so that the outer layer will reconnect and recover - break; - } } - if (c->isconnected) - rc = keepalive(c); + keepalive(c); exit: - if (rc == MQTT_SUCCESS) + if (rc == SUCCESS) rc = packet_type; return rc; } -void mqtt_client_new(mqtt_client_t* c, mqtt_network_t* network, unsigned int command_timeout_ms, unsigned char* buf, size_t buf_size, unsigned char* readbuf, size_t readbuf_size) +int MQTTYield(Client* c, int timeout_ms) { - int i; - c->ipstack = network; + int rc = SUCCESS; + Timer timer; - for (i = 0; i < MQTT_MAX_MESSAGE_HANDLERS; ++i) - c->messageHandlers[i].topicFilter = 0; - c->command_timeout_ms = command_timeout_ms; - c->buf = buf; - c->buf_size = buf_size; - c->readbuf = readbuf; - c->readbuf_size = readbuf_size; - c->isconnected = 0; - c->ping_outstanding = 0; - c->fail_count = 0; - c->defaultMessageHandler = NULL; - mqtt_timer_init(&(c->ping_timer)); -} - - -int mqtt_yield(mqtt_client_t* c, int timeout_ms) -{ - int rc = MQTT_SUCCESS; - mqtt_timer_t timer; - - mqtt_timer_init(&timer); - mqtt_timer_countdown_ms(&timer, timeout_ms); - while (!mqtt_timer_expired(&timer)) + InitTimer(&timer); + countdown_ms(&timer, timeout_ms); + while (!expired(&timer)) { - rc = cycle(c, &timer); - // cycle could return 0 or packet_type or 65535 if nothing is read - // cycle returns DISCONNECTED only if keepalive() fails. - if (rc == MQTT_DISCONNECTED) + if (cycle(c, &timer) == FAILURE) + { + rc = FAILURE; break; - rc = MQTT_SUCCESS; + } } + return rc; } // only used in single-threaded mode where one command at a time is in process -static int waitfor(mqtt_client_t* c, int packet_type, mqtt_timer_t* timer) +int waitfor(Client* c, int packet_type, Timer* timer) { - int rc = MQTT_FAILURE; - + int rc = FAILURE; + do { - if (mqtt_timer_expired(timer)) + if (expired(timer)) break; // we timed out } - while ((rc = cycle(c, timer)) != packet_type); - + while ((rc = cycle(c, timer)) != packet_type); + return rc; } -int mqtt_connect(mqtt_client_t* c, mqtt_packet_connect_data_t* options) +int MQTTConnect(Client* c, MQTTPacket_connectData* options) { - mqtt_timer_t connect_timer; - int rc = MQTT_FAILURE; - mqtt_packet_connect_data_t default_options = mqtt_packet_connect_data_initializer; + Timer connect_timer; + int rc = FAILURE; + MQTTPacket_connectData default_options = MQTTPacket_connectData_initializer; int len = 0; - - mqtt_timer_init(&connect_timer); - mqtt_timer_countdown_ms(&connect_timer, c->command_timeout_ms); + + InitTimer(&connect_timer); + countdown_ms(&connect_timer, c->command_timeout_ms); if (c->isconnected) // don't send connect packet again if we are already connected goto exit; if (options == 0) options = &default_options; // set default options if none were supplied - + c->keepAliveInterval = options->keepAliveInterval; - mqtt_timer_countdown(&(c->ping_timer), c->keepAliveInterval); - - if ((len = mqtt_serialize_connect(c->buf, c->buf_size, options)) <= 0) + countdown(&c->ping_timer, c->keepAliveInterval); + if ((len = MQTTSerialize_connect(c->buf, c->buf_size, options)) <= 0) goto exit; - if ((rc = send_packet(c, len, &connect_timer)) != MQTT_SUCCESS) // send the connect packet + if ((rc = sendPacket(c, len, &connect_timer)) != SUCCESS) // send the connect packet goto exit; // there was a problem - + // this will be a blocking call, wait for the connack - if (waitfor(c, MQTTPACKET_CONNACK, &connect_timer) == MQTTPACKET_CONNACK) + if (waitfor(c, CONNACK, &connect_timer) == CONNACK) { unsigned char connack_rc = 255; char sessionPresent = 0; - if (mqtt_deserialize_connack((unsigned char*)&sessionPresent, &connack_rc, c->readbuf, c->readbuf_size) == 1) + if (MQTTDeserialize_connack((unsigned char*)&sessionPresent, &connack_rc, c->readbuf, c->readbuf_size) == 1) rc = connack_rc; else - rc = MQTT_FAILURE; + rc = FAILURE; } else - rc = MQTT_FAILURE; - + rc = FAILURE; + exit: - if (rc == MQTT_SUCCESS) + if (rc == SUCCESS) c->isconnected = 1; return rc; } -int mqtt_subscribe(mqtt_client_t* c, const char* topic, enum mqtt_qos qos, mqtt_message_handler_t handler) -{ - int rc = MQTT_FAILURE; - mqtt_timer_t timer; +int MQTTSubscribe(Client* c, const char* topicFilter, enum QoS qos, messageHandler messageHandler) +{ + int rc = FAILURE; + Timer timer; int len = 0; - mqtt_string_t topicStr = mqtt_string_initializer; - topicStr.cstring = (char *)topic; + MQTTString topic = MQTTString_initializer; + topic.cstring = (char *)topicFilter; + + InitTimer(&timer); + countdown_ms(&timer, c->command_timeout_ms); - mqtt_timer_init(&timer); - mqtt_timer_countdown_ms(&timer, c->command_timeout_ms); if (!c->isconnected) goto exit; - - len = mqtt_serialize_subscribe(c->buf, c->buf_size, 0, get_next_packet_id(c), 1, &topicStr, (int*)&qos); + + len = MQTTSerialize_subscribe(c->buf, c->buf_size, 0, getNextPacketId(c), 1, &topic, (int*)&qos); if (len <= 0) goto exit; - if ((rc = send_packet(c, len, &timer)) != MQTT_SUCCESS) // send the subscribe packet - { + if ((rc = sendPacket(c, len, &timer)) != SUCCESS) // send the subscribe packet goto exit; // there was a problem - } - - if (waitfor(c, MQTTPACKET_SUBACK, &timer) == MQTTPACKET_SUBACK) // wait for suback + + if (waitfor(c, SUBACK, &timer) == SUBACK) // wait for suback { int count = 0, grantedQoS = -1; unsigned short mypacketid; - if (mqtt_deserialize_suback(&mypacketid, 1, &count, &grantedQoS, c->readbuf, c->readbuf_size) == 1) - rc = grantedQoS; // 0, 1, 2 or 0x80 + if (MQTTDeserialize_suback(&mypacketid, 1, &count, &grantedQoS, c->readbuf, c->readbuf_size) == 1) + rc = grantedQoS; // 0, 1, 2 or 0x80 if (rc != 0x80) { int i; - - rc = MQTT_FAILURE; - for (i = 0; i < MQTT_MAX_MESSAGE_HANDLERS; ++i) + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if (c->messageHandlers[i].topicFilter == 0) { - c->messageHandlers[i].topicFilter = topic; - c->messageHandlers[i].fp = handler; + c->messageHandlers[i].topicFilter = topicFilter; + c->messageHandlers[i].fp = messageHandler; rc = 0; break; } } } } - else - rc = MQTT_FAILURE; - + else + rc = FAILURE; + exit: return rc; } -int mqtt_unsubscribe(mqtt_client_t* c, const char* topicFilter) -{ - int rc = MQTT_FAILURE; - mqtt_timer_t timer; - mqtt_string_t topic = mqtt_string_initializer; +int MQTTUnsubscribe(Client* c, const char* topicFilter) +{ + int rc = FAILURE; + Timer timer; + MQTTString topic = MQTTString_initializer; topic.cstring = (char *)topicFilter; int len = 0; - mqtt_timer_init(&timer); - mqtt_timer_countdown_ms(&timer, c->command_timeout_ms); - + InitTimer(&timer); + countdown_ms(&timer, c->command_timeout_ms); + if (!c->isconnected) goto exit; - - if ((len = mqtt_serialize_unsubscribe(c->buf, c->buf_size, 0, get_next_packet_id(c), 1, &topic)) <= 0) + + if ((len = MQTTSerialize_unsubscribe(c->buf, c->buf_size, 0, getNextPacketId(c), 1, &topic)) <= 0) goto exit; - if ((rc = send_packet(c, len, &timer)) != MQTT_SUCCESS) // send the subscribe packet + if ((rc = sendPacket(c, len, &timer)) != SUCCESS) // send the subscribe packet goto exit; // there was a problem - - if (waitfor(c, MQTTPACKET_UNSUBACK, &timer) == MQTTPACKET_UNSUBACK) + + if (waitfor(c, UNSUBACK, &timer) == UNSUBACK) { unsigned short mypacketid; // should be the same as the packetid above - if (mqtt_deserialize_unsuback(&mypacketid, c->readbuf, c->readbuf_size) == 1) - rc = 0; + if (MQTTDeserialize_unsuback(&mypacketid, c->readbuf, c->readbuf_size) == 1) + rc = 0; } else - rc = MQTT_FAILURE; - + rc = FAILURE; + exit: return rc; } -int mqtt_publish(mqtt_client_t* c, const char* topic, mqtt_message_t* message) +int MQTTPublish(Client* c, const char* topicName, MQTTMessage* message) { - int rc = MQTT_FAILURE; - mqtt_timer_t timer; - mqtt_string_t topicStr = mqtt_string_initializer; - topicStr.cstring = (char *)topic; + int rc = FAILURE; + Timer timer; + MQTTString topic = MQTTString_initializer; + topic.cstring = (char *)topicName; int len = 0; - mqtt_timer_init(&timer); - mqtt_timer_countdown_ms(&timer, c->command_timeout_ms); - + InitTimer(&timer); + countdown_ms(&timer, c->command_timeout_ms); + if (!c->isconnected) goto exit; - if (message->qos == MQTT_QOS1 || message->qos == MQTT_QOS2) - message->id = get_next_packet_id(c); - - len = mqtt_serialize_publish(c->buf, c->buf_size, 0, message->qos, message->retained, message->id, - topicStr, (unsigned char*)message->payload, message->payloadlen); + if (message->qos == QOS1 || message->qos == QOS2) + message->id = getNextPacketId(c); + + len = MQTTSerialize_publish(c->buf, c->buf_size, 0, message->qos, message->retained, message->id, + topic, (unsigned char*)message->payload, message->payloadlen); if (len <= 0) goto exit; - if ((rc = send_packet(c, len, &timer)) != MQTT_SUCCESS) // send the subscribe packet - { + if ((rc = sendPacket(c, len, &timer)) != SUCCESS) // send the subscribe packet goto exit; // there was a problem - } - - if (message->qos == MQTT_QOS1) + + if (message->qos == QOS1) { - if (waitfor(c, MQTTPACKET_PUBACK, &timer) == MQTTPACKET_PUBACK) + if (waitfor(c, PUBACK, &timer) == PUBACK) { - // We still can receive from broker, treat as recoverable - c->fail_count = 0; unsigned short mypacketid; unsigned char dup, type; - if (mqtt_deserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) - rc = MQTT_FAILURE; - else - rc = MQTT_SUCCESS; + if (MQTTDeserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) + rc = FAILURE; } else - { - rc = MQTT_FAILURE; - } - + rc = FAILURE; } - else if (message->qos == MQTT_QOS2) + else if (message->qos == QOS2) { - if (waitfor(c, MQTTPACKET_PUBCOMP, &timer) == MQTTPACKET_PUBCOMP) + if (waitfor(c, PUBCOMP, &timer) == PUBCOMP) { - // We still can receive from broker, treat as recoverable - c->fail_count = 0; unsigned short mypacketid; unsigned char dup, type; - if (mqtt_deserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) - rc = MQTT_FAILURE; - else - rc = MQTT_SUCCESS; + if (MQTTDeserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) + rc = FAILURE; } else - { - rc = MQTT_FAILURE; - } + rc = FAILURE; } - + exit: return rc; } -int mqtt_disconnect(mqtt_client_t* c) -{ - int rc = MQTT_FAILURE; - mqtt_timer_t timer; // we might wait for incomplete incoming publishes to complete - int len = mqtt_serialize_disconnect(c->buf, c->buf_size); +int MQTTDisconnect(Client* c) +{ + int rc = FAILURE; + Timer timer; // we might wait for incomplete incoming publishes to complete + int len = MQTTSerialize_disconnect(c->buf, c->buf_size); - mqtt_timer_init(&timer); - mqtt_timer_countdown_ms(&timer, c->command_timeout_ms); + InitTimer(&timer); + countdown_ms(&timer, c->command_timeout_ms); if (len > 0) - rc = send_packet(c, len, &timer); // send the disconnect packet - + rc = sendPacket(c, len, &timer); // send the disconnect packet + c->isconnected = 0; return rc; } diff --git a/extras/paho_mqtt_c/MQTTClient.h b/extras/paho_mqtt_c/MQTTClient.h index 1f3ea8a..92a0adb 100644 --- a/extras/paho_mqtt_c/MQTTClient.h +++ b/extras/paho_mqtt_c/MQTTClient.h @@ -18,80 +18,76 @@ #define __MQTT_CLIENT_C_ #include "MQTTPacket.h" -#include "MQTTESP8266.h" +#include "stdio.h" +#include "MQTTESP8266.h" //Platform specific implementation header file -#define MQTT_MAX_PACKET_ID 65535 -#define MQTT_MAX_MESSAGE_HANDLERS 5 -#define MQTT_MAX_FAIL_ALLOWED 2 +#define MAX_PACKET_ID 65535 +#define MAX_MESSAGE_HANDLERS 5 -enum mqtt_qos { - MQTT_QOS0, - MQTT_QOS1, - MQTT_QOS2 -}; +enum QoS { QOS0, QOS1, QOS2 }; // all failure return codes must be negative -enum mqtt_return_code { - MQTT_READ_ERROR = -4, - MQTT_DISCONNECTED = -3, - MQTT_BUFFER_OVERFLOW = -2, - MQTT_FAILURE = -1, - MQTT_SUCCESS = 0 -}; +enum returnCode { BUFFER_OVERFLOW = -2, FAILURE = -1, SUCCESS = 0 }; -typedef struct mqtt_message +void NewTimer(Timer*); + +typedef struct MQTTMessage MQTTMessage; + +typedef struct MessageData MessageData; + +struct MQTTMessage { - enum mqtt_qos qos; + enum QoS qos; char retained; char dup; unsigned short id; void *payload; size_t payloadlen; -} mqtt_message_t; +}; -typedef struct mqtt_message_data +struct MessageData { - mqtt_string_t* topic; - mqtt_message_t* message; -} mqtt_message_data_t; + MQTTMessage* message; + MQTTString* topicName; +}; -typedef void (*mqtt_message_handler_t)(mqtt_message_data_t*); +typedef void (*messageHandler)(MessageData*); -struct mqtt_client -{ +typedef struct Client Client; + +int MQTTConnect (Client*, MQTTPacket_connectData*); +int MQTTPublish (Client*, const char*, MQTTMessage*); +int MQTTSubscribe (Client*, const char*, enum QoS, messageHandler); +int MQTTUnsubscribe (Client*, const char*); +int MQTTDisconnect (Client*); +int MQTTYield (Client*, int); + +void setDefaultMessageHandler(Client*, messageHandler); + +void MQTTClient(Client*, Network*, unsigned int, unsigned char*, size_t, unsigned char*, size_t); + +struct Client { unsigned int next_packetid; unsigned int command_timeout_ms; size_t buf_size, readbuf_size; - unsigned char *buf; - unsigned char *readbuf; + unsigned char *buf; + unsigned char *readbuf; unsigned int keepAliveInterval; char ping_outstanding; - int fail_count; int isconnected; struct MessageHandlers { const char* topicFilter; - void (*fp) (mqtt_message_data_t*); - } messageHandlers[MQTT_MAX_MESSAGE_HANDLERS]; // Message handlers are indexed by subscription topic - - void (*defaultMessageHandler) (mqtt_message_data_t*); - - mqtt_network_t* ipstack; - mqtt_timer_t ping_timer; + void (*fp) (MessageData*); + } messageHandlers[MAX_MESSAGE_HANDLERS]; // Message handlers are indexed by subscription topic + + void (*defaultMessageHandler) (MessageData*); + + Network* ipstack; + Timer ping_timer; }; -typedef struct mqtt_client mqtt_client_t; - -int mqtt_connect(mqtt_client_t* c, mqtt_packet_connect_data_t* options); -int mqtt_publish(mqtt_client_t* c, const char* topic, mqtt_message_t* message); -int mqtt_subscribe(mqtt_client_t* c, const char* topic, enum mqtt_qos qos, mqtt_message_handler_t handler); -int mqtt_unsubscribe(mqtt_client_t* c, const char* topic); -int mqtt_disconnect(mqtt_client_t* c); -int mqtt_yield(mqtt_client_t* c, int timeout_ms); - -void mqtt_client_new(mqtt_client_t*, mqtt_network_t*, unsigned int, unsigned char*, size_t, unsigned char*, size_t); - -#define mqtt_client_default {0, 0, 0, 0, NULL, NULL, 0, 0, 0} +#define DefaultClient {0, 0, 0, 0, NULL, NULL, 0, 0, 0} #endif diff --git a/extras/paho_mqtt_c/MQTTConnect.h b/extras/paho_mqtt_c/MQTTConnect.h deleted file mode 100644 index 800187a..0000000 --- a/extras/paho_mqtt_c/MQTTConnect.h +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Xiang Rong - 442039 Add makefile to Embedded C client - *******************************************************************************/ - -#ifndef MQTTCONNECT_H_ -#define MQTTCONNECT_H_ - -#if !defined(DLLImport) - #define DLLImport -#endif -#if !defined(DLLExport) - #define DLLExport -#endif - - -typedef union -{ - unsigned char all; /**< all connect flags */ -#if defined(REVERSED) - struct - { - unsigned int username : 1; /**< 3.1 user name */ - unsigned int password : 1; /**< 3.1 password */ - unsigned int willRetain : 1; /**< will retain setting */ - unsigned int willQoS : 2; /**< will QoS value */ - unsigned int will : 1; /**< will flag */ - unsigned int cleansession : 1; /**< clean session flag */ - unsigned int : 1; /**< unused */ - } bits; -#else - struct - { - unsigned int : 1; /**< unused */ - unsigned int cleansession : 1; /**< cleansession flag */ - unsigned int will : 1; /**< will flag */ - unsigned int willQoS : 2; /**< will QoS value */ - unsigned int willRetain : 1; /**< will retain setting */ - unsigned int password : 1; /**< 3.1 password */ - unsigned int username : 1; /**< 3.1 user name */ - } bits; -#endif -} mqtt_connect_flags_t; /**< connect flags byte */ - - - -/** - * Defines the MQTT "Last Will and Testament" (LWT) settings for - * the connect packet. - */ -typedef struct -{ - /** The eyecatcher for this structure. must be MQTW. */ - char struct_id[4]; - /** The version number of this structure. Must be 0 */ - int struct_version; - /** The LWT topic to which the LWT message will be published. */ - mqtt_string_t topicName; - /** The LWT payload. */ - mqtt_string_t message; - /** - * The retained flag for the LWT message (see MQTTAsync_message.retained). - */ - unsigned char retained; - /** - * The quality of service setting for the LWT message (see - * MQTTAsync_message.qos and @ref qos). - */ - char qos; -} mqtt_packet_will_options_t; - - -#define mqtt_packet_will_options_initializer { {'M', 'Q', 'T', 'W'}, 0, {NULL, {0, NULL}}, {NULL, {0, NULL}}, 0, 0 } - - -typedef struct -{ - /** The eyecatcher for this structure. must be MQTC. */ - char struct_id[4]; - /** The version number of this structure. Must be 0 */ - int struct_version; - /** Version of MQTT to be used. 3 = 3.1 4 = 3.1.1 - */ - unsigned char MQTTVersion; - mqtt_string_t clientID; - unsigned short keepAliveInterval; - unsigned char cleansession; - unsigned char willFlag; - mqtt_packet_will_options_t will; - mqtt_string_t username; - mqtt_string_t password; -} mqtt_packet_connect_data_t; - -typedef union -{ - unsigned char all; /**< all connack flags */ -#if defined(REVERSED) - struct - { - unsigned int sessionpresent : 1; /**< session present flag */ - unsigned int : 7; /**< unused */ - } bits; -#else - struct - { - unsigned int : 7; /**< unused */ - unsigned int sessionpresent : 1; /**< session present flag */ - } bits; -#endif -} mqtt_conn_ack_flags_t; /**< connack flags byte */ - -#define mqtt_packet_connect_data_initializer { {'M', 'Q', 'T', 'C'}, 0, 4, {NULL, {0, NULL}}, 60, 1, 0, \ - mqtt_packet_will_options_initializer, {NULL, {0, NULL}}, {NULL, {0, NULL}} } - -DLLExport int mqtt_serialize_connect(unsigned char* buf, int buflen, mqtt_packet_connect_data_t* options); -DLLExport int mqtt_deserialize_connect(mqtt_packet_connect_data_t* data, unsigned char* buf, int len); - -DLLExport int mqtt_serialize_connack(unsigned char* buf, int buflen, unsigned char connack_rc, unsigned char sessionPresent); -DLLExport int mqtt_deserialize_connack(unsigned char* sessionPresent, unsigned char* connack_rc, unsigned char* buf, int buflen); - -DLLExport int mqtt_serialize_disconnect(unsigned char* buf, int buflen); -DLLExport int mqtt_serialize_pingreq(unsigned char* buf, int buflen); - -#endif /* MQTTCONNECT_H_ */ diff --git a/extras/paho_mqtt_c/MQTTConnectClient.c b/extras/paho_mqtt_c/MQTTConnectClient.c deleted file mode 100644 index e5bfdc1..0000000 --- a/extras/paho_mqtt_c/MQTTConnectClient.c +++ /dev/null @@ -1,214 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - *******************************************************************************/ -#include -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include - -/** - * Determines the length of the MQTT connect packet that would be produced using the supplied connect options. - * @param options the options to be used to build the connect packet - * @return the length of buffer needed to contain the serialized version of the packet - */ -static int connect_length(mqtt_packet_connect_data_t* options) -{ - int len = 0; - - FUNC_ENTRY; - - if (options->MQTTVersion == 3) - len = 12; /* variable depending on MQTT or MQIsdp */ - else if (options->MQTTVersion == 4) - len = 10; - - len += mqtt_strlen(options->clientID)+2; - if (options->willFlag) - len += mqtt_strlen(options->will.topicName)+2 + mqtt_strlen(options->will.message)+2; - if (options->username.cstring || options->username.lenstring.data) - len += mqtt_strlen(options->username)+2; - if (options->password.cstring || options->password.lenstring.data) - len += mqtt_strlen(options->password)+2; - - FUNC_EXIT_RC(len); - return len; -} - - -/** - * Serializes the connect options into the buffer. - * @param buf the buffer into which the packet will be serialized - * @param len the length in bytes of the supplied buffer - * @param options the options to be used to build the connect packet - * @return serialized length, or error if 0 - */ -int mqtt_serialize_connect(unsigned char* buf, int buflen, mqtt_packet_connect_data_t* options) -{ - unsigned char *ptr = buf; - mqtt_header_t header = {0}; - mqtt_connect_flags_t flags = {0}; - int len = 0; - int rc = -1; - - FUNC_ENTRY; - if (mqtt_packet_len(len = connect_length(options)) > buflen) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - - header.byte = 0; - header.bits.type = MQTTPACKET_CONNECT; - mqtt_write_char(&ptr, header.byte); /* write header */ - - ptr += mqtt_packet_encode(ptr, len); /* write remaining length */ - - if (options->MQTTVersion == 4) - { - mqtt_write_cstr(&ptr, "MQTT"); - mqtt_write_char(&ptr, (char) 4); - } - else - { - mqtt_write_cstr(&ptr, "MQIsdp"); - mqtt_write_char(&ptr, (char) 3); - } - - flags.all = 0; - flags.bits.cleansession = options->cleansession; - flags.bits.will = (options->willFlag) ? 1 : 0; - if (flags.bits.will) - { - flags.bits.willQoS = options->will.qos; - flags.bits.willRetain = options->will.retained; - } - - if (options->username.cstring || options->username.lenstring.data) - flags.bits.username = 1; - if (options->password.cstring || options->password.lenstring.data) - flags.bits.password = 1; - - mqtt_write_char(&ptr, flags.all); - mqtt_write_int(&ptr, options->keepAliveInterval); - mqtt_write_mqqt_str(&ptr, options->clientID); - if (options->willFlag) - { - mqtt_write_mqqt_str(&ptr, options->will.topicName); - mqtt_write_mqqt_str(&ptr, options->will.message); - } - if (flags.bits.username) - mqtt_write_mqqt_str(&ptr, options->username); - if (flags.bits.password) - mqtt_write_mqqt_str(&ptr, options->password); - - rc = ptr - buf; - - exit: FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Deserializes the supplied (wire) buffer into connack data - return code - * @param sessionPresent the session present flag returned (only for MQTT 3.1.1) - * @param connack_rc returned integer value of the connack return code - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param len the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int mqtt_deserialize_connack(unsigned char* sessionPresent, unsigned char* connack_rc, unsigned char* buf, int buflen) -{ - mqtt_header_t header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen; - mqtt_conn_ack_flags_t flags = {0}; - - FUNC_ENTRY; - header.byte = mqtt_read_char(&curdata); - if (header.bits.type != MQTTPACKET_CONNACK) - goto exit; - - curdata += (rc = mqtt_packet_decode_buf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - if (enddata - curdata < 2) - goto exit; - - flags.all = mqtt_read_char(&curdata); - *sessionPresent = flags.bits.sessionpresent; - *connack_rc = mqtt_read_char(&curdata); - - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Serializes a 0-length packet into the supplied buffer, ready for writing to a socket - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer, to avoid overruns - * @param packettype the message type - * @return serialized length, or error if 0 - */ -int mqtt_serialize_zero(unsigned char* buf, int buflen, unsigned char packettype) -{ - mqtt_header_t header = {0}; - int rc = -1; - unsigned char *ptr = buf; - - FUNC_ENTRY; - if (buflen < 2) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - header.byte = 0; - header.bits.type = packettype; - mqtt_write_char(&ptr, header.byte); /* write header */ - - ptr += mqtt_packet_encode(ptr, 0); /* write remaining length */ - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Serializes a disconnect packet into the supplied buffer, ready for writing to a socket - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer, to avoid overruns - * @return serialized length, or error if 0 - */ -int mqtt_serialize_disconnect(unsigned char* buf, int buflen) -{ - return mqtt_serialize_zero(buf, buflen, MQTTPACKET_DISCONNECT); -} - - -/** - * Serializes a disconnect packet into the supplied buffer, ready for writing to a socket - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer, to avoid overruns - * @return serialized length, or error if 0 - */ -int mqtt_serialize_pingreq(unsigned char* buf, int buflen) -{ - return mqtt_serialize_zero(buf, buflen, MQTTPACKET_PINGREQ); -} diff --git a/extras/paho_mqtt_c/MQTTDeserializePublish.c b/extras/paho_mqtt_c/MQTTDeserializePublish.c deleted file mode 100644 index f65a973..0000000 --- a/extras/paho_mqtt_c/MQTTDeserializePublish.c +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - *******************************************************************************/ -#include -#include "StackTrace.h" -#include "MQTTPacket.h" -#include - -#define min(a, b) ((a < b) ? 1 : 0) - -/** - * Deserializes the supplied (wire) buffer into publish data - * @param dup returned integer - the MQTT dup flag - * @param qos returned integer - the MQTT QoS value - * @param retained returned integer - the MQTT retained flag - * @param packetid returned integer - the MQTT packet identifier - * @param topicName returned MQTTString - the MQTT topic in the publish - * @param payload returned byte buffer - the MQTT publish payload - * @param payloadlen returned integer - the length of the MQTT payload - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return error code. 1 is success - */ -int mqtt_deserialize_publish(unsigned char* dup, int* qos, unsigned char* retained, unsigned short* packetid, mqtt_string_t* topicName, - unsigned char** payload, int* payloadlen, unsigned char* buf, int buflen) -{ - mqtt_header_t header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen = 0; - - FUNC_ENTRY; - header.byte = mqtt_read_char(&curdata); - if (header.bits.type != MQTTPACKET_PUBLISH) - goto exit; - *dup = header.bits.dup; - *qos = header.bits.qos; - *retained = header.bits.retain; - - curdata += (rc = mqtt_packet_decode_buf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - - if (!mqtt_read_str_len(topicName, &curdata, enddata) || - enddata - curdata < 0) /* do we have enough data to read the protocol version byte? */ - goto exit; - - if (*qos > 0) - *packetid = mqtt_read_int(&curdata); - - *payloadlen = enddata - curdata; - *payload = curdata; - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - - -/** - * Deserializes the supplied (wire) buffer into an ack - * @param packettype returned integer - the MQTT packet type - * @param dup returned integer - the MQTT dup flag - * @param packetid returned integer - the MQTT packet identifier - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int mqtt_deserialize_ack(unsigned char* packettype, unsigned char* dup, unsigned short* packetid, unsigned char* buf, int buflen) -{ - mqtt_header_t header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen; - - FUNC_ENTRY; - header.byte = mqtt_read_char(&curdata); - *dup = header.bits.dup; - *packettype = header.bits.type; - - curdata += (rc = mqtt_packet_decode_buf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - - if (enddata - curdata < 2) - goto exit; - *packetid = mqtt_read_int(&curdata); - - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - diff --git a/extras/paho_mqtt_c/MQTTESP8266.c b/extras/paho_mqtt_c/MQTTESP8266.c index 23c6f01..048b901 100644 --- a/extras/paho_mqtt_c/MQTTESP8266.c +++ b/extras/paho_mqtt_c/MQTTESP8266.c @@ -1,15 +1,8 @@ /** - ****************************************************************************** - * @file MQTTESP8266.c - * @author Baoshi - * @version 0.1 - * @date Sep 9, 2015 - * @brief Eclipse Paho ported to ESP8266 RTOS + * Paho Embedded MQTT client, esp-open-rtos support. * - ****************************************************************************** - * @copyright - * - * Copyright (c) 2015, Baoshi Zhu. All rights reserved. + * Copyright (c) 2015, Baoshi Zhu & 2016, Angus Gratton + * All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE.txt file. * @@ -20,7 +13,6 @@ */ #include -#include #include #include #include @@ -29,148 +21,98 @@ #include "MQTTESP8266.h" -char mqtt_timer_expired(mqtt_timer_t* timer) +char expired(Timer* timer) { - TickType_t now = xTaskGetTickCount(); + portTickType now = xTaskGetTickCount(); int32_t left = timer->end_time - now; - return (left <= 0); + return (left < 0); } -void mqtt_timer_countdown_ms(mqtt_timer_t* timer, unsigned int timeout) +void countdown_ms(Timer* timer, unsigned int timeout) { - TickType_t now = xTaskGetTickCount(); - timer->end_time = now + timeout / portTICK_PERIOD_MS; + portTickType now = xTaskGetTickCount(); + timer->end_time = now + timeout / portTICK_RATE_MS; } -void mqtt_timer_countdown(mqtt_timer_t* timer, unsigned int timeout) +void countdown(Timer* timer, unsigned int timeout) { - mqtt_timer_countdown_ms(timer, timeout * 1000); + countdown_ms(timer, timeout * 1000); } -int mqtt_timer_left_ms(mqtt_timer_t* timer) +int left_ms(Timer* timer) { - TickType_t now = xTaskGetTickCount(); + portTickType now = xTaskGetTickCount(); int32_t left = timer->end_time - now; - return (left < 0) ? 0 : left * portTICK_PERIOD_MS; + return (left < 0) ? 0 : left / portTICK_RATE_MS; } -void mqtt_timer_init(mqtt_timer_t* timer) +void InitTimer(Timer* timer) { timer->end_time = 0; } - - -int mqtt_esp_read(mqtt_network_t* n, unsigned char* buffer, int len, int timeout_ms) +static int mqtt_esp_read(Network* n, unsigned char* buffer, int len, int timeout_ms) { - struct timeval tv; - fd_set fdset; - int rc = 0; - int rcvd = 0; - FD_ZERO(&fdset); - FD_SET(n->my_socket, &fdset); - tv.tv_sec = timeout_ms / 1000; - tv.tv_usec = (timeout_ms % 1000) * 1000; - rc = select(n->my_socket + 1, &fdset, 0, 0, &tv); - if ((rc > 0) && (FD_ISSET(n->my_socket, &fdset))) - { - rcvd = recv(n->my_socket, buffer, len, 0); + /* set SO_RCVTIMEO if timeout_ms > 0 otherwise O_NONBLOCK */ + lwip_setsockopt(n->socket, SOL_SOCKET, SO_RCVTIMEO, &timeout_ms, sizeof(int)); + lwip_fcntl(n->socket, F_SETFL, (timeout_ms) > 0 ? 0 : O_NONBLOCK); + int r = recv(n->socket, buffer, len, 0); + if(r == 0) { + r = -1; /* 0 indicates timeout */ } - else - { - // select fail - return -1; - } - return rcvd; + return r; } -int mqtt_esp_write(mqtt_network_t* n, unsigned char* buffer, int len, int timeout_ms) +static int mqtt_esp_write(Network* n, unsigned char* buffer, int len, int timeout_ms) { - struct timeval tv; - fd_set fdset; - int rc = 0; - - FD_ZERO(&fdset); - FD_SET(n->my_socket, &fdset); - tv.tv_sec = timeout_ms / 1000; - tv.tv_usec = (timeout_ms % 1000) * 1000; - rc = select(n->my_socket + 1, 0, &fdset, 0, &tv); - if ((rc > 0) && (FD_ISSET(n->my_socket, &fdset))) - { - rc = send(n->my_socket, buffer, len, 0); + lwip_setsockopt(n->socket, SOL_SOCKET, SO_SNDTIMEO, &timeout_ms, sizeof(int)); + lwip_fcntl(n->socket, F_SETFL, (timeout_ms > 0) ? 0 : O_NONBLOCK); + int r = send(n->socket, buffer, len, 0); + if(r == 0) { + r = -1; /* 0 indicates timeout */ } - else - { - // select fail - return -1; - } - return rc; + return r; } - - -void mqtt_network_new(mqtt_network_t* n) +void NewNetwork(Network* n) { - n->my_socket = -1; + n->socket = -1; n->mqttread = mqtt_esp_read; n->mqttwrite = mqtt_esp_write; } -static int host2addr(const char *hostname , struct in_addr *in) -{ - struct addrinfo hints, *servinfo, *p; - struct sockaddr_in *h; - int rv; - - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; - rv = getaddrinfo(hostname, 0 , &hints , &servinfo); - if (rv != 0) - { - return rv; - } - - // loop through all the results and get the first resolve - for (p = servinfo; p != 0; p = p->ai_next) - { - h = (struct sockaddr_in *)p->ai_addr; - in->s_addr = h->sin_addr.s_addr; - } - freeaddrinfo(servinfo); // all done with this structure - return 0; -} - - -int mqtt_network_connect(mqtt_network_t* n, const char* host, int port) +int ConnectNetwork(Network* n, const char* host, int port) { struct sockaddr_in addr; + ip_addr_t ipaddr; int ret; - if (host2addr(host, &(addr.sin_addr)) != 0) - { - return -1; + err_t e = netconn_gethostbyname(host, &ipaddr); + if(e) { + return e; } + inet_addr_from_ipaddr(&(addr.sin_addr), &ipaddr); addr.sin_family = AF_INET; addr.sin_port = htons(port); - n->my_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); - if( n->my_socket < 0 ) + ret = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + if (ret < 0) { - // error - return -1; + return ret; } - ret = connect(n->my_socket, ( struct sockaddr *)&addr, sizeof(struct sockaddr_in)); - if( ret < 0 ) + n->socket = ret; + + ret = connect(n->socket, ( struct sockaddr *)&addr, sizeof(struct sockaddr_in)); + if (ret < 0) { - // error - close(n->my_socket); + close(n->socket); + n->socket = -1; return ret; } @@ -178,9 +120,9 @@ int mqtt_network_connect(mqtt_network_t* n, const char* host, int port) } -int mqtt_network_disconnect(mqtt_network_t* n) +int DisconnectNetwork(Network* n) { - close(n->my_socket); - n->my_socket = -1; + close(n->socket); + n->socket = -1; return 0; } diff --git a/extras/paho_mqtt_c/MQTTESP8266.h b/extras/paho_mqtt_c/MQTTESP8266.h index 05380e8..d410c3c 100644 --- a/extras/paho_mqtt_c/MQTTESP8266.h +++ b/extras/paho_mqtt_c/MQTTESP8266.h @@ -1,15 +1,8 @@ /** - ****************************************************************************** - * @file MQTTESP8266.h - * @author Baoshi - * @version 0.1 - * @date Sep 9, 2015 - * @brief Eclipse Paho ported to ESP8266 RTOS + * Paho Embedded MQTT client, esp-open-rtos support. * - ****************************************************************************** - * @copyright - * - * Copyright (c) 2015, Baoshi Zhu. All rights reserved. + * Copyright (c) 2015, Baoshi Zhu & 2016, Angus Gratton. + * All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE.txt file. * @@ -24,34 +17,34 @@ #include #include -typedef struct mqtt_timer mqtt_timer_t; +#include -struct mqtt_timer +typedef struct Timer Timer; + +typedef struct Network Network; + +struct Timer { - TickType_t end_time; + portTickType end_time; }; -typedef struct mqtt_network mqtt_network_t; - -struct mqtt_network +struct Network { - int my_socket; - int (*mqttread) (mqtt_network_t*, unsigned char*, int, int); - int (*mqttwrite) (mqtt_network_t*, unsigned char*, int, int); + int socket; + int (*mqttread) (Network*, unsigned char*, int, int); + int (*mqttwrite) (Network*, unsigned char*, int, int); }; -char mqtt_timer_expired(mqtt_timer_t*); -void mqtt_timer_countdown_ms(mqtt_timer_t*, unsigned int); -void mqtt_timer_countdown(mqtt_timer_t*, unsigned int); -int mqtt_timer_left_ms(mqtt_timer_t*); -void mqtt_timer_init(mqtt_timer_t*); +char expired(Timer*); +void countdown_ms(Timer*, unsigned int); +void countdown(Timer*, unsigned int); +int left_ms(Timer*); -int mqtt_esp_read(mqtt_network_t*, unsigned char*, int, int); -int mqtt_esp_write(mqtt_network_t*, unsigned char*, int, int); -void mqtt_esp_disconnect(mqtt_network_t*); +void InitTimer(Timer*); + +void NewNetwork(Network* n); +int ConnectNetwork(Network* n, const char* host, int port); +int DisconnectNetwork(Network* n); -void mqtt_network_new(mqtt_network_t* n); -int mqtt_network_connect(mqtt_network_t* n, const char* host, int port); -int mqtt_network_disconnect(mqtt_network_t* n); #endif /* _MQTT_ESP8266_H_ */ diff --git a/extras/paho_mqtt_c/MQTTFormat.h b/extras/paho_mqtt_c/MQTTFormat.h deleted file mode 100644 index 9b49b38..0000000 --- a/extras/paho_mqtt_c/MQTTFormat.h +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - *******************************************************************************/ - -#if !defined(MQTTFORMAT_H) -#define MQTTFORMAT_H - -#include "StackTrace.h" -#include "MQTTPacket.h" - -const char* mqtt_packet_get_name(unsigned short packetid); -int mqtt_string_format_connect(char* strbuf, int strbuflen, mqtt_packet_connect_data_t* data); -int mqtt_string_format_connack(char* strbuf, int strbuflen, unsigned char connack_rc, unsigned char sessionPresent); -int mqtt_string_format_publish(char* strbuf, int strbuflen, unsigned char dup, int qos, unsigned char retained, - unsigned short packetid, mqtt_string_t topicName, unsigned char* payload, int payloadlen); -int mqtt_string_format_ack(char* strbuf, int strbuflen, unsigned char packettype, unsigned char dup, unsigned short packetid); -int mqtt_string_format_subscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, int count, - mqtt_string_t topicFilters[], int requestedQoSs[]); -int mqtt_string_format_suback(char* strbuf, int strbuflen, unsigned short packetid, int count, int* grantedQoSs); -int mqtt_string_format_unsubscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, - int count, mqtt_string_t topicFilters[]); -char* mqtt_format_to_client_string(char* strbuf, int strbuflen, unsigned char* buf, int buflen); -char* mqtt_format_to_server_string(char* strbuf, int strbuflen, unsigned char* buf, int buflen); - -#endif diff --git a/extras/paho_mqtt_c/MQTTPacket.c b/extras/paho_mqtt_c/MQTTPacket.c deleted file mode 100644 index e74d5b7..0000000 --- a/extras/paho_mqtt_c/MQTTPacket.c +++ /dev/null @@ -1,409 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Sergio R. Caprile - non-blocking packet read functions for stream transport - *******************************************************************************/ -#include -#include "StackTrace.h" -#include "MQTTPacket.h" -#include - -/** - * Encodes the message length according to the MQTT algorithm - * @param buf the buffer into which the encoded data is written - * @param length the length to be encoded - * @return the number of bytes written to buffer - */ -int mqtt_packet_encode(unsigned char* buf, int length) -{ - int rc = 0; - - FUNC_ENTRY; - do - { - char d = length % 128; - length /= 128; - /* if there are more digits to encode, set the top bit of this digit */ - if (length > 0) - d |= 0x80; - buf[rc++] = d; - } while (length > 0); - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Decodes the message length according to the MQTT algorithm - * @param getcharfn pointer to function to read the next character from the data source - * @param value the decoded length returned - * @return the number of bytes read from the socket - */ -int mqtt_packet_decode(int (*getcharfn)(unsigned char*, int), int* value) -{ - unsigned char c; - int multiplier = 1; - int len = 0; -#define MAX_NO_OF_REMAINING_LENGTH_BYTES 4 - - FUNC_ENTRY; - *value = 0; - do - { - int rc = MQTTPACKET_READ_ERROR; - - if (++len > MAX_NO_OF_REMAINING_LENGTH_BYTES) - { - rc = MQTTPACKET_READ_ERROR; /* bad data */ - goto exit; - } - rc = (*getcharfn)(&c, 1); - if (rc != 1) - goto exit; - *value += (c & 127) * multiplier; - multiplier *= 128; - } while ((c & 128) != 0); -exit: - FUNC_EXIT_RC(len); - return len; -} - - -int mqtt_packet_len(int rem_len) -{ - rem_len += 1; /* header byte */ - - /* now remaining_length field */ - if (rem_len < 128) - rem_len += 1; - else if (rem_len < 16384) - rem_len += 2; - else if (rem_len < 2097151) - rem_len += 3; - else - rem_len += 4; - return rem_len; -} - - -static unsigned char* bufptr; - -static int bufchar(unsigned char* c, int count) -{ - int i; - - for (i = 0; i < count; ++i) - *c = *bufptr++; - return count; -} - - -int mqtt_packet_decode_buf(unsigned char* buf, int* value) -{ - bufptr = buf; - return mqtt_packet_decode(bufchar, value); -} - - -/** - * Calculates an integer from two bytes read from the input buffer - * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned - * @return the integer value calculated - */ -int mqtt_read_int(unsigned char** pptr) -{ - unsigned char* ptr = *pptr; - int len = 256*(*ptr) + (*(ptr+1)); - *pptr += 2; - return len; -} - - -/** - * Reads one character from the input buffer. - * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned - * @return the character read - */ -char mqtt_read_char(unsigned char** pptr) -{ - char c = **pptr; - (*pptr)++; - return c; -} - - -/** - * Writes one character to an output buffer. - * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned - * @param c the character to write - */ -void mqtt_write_char(unsigned char** pptr, char c) -{ - **pptr = c; - (*pptr)++; -} - - -/** - * Writes an integer as 2 bytes to an output buffer. - * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned - * @param anInt the integer to write - */ -void mqtt_write_int(unsigned char** pptr, int anInt) -{ - **pptr = (unsigned char)(anInt / 256); - (*pptr)++; - **pptr = (unsigned char)(anInt % 256); - (*pptr)++; -} - - -/** - * Writes a "UTF" string to an output buffer. Converts C string to length-delimited. - * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned - * @param string the C string to write - */ -void mqtt_write_cstr(unsigned char** pptr, const char* string) -{ - int len = strlen(string); - mqtt_write_int(pptr, len); - memcpy(*pptr, string, len); - *pptr += len; -} - - -//int getLenStringLen(char* ptr) -//{ -// int len = 256*((unsigned char)(*ptr)) + (unsigned char)(*(ptr+1)); -// return len; -//} - - -void mqtt_write_mqqt_str(unsigned char** pptr, mqtt_string_t mqttstring) -{ - if (mqttstring.lenstring.len > 0) - { - mqtt_write_int(pptr, mqttstring.lenstring.len); - memcpy(*pptr, mqttstring.lenstring.data, mqttstring.lenstring.len); - *pptr += mqttstring.lenstring.len; - } - else if (mqttstring.cstring) - mqtt_write_cstr(pptr, mqttstring.cstring); - else - mqtt_write_int(pptr, 0); -} - - -/** - * @param mqttstring the MQTTString structure into which the data is to be read - * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned - * @param enddata pointer to the end of the data: do not read beyond - * @return 1 if successful, 0 if not - */ -int mqtt_read_str_len(mqtt_string_t* mqttstring, unsigned char** pptr, unsigned char* enddata) -{ - int rc = 0; - - FUNC_ENTRY; - /* the first two bytes are the length of the string */ - if (enddata - (*pptr) > 1) /* enough length to read the integer? */ - { - mqttstring->lenstring.len = mqtt_read_int(pptr); /* increments pptr to point past length */ - if (&(*pptr)[mqttstring->lenstring.len] <= enddata) - { - mqttstring->lenstring.data = (char*)*pptr; - *pptr += mqttstring->lenstring.len; - rc = 1; - } - } - mqttstring->cstring = NULL; - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Return the length of the MQTTstring - C string if there is one, otherwise the length delimited string - * @param mqttstring the string to return the length of - * @return the length of the string - */ -int mqtt_strlen(mqtt_string_t mqttstring) -{ - int rc = 0; - - if (mqttstring.cstring) - rc = strlen(mqttstring.cstring); - else - rc = mqttstring.lenstring.len; - return rc; -} - - -/** - * Compares an MQTTString to a C string - * @param a the MQTTString to compare - * @param bptr the C string to compare - * @return boolean - equal or not - */ -int mqtt_packet_equals(mqtt_string_t* a, char* bptr) -{ - int alen = 0, - blen = 0; - char *aptr; - - if (a->cstring) - { - aptr = a->cstring; - alen = strlen(a->cstring); - } - else - { - aptr = a->lenstring.data; - alen = a->lenstring.len; - } - blen = strlen(bptr); - - return (alen == blen) && (strncmp(aptr, bptr, alen) == 0); -} - - -/** - * Helper function to read packet data from some source into a buffer - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param getfn pointer to a function which will read any number of bytes from the needed source - * @return integer MQTT packet type, or -1 on error - * @note the whole message must fit into the caller's buffer - */ -int mqtt_packet_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)) -{ - int rc = -1; - mqtt_header_t header = {0}; - int len = 0; - int rem_len = 0; - - /* 1. read the header byte. This has the packet type in it */ - if ((*getfn)(buf, 1) != 1) - goto exit; - - len = 1; - /* 2. read the remaining length. This is variable in itself */ - mqtt_packet_decode(getfn, &rem_len); - len += mqtt_packet_encode(buf + 1, rem_len); /* put the original remaining length back into the buffer */ - - /* 3. read the rest of the buffer using a callback to supply the rest of the data */ - if((rem_len + len) > buflen) - goto exit; - if ((*getfn)(buf + len, rem_len) != rem_len) - goto exit; - - header.byte = buf[0]; - rc = header.bits.type; -exit: - return rc; -} - -/** - * Decodes the message length according to the MQTT algorithm, non-blocking - * @param trp pointer to a transport structure holding what is needed to solve getting data from it - * @param value the decoded length returned - * @return integer the number of bytes read from the socket, 0 for call again, or -1 on error - */ -static int decodenb(mqtt_transport_t *trp) -{ - unsigned char c; - int rc = MQTTPACKET_READ_ERROR; - - FUNC_ENTRY; - if(trp->len == 0){ /* initialize on first call */ - trp->multiplier = 1; - trp->rem_len = 0; - } - do { - int frc; - if (++(trp->len) > MAX_NO_OF_REMAINING_LENGTH_BYTES) - goto exit; - if ((frc=(*trp->getfn)(trp->sck, &c, 1)) == -1) - goto exit; - if (frc == 0){ - rc = 0; - goto exit; - } - trp->rem_len += (c & 127) * trp->multiplier; - trp->multiplier *= 128; - } while ((c & 128) != 0); - rc = trp->len; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - -/** - * Helper function to read packet data from some source into a buffer, non-blocking - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param trp pointer to a transport structure holding what is needed to solve getting data from it - * @return integer MQTT packet type, 0 for call again, or -1 on error - * @note the whole message must fit into the caller's buffer - */ -int mqtt_packet_readnb(unsigned char* buf, int buflen, mqtt_transport_t *trp) -{ - int rc = -1, frc; - mqtt_header_t header = {0}; - - switch(trp->state){ - default: - trp->state = 0; - /*FALLTHROUGH*/ - case 0: - /* read the header byte. This has the packet type in it */ - if ((frc=(*trp->getfn)(trp->sck, buf, 1)) == -1) - goto exit; - if (frc == 0) - return 0; - trp->len = 0; - ++trp->state; - /*FALLTHROUGH*/ - /* read the remaining length. This is variable in itself */ - case 1: - if((frc=decodenb(trp)) == MQTTPACKET_READ_ERROR) - goto exit; - if(frc == 0) - return 0; - trp->len = 1 + mqtt_packet_encode(buf + 1, trp->rem_len); /* put the original remaining length back into the buffer */ - if((trp->rem_len + trp->len) > buflen) - goto exit; - ++trp->state; - /*FALLTHROUGH*/ - case 2: - /* read the rest of the buffer using a callback to supply the rest of the data */ - if ((frc=(*trp->getfn)(trp->sck, buf + trp->len, trp->rem_len)) == -1) - goto exit; - if (frc == 0) - return 0; - trp->rem_len -= frc; - trp->len += frc; - if(trp->rem_len) - return 0; - - header.byte = buf[0]; - rc = header.bits.type; - break; - } - -exit: - trp->state = 0; - return rc; -} - diff --git a/extras/paho_mqtt_c/MQTTPacket.h b/extras/paho_mqtt_c/MQTTPacket.h deleted file mode 100644 index e27c42f..0000000 --- a/extras/paho_mqtt_c/MQTTPacket.h +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Xiang Rong - 442039 Add makefile to Embedded C client - *******************************************************************************/ - -#ifndef MQTTPACKET_H_ -#define MQTTPACKET_H_ - -#if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */ -extern "C" { -#endif - -#if defined(WIN32_DLL) || defined(WIN64_DLL) - #define DLLImport __declspec(dllimport) - #define DLLExport __declspec(dllexport) -#elif defined(LINUX_SO) - #define DLLImport extern - #define DLLExport __attribute__ ((visibility ("default"))) -#else - #define DLLImport - #define DLLExport -#endif - -enum errors -{ - MQTTPACKET_BUFFER_TOO_SHORT = -2, - MQTTPACKET_READ_ERROR = -1, - MQTTPACKET_READ_COMPLETE -}; - -enum msgTypes -{ - MQTTPACKET_CONNECT = 1, - MQTTPACKET_CONNACK, - MQTTPACKET_PUBLISH, - MQTTPACKET_PUBACK, - MQTTPACKET_PUBREC, - MQTTPACKET_PUBREL, - MQTTPACKET_PUBCOMP, - MQTTPACKET_SUBSCRIBE, - MQTTPACKET_SUBACK, - MQTTPACKET_UNSUBSCRIBE, - MQTTPACKET_UNSUBACK, - MQTTPACKET_PINGREQ, - MQTTPACKET_PINGRESP, - MQTTPACKET_DISCONNECT -}; - -/** - * Bitfields for the MQTT header byte. - */ -typedef union -{ - unsigned char byte; /**< the whole byte */ -#if defined(REVERSED) - struct - { - unsigned int type : 4; /**< message type nibble */ - unsigned int dup : 1; /**< DUP flag bit */ - unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ - unsigned int retain : 1; /**< retained flag bit */ - } bits; -#else - struct - { - unsigned int retain : 1; /**< retained flag bit */ - unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ - unsigned int dup : 1; /**< DUP flag bit */ - unsigned int type : 4; /**< message type nibble */ - } bits; -#endif -} mqtt_header_t; - -typedef struct -{ - int len; - char* data; -} mqtt_string_len_t; - -typedef struct -{ - char* cstring; - mqtt_string_len_t lenstring; -} mqtt_string_t; - -#define mqtt_string_initializer {NULL, {0, NULL}} - -int mqtt_strlen(mqtt_string_t mqttstring); - -#include "MQTTConnect.h" -#include "MQTTPublish.h" -#include "MQTTSubscribe.h" -#include "MQTTUnsubscribe.h" -#include "MQTTFormat.h" - -int mqtt_serialize_ack(unsigned char* buf, int buflen, unsigned char type, unsigned char dup, unsigned short packetid); -int mqtt_deserialize_ack(unsigned char* packettype, unsigned char* dup, unsigned short* packetid, unsigned char* buf, int buflen); - -int mqtt_packet_len(int rem_len); -int mqtt_packet_equals(mqtt_string_t* a, char* b); - -int mqtt_packet_encode(unsigned char* buf, int length); -int mqtt_packet_decode(int (*getcharfn)(unsigned char*, int), int* value); -int mqtt_packet_decode_buf(unsigned char* buf, int* value); - -int mqtt_read_int(unsigned char** pptr); -char mqtt_read_char(unsigned char** pptr); -void mqtt_write_char(unsigned char** pptr, char c); -void mqtt_write_int(unsigned char** pptr, int anInt); -int mqtt_read_str_len(mqtt_string_t* mqttstring, unsigned char** pptr, unsigned char* enddata); -void mqtt_write_cstr(unsigned char** pptr, const char* string); -void mqtt_write_mqqt_str(unsigned char** pptr, mqtt_string_t mqttstring); - -DLLExport int mqtt_packet_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)); - -typedef struct { - int (*getfn)(void *, unsigned char*, int); /* must return -1 for error, 0 for call again, or the number of bytes read */ - void *sck; /* pointer to whatever the system may use to identify the transport */ - int multiplier; - int rem_len; - int len; - char state; -} mqtt_transport_t; - -int mqtt_packet_readnb(unsigned char* buf, int buflen, mqtt_transport_t *trp); - -#ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ -} -#endif - - -#endif /* MQTTPACKET_H_ */ diff --git a/extras/paho_mqtt_c/MQTTPublish.h b/extras/paho_mqtt_c/MQTTPublish.h deleted file mode 100644 index 668c318..0000000 --- a/extras/paho_mqtt_c/MQTTPublish.h +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Xiang Rong - 442039 Add makefile to Embedded C client - *******************************************************************************/ - -#ifndef MQTTPUBLISH_H_ -#define MQTTPUBLISH_H_ - -#if !defined(DLLImport) - #define DLLImport -#endif -#if !defined(DLLExport) - #define DLLExport -#endif - -DLLExport int mqtt_serialize_publish(unsigned char* buf, int buflen, unsigned char dup, int qos, unsigned char retained, unsigned short packetid, - mqtt_string_t topicName, unsigned char* payload, int payloadlen); - -DLLExport int mqtt_deserialize_publish(unsigned char* dup, int* qos, unsigned char* retained, unsigned short* packetid, mqtt_string_t* topicName, - unsigned char** payload, int* payloadlen, unsigned char* buf, int len); - -DLLExport int mqtt_serialize_puback(unsigned char* buf, int buflen, unsigned short packetid); -DLLExport int mqtt_serialize_pubrel(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid); -DLLExport int mqtt_serialize_pubcomp(unsigned char* buf, int buflen, unsigned short packetid); - -#endif /* MQTTPUBLISH_H_ */ diff --git a/extras/paho_mqtt_c/MQTTSerializePublish.c b/extras/paho_mqtt_c/MQTTSerializePublish.c deleted file mode 100644 index 2758104..0000000 --- a/extras/paho_mqtt_c/MQTTSerializePublish.c +++ /dev/null @@ -1,169 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Ian Craggs - fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=453144 - *******************************************************************************/ -#include -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include - - -/** - * Determines the length of the MQTT publish packet that would be produced using the supplied parameters - * @param qos the MQTT QoS of the publish (packetid is omitted for QoS 0) - * @param topicName the topic name to be used in the publish - * @param payloadlen the length of the payload to be sent - * @return the length of buffer needed to contain the serialized version of the packet - */ -static int publish_length(int qos, mqtt_string_t topicName, int payloadlen) -{ - int len = 0; - - len += 2 + mqtt_strlen(topicName) + payloadlen; - if (qos > 0) - len += 2; /* packetid */ - return len; -} - - -/** - * Serializes the supplied publish data into the supplied buffer, ready for sending - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param dup integer - the MQTT dup flag - * @param qos integer - the MQTT QoS value - * @param retained integer - the MQTT retained flag - * @param packetid integer - the MQTT packet identifier - * @param topicName MQTTString - the MQTT topic in the publish - * @param payload byte buffer - the MQTT publish payload - * @param payloadlen integer - the length of the MQTT payload - * @return the length of the serialized data. <= 0 indicates error - */ -int mqtt_serialize_publish(unsigned char* buf, int buflen, unsigned char dup, int qos, unsigned char retained, unsigned short packetid, - mqtt_string_t topicName, unsigned char* payload, int payloadlen) -{ - unsigned char *ptr = buf; - mqtt_header_t header = {0}; - int rem_len = 0; - int rc = 0; - - FUNC_ENTRY; - if (mqtt_packet_len(rem_len = publish_length(qos, topicName, payloadlen)) > buflen) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - - header.bits.type = MQTTPACKET_PUBLISH; - header.bits.dup = dup; - header.bits.qos = qos; - header.bits.retain = retained; - mqtt_write_char(&ptr, header.byte); /* write header */ - - ptr += mqtt_packet_encode(ptr, rem_len); /* write remaining length */; - - mqtt_write_mqqt_str(&ptr, topicName); - - if (qos > 0) - mqtt_write_int(&ptr, packetid); - - memcpy(ptr, payload, payloadlen); - ptr += payloadlen; - - rc = ptr - buf; - -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - - -/** - * Serializes the ack packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param type the MQTT packet type - * @param dup the MQTT dup flag - * @param packetid the MQTT packet identifier - * @return serialized length, or error if 0 - */ -int mqtt_serialize_ack(unsigned char* buf, int buflen, unsigned char packettype, unsigned char dup, unsigned short packetid) -{ - mqtt_header_t header = {0}; - int rc = 0; - unsigned char *ptr = buf; - - FUNC_ENTRY; - if (buflen < 4) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - header.bits.type = packettype; - header.bits.dup = dup; - header.bits.qos = (packettype == MQTTPACKET_PUBREL) ? 1 : 0; - mqtt_write_char(&ptr, header.byte); /* write header */ - - ptr += mqtt_packet_encode(ptr, 2); /* write remaining length */ - mqtt_write_int(&ptr, packetid); - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Serializes a puback packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param packetid integer - the MQTT packet identifier - * @return serialized length, or error if 0 - */ -int mqtt_serialize_puback(unsigned char* buf, int buflen, unsigned short packetid) -{ - return mqtt_serialize_ack(buf, buflen, MQTTPACKET_PUBACK, 0, packetid); -} - - -/** - * Serializes a pubrel packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param dup integer - the MQTT dup flag - * @param packetid integer - the MQTT packet identifier - * @return serialized length, or error if 0 - */ -int mqtt_serialize_pubrel(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid) -{ - return mqtt_serialize_ack(buf, buflen, MQTTPACKET_PUBREL, dup, packetid); -} - - -/** - * Serializes a pubrel packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param packetid integer - the MQTT packet identifier - * @return serialized length, or error if 0 - */ -int mqtt_serialize_pubcomp(unsigned char* buf, int buflen, unsigned short packetid) -{ - return mqtt_serialize_ack(buf, buflen, MQTTPACKET_PUBCOMP, 0, packetid); -} - - diff --git a/extras/paho_mqtt_c/MQTTSubscribe.h b/extras/paho_mqtt_c/MQTTSubscribe.h deleted file mode 100644 index 6918a92..0000000 --- a/extras/paho_mqtt_c/MQTTSubscribe.h +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Xiang Rong - 442039 Add makefile to Embedded C client - *******************************************************************************/ - -#ifndef MQTTSUBSCRIBE_H_ -#define MQTTSUBSCRIBE_H_ - -#if !defined(DLLImport) - #define DLLImport -#endif -#if !defined(DLLExport) - #define DLLExport -#endif - -#include "MQTTPacket.h" - -DLLExport int mqtt_serialize_subscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, - int count, mqtt_string_t topicFilters[], int requestedQoSs[]); - -DLLExport int mqtt_deserialize_subscribe(unsigned char* dup, unsigned short* packetid, - int maxcount, int* count, mqtt_string_t topicFilters[], int requestedQoSs[], unsigned char* buf, int len); - -DLLExport int mqtt_serialize_suback(unsigned char* buf, int buflen, unsigned short packetid, int count, int* grantedQoSs); - -DLLExport int mqtt_deserialize_suback(unsigned short* packetid, int maxcount, int* count, int grantedQoSs[], unsigned char* buf, int len); - - -#endif /* MQTTSUBSCRIBE_H_ */ diff --git a/extras/paho_mqtt_c/MQTTSubscribeClient.c b/extras/paho_mqtt_c/MQTTSubscribeClient.c deleted file mode 100644 index ea7c69c..0000000 --- a/extras/paho_mqtt_c/MQTTSubscribeClient.c +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - *******************************************************************************/ -#include - -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include - -/** - * Determines the length of the MQTT subscribe packet that would be produced using the supplied parameters - * @param count the number of topic filter strings in topicFilters - * @param topicFilters the array of topic filter strings to be used in the publish - * @return the length of buffer needed to contain the serialized version of the packet - */ -static int subscribe_length(int count, mqtt_string_t topicFilters[]) -{ - int i; - int len = 2; /* packetid */ - - for (i = 0; i < count; ++i) - len += 2 + mqtt_strlen(topicFilters[i]) + 1; /* length + topic + req_qos */ - return len; -} - - -/** - * Serializes the supplied subscribe data into the supplied buffer, ready for sending - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied bufferr - * @param dup integer - the MQTT dup flag - * @param packetid integer - the MQTT packet identifier - * @param count - number of members in the topicFilters and reqQos arrays - * @param topicFilters - array of topic filter names - * @param requestedQoSs - array of requested QoS - * @return the length of the serialized data. <= 0 indicates error - */ -int mqtt_serialize_subscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, int count, - mqtt_string_t topicFilters[], int requestedQoSs[]) -{ - unsigned char *ptr = buf; - mqtt_header_t header = {0}; - int rem_len = 0; - int rc = 0; - int i = 0; - - FUNC_ENTRY; - if (mqtt_packet_len(rem_len = subscribe_length(count, topicFilters)) > buflen) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - - header.byte = 0; - header.bits.type = MQTTPACKET_SUBSCRIBE; - header.bits.dup = dup; - header.bits.qos = 1; - mqtt_write_char(&ptr, header.byte); /* write header */ - - ptr += mqtt_packet_encode(ptr, rem_len); /* write remaining length */; - - mqtt_write_int(&ptr, packetid); - - for (i = 0; i < count; ++i) - { - mqtt_write_mqqt_str(&ptr, topicFilters[i]); - mqtt_write_char(&ptr, requestedQoSs[i]); - } - - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - - -/** - * Deserializes the supplied (wire) buffer into suback data - * @param packetid returned integer - the MQTT packet identifier - * @param maxcount - the maximum number of members allowed in the grantedQoSs array - * @param count returned integer - number of members in the grantedQoSs array - * @param grantedQoSs returned array of integers - the granted qualities of service - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int mqtt_deserialize_suback(unsigned short* packetid, int maxcount, int* count, int grantedQoSs[], unsigned char* buf, int buflen) -{ - mqtt_header_t header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen; - - FUNC_ENTRY; - header.byte = mqtt_read_char(&curdata); - if (header.bits.type != MQTTPACKET_SUBACK) - goto exit; - - curdata += (rc = mqtt_packet_decode_buf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - if (enddata - curdata < 2) - goto exit; - - *packetid = mqtt_read_int(&curdata); - - *count = 0; - while (curdata < enddata) - { - if (*count > maxcount) - { - rc = -1; - goto exit; - } - grantedQoSs[(*count)++] = mqtt_read_char(&curdata); - } - - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - diff --git a/extras/paho_mqtt_c/MQTTUnsubscribe.h b/extras/paho_mqtt_c/MQTTUnsubscribe.h deleted file mode 100644 index 9ec9671..0000000 --- a/extras/paho_mqtt_c/MQTTUnsubscribe.h +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Xiang Rong - 442039 Add makefile to Embedded C client - *******************************************************************************/ - -#ifndef MQTTUNSUBSCRIBE_H_ -#define MQTTUNSUBSCRIBE_H_ - -#if !defined(DLLImport) - #define DLLImport -#endif -#if !defined(DLLExport) - #define DLLExport -#endif - -DLLExport int mqtt_serialize_unsubscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, - int count, mqtt_string_t topicFilters[]); - -DLLExport int mqtt_deserialize_unsubscribe(unsigned char* dup, unsigned short* packetid, int max_count, int* count, mqtt_string_t topicFilters[], - unsigned char* buf, int len); - -DLLExport int mqtt_serialize_unsuback(unsigned char* buf, int buflen, unsigned short packetid); - -DLLExport int mqtt_deserialize_unsuback(unsigned short* packetid, unsigned char* buf, int len); - -#endif /* MQTTUNSUBSCRIBE_H_ */ diff --git a/extras/paho_mqtt_c/MQTTUnsubscribeClient.c b/extras/paho_mqtt_c/MQTTUnsubscribeClient.c deleted file mode 100644 index a302925..0000000 --- a/extras/paho_mqtt_c/MQTTUnsubscribeClient.c +++ /dev/null @@ -1,106 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - *******************************************************************************/ -#include -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include - -/** - * Determines the length of the MQTT unsubscribe packet that would be produced using the supplied parameters - * @param count the number of topic filter strings in topicFilters - * @param topicFilters the array of topic filter strings to be used in the publish - * @return the length of buffer needed to contain the serialized version of the packet - */ -static int unsubscribe_length(int count, mqtt_string_t topicFilters[]) -{ - int i; - int len = 2; /* packetid */ - - for (i = 0; i < count; ++i) - len += 2 + mqtt_strlen(topicFilters[i]); /* length + topic*/ - return len; -} - - -/** - * Serializes the supplied unsubscribe data into the supplied buffer, ready for sending - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @param dup integer - the MQTT dup flag - * @param packetid integer - the MQTT packet identifier - * @param count - number of members in the topicFilters array - * @param topicFilters - array of topic filter names - * @return the length of the serialized data. <= 0 indicates error - */ -int mqtt_serialize_unsubscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, - int count, mqtt_string_t topicFilters[]) -{ - unsigned char *ptr = buf; - mqtt_header_t header = {0}; - int rem_len = 0; - int rc = -1; - int i = 0; - - FUNC_ENTRY; - if (mqtt_packet_len(rem_len = unsubscribe_length(count, topicFilters)) > buflen) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - - header.byte = 0; - header.bits.type = MQTTPACKET_UNSUBSCRIBE; - header.bits.dup = dup; - header.bits.qos = 1; - mqtt_write_char(&ptr, header.byte); /* write header */ - - ptr += mqtt_packet_encode(ptr, rem_len); /* write remaining length */; - - mqtt_write_int(&ptr, packetid); - - for (i = 0; i < count; ++i) - mqtt_write_mqqt_str(&ptr, topicFilters[i]); - - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Deserializes the supplied (wire) buffer into unsuback data - * @param packetid returned integer - the MQTT packet identifier - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int mqtt_deserialize_unsuback(unsigned short* packetid, unsigned char* buf, int buflen) -{ - unsigned char type = 0; - unsigned char dup = 0; - int rc = 0; - - FUNC_ENTRY; - rc = mqtt_deserialize_ack(&type, &dup, packetid, buf, buflen); - if (type == MQTTPACKET_UNSUBACK) - rc = 1; - FUNC_EXIT_RC(rc); - return rc; -} - - diff --git a/extras/paho_mqtt_c/README.md b/extras/paho_mqtt_c/README.md new file mode 100644 index 0000000..a43f0e5 --- /dev/null +++ b/extras/paho_mqtt_c/README.md @@ -0,0 +1,16 @@ +# Paho MQTT Embedded C Client + +https://www.eclipse.org/paho/clients/c/embedded/ + +ESP8266 port based on the port done by @baoshi. + +## Directory Organisation + +* org.eclipse.paho.mqtt.embedded-c/ is the upstream project. + +* MQTTClient.c is copied verbatim from org.eclipse.paho.mqtt.embedded-c/MQTTClient-C/src/ (as it needs to be in the same directory as MQTTClient.h) + +* MQTTClient.h is copied from the same place, and has one line changed to include the upstream platform header file. + +... any time the submodule is updated, those two source files should also be refreshed. + diff --git a/extras/paho_mqtt_c/StackTrace.h b/extras/paho_mqtt_c/StackTrace.h deleted file mode 100644 index 517d437..0000000 --- a/extras/paho_mqtt_c/StackTrace.h +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Ian Craggs - fix for bug #434081 - *******************************************************************************/ - -#ifndef STACKTRACE_H_ -#define STACKTRACE_H_ - -#define NOSTACKTRACE 1 - -#if defined(NOSTACKTRACE) -#define FUNC_ENTRY -#define FUNC_ENTRY_NOLOG -#define FUNC_ENTRY_MED -#define FUNC_ENTRY_MAX -#define FUNC_EXIT -#define FUNC_EXIT_NOLOG -#define FUNC_EXIT_MED -#define FUNC_EXIT_MAX -#define FUNC_EXIT_RC(x) -#define FUNC_EXIT_MED_RC(x) -#define FUNC_EXIT_MAX_RC(x) - -#else - -#if defined(WIN32) -#define inline __inline -#define FUNC_ENTRY StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MINIMUM) -#define FUNC_ENTRY_NOLOG StackTrace_entry(__FUNCTION__, __LINE__, -1) -#define FUNC_ENTRY_MED StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MEDIUM) -#define FUNC_ENTRY_MAX StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MAXIMUM) -#define FUNC_EXIT StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MINIMUM) -#define FUNC_EXIT_NOLOG StackTrace_exit(__FUNCTION__, __LINE__, -1) -#define FUNC_EXIT_MED StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MEDIUM) -#define FUNC_EXIT_MAX StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MAXIMUM) -#define FUNC_EXIT_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MINIMUM) -#define FUNC_EXIT_MED_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MEDIUM) -#define FUNC_EXIT_MAX_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MAXIMUM) -#else -#define FUNC_ENTRY StackTrace_entry(__func__, __LINE__, TRACE_MINIMUM) -#define FUNC_ENTRY_NOLOG StackTrace_entry(__func__, __LINE__, -1) -#define FUNC_ENTRY_MED StackTrace_entry(__func__, __LINE__, TRACE_MEDIUM) -#define FUNC_ENTRY_MAX StackTrace_entry(__func__, __LINE__, TRACE_MAXIMUM) -#define FUNC_EXIT StackTrace_exit(__func__, __LINE__, NULL, TRACE_MINIMUM) -#define FUNC_EXIT_NOLOG StackTrace_exit(__func__, __LINE__, NULL, -1) -#define FUNC_EXIT_MED StackTrace_exit(__func__, __LINE__, NULL, TRACE_MEDIUM) -#define FUNC_EXIT_MAX StackTrace_exit(__func__, __LINE__, NULL, TRACE_MAXIMUM) -#define FUNC_EXIT_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MINIMUM) -#define FUNC_EXIT_MED_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MEDIUM) -#define FUNC_EXIT_MAX_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MAXIMUM) - -void StackTrace_entry(const char* name, int line, int trace); -void StackTrace_exit(const char* name, int line, void* return_value, int trace); - -void StackTrace_printStack(FILE* dest); -char* StackTrace_get(unsigned long); - -#endif - -#endif - - - - -#endif /* STACKTRACE_H_ */ diff --git a/extras/paho_mqtt_c/component.mk b/extras/paho_mqtt_c/component.mk index 6ecf410..7c349c6 100644 --- a/extras/paho_mqtt_c/component.mk +++ b/extras/paho_mqtt_c/component.mk @@ -1,9 +1,12 @@ # Component makefile for extras/paho_mqtt_c -# expected anyone using bmp driver includes it as 'paho_mqtt_c/MQTT*.h' -INC_DIRS += $(paho_mqtt_c_ROOT).. +MQTT_PACKET_DIR=$(paho_mqtt_c_ROOT)org.eclipse.paho.mqtt.embedded-c/MQTTPacket/src/ -# args for passing into compile rule generation -paho_mqtt_c_SRC_DIR = $(paho_mqtt_c_ROOT) +paho_mqtt_c_SRC_DIR = $(paho_mqtt_c_ROOT) $(MQTT_PACKET_DIR) + +# upstream MQTT code has some unused variables +paho_mqtt_c_CFLAGS = $(CFLAGS) -Wno-unused-but-set-variable + +INC_DIRS += $(paho_mqtt_c_ROOT) $(MQTT_PACKET_DIR) $(eval $(call component_compile_rules,paho_mqtt_c)) diff --git a/extras/paho_mqtt_c/org.eclipse.paho.mqtt.embedded-c b/extras/paho_mqtt_c/org.eclipse.paho.mqtt.embedded-c new file mode 160000 index 0000000..5714645 --- /dev/null +++ b/extras/paho_mqtt_c/org.eclipse.paho.mqtt.embedded-c @@ -0,0 +1 @@ +Subproject commit 5714645c762177ff08086224a7a9ce0b9d541316 diff --git a/extras/pca9685/component.mk b/extras/pca9685/component.mk deleted file mode 100644 index 31d7848..0000000 --- a/extras/pca9685/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/pca9685 - -# expected anyone using this driver includes it as 'pca9685/pca9685.h' -INC_DIRS += $(pca9685_ROOT).. - -# args for passing into compile rule generation -pca9685_SRC_DIR = $(pca9685_ROOT) - -$(eval $(call component_compile_rules,pca9685)) diff --git a/extras/pca9685/pca9685.c b/extras/pca9685/pca9685.c deleted file mode 100644 index 8b8605a..0000000 --- a/extras/pca9685/pca9685.c +++ /dev/null @@ -1,218 +0,0 @@ -/** - * Driver for 16-channel, 12-bit PWM PCA9685 - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "pca9685.h" - -#include - -#define REG_MODE1 0x00 -#define REG_MODE2 0x01 -#define REG_SUBADR1 0x02 -#define REG_SUBADR2 0x03 -#define REG_SUBADR3 0x04 -#define REG_ALLCALLADR 0x05 -#define REG_LEDX 0x06 -#define REG_ALL_LED 0xfa -#define REG_PRE_SCALE 0xfe - -#define MODE1_RESTART (1 << 7) -#define MODE1_EXTCLK (1 << 6) -#define MODE1_AI (1 << 5) -#define MODE1_SLEEP (1 << 4) - -#define MODE1_SUB_BIT 3 - -#define MODE2_INVRT (1 << 4) -#define MODE2_OUTDRV (1 << 2) - -#define LED_FULL_ON_OFF (1 << 4) - -#define REG_LED_N(x) (REG_LEDX + (x) * 4) -#define OFFS_REG_LED_ON 1 -#define OFFS_REG_LED_OFF 3 - -#define INTERNAL_FREQ 25000000 - -#define MIN_PRESCALER 0x03 -#define MAX_PRESCALER 0xff -#define MAX_CHANNEL 15 -#define MAX_SUBADDR 2 - -#define WAKEUP_DELAY_US 500 - -//#define PCA9685_DEBUG - -#ifdef PCA9685_DEBUG -#include -#define debug(fmt, ...) printf("%s: " fmt "\n", "PCA9685", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -inline static uint32_t round_div(uint32_t x, uint32_t y) -{ - return (x + y / 2) / y; -} - -inline static void write_reg(i2c_dev_t *dev, uint8_t reg, uint8_t val) -{ - if (i2c_slave_write(dev->bus, dev->addr, ®, &val, 1)) - debug("Could not write 0x%02x to 0x%02x, bus %u, addr = 0x%02x", reg, val, dev->bus, dev->addr); -} - -inline static uint8_t read_reg(i2c_dev_t *dev, uint8_t reg) -{ - uint8_t res = 0; - if (i2c_slave_read(dev->bus, dev->addr, ®, &res, 1)) - debug("Could not read from 0x%02x, bus %u, addr = 0x%02x", reg, dev->bus, dev->addr); - return res; -} - -inline static void update_reg(i2c_dev_t *dev, uint8_t reg, uint8_t mask, uint8_t val) -{ - write_reg(dev, reg, (read_reg(dev, reg) & ~mask) | val); -} - -void pca9685_init(i2c_dev_t *dev) -{ - // Enable autoincrement - update_reg(dev, REG_MODE1, MODE1_AI, MODE1_AI); -} - -bool pca9685_set_subaddr(i2c_dev_t *dev, uint8_t num, uint8_t subaddr, bool enable) -{ - if (num > MAX_SUBADDR) - { - debug("Invalid subaddress number: %d", num); - return false; - } - - write_reg(dev, REG_SUBADR1 + num, subaddr << 1); - - uint8_t mask = 1 << (MODE1_SUB_BIT - num); - update_reg(dev, REG_MODE1, mask, enable ? mask : 0); - - return true; -} - -bool pca9685_is_sleeping(i2c_dev_t *dev) -{ - return (read_reg(dev, REG_MODE1) & MODE1_SLEEP) != 0; -} - -void pca9685_sleep(i2c_dev_t *dev, bool sleep) -{ - update_reg(dev, REG_MODE1, MODE1_SLEEP, sleep ? MODE1_SLEEP : 0); - if (!sleep) - sdk_os_delay_us(WAKEUP_DELAY_US); -} - -void pca9685_restart(i2c_dev_t *dev) -{ - uint8_t mode = read_reg(dev, REG_MODE1); - if (mode & MODE1_RESTART) - { - write_reg(dev, REG_MODE1, mode & ~MODE1_SLEEP); - sdk_os_delay_us(WAKEUP_DELAY_US); - } - write_reg(dev, REG_MODE1, (mode & ~MODE1_SLEEP) | MODE1_RESTART); -} - -bool pca9685_is_output_inverted(i2c_dev_t *dev) -{ - return (read_reg(dev, REG_MODE2) & MODE2_INVRT) != 0; -} - -void pca9685_set_output_inverted(i2c_dev_t *dev, bool inverted) -{ - update_reg(dev, REG_MODE2, MODE2_INVRT, inverted ? MODE2_INVRT : 0); -} - -bool pca9685_get_output_open_drain(i2c_dev_t *dev) -{ - return (read_reg(dev, REG_MODE2) & MODE2_OUTDRV) == 0; -} - -void pca9685_set_output_open_drain(i2c_dev_t *dev, bool open_drain) -{ - update_reg(dev, REG_MODE2, MODE2_OUTDRV, open_drain ? 0 : MODE2_OUTDRV); -} - -uint8_t pca9685_get_prescaler(i2c_dev_t *dev) -{ - return read_reg(dev, REG_PRE_SCALE); -} - -bool pca9685_set_prescaler(i2c_dev_t *dev, uint8_t prescaler) -{ - if (prescaler < MIN_PRESCALER) - { - debug("Inavlid prescaler value: %d", prescaler); - return false; - } - - pca9685_sleep(dev, true); - write_reg(dev, REG_PRE_SCALE, prescaler); - pca9685_sleep(dev, false); - return true; -} - -uint16_t pca9685_get_pwm_frequency(i2c_dev_t *dev) -{ - return INTERNAL_FREQ / ((uint32_t)4096 * (read_reg(dev, REG_PRE_SCALE) + 1)); -} - -bool pca9685_set_pwm_frequency(i2c_dev_t *dev, uint16_t freq) -{ - uint16_t prescaler = round_div(INTERNAL_FREQ, (uint32_t)4096 * freq) - 1; - if (prescaler < MIN_PRESCALER || prescaler > MAX_PRESCALER) - { - debug("Inavlid prescaler value: %d", prescaler); - return false; - } - - return pca9685_set_prescaler(dev, prescaler); -} - -void pca9685_set_pwm_value(i2c_dev_t *dev, uint8_t channel, uint16_t val) -{ - uint8_t reg = channel > MAX_CHANNEL ? REG_ALL_LED : REG_LED_N(channel); - - if (val == 0) - { - // Full off - // Takes precedence over full on. - write_reg(dev, reg + OFFS_REG_LED_OFF, LED_FULL_ON_OFF); - } - else if (val < 4096) - { - // Normal - uint8_t buf[4] = { 0, 0, val, val >> 8 }; - i2c_slave_write(dev->bus, dev->addr, ®, buf, 4); - } - else - { - // Clear full off, as it takes precedence over full on. - write_reg(dev, reg + OFFS_REG_LED_OFF, 0); - // Full on - write_reg(dev, reg + OFFS_REG_LED_ON, LED_FULL_ON_OFF); - } -} - -bool pca9685_set_pwm_values(i2c_dev_t *dev, uint8_t first_ch, uint8_t channels, const uint16_t *values) -{ - if (channels == 0 || first_ch + channels - 1 > MAX_CHANNEL) - { - debug("Invalid channels"); - return false; - } - - for (uint8_t i = 0; i < channels; i ++) - pca9685_set_pwm_value(dev, first_ch + i, values [i]); - - return true; -} diff --git a/extras/pca9685/pca9685.h b/extras/pca9685/pca9685.h deleted file mode 100644 index 94b877f..0000000 --- a/extras/pca9685/pca9685.h +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Driver for 16-channel, 12-bit PWM PCA9685 - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_PCA9685_H_ -#define _EXTRAS_PCA9685_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define PCA9685_ADDR_BASE 0x40 - -/** - * Init device - * @param addr Device address - */ -void pca9685_init(i2c_dev_t *dev); - -/** - * Setup device subaddress (see section 7.3.6 if the datasheet) - * @param addr Device address - * @param num Subaddress number, 0..2 - * @param subaddr Subaddress, 7 bit - * @param enable True to enable subaddress, false to disable - * @return False if error occured - */ -bool pca9685_set_subaddr(i2c_dev_t *dev, uint8_t num, uint8_t subaddr, bool enable); - -/** - * Restart device (see section 7.3.1.1 of the datasheet) - * @param addr Device address - */ -void pca9685_restart(i2c_dev_t *dev); - -/** - * Check if device is in sleep mode - * @param addr Device address - * @return True if device is sleeping - */ -bool pca9685_is_sleeping(i2c_dev_t *dev); - -/** - * Switch device to low-power mode or wake it up. - * @param addr Device address - * @param sleep True for sleep mode, false for wake up - */ -void pca9685_sleep(i2c_dev_t *dev, bool sleep); - -/** - * Get logic inversion of the outputs - * @param addr Device address - * @return True if outputs are inverted, false otherwise - */ -bool pca9685_is_output_inverted(i2c_dev_t *dev); - -/** - * Logically invert outputs (see section 7.7 of the datasheet) - * @param addr Device address - * @param inverted True for inverted outputs - */ -void pca9685_set_output_inverted(i2c_dev_t *dev, bool inverted); - -/** - * Get outputs mode - * @param addr Device address - * @return True if outputs are in open drain mode - */ -bool pca9685_get_output_open_drain(i2c_dev_t *dev); - -/** - * Set outputs mode - * @param addr Device address - * @param open_drain True to set open drain mode, false to normal mode - */ -void pca9685_set_output_open_drain(i2c_dev_t *dev, bool open_drain); - -/** - * Get current PWM frequency prescaler. - * @param addr Device address - * @return Frequency prescaler - */ -uint8_t pca9685_get_prescaler(i2c_dev_t *dev); - -/** - * Set PWM frequency prescaler. - * @param addr Device address - * @param prescaler Prescaler value - * @return False if error occured - */ -bool pca9685_set_prescaler(i2c_dev_t *dev, uint8_t prescaler); - -/** - * Get current PWM frequency - * @param addr Device address - * @return PWM frequency, Hz - */ -uint16_t pca9685_get_pwm_frequency(i2c_dev_t *dev); - -/** - * Set PWM frequency - * @param addr Device address - * @param freq PWM frequency, Hz - * @return False if error occured - */ -bool pca9685_set_pwm_frequency(i2c_dev_t *dev, uint16_t freq); - -/** - * Set PWM value on output channel - * @param addr Device address - * @param channel Channel number, 0..15 or >15 for all channels - * @param val PWM value, 0..4096 - */ -void pca9685_set_pwm_value(i2c_dev_t *dev, uint8_t channel, uint16_t val); - -/** - * Set PWM values on output channels - * @param addr Device address - * @param first_ch First channel, 0..15 - * @param channels Number of updating channels - * @param values Array of the channel values, each 0..4096 - * @return False if error occured - */ -bool pca9685_set_pwm_values(i2c_dev_t *dev, uint8_t first_ch, uint8_t channels, const uint16_t *values); - -#ifdef __cplusplus -} -#endif - -#endif /* _EXTRAS_PCA9685_H_ */ diff --git a/extras/pcf8574/pcf8574.c b/extras/pcf8574/pcf8574.c index f3e1c84..e92ebc8 100644 --- a/extras/pcf8574/pcf8574.c +++ b/extras/pcf8574/pcf8574.c @@ -1,46 +1,54 @@ #include "pcf8574.h" +#include -uint8_t pcf8574_port_read(i2c_dev_t *dev) +uint8_t pcf8574_port_read(uint8_t addr) { - uint8_t res; - if (i2c_slave_read(dev->bus, dev->addr, NULL, &res, 1)) - return 0; + i2c_start(); + uint8_t res = i2c_write((addr << 1) | 1) ? i2c_read(1) : 0; + i2c_stop(); return res; } -size_t pcf8574_port_read_buf(i2c_dev_t *dev, void *buf, size_t len) +size_t pcf8574_port_read_buf(uint8_t addr, void *buf, size_t len) { if (!len || !buf) return 0; uint8_t *_buf = (uint8_t *)buf; - if (i2c_slave_read(dev->bus, dev->addr, NULL, _buf, len)) - return 0; + i2c_start(); + if (!i2c_write((addr << 1) | 1)) return 0; + for (size_t i = 0; i < len; i++) + *_buf++ = i2c_read(i == len - 1); + i2c_stop(); return len; } -size_t pcf8574_port_write_buf(const i2c_dev_t *dev, void *buf, size_t len) +size_t pcf8574_port_write_buf(uint8_t addr, void *buf, size_t len) { if (!len || !buf) return 0; uint8_t *_buf = (uint8_t *)buf; - if (i2c_slave_write(dev->bus, dev->addr, NULL, _buf, len)) - return 0; + i2c_start(); + if (!i2c_write(addr << 1)) return 0; + for (size_t i = 0; i < len; i++) + i2c_write(*_buf++); return len; } -void pcf8574_port_write(const i2c_dev_t *dev, uint8_t value) +void pcf8574_port_write(uint8_t addr, uint8_t value) { - i2c_slave_write(dev->bus, dev->addr, NULL, &value, 1); + i2c_start(); + if (i2c_write(addr << 1)) i2c_write(value); + i2c_stop(); } -bool pcf8574_gpio_read(i2c_dev_t *dev, uint8_t num) +bool pcf8574_gpio_read(uint8_t addr, uint8_t num) { - return (bool)((pcf8574_port_read(dev) >> num) & 1); + return (bool)((pcf8574_port_read(addr) >> num) & 1); } -void pcf8574_gpio_write(i2c_dev_t *dev, uint8_t num, bool value) +void pcf8574_gpio_write(uint8_t addr, uint8_t num, bool value) { uint8_t bit = (uint8_t)value << num; uint8_t mask = ~(1 << num); - pcf8574_port_write(dev, (pcf8574_port_read(dev) & mask) | bit); + pcf8574_port_write (addr, (pcf8574_port_read(addr) & mask) | bit); } diff --git a/extras/pcf8574/pcf8574.h b/extras/pcf8574/pcf8574.h index 4e2fed0..c14e25f 100644 --- a/extras/pcf8574/pcf8574.h +++ b/extras/pcf8574/pcf8574.h @@ -8,7 +8,6 @@ #include #include #include -#include #ifdef __cplusplus extern "C" @@ -20,7 +19,7 @@ extern "C" * \param addr I2C register address (0b0100 for PCF8574) * \return 8-bit GPIO port value */ -uint8_t pcf8574_port_read(i2c_dev_t *dev); +uint8_t pcf8574_port_read(uint8_t addr); /** * \brief Continiously read GPIO port values to buffer @@ -29,14 +28,14 @@ uint8_t pcf8574_port_read(i2c_dev_t *dev); * @param len Buffer length * @return Number of bytes read */ -size_t pcf8574_port_read_buf(i2c_dev_t *dev, void *buf, size_t len); +size_t pcf8574_port_read_buf(uint8_t addr, void *buf, size_t len); /** * \brief Write value to GPIO port * \param addr I2C register address (0b0100 for PCF8574) * \param value GPIO port value */ -void pcf8574_port_write(const i2c_dev_t *dev, uint8_t value); +void pcf8574_port_write(uint8_t addr, uint8_t value); /** * \brief Continiously write GPIO values to GPIO port @@ -45,7 +44,7 @@ void pcf8574_port_write(const i2c_dev_t *dev, uint8_t value); * @param len Buffer length * @return Number of bytes written */ -size_t pcf8574_port_write_buf(const i2c_dev_t *dev, void *buf, size_t len); +size_t pcf8574_port_write_buf(uint8_t addr, void *buf, size_t len); /** * \brief Read input value of a GPIO pin @@ -53,7 +52,7 @@ size_t pcf8574_port_write_buf(const i2c_dev_t *dev, void *buf, size_t len); * \param num pin number (0..7) * \return GPIO pin value */ -bool pcf8574_gpio_read(i2c_dev_t *dev, uint8_t num); +bool pcf8574_gpio_read(uint8_t addr, uint8_t num); /** * \brief Set GPIO pin output @@ -63,7 +62,7 @@ bool pcf8574_gpio_read(i2c_dev_t *dev, uint8_t num); * \param num pin number (0..7) * \param value true for high level */ -void pcf8574_gpio_write(i2c_dev_t *dev, uint8_t num, bool value); +void pcf8574_gpio_write(uint8_t addr, uint8_t num, bool value); #ifdef __cplusplus } diff --git a/extras/pcf8591/component.mk b/extras/pcf8591/component.mk deleted file mode 100644 index 5e09035..0000000 --- a/extras/pcf8591/component.mk +++ /dev/null @@ -1,6 +0,0 @@ -# Component makefile for extras/pcf8591 - -INC_DIRS += $(pcf8591_ROOT).. -pcf8591_SRC_DIR = $(pcf8591_ROOT) - -$(eval $(call component_compile_rules,pcf8591)) diff --git a/extras/pcf8591/pcf8591.c b/extras/pcf8591/pcf8591.c deleted file mode 100644 index f1cec30..0000000 --- a/extras/pcf8591/pcf8591.c +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Driver for 8-bit analog-to-digital conversion and - * an 8-bit digital-to-analog conversion PCF8591 - * - * Part of esp-open-rtos - * Copyright (C) 2017 Pham Ngoc Thanh - * 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "pcf8591.h" - -#include - -#define BV(x) (1 << (x)) - -#define CTRL_AD_CH_MASK 0x03 - -#define CTRL_AD_IN_PRG 4 -#define CTRL_AD_IN_PRG_MASK (0x03 << CTRL_AD_IN_PRG) - -#define CTRL_DA_OUT_EN 6 - -uint8_t pcf8591_read(i2c_dev_t *dev, pcf8591_input_conf_t conf, uint8_t channel) -{ - uint8_t res = 0; - uint8_t control_reg = - ((conf << CTRL_AD_IN_PRG) & CTRL_AD_IN_PRG_MASK) | - (channel & CTRL_AD_CH_MASK) | - BV(CTRL_DA_OUT_EN); - - i2c_slave_read(dev->bus, dev->addr, &control_reg, &res, 1); - - return res; -} - -void pcf8591_write(i2c_dev_t *dev, uint8_t value) -{ - uint8_t buf[2] = { BV(CTRL_DA_OUT_EN), value }; - - i2c_slave_write(dev->bus, dev->addr, NULL, buf, 2); -} diff --git a/extras/pcf8591/pcf8591.h b/extras/pcf8591/pcf8591.h deleted file mode 100644 index f136a46..0000000 --- a/extras/pcf8591/pcf8591.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Driver for 8-bit analog-to-digital conversion and - * an 8-bit digital-to-analog conversion PCF8591 - * - * Part of esp-open-rtos - * Copyright (C) 2017 Pham Ngoc Thanh - * 2017 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_PCF8591_H_ -#define _EXTRAS_PCF8591_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define PCF8591_DEFAULT_ADDRESS 0x48 - -/** - * Analog inputs configuration, see datasheet - */ -typedef enum { - PCF8591_IC_4_SINGLES = 0, //!< Four single-ended inputs - PCF8591_IC_DIFF, //!< Three differential inputs - PCF8591_IC_2_SINGLES_DIFF, //!< Two single-ended and differnetial mixed - PCF8591_IC_2_DIFFS //!< Two differential inputs -} pcf8591_input_conf_t; - -/** - * Read input value of an analog pin. - * @param[in] dev Pointer to device - * @param[in] conf Analog inputs configuration - * @param[in] channel Analog channel - * @return analog value - */ -uint8_t pcf8591_read(i2c_dev_t *dev, pcf8591_input_conf_t conf, uint8_t channel); - -/** - * Write value to analog output - * @param[in] dev Pointer to device - * @param[in] value DAC value - */ -void pcf8591_write(i2c_dev_t *dev, uint8_t value); - - -#ifdef __cplusplus -} -#endif - -#endif /* _EXTRAS_PCF8591_H_ */ diff --git a/extras/pwm/pwm.c b/extras/pwm/pwm.c index 371518e..338dff0 100644 --- a/extras/pwm/pwm.c +++ b/extras/pwm/pwm.c @@ -12,12 +12,6 @@ #include #include -#ifdef PWM_DEBUG -#define debug(fmt, ...) printf("%s: " fmt "\n", "PWM", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - typedef struct PWMPinDefinition { uint8_t pin; @@ -33,11 +27,9 @@ typedef enum { typedef struct pwmInfoDefinition { uint8_t running; - bool output; - bool reverse; uint16_t freq; - uint16_t dutyCycle; + uint16_t dutyCicle; /* private */ uint32_t _maxLoad; @@ -51,7 +43,7 @@ typedef struct pwmInfoDefinition static PWMInfo pwmInfo; -static void IRAM frc1_interrupt_handler(void *arg) +static void frc1_interrupt_handler(void) { uint8_t i = 0; bool out = true; @@ -67,19 +59,19 @@ static void IRAM frc1_interrupt_handler(void *arg) for (; i < pwmInfo.usedPins; ++i) { - gpio_write(pwmInfo.pins[i].pin, pwmInfo.reverse ? !out : out); + gpio_write(pwmInfo.pins[i].pin, out); } timer_set_load(FRC1, load); pwmInfo._step = step; } -void pwm_init(uint8_t npins, const uint8_t* pins, uint8_t reverse) +void pwm_init(uint8_t npins, uint8_t* pins) { /* Assert number of pins is correct */ if (npins > MAX_PWM_PINS) { - debug("Incorrect number of PWM pins (%d)\n", npins); + printf("Incorrect number of PWM pins (%d)\n", npins); return; } @@ -88,7 +80,6 @@ void pwm_init(uint8_t npins, const uint8_t* pins, uint8_t reverse) pwmInfo._onLoad = 0; pwmInfo._offLoad = 0; pwmInfo._step = PERIOD_ON; - pwmInfo.reverse = reverse; /* Save pins information */ pwmInfo.usedPins = npins; @@ -106,15 +97,16 @@ void pwm_init(uint8_t npins, const uint8_t* pins, uint8_t reverse) pwm_stop(); /* set up ISRs */ - _xt_isr_attach(INUM_TIMER_FRC1, frc1_interrupt_handler, NULL); + _xt_isr_attach(INUM_TIMER_FRC1, frc1_interrupt_handler); /* Flag not running */ pwmInfo.running = 0; - debug("PWM Init"); } void pwm_set_freq(uint16_t freq) { + pwmInfo.freq = freq; + /* Stop now to avoid load being used */ if (pwmInfo.running) { @@ -122,13 +114,8 @@ void pwm_set_freq(uint16_t freq) pwmInfo.running = 1; } - if (!timer_set_frequency(FRC1, freq)) - { - pwmInfo._maxLoad = timer_get_load(FRC1); - pwmInfo.freq = freq; - debug("Frequency set at %u",pwmInfo.freq); - debug("MaxLoad is %u",pwmInfo._maxLoad); - } + timer_set_frequency(FRC1, freq); + pwmInfo._maxLoad = timer_get_load(FRC1); if (pwmInfo.running) { @@ -138,13 +125,22 @@ void pwm_set_freq(uint16_t freq) void pwm_set_duty(uint16_t duty) { - pwmInfo.dutyCycle = duty; - if (duty == 0 || duty == UINT16_MAX) - { - pwmInfo.output = (duty == UINT16_MAX); + bool output; + + pwmInfo.dutyCicle = duty; + if (duty > 0 && duty < UINT16_MAX) { + pwm_restart(); + return; + } + + // 0% and 100% duty cycle are special cases: constant output. + pwm_stop(); + pwmInfo.running = 1; + output = (duty == UINT16_MAX); + for (uint8_t i = 0; i < pwmInfo.usedPins; ++i) + { + gpio_write(pwmInfo.pins[i].pin, output); } - debug("Duty set at %u",pwmInfo.dutyCycle); - pwm_restart(); } void pwm_restart() @@ -158,38 +154,22 @@ void pwm_restart() void pwm_start() { - pwmInfo._onLoad = pwmInfo.dutyCycle * pwmInfo._maxLoad / UINT16_MAX; + pwmInfo._onLoad = pwmInfo.dutyCicle * pwmInfo._maxLoad / UINT16_MAX; pwmInfo._offLoad = pwmInfo._maxLoad - pwmInfo._onLoad; pwmInfo._step = PERIOD_ON; - if(!pwmInfo._onLoad) + // Trigger ON + uint8_t i = 0; + for (; i < pwmInfo.usedPins; ++i) { - debug("Can't set timer with low duty and frequency settings, put duty at 0"); - pwmInfo.dutyCycle = 0; + gpio_write(pwmInfo.pins[i].pin, true); } - // 0% and 100% duty cycle are special cases: constant output. - if (pwmInfo.dutyCycle > 0 && pwmInfo.dutyCycle < UINT16_MAX) - { - // Trigger ON - uint8_t i = 0; - for (; i < pwmInfo.usedPins; ++i) - { - gpio_write(pwmInfo.pins[i].pin, pwmInfo.reverse ? false : true); - } - timer_set_load(FRC1, pwmInfo._onLoad); - timer_set_reload(FRC1, false); - timer_set_interrupts(FRC1, true); - timer_set_run(FRC1, true); - } - else - { - for (uint8_t i = 0; i < pwmInfo.usedPins; ++i) - { - gpio_write(pwmInfo.pins[i].pin, pwmInfo.reverse ? !pwmInfo.output : pwmInfo.output ); - } - } - debug("PWM started"); + timer_set_load(FRC1, pwmInfo._onLoad); + timer_set_reload(FRC1, false); + timer_set_interrupts(FRC1, true); + timer_set_run(FRC1, true); + pwmInfo.running = 1; } @@ -197,10 +177,5 @@ void pwm_stop() { timer_set_interrupts(FRC1, false); timer_set_run(FRC1, false); - for (uint8_t i = 0; i < pwmInfo.usedPins; ++i) - { - gpio_write(pwmInfo.pins[i].pin, pwmInfo.reverse ? true : false); - } - debug("PWM stopped"); pwmInfo.running = 0; } diff --git a/extras/pwm/pwm.h b/extras/pwm/pwm.h index 813520b..ddf7f2b 100644 --- a/extras/pwm/pwm.h +++ b/extras/pwm/pwm.h @@ -5,56 +5,14 @@ * Copyright (C) 2015 Javier Cardona (https://github.com/jcard0na) * BSD Licensed as described in the file LICENSE */ -#ifndef EXTRAS_PWM_H_ -#define EXTRAS_PWM_H_ - #include #define MAX_PWM_PINS 8 -#ifdef __cplusplus -extern "C" { -#endif - -//Warning: Printf disturb pwm. You can use "uart_putc" instead. - -/** - * Initialize pwm - * @param npins Number of pwm pin used - * @param pins Array pointer to the pins - * @param reverse If true, the pwm work in reverse mode - */ -void pwm_init(uint8_t npins, const uint8_t* pins, uint8_t reverse); - -/** - * Set PWM frequency. If error, frequency not set - * @param freq PWM frequency value in Hertz - */ +void pwm_init(uint8_t npins, uint8_t* pins); void pwm_set_freq(uint16_t freq); - -/** - * Set Duty between 0 and UINT16_MAX - * @param duty Duty value - */ void pwm_set_duty(uint16_t duty); -/** - * Restart the pwm signal - */ void pwm_restart(); - -/** - * Start the pwm signal - */ void pwm_start(); - -/** - * Stop the pwm signal - */ void pwm_stop(); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_PWM_H_ */ diff --git a/extras/rboot-ota/ota-tftp.c b/extras/rboot-ota/ota-tftp.c index c53b771..99ebdf7 100644 --- a/extras/rboot-ota/ota-tftp.c +++ b/extras/rboot-ota/ota-tftp.c @@ -50,7 +50,7 @@ static void tftp_send_error(struct netconn *nc, int err_code, const char *err_ms void ota_tftp_init_server(int listen_port) { - xTaskCreate(tftp_task, "tftpOTATask", 512, (void *)listen_port, 2, NULL); + xTaskCreate(tftp_task, (signed char *)"tftpOTATask", 512, (void *)listen_port, 2, NULL); } err_t ota_tftp_download(const char *server, int port, const char *filename, diff --git a/extras/rboot-ota/ota-tftp.h b/extras/rboot-ota/ota-tftp.h index 3e1d985..6be63aa 100644 --- a/extras/rboot-ota/ota-tftp.h +++ b/extras/rboot-ota/ota-tftp.h @@ -3,10 +3,6 @@ #include "lwip/err.h" -#ifdef __cplusplus -extern "C" { -#endif - typedef void (*tftp_receive_cb)(size_t bytes_received); /* TFTP Server OTA Support @@ -56,8 +52,4 @@ err_t ota_tftp_download(const char *server, int port, const char *filename, #define TFTP_PORT 69 -#ifdef __cplusplus -} -#endif - #endif diff --git a/extras/rboot-ota/rboot-api.c b/extras/rboot-ota/rboot-api.c index 755e397..b9a5e57 100644 --- a/extras/rboot-ota/rboot-api.c +++ b/extras/rboot-ota/rboot-api.c @@ -239,7 +239,7 @@ typedef struct __attribute__((packed)) { bool rboot_verify_image(uint32_t initial_offset, uint32_t *image_length, const char **error_message) { uint32_t offset = initial_offset; - const char *error = NULL; + char *error = NULL; RBOOT_DEBUG("rboot_verify_image: verifying image at 0x%08x\n", initial_offset); if(offset % 4) { error = "Unaligned flash offset"; @@ -249,7 +249,7 @@ bool rboot_verify_image(uint32_t initial_offset, uint32_t *image_length, const c /* sanity limit on how far we can read */ uint32_t end_limit = offset + 0x100000; image_header_t image_header __attribute__((aligned(4))); - if(sdk_spi_flash_read(offset, (uint32_t *)&image_header, sizeof(image_header_t))) { + if(sdk_spi_flash_read(offset, &image_header, sizeof(image_header_t))) { error = "Flash fail"; goto fail; } @@ -271,7 +271,7 @@ bool rboot_verify_image(uint32_t initial_offset, uint32_t *image_length, const c { /* read section header */ section_header_t header __attribute__((aligned(4))); - if(sdk_spi_flash_read(offset, (uint32_t *)&header, sizeof(section_header_t))) { + if(sdk_spi_flash_read(offset, &header, sizeof(section_header_t))) { error = "Flash fail"; goto fail; } @@ -359,7 +359,7 @@ bool rboot_digest_image(uint32_t offset, uint32_t image_length, rboot_digest_upd { uint8_t buf[32] __attribute__((aligned(4))); for(int i = 0; i < image_length; i += sizeof(buf)) { - if(sdk_spi_flash_read(offset+i, (uint32_t *)buf, sizeof(buf))) + if(sdk_spi_flash_read(offset+i, buf, sizeof(buf))) return false; uint32_t digest_len = sizeof(buf); if(i + digest_len > image_length) diff --git a/extras/sdio/component.mk b/extras/sdio/component.mk deleted file mode 100644 index f8fd0ec..0000000 --- a/extras/sdio/component.mk +++ /dev/null @@ -1,12 +0,0 @@ -# Component makefile for extras/sdio -INC_DIRS += $(sdio_ROOT).. - -# args for passing into compile rule generation -sdio_SRC_DIR = $(sdio_ROOT) - -# Workaround unsupported CMD25 for very old SD cards -SDIO_CMD25_WORKAROUND ?= 0 - -sdio_CFLAGS = $(CFLAGS) -DSDIO_CMD25_WORKAROUND=$(SDIO_CMD25_WORKAROUND) - -$(eval $(call component_compile_rules,sdio)) \ No newline at end of file diff --git a/extras/sdio/sdio.c b/extras/sdio/sdio.c deleted file mode 100644 index 48a05da..0000000 --- a/extras/sdio/sdio.c +++ /dev/null @@ -1,479 +0,0 @@ -/* - * Hardware SPI driver for MMC/SD/SDHC cards - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include -#include -#include -#include "sdio.h" - -#define BUS 1 - -#define BV(x) (1 << (x)) - -#define MS 1000 - -#define INIT_TIMEOUT_US (2000 * MS) -#define IO_TIMEOUT_US (500 * MS) - -#define MAX_ERR_COUNT 0xff - -#define R1_IDLE_STATE 0 -#define R1_ERASE_RESET 1 -#define R1_ILLEGAL_CMD 2 -#define R1_CRC_ERR 3 -#define R1_ERASE_SEQ_ERR 4 -#define R1_ADDR_ERR 5 -#define R1_PARAM_ERR 6 -#define R1_BUSY 7 -#define R2_LOCKED 8 -#define R2_WPE_SKIP_LF 9 -#define R2_ERROR 10 -#define R2_CC_ERROR 11 -#define R2_ECC_FAILED 12 -#define R2_WP_VIOLATION 13 -#define R2_ERASE_PARAM 14 -#define R2_OUT_OF_RANGE 15 - -#define OCR_CCS 30 -#define OCR_BUSY 31 -#define OCR_SDHC (BV(OCR_CCS) | BV(OCR_BUSY)) - -#define TOKEN_SINGLE_TRAN 0xfe -#define TOKEN_MULTI_TRAN 0xfc -#define TOKEN_STOP_TRAN 0xfd -#define WRITE_RES_MASK 0x1f -#define WRITE_RES_OK 0x05 - - -#ifndef SDIO_CMD25_WORKAROUND - #define SDIO_CMD25_WORKAROUND 0 -#endif - - -#define CMD0 0x00 // GO_IDLE_STATE - Resets the SD Memory Card -#define CMD1 0x01 // SEND_OP_COND - Sends host capacity support information - // and activates the card's initialization process. -#define CMD6 0x06 // SWITCH_FUNC - Checks switchable function (mode 0) and - // switches card function (mode 1). -#define CMD8 0x08 // SEND_IF_COND - Sends SD Memory Card interface condition - // that includes host supply voltage information and asks - // the accessed card whether card can operate in supplied - // voltage range. -#define CMD9 0x09 // SEND_CSD - Asks the selected card to send its - // card-specific data (CSD register) -#define CMD10 0x0a // SEND_CID - Asks the selected card to send its card - // identification (CID register) -#define CMD12 0x0c // STOP_TRANSMISSION - Forces the card to stop transmission - // in Multiple Block Read Operation -#define CMD13 0x0d // SEND_STATUS - Asks the selected card to send its - // status register. -#define CMD16 0x10 // SET_BLOCKLEN - Sets a block length (in bytes) for all - // following block commands (read and write) of a Standard - // Capacity Card. Block length of the read and write - // commands are fixed to 512 bytes in a High Capacity Card. - // The length of LOCK_UNLOCK command is set by this command - // in both capacity cards. -#define CMD17 0x11 // READ_SINGLE_BLOCK - Reads a block of the size selected - // by the SET_BLOCKLEN command. -#define CMD18 0x12 // READ_MULTIPLE_BLOCK - Continuously transfers data blocks - // from card to host until interrupted by a - // STOP_TRANSMISSION command. -#define CMD24 0x18 // WRITE_BLOCK - Writes a block of the size selected by the - // SET_BLOCKLEN command. -#define CMD25 0x19 // WRITE_MULTIPLE_BLOCK - Continuously writes blocks of - // data until ’Stop Tran’ token is sent (instead ’Start - // Block’). -#define CMD27 0x1b // PROGRAM_CSD - Programming of the programmable bits of - // the CSD. -#define CMD28 0x1c // SET_WRITE_PROT -#define CMD29 0x1d // CLR_WRITE_PROT -#define CMD32 0x20 // ERASE_WR_BLK_START - Sets the address of the first block - // to be erased. -#define CMD33 0x21 // ERASE_WR_BLK_END - Sets the address of the last block of - // the continuous range to be erased. -#define CMD38 0x26 // ERASE - Erases all previously selected blocks. -#define CMD55 0x37 // APP_CMD - Defines to the card that the next command is - // an application specific command rather than a standard - // command. -#define CMD58 0x3a // READ_OCR - Reads the OCR register of a card. -#define CMD59 0x3b // CRC_ON_OFF - Turns the CRC option on or off. - -#define ACMD23 0x17 // SET_WR_BLK_ERASE_COUNT - Sets the number of write blocks - // to be pre-erased before writing -#define ACMD41 0x29 // SD_SEND_OP_COMD - Sends host capacity support information - // and activates the card's initialization process - -static uint8_t crc7(const uint8_t* data, uint8_t n) -{ - uint8_t crc = 0; - for (uint8_t i = 0; i < n; i++) - { - uint8_t d = data[i]; - for (uint8_t j = 0; j < 8; j++) - { - crc <<= 1; - if ((d & 0x80) ^ (crc & 0x80)) - crc ^= 0x09; - d <<= 1; - } - } - return (crc << 1) | 1; -} - -static uint16_t crc_ccitt(const uint8_t *data, size_t n) -{ - uint16_t crc = 0; - for (size_t i = 0; i < n; i++) - { - crc = (uint8_t)(crc >> 8) | (crc << 8); - crc ^= data[i]; - crc ^= (uint8_t)(crc & 0xff) >> 4; - crc ^= crc << 12; - crc ^= (crc & 0xff) << 5; - } - return crc; -} - -#define spi_cs_low(card) do { gpio_write(card->cs_pin, false); } while(0) -#define spi_cs_high(card) do { gpio_write(card->cs_pin, true); } while(0) -#define spi_read_byte() (spi_transfer_8(BUS, 0xff)) -#define spi_read_word() (((uint16_t)spi_read_byte() << 8) | spi_read_byte()) -#define spi_read_dword() (((uint32_t)spi_read_byte() << 24) | ((uint32_t)spi_read_byte() << 16) | ((uint32_t)spi_read_byte() << 8) | spi_read_byte()) -#define spi_skip_word() do { spi_read_byte(); spi_read_byte(); } while(0) -#define spi_skip_dword() do { spi_read_byte(); spi_read_byte(); spi_read_byte(); spi_read_byte(); } while(0) - -#define timeout_expired(start, len) ((uint32_t)(sdk_system_get_time() - (start)) >= (len)) - -inline static uint16_t spi_write_word(uint16_t word) -{ - return (spi_transfer_8(BUS, word >> 8) << 8) | spi_transfer_8(BUS, word); -} - -inline static void spi_read_bytes(uint8_t *dst, size_t size) -{ - for (uint8_t *offs = dst; offs < dst + size; offs ++) - *offs = spi_read_byte(); -} - -static bool wait() -{ - - uint32_t start = sdk_system_get_time(); - while (spi_read_byte() != 0xff) - if (timeout_expired(start, IO_TIMEOUT_US)) - return false; - return true; -} - -static uint8_t command(sdio_card_t *card, uint8_t cmd, uint32_t arg) -{ - uint8_t buf[6] = { - cmd | 0x40, - arg >> 24, - arg >> 16, - arg >> 8, - arg - }; - if (card->crc_enabled) - buf[5] = crc7(buf, 5); - else - buf[5] = cmd == CMD0 ? 0x95 : 0x87; - - spi_cs_low(card); - wait(); - spi_transfer(BUS, buf, NULL, 6, SPI_8BIT); - - uint8_t res; - for (uint8_t i = 0; i < MAX_ERR_COUNT; i ++) - { - res = spi_read_byte(); - if (!(res & BV(R1_BUSY))) - break; - } - - /** If the response is a "busy" type (R1B), then there’s some - * special handling that needs to be done. The card will - * output a continuous stream of zeros, so the end of the BUSY - * state is signaled by any nonzero response. - */ - if (cmd == CMD12 || cmd == CMD28 || cmd == CMD29) - { - for (uint8_t i = 0; i < MAX_ERR_COUNT; i ++) - { - res = spi_read_byte(); - if (res != 0) - { - spi_transfer_8(BUS, 0xFF); - return SDIO_ERR_NONE; - } - } - } - - return res; -} - -inline static uint8_t app_command(sdio_card_t *card, uint8_t cmd, uint32_t arg) -{ - command(card, CMD55, 0); - return command(card, cmd, arg); -} - -inline static sdio_error_t set_error(sdio_card_t *card, sdio_error_t err) -{ - card->error = err; - spi_cs_high(card); - return err; -} - -static sdio_error_t read_data(sdio_card_t *card, uint8_t *dst, size_t size) -{ - uint32_t start = sdk_system_get_time(); - - while (true) - { - if (timeout_expired(start, IO_TIMEOUT_US)) - return set_error(card, SDIO_ERR_TIMEOUT); - - uint8_t b = spi_read_byte(); - if (b == TOKEN_SINGLE_TRAN) - break; - - if (b != 0xff) - return set_error(card, SDIO_ERR_IO); - } - - spi_read_bytes(dst, size); - - uint16_t crc = spi_read_word(); - if (card->crc_enabled && crc_ccitt(dst, size) != crc) - return set_error(card, SDIO_ERR_CRC); - - return SDIO_ERR_NONE; -} - -static sdio_error_t read_register(sdio_card_t *card, uint8_t cmd, void *dst) -{ - if (command(card, cmd, 0)) - return set_error(card, SDIO_ERR_IO); - return read_data(card, dst, 16); -} - -static sdio_error_t write_data_block(sdio_card_t *card, uint8_t token, uint8_t *src) -{ - if (!wait()) - return set_error(card, SDIO_ERR_TIMEOUT); - spi_transfer_8(BUS, token); - spi_transfer(BUS, src, NULL, SDIO_BLOCK_SIZE, SPI_8BIT); - spi_write_word(card->crc_enabled ? crc_ccitt(src, SDIO_BLOCK_SIZE) : 0xffff); - - if ((spi_read_byte() & WRITE_RES_MASK) != WRITE_RES_OK) - return set_error(card, SDIO_ERR_IO); - - return SDIO_ERR_NONE; -} - -sdio_error_t sdio_init(sdio_card_t *card, uint8_t cs_pin, uint32_t high_freq_divider) -{ - card->cs_pin = cs_pin; - card->type = SDIO_TYPE_UNKNOWN; - - // setup SPI at 125kHz - spi_settings_t s = { - .mode = SPI_MODE0, - .freq_divider = SPI_FREQ_DIV_125K, - .msb = true, - .endianness = SPI_LITTLE_ENDIAN, - .minimal_pins = true - }; - spi_set_settings(BUS, &s); - gpio_enable(card->cs_pin, GPIO_OUTPUT); - - uint32_t start = sdk_system_get_time(); - - spi_cs_low(card); - spi_cs_high(card); - for (uint8_t i = 0; i < 10; i++) - spi_read_byte(); - - // Set card to the SPI idle mode - while (command(card, CMD0, 0) != BV(R1_IDLE_STATE)) - { - if (timeout_expired(start, INIT_TIMEOUT_US)) - return set_error(card, SDIO_ERR_TIMEOUT); - } - - // Enable CRC - card->crc_enabled = command(card, CMD59, 1) == BV(R1_IDLE_STATE); - - // Get card type - while (true) - { - if (command(card, CMD8, 0x1aa) & BV(R1_ILLEGAL_CMD)) - { - card->type = SDIO_TYPE_SD1; - break; - } - if ((spi_read_dword() & 0xff) == 0xaa) - { - card->type = SDIO_TYPE_SD2; - break; - } - - if (timeout_expired(start, INIT_TIMEOUT_US)) - return set_error(card, SDIO_ERR_TIMEOUT); - } - - if (card->type == SDIO_TYPE_SD1) - { - // SD1 or MMC3 - if (app_command(card, ACMD41, 0) > 1) - { - card->type = SDIO_TYPE_MMC; - while (command(card, CMD1, 0)) - if (timeout_expired(start, INIT_TIMEOUT_US)) - return set_error(card, SDIO_ERR_TIMEOUT); - } - else - { - while (app_command(card, ACMD41, 0)) - if (timeout_expired(start, INIT_TIMEOUT_US)) - return set_error(card, SDIO_ERR_TIMEOUT); - } - - if (command(card, CMD16, SDIO_BLOCK_SIZE)) - return set_error(card, SDIO_ERR_UNSUPPORTED); - } - else - { - // SD2 or SDHC - while (app_command(card, ACMD41, BV(30)) != 0) - if (timeout_expired(start, INIT_TIMEOUT_US)) - return set_error(card, SDIO_ERR_TIMEOUT); - } - // read OCR - if (command(card, CMD58, 0)) - return set_error(card, SDIO_ERR_IO); - card->ocr.data = spi_read_dword(); - - if (card->type == SDIO_TYPE_SD2 && (card->ocr.data & OCR_SDHC) == OCR_SDHC) - card->type = SDIO_TYPE_SDHC; - - spi_set_frequency_div(BUS, high_freq_divider); - - if (read_register(card, CMD10, &card->cid.data) != SDIO_ERR_NONE) - return card->error; - if (read_register(card, CMD9, &card->csd.data) != SDIO_ERR_NONE) - return card->error; - - // Card size - if (card->csd.v1.csd_ver == 0) - card->sectors = (uint32_t)(((card->csd.v1.c_size_high << 10) | (card->csd.v1.c_size_mid << 2) | card->csd.v1.c_size_low) + 1) - << (((card->csd.v1.c_size_mult_high << 1) | card->csd.v1.c_size_mult_low) + card->csd.v1.read_bl_len - 7); - else if (card->csd.v2.csd_ver == 1) - card->sectors = (((uint32_t)card->csd.v2.c_size_high << 16) + ((uint32_t)card->csd.v2.c_size_mid << 8) + card->csd.v2.c_size_low + 1) << 10; - else - return set_error(card, SDIO_ERR_UNSUPPORTED); - - return set_error(card, SDIO_ERR_NONE); -} - -sdio_error_t sdio_read_sectors(sdio_card_t *card, uint32_t sector, uint8_t *dst, uint32_t count) -{ - if (!count) - return set_error(card, SDIO_ERR_IO); - - if (card->type != SDIO_TYPE_SDHC) - sector <<= 9; - - bool multi = count > 1; - if (command(card, multi ? CMD18 : CMD17, sector)) - return set_error(card, SDIO_ERR_IO); - - while (count--) - { - if (read_data(card, dst, SDIO_BLOCK_SIZE) != SDIO_ERR_NONE) - return card->error; - dst += SDIO_BLOCK_SIZE; - } - - if (multi && command(card, CMD12, 0)) - return set_error(card, SDIO_ERR_IO); - - return set_error(card, SDIO_ERR_NONE); -} - -sdio_error_t sdio_write_sectors(sdio_card_t *card, uint32_t sector, uint8_t *src, uint32_t count) -{ - if (!count) - return set_error(card, SDIO_ERR_IO); - - if (card->type != SDIO_TYPE_SDHC) - sector <<= 9; - - bool multi = count != 1; - - // send pre-erase count - if (multi && (card->type == SDIO_TYPE_SD1 - || card->type == SDIO_TYPE_SD2 - || card->type == SDIO_TYPE_SDHC) - && app_command(card, ACMD23, count)) - { - return set_error(card, SDIO_ERR_IO); - } - -#if SDIO_CMD25_WORKAROUND - // Workaround for very old cards that don't support CMD25 - while (count--) - { - // single block - if (command(card, CMD24, sector)) - return set_error(card, SDIO_ERR_IO); - if (write_data_block(card, TOKEN_SINGLE_TRAN, src) != SDIO_ERR_NONE) - return card->error; - src += SDIO_BLOCK_SIZE; - } -#else - if (command(card, multi ? CMD25 : CMD24, sector)) - return set_error(card, SDIO_ERR_IO); - - while (count--) - { - if (write_data_block(card, multi ? TOKEN_MULTI_TRAN : TOKEN_SINGLE_TRAN, src) != SDIO_ERR_NONE) - return card->error; - src += SDIO_BLOCK_SIZE; - } - if (multi && command(card, CMD12, 0)) - return set_error(card, SDIO_ERR_IO); -#endif - - return set_error(card, SDIO_ERR_NONE); -} - -sdio_error_t sdio_erase_sectors(sdio_card_t *card, uint32_t first, uint32_t last) -{ - if (!card->csd.v1.erase_blk_en) - { - uint8_t mask = (card->csd.v1.sector_size_high << 1) | card->csd.v1.sector_size_low; - if ((first & mask) || ((last + 1) & mask)) - return set_error(card, SDIO_ERR_UNSUPPORTED); - } - - if (card->type != SDIO_TYPE_SDHC) - { - first <<= 9; - last <<= 9; - } - - if (command(card, CMD32, first) - || command(card, CMD33, last) - || command(card, CMD38, 0)) - { - return set_error(card, SDIO_ERR_IO); - } - - return set_error(card, wait() ? SDIO_ERR_NONE : SDIO_ERR_TIMEOUT); -} diff --git a/extras/sdio/sdio.h b/extras/sdio/sdio.h deleted file mode 100644 index c51200d..0000000 --- a/extras/sdio/sdio.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Hardware SPI driver for MMC/SD/SDHC cards - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_SDIO_H_ -#define _EXTRAS_SDIO_H_ - -#include -#include -#include -#include "sdio_impl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define SDIO_BLOCK_SIZE 512 - -typedef enum { - SDIO_ERR_NONE = 0, - SDIO_ERR_TIMEOUT, - SDIO_ERR_UNSUPPORTED, - SDIO_ERR_IO, - SDIO_ERR_CRC -} sdio_error_t; - -typedef enum { - SDIO_TYPE_UNKNOWN = 0, - SDIO_TYPE_MMC, - SDIO_TYPE_SD1, - SDIO_TYPE_SD2, - SDIO_TYPE_SDHC -} sdio_card_type_t; - -/** - * SD card descriptor - */ -typedef struct -{ - sdio_error_t error; //!< Last operation result - uint8_t cs_pin; //!< Chip Select GPIO pin - sdio_card_type_t type; //!< Card type - bool crc_enabled; //!< True if CRC enabled for IO - sdio_ocr_t ocr; //!< OCR register - sdio_csd_t csd; //!< CSD register - sdio_cid_t cid; //!< CID register - uint32_t sectors; //!< Card size in 512 byte sectors -} sdio_card_t; - -/** - * \brief Init SD card - * Device descriptor (registers, sectors count and so on) will be filled during initialization - * SPI_FREQ_DIV_40M is good for modern SD cards, older SD can use SPI_FREQ_DIV_20M and lower - * \param card Pointer to the device descriptor - * \param cs_pin GPIO pin used for CS - * \param high_freq_divider SPI bus frequency divider - * \return Operation result - */ -sdio_error_t sdio_init(sdio_card_t *card, uint8_t cs_pin, uint32_t high_freq_divider); - -/** - * \brief Read 512 byte sectors from SD card - * \param card Pointer to the device descriptor - * \param sector Start sector - * \param dst Receive buffer - * \param count Number of sectors to read - * \return Operation result - */ -sdio_error_t sdio_read_sectors(sdio_card_t *card, uint32_t sector, uint8_t *dst, uint32_t count); - -/** - * \brief Write 512 byte sectors to SD card - * \param card Pointer to the device descriptor - * \param sector Start sector - * \param src Data to write - * \param count Number of sectors to read - * \return Operation result - */ -sdio_error_t sdio_write_sectors(sdio_card_t *card, uint32_t sector, uint8_t *src, uint32_t count); - -/** - * \brief Erase 512 byte sectors from SD card - * \param card Pointer to the device descriptor - * \param first First sector to erase - * \param last Last sector to erase - * \return Operation result - */ -sdio_error_t sdio_erase_sectors(sdio_card_t *card, uint32_t first, uint32_t last); - - -#ifdef __cplusplus -} -#endif - -#endif /* _EXTRAS_SDIO_H_ */ diff --git a/extras/sdio/sdio_impl.h b/extras/sdio/sdio_impl.h deleted file mode 100644 index fc6a251..0000000 --- a/extras/sdio/sdio_impl.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Hardware SPI driver for MMC/SD/SDHC cards - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef _EXTRAS_SDIO_IMPL_H_ -#define _EXTRAS_SDIO_IMPL_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef union -{ - uint32_t data; - struct - { - uint16_t reserverd1 :15; - uint8_t vcc_2v7_2v8 :1; - uint8_t vcc_2v8_2v9 :1; - uint8_t vcc_2v9_3v0 :1; - uint8_t vcc_3v0_3v1 :1; - uint8_t vcc_3v1_3v2 :1; - uint8_t vcc_3v2_3v3 :1; - uint8_t vcc_3v3_3v4 :1; - uint8_t vcc_3v4_3v5 :1; - uint8_t vcc_3v5_3v6 :1; - uint8_t reserverd2 :6; - uint8_t ccs :1; - uint8_t busy :1; - } __attribute__((packed)) bits; -} sdio_ocr_t; - -typedef union -{ - uint8_t data[16]; - struct - { - uint8_t manufacturer_id; - char oem_id[2]; - char product_name[5]; - uint8_t product_rev_minor :4; - uint8_t product_rev_major :4; - uint32_t product_serial; - uint8_t reserved1 :4; - uint8_t date_year_h :4; - uint8_t date_year_l :4; - uint8_t date_month :4; - uint8_t always1 :1; - uint8_t crc :7; - } __attribute__((packed)) bits; -} sdio_cid_t; - -typedef union -{ - uint8_t data[16]; - struct - { - uint8_t reserved1 :6; - uint8_t csd_ver :2; - uint8_t taac; - uint8_t nsac; - uint8_t tran_speed; - uint8_t ccc_high; - uint8_t read_bl_len :4; - uint8_t ccc_low :4; - uint16_t c_size_high :2; - uint8_t reserved2 :2; - uint8_t dsr_imp :1; - uint8_t read_blk_misalign :1; - uint8_t write_blk_misalign :1; - uint8_t read_bl_partial :1; - uint8_t c_size_mid; - uint8_t vdd_r_curr_max :3; - uint8_t vdd_r_curr_min :3; - uint8_t c_size_low :2; - uint8_t c_size_mult_high :2; - uint8_t vdd_w_cur_max :3; - uint8_t vdd_w_curr_min :3; - uint8_t sector_size_high :6; - uint8_t erase_blk_en :1; - uint8_t c_size_mult_low :1; - uint8_t wp_grp_size :7; - uint8_t sector_size_low :1; - uint8_t write_bl_len_high :2; - uint8_t r2w_factor :3; - uint8_t reserved3 :2; - uint8_t wp_grp_enable :1; - uint8_t reserved4 :5; - uint8_t write_partial :1; - uint8_t write_bl_len_low :2; - uint8_t reserved5 :2; - uint8_t file_format :2; - uint8_t tmp_write_protect :1; - uint8_t perm_write_protect :1; - uint8_t copy :1; - uint8_t file_format_grp :1; - uint8_t always1 :1; - uint8_t crc :7; - } __attribute__((packed)) v1; - - struct - { - uint8_t reserved1 :6; - uint8_t csd_ver :2; - uint8_t taac; - uint8_t nsac; - uint8_t tran_speed; - uint8_t ccc_high; - uint8_t read_bl_len :4; - uint8_t ccc_low :4; - uint8_t reserved2 :4; - uint8_t dsr_imp :1; - uint8_t read_blk_misalign :1; - uint8_t write_blk_misalign :1; - uint8_t read_bl_partial :1; - uint16_t c_size_high :6; - uint8_t reserved3 :2; - uint8_t c_size_mid; - uint8_t c_size_low; - uint8_t sector_size_high :6; - uint8_t erase_blk_en :1; - uint8_t reserved4 :1; - uint8_t wp_grp_size :7; - uint8_t sector_size_low :1; - uint8_t write_bl_len_high :2; - uint8_t r2w_factor :3; - uint8_t reserved5 :2; - uint8_t wp_grp_enable :1; - uint8_t reserved6 :5; - uint8_t write_partial :1; - uint8_t write_bl_len_low :2; - uint8_t reserved7 :2; - uint8_t file_format :2; - uint8_t tmp_write_protect :1; - uint8_t perm_write_protect :1; - uint8_t copy :1; - uint8_t file_format_grp :1; - uint8_t always1 :1; - uint8_t crc :7; - } __attribute__((packed)) v2; -} sdio_csd_t; - - -#ifdef __cplusplus -} -#endif - - -#endif /* _EXTRAS_SDIO_IMPL_H_ */ diff --git a/extras/sht3x/README.md b/extras/sht3x/README.md deleted file mode 100644 index 21b25c9..0000000 --- a/extras/sht3x/README.md +++ /dev/null @@ -1,389 +0,0 @@ -# Driver for **SHT3x** digital **temperature and humidity sensor** - -The driver is for the usage with the ESP8266 and [esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos). - -It is also working with ESP32 and [ESP-IDF](https://github.com/espressif/esp-idf.git) using a wrapper component for ESP8266 functions, see folder ```components/esp8266_wrapper```, as well as Linux based systems using a wrapper library. - -## About the sensor - -SHT3x is a digital temperature and humidity sensor that uses an I2C interface with up to 1 MHz communication speed. It can operate with **three levels of repeatability** (low, medium and high) and in two different modes, the **single shot data acquisition mode** (or short **single shot mode**) and the **periodic data acquisition mode** (or short **periodic mode**). - -## Measurement process - -Once the SHT3x sensor is initialized, it can be used for measurements. - -### Single shot mode - -In **single shot mode**, a measurement command triggers the acquisition of **exactly one data pair**. Each data pair consists of temperature and humidity as 16-bit decimal values. - -Due to the measurement duration of up to 15 ms, the measurement process is separated into steps to avoid blocking the user task during measurements: - -1. Trigger the sensor with function ```sht3x_start_measurement``` to perform exactly one single measurement. - -2. Wait the measurement duration using function ```vTaskDelay``` until the results are available . Use either a constant duration of at least 30 ms or the duration in RTOS ticks returned from function ```sht3x_get_measurement_duration``` to wait. - -3. Fetch the results as floating point sensor values with function ```sht3x_get_results``` or as raw data with function ```sht3x_get_raw_data```. - -In the *single shot mode*, the user task has to perform all steps every time new sensor values ​​are needed. - -For convenience a high level function ```sht3x_measure``` that comprises all three steps above in only one function to perform a measurement. This function is the easiest way to use the sensor. It is most suitable for users that don't want to have the control on sensor details. - -The advantage of this mode is that the sensor can switch between successive measurements into the sleep mode, which is more energy-efficient. This is particularly useful when the measurement rate is less than 1 measurement per second. - -### Periodic mode - -In this mode, one issued measurement command yields a stream of data pairs. Each data pair consists again of temperature and humidity as 16-bit decimal values. As soon as the measurement command has been sent to the sensor, it automatically performs measurements **periodically at a rate of 0.5, 1, 2, 4 or 10 measurements per second (mps)**. The data pairs can be fetched with the same rate or a lower rate. - -As in *single shot mode*, the measurement process is separated into the following steps: - -1. Trigger the sensor with function ```sht3x_start_measurement``` with a given rate to start periodic measurements. - -2. Wait the measurement duration using function ```vTaskDelay``` until the first results are available . Use either a constant duration of at least 30 ms or the duration in RTOS ticks returned from function ```sht3x_get_measurement_duration``` to wait. - -3. Fetch the results as floating point sensor values with function ```sht3x_get_results``` or as raw data with function ```sht3x_get_raw_data```. - -However, in contrast to the *single shot mode*, steps 1 and 2 have to be executed only once. Once the measurement is started, the user task hast can simply fetch data periodically. - -**Please note:** The rate of fetching the measurement results must not be greater than the rate of periodic measurements of the sensor. Even more, it *should be less* to avoid conflicts caused by the timing tolerance of the sensor. - -## Measurement results - -Once new measurement results are available, either function ```sht3x_get_raw_data``` or function ```sht3x_get_results``` can be used to fetch the results. - -Function ```_sht3x_get_raw_data``` fetches only raw sensor data in 16-decimal format, checks the CRC checksums and stores them in an byte array of type ```sht3x_raw_data_t```. The user task then can use them directly or to call function ```sht3x_compute_values``` to compute floating point sensor values from them. - -Function ```sht3x_get_results``` combines function ```sht3x_read_raw_data``` and function - ```sht3x_compute_values``` to get the sensor values. This is the preferred approach to get sensor values by the user task. - -## Error Handling - -Most driver functions return a simple boolean value to indicate whether its execution was successful or an error happened. In the latter case, the member ```error_code``` of the sensor device data structure is set which indicates what error happened. - -There are two different error levels that are ORed into one single ```error_code```, errors in the I2C communication and errors with the SHT3x sensor itself. To test for a certain error you can AND the *error_code* with one of the error masks, ```SHT3x_I2C_ERROR_MASK``` for I2C errors and ```SHT3x_DRV_ERROR_MASK``` for other errors and then test for a certain error code. - - -## Repeatability - -The SHT3x sensor supports **three levels of repeatability** (low, medium and high). Repeatability is the variation in measurement results taken by the sensor under the same conditions, and in a short period of time. It is a measure for the noise on the physical sensor output. The higher the repeatability the smaller are changes in the output of subsequent measurements. - -The repeatability settings influences the measurement duration as well as the power consumption of the sensor. The measurement takes 3 ms with low repeatability, 5 ms with medium repeatability and 13.5 ms with high repeatability. That is, the measurement produces a noticeable delay in execution. - -While the sensor measures at the lowest repeatability, the average current consumption is 800 μA. That is, the higher the repeatability level, the longer the measurement takes and the higher the power consumption. The sensor consumes only 0.2 μA in standby mode. - -The repeatability used for a measurement is specified as parameter of function ```sht3x_start_measurement```. - - -## Usage - -Before using the SHT3x driver, function ```i2c_init``` needs to be called for each I2C interface to setup them. - -``` -#include "sht3x/sht3x.h" -... -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 - -... -i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ_100K) -... -``` - -Once I2C interfaces to be used are initialized, function ```sht3x_init_sensor``` has to be called for each SHT3x sensor to initialize the sensor and to check its availability as well as its error state. The parameters specify the I2C bus to which it is connected and its I2C slave address. - -``` -static sht3x_sensor_t* sensor; // pointer to sensor device data structure -... -if ((sensor = sht3x_init_sensor (I2C_BUS, SHT3x_ADDR_2))) -{ - ... -} -``` - -Function ```sht3x_init_sensor``` returns a pointer to the sensor device data structure or NULL in case of error. - -Finally, a user task that uses the sensor has to be created. - -``` -xTaskCreate(user_task, "user_task", 256, NULL, 2, 0); -``` - -**Please note:** To avoid concurrency situations when driver functions are used to access the sensor, for example to read data, the user task must not be created until the sensor configuration is completed. - -In **periodic mode**, the user task has to start the periodic measurement only once at the beginning of the task. After that, it has only to wait for the results of the first measurement. In the task loop itself, it simply fetches the next measurement results in each cycle. - -Thus, in this mode the user task could look like the following: - -``` -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - // Start periodic measurements with 1 measurement per second. - sht3x_start_measurement (sensor, sht3x_periodic_1mps, sht3x_high); - - // Wait until first measurement is ready (constant time of at least 30 ms - // or the duration returned from *sht3x_get_measurement_duration*). - vTaskDelay (sht3x_get_measurement_duration(sht3x_high)); - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // Get the values and do something with them. - if (sht3x_get_results (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // Wait until 2 seconds (cycle time) are over. - vTaskDelayUntil(&last_wakeup, 2000 / portTICK_PERIOD_MS); - } -} - -``` - -At the beginning of the task, the periodic measurement is started with function ```sht3x_start_measurement``` at high repeatability level and a rate of 1 measurement per second. The task is then delayed with function ```vTaskDelay``` to wait for first measurement results. The duration can be either a constant time of at least 30 ms or the duration returned by ```sht3x_get_measurement_duration```, as in the example. Inside the task loop, simply the measurement results are fetched periodically using function ```sht3x_get_results``` every 2 seconds. - -**Please note:** The rate of fetching the measurement results must be not greater than the rate of periodic measurements of the sensor, however, it *should be less* to avoid conflicts caused by the timing tolerance of the sensor. - -In **single shot mode**, the measurement has to be triggered -in each cycle. Also the waiting for measurement results is required in each cylce, before the results can be fetched. - -Thus the user task could look like the following: - -``` -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - TickType_t last_wakeup = xTaskGetTickCount(); - - uint8_t duration = sht3x_get_measurement_duration(sht3x_high); - - while (1) - { - // Trigger one measurement in single shot mode with high repeatability. - sht3x_start_measurement (sensor, sht3x_single_shot, sht3x_high); - - // Wait until measurement is ready (constant time of at least 30 ms - // or the duration returned from *sht3x_get_measurement_duration*). - vTaskDelay (duration); - - // retrieve the values and do something with them - if (sht3x_get_results (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // wait until 5 seconds are over - vTaskDelayUntil(&last_wakeup, 5000 / portTICK_PERIOD_MS); - } -} -``` - -In contrast to the *periodic mode*, the function ```sht3x_start_measurement``` is called inside the task loop to start exactly one measurement in each cycle. The task is then also delayed every time using function ```vTaskDelay``` before the results are fetched with function ```sht3x_get_results```. - -Alternatively, user task can use the high level function ```sht3x_measure``` that comprises these steps in only one function. This would simplify the user task that would then look like the following: - -``` -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // perform one measurement and do something with the results - if (sht3x_measure (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // wait until 5 seconds are over - vTaskDelayUntil(&last_wakeup, 5000 / portTICK_PERIOD_MS); - } -} -``` - - -The code could be extended by an error handling. In the event of an error, most driver functions set the ```error_code``` element of the sensor device data structure. This indicates which error has occurred. Error codes are a combination of I2C communication error codes and SHT3x sensor error codes. To test for a particular error, the *error code* has to be ANDed with one of the error masks ```SHT3x_I2C_ERROR_MASK``` or ```SHT3x_DRV_ERROR_MASK``` and then tested for a certain value. - -For example, error handling for ```sht3x_get_results``` could look like: -``` - -if (!sht3x_get_results (sensor, &values)) -{ - // error happened - - switch (sensor->error_code & SHT3x_I2C_ERROR_MASK) - { - case SHT3x_I2C_BUSY: ... - case SHT3x_I2C_READ_FAILED: ... - ... - } - switch (sensor->error_code & SHT3x_DRV_ERROR_MASK) - { - case SHT3x_MEAS_NOT_RUNNING: ... - case SHT3x_READ_RAW_DATA_FAILED: ... - case SHT3x_WRONG_CRC_TEMPERATURE: ... - ... - } -} -``` - -## Full Example - -``` -/* -- use following constants to define the example mode ----------- */ - -// #define SINGLE_SHOT_LOW_LEVEL -// #define SINGLE_SHOT_HIGH_LEVEL - -/* -- includes ----------------------------------------------------- */ - -#include "sht3x.h" - -/* -- platform dependent definitions ------------------------------- */ - -#ifdef ESP_PLATFORM // ESP32 (ESP-IDF) - -// user task stack depth for ESP32 -#define TASK_STACK_DEPTH 2048 - -#else // ESP8266 (esp-open-rtos) - -// user task stack depth for ESP8266 -#define TASK_STACK_DEPTH 256 - -#endif // ESP_PLATFORM - -// I2C interface defintions for ESP32 and ESP8266 -#define I2C_BUS 0 -#define I2C_SCL_PIN 14 -#define I2C_SDA_PIN 13 -#define I2C_FREQ I2C_FREQ_100K - -/* -- user tasks --------------------------------------------------- */ - -static sht3x_sensor_t* sensor; // sensor device data structure - -#if defined(SINGLE_SHOT_HIGH_LEVEL) -/* - * User task that triggers a measurement every 5 seconds. Due to power - * efficiency reasons it uses *single shot* mode. In this example it uses the - * high level function *sht3x_measure* to perform one measurement in each cycle. - */ -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // perform one measurement and do something with the results - if (sht3x_measure (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // wait until 5 seconds are over - vTaskDelayUntil(&last_wakeup, 5000 / portTICK_PERIOD_MS); - } -} - -#elif defined(SINGLE_SHOT_LOW_LEVEL) -/* - * User task that triggers a measurement every 5 seconds. Due to power - * efficiency reasons it uses *single shot* mode. In this example it starts the - * measurement, waits for the results and fetches the results using separate - * functions - */ -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - TickType_t last_wakeup = xTaskGetTickCount(); - - // get the measurement duration for high repeatability; - uint8_t duration = sht3x_get_measurement_duration(sht3x_high); - - while (1) - { - // Trigger one measurement in single shot mode with high repeatability. - sht3x_start_measurement (sensor, sht3x_single_shot, sht3x_high); - - // Wait until measurement is ready (constant time of at least 30 ms - // or the duration returned from *sht3x_get_measurement_duration*). - vTaskDelay (duration); - - // retrieve the values and do something with them - if (sht3x_get_results (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // wait until 5 seconds are over - vTaskDelayUntil(&last_wakeup, 5000 / portTICK_PERIOD_MS); - } -} - -#else // PERIODIC MODE -/* - * User task that fetches latest measurement results of sensor every 2 - * seconds. It starts the SHT3x in periodic mode with 1 measurements per - * second (*sht3x_periodic_1mps*). - */ -void user_task (void *pvParameters) -{ - float temperature; - float humidity; - - // Start periodic measurements with 1 measurement per second. - sht3x_start_measurement (sensor, sht3x_periodic_1mps, sht3x_high); - - // Wait until first measurement is ready (constant time of at least 30 ms - // or the duration returned from *sht3x_get_measurement_duration*). - vTaskDelay (sht3x_get_measurement_duration(sht3x_high)); - - TickType_t last_wakeup = xTaskGetTickCount(); - - while (1) - { - // Get the values and do something with them. - if (sht3x_get_results (sensor, &temperature, &humidity)) - printf("%.3f SHT3x Sensor: %.2f °C, %.2f %%\n", - (double)sdk_system_get_time()*1e-3, temperature, humidity); - - // Wait until 2 seconds (cycle time) are over. - vTaskDelayUntil(&last_wakeup, 2000 / portTICK_PERIOD_MS); - } -} -#endif - -/* -- main program ------------------------------------------------- */ - -void user_init(void) -{ - // Set UART Parameter. - uart_set_baud(0, 115200); - // Give the UART some time to settle - vTaskDelay(1); - - // Init I2C bus interfaces at which SHT3x sensors are connected - // (different busses are possible). - i2c_init(I2C_BUS, I2C_SCL_PIN, I2C_SDA_PIN, I2C_FREQ); - - // Create the sensors, multiple sensors are possible. - if ((sensor = sht3x_init_sensor (I2C_BUS, SHT3x_ADDR_2))) - { - // Create a user task that uses the sensors. - xTaskCreate(user_task, "user_task", TASK_STACK_DEPTH, NULL, 2, 0); - } - - // That's it. -} -``` - diff --git a/extras/sht3x/component.mk b/extras/sht3x/component.mk deleted file mode 100644 index 4502c4b..0000000 --- a/extras/sht3x/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/sht3x - -# expected anyone using SHT3x driver includes it as 'sht3x/sht3x.h' -INC_DIRS += $(sht3x_ROOT).. -INC_DIRS += $(sht3x_ROOT) - -# args for passing into compile rule generation -sht3x_SRC_DIR = $(sht3x_ROOT) - -$(eval $(call component_compile_rules,sht3x)) diff --git a/extras/sht3x/sht3x.c b/extras/sht3x/sht3x.c deleted file mode 100644 index 1f4b4f2..0000000 --- a/extras/sht3x/sht3x.c +++ /dev/null @@ -1,423 +0,0 @@ -/* - * Driver for Sensirion SHT3x digital temperature and humidity sensor - * connected to I2C - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * ---------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#include -#include - -#include "sht3x.h" - -#define SHT3x_STATUS_CMD 0xF32D -#define SHT3x_CLEAR_STATUS_CMD 0x3041 -#define SHT3x_RESET_CMD 0x30A2 -#define SHT3x_FETCH_DATA_CMD 0xE000 -#define SHT3x_HEATER_OFF_CMD 0x3066 - -const uint16_t SHT3x_MEASURE_CMD[6][3] = { - {0x2400,0x240b,0x2416}, // [SINGLE_SHOT][H,M,L] without clock stretching - {0x2032,0x2024,0x202f}, // [PERIODIC_05][H,M,L] - {0x2130,0x2126,0x212d}, // [PERIODIC_1 ][H,M,L] - {0x2236,0x2220,0x222b}, // [PERIODIC_2 ][H,M,L] - {0x2234,0x2322,0x2329}, // [PERIODIC_4 ][H,M,L] - {0x2737,0x2721,0x272a} }; // [PERIODIC_10][H,M,L] - -// due to the fact that ticks can be smaller than portTICK_PERIOD_MS, one and -// a half tick period added to the duration to be sure that waiting time for -// the results is long enough -#define TIME_TO_TICKS(ms) (1 + ((ms) + (portTICK_PERIOD_MS-1) + portTICK_PERIOD_MS/2 ) / portTICK_PERIOD_MS) - -#define SHT3x_MEAS_DURATION_REP_HIGH 15 -#define SHT3x_MEAS_DURATION_REP_MEDIUM 6 -#define SHT3x_MEAS_DURATION_REP_LOW 4 - -// measurement durations in us -const uint16_t SHT3x_MEAS_DURATION_US[3] = { SHT3x_MEAS_DURATION_REP_HIGH * 1000, - SHT3x_MEAS_DURATION_REP_MEDIUM * 1000, - SHT3x_MEAS_DURATION_REP_LOW * 1000 }; - -// measurement durations in RTOS ticks -const uint8_t SHT3x_MEAS_DURATION_TICKS[3] = { TIME_TO_TICKS(SHT3x_MEAS_DURATION_REP_HIGH), - TIME_TO_TICKS(SHT3x_MEAS_DURATION_REP_MEDIUM), - TIME_TO_TICKS(SHT3x_MEAS_DURATION_REP_LOW) }; - -#if defined(SHT3x_DEBUG_LEVEL_2) -#define debug(s, f, ...) printf("%s %s: " s "\n", "SHT3x", f, ## __VA_ARGS__) -#define debug_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "SHT3x", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define debug(s, f, ...) -#define debug_dev(s, f, d, ...) -#endif - -#if defined(SHT3x_DEBUG_LEVEL_1) || defined(SHT3x_DEBUG_LEVEL_2) -#define error(s, f, ...) printf("%s %s: " s "\n", "SHT3x", f, ## __VA_ARGS__) -#define error_dev(s, f, d, ...) printf("%s %s: bus %d, addr %02x - " s "\n", "SHT3x", f, d->bus, d->addr, ## __VA_ARGS__) -#else -#define error(s, f, ...) -#define error_dev(s, f, d, ...) -#endif - -/** Forward declaration of function for internal use */ - -static bool sht3x_is_measuring (sht3x_sensor_t*); -static bool sht3x_send_command (sht3x_sensor_t*, uint16_t); -static bool sht3x_read_data (sht3x_sensor_t*, uint8_t*, uint32_t); -static bool sht3x_get_status (sht3x_sensor_t*, uint16_t*); -static bool sht3x_reset (sht3x_sensor_t*); - -static uint8_t crc8 (uint8_t data[], int len); - -/** ------------------------------------------------ */ - -bool sht3x_init_driver() -{ - return true; -} - - -sht3x_sensor_t* sht3x_init_sensor(uint8_t bus, uint8_t addr) -{ - sht3x_sensor_t* dev; - - if ((dev = malloc (sizeof(sht3x_sensor_t))) == NULL) - return NULL; - - // inititalize sensor data structure - dev->bus = bus; - dev->addr = addr; - dev->mode = sht3x_single_shot; - dev->meas_start_time = 0; - dev->meas_started = false; - dev->meas_first = false; - - uint16_t status; - - // try to reset the sensor - if (!sht3x_reset(dev)) - { - debug_dev ("could not reset the sensor", __FUNCTION__, dev); - } - - // check again the status after clear status command - if (!sht3x_get_status(dev, &status)) - { - error_dev ("could not get sensor status", __FUNCTION__, dev); - free(dev); - return NULL; - } - - debug_dev ("sensor initialized", __FUNCTION__, dev); - return dev; -} - - -bool sht3x_measure (sht3x_sensor_t* dev, float* temperature, float* humidity) -{ - if (!dev || (!temperature && !humidity)) return false; - - if (!sht3x_start_measurement (dev, sht3x_single_shot, sht3x_high)) - return false; - - vTaskDelay (SHT3x_MEAS_DURATION_TICKS[sht3x_high]); - - sht3x_raw_data_t raw_data; - - if (!sht3x_get_raw_data (dev, raw_data)) - return false; - - return sht3x_compute_values (raw_data, temperature, humidity); -} - - -bool sht3x_start_measurement (sht3x_sensor_t* dev, sht3x_mode_t mode, sht3x_repeat_t repeat) -{ - if (!dev) return false; - - dev->error_code = SHT3x_OK; - dev->mode = mode; - dev->repeatability = repeat; - - // start measurement according to selected mode and return an duration estimate - if (!sht3x_send_command(dev, SHT3x_MEASURE_CMD[mode][repeat])) - { - error_dev ("could not send start measurment command", __FUNCTION__, dev); - dev->error_code |= SHT3x_SEND_MEAS_CMD_FAILED; - return false; - } - - dev->meas_start_time = sdk_system_get_time (); - dev->meas_started = true; - dev->meas_first = true; - - return true; -} - - -uint8_t sht3x_get_measurement_duration (sht3x_repeat_t repeat) -{ - return SHT3x_MEAS_DURATION_TICKS[repeat]; // in RTOS ticks -} - - -bool sht3x_get_raw_data(sht3x_sensor_t* dev, sht3x_raw_data_t raw_data) -{ - if (!dev || !raw_data) return false; - - dev->error_code = SHT3x_OK; - - if (!dev->meas_started) - { - debug_dev ("measurement is not started", __FUNCTION__, dev); - dev->error_code = SHT3x_MEAS_NOT_STARTED; - return sht3x_is_measuring (dev); - } - - if (sht3x_is_measuring(dev)) - { - error_dev ("measurement is still running", __FUNCTION__, dev); - dev->error_code = SHT3x_MEAS_STILL_RUNNING; - return false; - } - - // send fetch command in any periodic mode (mode > 0) before read raw data - if (dev->mode && !sht3x_send_command(dev, SHT3x_FETCH_DATA_CMD)) - { - debug_dev ("send fetch command failed", __FUNCTION__, dev); - dev->error_code |= SHT3x_SEND_FETCH_CMD_FAILED; - return false; - } - - // read raw data - if (!sht3x_read_data(dev, raw_data, sizeof(sht3x_raw_data_t))) - { - error_dev ("read raw data failed", __FUNCTION__, dev); - dev->error_code |= SHT3x_READ_RAW_DATA_FAILED; - return false; - } - - // reset first measurement flag - dev->meas_first = false; - - // reset measurement started flag in single shot mode - if (dev->mode == sht3x_single_shot) - dev->meas_started = false; - - // check temperature crc - if (crc8(raw_data,2) != raw_data[2]) - { - error_dev ("CRC check for temperature data failed", __FUNCTION__, dev); - dev->error_code |= SHT3x_WRONG_CRC_TEMPERATURE; - return false; - } - - // check humidity crc - if (crc8(raw_data+3,2) != raw_data[5]) - { - error_dev ("CRC check for humidity data failed", __FUNCTION__, dev); - dev->error_code |= SHT3x_WRONG_CRC_HUMIDITY; - return false; - } - - return true; -} - - -bool sht3x_compute_values (sht3x_raw_data_t raw_data, float* temperature, float* humidity) -{ - if (!raw_data) return false; - - if (temperature) - *temperature = ((((raw_data[0] * 256.0) + raw_data[1]) * 175) / 65535.0) - 45; - - if (humidity) - *humidity = ((((raw_data[3] * 256.0) + raw_data[4]) * 100) / 65535.0); - - return true; -} - - -bool sht3x_get_results (sht3x_sensor_t* dev, float* temperature, float* humidity) -{ - if (!dev || (!temperature && !humidity)) return false; - - sht3x_raw_data_t raw_data; - - if (!sht3x_get_raw_data (dev, raw_data)) - return false; - - return sht3x_compute_values (raw_data, temperature, humidity); -} - -/* Functions for internal use only */ - -static bool sht3x_is_measuring (sht3x_sensor_t* dev) -{ - if (!dev) return false; - - dev->error_code = SHT3x_OK; - - // not running if measurement is not started at all or - // it is not the first measurement in periodic mode - if (!dev->meas_started || !dev->meas_first) - return false; - - // not running if time elapsed is greater than duration - uint32_t elapsed = sdk_system_get_time() - dev->meas_start_time; - - return elapsed < SHT3x_MEAS_DURATION_US[dev->repeatability]; -} - - -static bool sht3x_send_command(sht3x_sensor_t* dev, uint16_t cmd) -{ - if (!dev) return false; - - uint8_t data[2] = { cmd >> 8, cmd & 0xff }; - - debug_dev ("send command MSB=%02x LSB=%02x", __FUNCTION__, dev, data[0], data[1]); - - int err = i2c_slave_write(dev->bus, dev->addr, 0, data, 2); - - if (err) - { - dev->error_code |= (err == -EBUSY) ? SHT3x_I2C_BUSY : SHT3x_I2C_SEND_CMD_FAILED; - error_dev ("i2c error %d on write command %02x", __FUNCTION__, dev, err, cmd); - return false; - } - - return true; -} - -static bool sht3x_read_data(sht3x_sensor_t* dev, uint8_t *data, uint32_t len) -{ - if (!dev) return false; - int err = i2c_slave_read(dev->bus, dev->addr, 0, data, len); - - if (err) - { - dev->error_code |= (err == -EBUSY) ? SHT3x_I2C_BUSY : SHT3x_I2C_READ_FAILED; - error_dev ("error %d on read %d byte", __FUNCTION__, dev, err, len); - return false; - } - -# ifdef SHT3x_DEBUG_LEVEL_2 - printf("SHT3x %s: bus %d, addr %02x - read following bytes: ", - __FUNCTION__, dev->bus, dev->addr); - for (int i=0; i < len; i++) - printf("%02x ", data[i]); - printf("\n"); -# endif // ifdef SHT3x_DEBUG_LEVEL_2 - - return true; -} - - -static bool sht3x_reset (sht3x_sensor_t* dev) -{ - if (!dev) return false; - - debug_dev ("soft-reset triggered", __FUNCTION__, dev); - - dev->error_code = SHT3x_OK; - - // send reset command - if (!sht3x_send_command(dev, SHT3x_RESET_CMD)) - { - dev->error_code |= SHT3x_SEND_RESET_CMD_FAILED; - return false; - } - // wait for small amount of time needed (according to datasheet 0.5ms) - vTaskDelay (100 / portTICK_PERIOD_MS); - - uint16_t status; - - // check the status after reset - if (!sht3x_get_status(dev, &status)) - return false; - - return true; -} - - -static bool sht3x_get_status (sht3x_sensor_t* dev, uint16_t* status) -{ - if (!dev || !status) return false; - - dev->error_code = SHT3x_OK; - - uint8_t data[3]; - - if (!sht3x_send_command(dev, SHT3x_STATUS_CMD) || !sht3x_read_data(dev, data, 3)) - { - dev->error_code |= SHT3x_SEND_STATUS_CMD_FAILED; - return false; - } - - *status = data[0] << 8 | data[1]; - debug_dev ("status=%02x", __FUNCTION__, dev, *status); - return true; -} - - -const uint8_t g_polynom = 0x31; - -static uint8_t crc8 (uint8_t data[], int len) -{ - // initialization value - uint8_t crc = 0xff; - - // iterate over all bytes - for (int i=0; i < len; i++) - { - crc ^= data[i]; - - for (int i = 0; i < 8; i++) - { - bool xor = crc & 0x80; - crc = crc << 1; - crc = xor ? crc ^ g_polynom : crc; - } - } - - return crc; -} - - diff --git a/extras/sht3x/sht3x.h b/extras/sht3x/sht3x.h deleted file mode 100644 index bf602c5..0000000 --- a/extras/sht3x/sht3x.h +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Driver for Sensirion SHT3x digital temperature and humidity sensor - * connected to I2C - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * ---------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -#ifndef __SHT3x_H__ -#define __SHT3x_H__ - -// Uncomment to enable debug output -// #define SHT3x_DEBUG_LEVEL_1 // only error messages -// #define SHT3x_DEBUG_LEVEL_2 // error and debug messages - -#include "stdint.h" -#include "stdbool.h" - -#include "sht3x_platform.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// definition of possible I2C slave addresses -#define SHT3x_ADDR_1 0x44 // ADDR pin connected to GND/VSS (default) -#define SHT3x_ADDR_2 0x45 // ADDR pin connected to VDD - -// definition of error codes -#define SHT3x_OK 0 -#define SHT3x_NOK -1 - -#define SHT3x_I2C_ERROR_MASK 0x000f -#define SHT3x_DRV_ERROR_MASK 0xfff0 - -// error codes for I2C interface ORed with SHT3x error codes -#define SHT3x_I2C_READ_FAILED 1 -#define SHT3x_I2C_SEND_CMD_FAILED 2 -#define SHT3x_I2C_BUSY 3 - -// SHT3x driver error codes OR ed with error codes for I2C interface -#define SHT3x_MEAS_NOT_STARTED (1 << 8) -#define SHT3x_MEAS_ALREADY_RUNNING (2 << 8) -#define SHT3x_MEAS_STILL_RUNNING (3 << 8) -#define SHT3x_READ_RAW_DATA_FAILED (4 << 8) - -#define SHT3x_SEND_MEAS_CMD_FAILED (5 << 8) -#define SHT3x_SEND_RESET_CMD_FAILED (6 << 8) -#define SHT3x_SEND_STATUS_CMD_FAILED (7 << 8) -#define SHT3x_SEND_FETCH_CMD_FAILED (8 << 8) - -#define SHT3x_WRONG_CRC_TEMPERATURE (9 << 8) -#define SHT3x_WRONG_CRC_HUMIDITY (10 << 8) - -#define SHT3x_RAW_DATA_SIZE 6 - -/** - * @brief raw data type - */ -typedef uint8_t sht3x_raw_data_t [SHT3x_RAW_DATA_SIZE]; - - -/** - * @brief possible measurement modes - */ -typedef enum { - sht3x_single_shot = 0, // one single measurement - sht3x_periodic_05mps, // periodic with 0.5 measurements per second (mps) - sht3x_periodic_1mps, // periodic with 1 measurements per second (mps) - sht3x_periodic_2mps, // periodic with 2 measurements per second (mps) - sht3x_periodic_4mps, // periodic with 4 measurements per second (mps) - sht3x_periodic_10mps // periodic with 10 measurements per second (mps) -} sht3x_mode_t; - - -/** - * @brief possible repeatability modes - */ -typedef enum { - sht3x_high = 0, - sht3x_medium, - sht3x_low -} sht3x_repeat_t; - -/** - * @brief SHT3x sensor device data structure type - */ -typedef struct { - - uint32_t error_code; // combined error codes - - uint8_t bus; // I2C bus at which sensor is connected - uint8_t addr; // I2C slave address of the sensor - - sht3x_mode_t mode; // used measurement mode - sht3x_repeat_t repeatability; // used repeatability - - bool meas_started; // indicates whether measurement started - uint32_t meas_start_time; // measurement start time in us - bool meas_first; // first measurement in periodic mode - -} sht3x_sensor_t; - - -/** - * @brief Initialize a SHT3x sensor - * - * The function creates a data structure describing the sensor and - * initializes the sensor device. - * - * @param bus I2C bus at which the sensor is connected - * @param addr I2C slave address of the sensor - * @return pointer to sensor data structure, or NULL on error - */ -sht3x_sensor_t* sht3x_init_sensor (uint8_t bus, uint8_t addr); - - -/** - * @brief High level measurement function - * - * For convenience this function comprises all three steps to perform - * one measurement in only one function: - * - * 1. Starts a measurement in single shot mode with high reliability - * 2. Waits using *vTaskDelay* until measurement results are available - * 3. Returns the results in kind of floating point sensor values - * - * This function is the easiest way to use the sensor. It is most suitable - * for users that don't want to have the control on sensor details. - * - * Please note: The function delays the calling task up to 30 ms to wait for - * the the measurement results. This might lead to problems when the function - * is called from a software timer callback function. - * - * @param dev pointer to sensor device data structure - * @param temperature returns temperature in degree Celsius - * @param humidity returns humidity in percent - * @return true on success, false on error - */ -bool sht3x_measure (sht3x_sensor_t* dev, float* temperature, float* humidity); - - -/** - * @brief Start the measurement in single shot or periodic mode - * - * The function starts the measurement either in *single shot mode* - * (exactly one measurement) or *periodic mode* (periodic measurements) - * with given repeatabilty. - * - * In the *single shot mode*, this function has to be called for each - * measurement. The measurement duration has to be waited every time - * before the results can be fetched. - * - * In the *periodic mode*, this function has to be called only once. Also - * the measurement duration has to be waited only once until the first - * results are available. After this first measurement, the sensor then - * automatically performs all subsequent measurements. The rate of periodic - * measurements can be 10, 4, 2, 1 or 0.5 measurements per second (mps). - * - * Please note: Due to inaccuracies in timing of the sensor, the user task - * should fetch the results at a lower rate. The rate of the periodic - * measurements is defined by the parameter *mode*. - * - * @param dev pointer to sensor device data structure - * @param mode measurement mode, see type *sht3x_mode_t* - * @param repeat repeatability, see type *sht3x_repeat_t* - * @return true on success, false on error - */ -bool sht3x_start_measurement (sht3x_sensor_t* dev, sht3x_mode_t mode, - sht3x_repeat_t repeat); - -/** - * @brief Get the duration of a measurement in RTOS ticks. - * - * The function returns the duration in RTOS ticks required by the sensor to - * perform a measurement for the given repeatability. Once a measurement is - * started with function *sht3x_start_measurement* the user task can use this - * duration in RTOS ticks directly to wait with function *vTaskDelay* until - * the measurement results can be fetched. - * - * Please note: The duration only depends on repeatability level. Therefore, - * it can be considered as constant for a repeatibility. - * - * @param repeat repeatability, see type *sht3x_repeat_t* - * @return measurement duration given in RTOS ticks - */ -uint8_t sht3x_get_measurement_duration (sht3x_repeat_t repeat); - - -/** - * @brief Read measurement results from sensor as raw data - * - * The function read measurement results from the sensor, checks the CRC - * checksum and stores them in the byte array as following. - * - * data[0] = Temperature MSB - * data[1] = Temperature LSB - * data[2] = Temperature CRC - * data[3] = Pressure MSB - * data[4] = Pressure LSB - * data[2] = Pressure CRC - * - * In case that there are no new data that can be read, the function fails. - * - * @param dev pointer to sensor device data structure - * @param raw_data byte array in which raw data are stored - * @return true on success, false on error - */ -bool sht3x_get_raw_data(sht3x_sensor_t* dev, sht3x_raw_data_t raw_data); - - -/** - * @brief Computes sensor values from raw data - * - * @param raw_data byte array that contains raw data - * @param temperature returns temperature in degree Celsius - * @param humidity returns humidity in percent - * @return true on success, false on error - */ -bool sht3x_compute_values (sht3x_raw_data_t raw_data, - float* temperature, float* humidity); - - -/** - * @brief Get measurement results in form of sensor values - * - * The function combines function *sht3x_read_raw_data* and function - * *sht3x_compute_values* to get the measurement results. - * - * In case that there are no results that can be read, the function fails. - * - * @param dev pointer to sensor device data structure - * @param temperature returns temperature in degree Celsius - * @param humidity returns humidity in percent - * @return true on success, false on error - */ -bool sht3x_get_results (sht3x_sensor_t* dev, - float* temperature, float* humidity); - - -#ifdef __cplusplus -} -#endif - -#endif /* __SHT3x_H__ */ diff --git a/extras/sht3x/sht3x_platform.h b/extras/sht3x/sht3x_platform.h deleted file mode 100644 index 64eadaf..0000000 --- a/extras/sht3x/sht3x_platform.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Driver for Sensirion SHT3x digital temperature and humidity sensor - * connected to I2C - * - * This driver is for the usage with the ESP8266 and FreeRTOS (esp-open-rtos) - * [https://github.com/SuperHouse/esp-open-rtos]. It is also working with ESP32 - * and ESP-IDF [https://github.com/espressif/esp-idf.git] as well as Linux - * based systems using a wrapper library for ESP8266 functions. - * - * ---------------------------------------------------------------- - * - * The BSD License (3-clause license) - * - * Copyright (c) 2017 Gunar Schorcht (https://github.com/gschorcht) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of the copyright holder 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. - */ - -/** - * Platform file: platform specific definitions, includes and functions - */ - -#ifndef __SHT3x_PLATFORM_H__ -#define __SHT3x_PLATFORM_H__ - -#if !defined(ESP_OPEN_RTOS) -#define ESP_OPEN_RTOS 1 -#endif - -#ifdef ESP_OPEN_RTOS // ESP8266 - -// platform specific includes - -#include "FreeRTOS.h" -#include "task.h" - -#include "espressif/esp_common.h" -#include "espressif/sdk_private.h" - -#include "esp/uart.h" -#include "i2c/i2c.h" - -#endif // ESP_OPEN_RTOS - -#endif // __SHT3x_PLATFORM_H__ diff --git a/extras/sntp/component.mk b/extras/sntp/component.mk index dc0ee5c..155537a 100644 --- a/extras/sntp/component.mk +++ b/extras/sntp/component.mk @@ -5,9 +5,4 @@ INC_DIRS += $(sntp_ROOT) # args for passing into compile rule generation sntp_SRC_DIR = $(sntp_ROOT) -# For SNTP logging, either supply own SNTP_LOGD -# or define SNTP_LOGD_WITH_PRINTF (see sntp_fun.c) - -# sntp_CFLAGS = $(CFLAGS) -DSNTP_LOGD_WITH_PRINTF - $(eval $(call component_compile_rules,sntp)) diff --git a/extras/sntp/sntp.c b/extras/sntp/sntp.c index 26ac110..5654075 100644 --- a/extras/sntp/sntp.c +++ b/extras/sntp/sntp.c @@ -36,9 +36,9 @@ #include "lwip/opt.h" -#include +#include "sntp.h" -#include "lwip/timeouts.h" +#include "lwip/timers.h" #include "lwip/udp.h" #include "lwip/dns.h" #include "lwip/ip_addr.h" @@ -136,12 +136,12 @@ #define SNTP_STARTUP_DELAY 0 #endif -/** SNTP receive timeout - in seconds +/** SNTP receive timeout - in milliseconds * Also used as retry timeout - this shouldn't be too low. * Default is 3 seconds. */ #ifndef SNTP_RECV_TIMEOUT -#define SNTP_RECV_TIMEOUT 3 +#define SNTP_RECV_TIMEOUT 3000 #endif /** SNTP update delay - in milliseconds @@ -384,8 +384,8 @@ sntp_request(void *arg) /* bind to local address */ if (lwip_bind(sock, (struct sockaddr *)&local, sizeof(local)) == 0) { /* set recv timeout */ - const struct timeval timeout = { SNTP_RECV_TIMEOUT, 0 }; - setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); + timeout = SNTP_RECV_TIMEOUT; + lwip_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)); /* prepare SNTP request */ sntp_initialize_request(&sntpmsg); @@ -511,7 +511,7 @@ sntp_try_next_server(void* arg) /** UDP recv callback for the sntp pcb */ static void -sntp_recv(void *arg, struct udp_pcb* pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) +sntp_recv(void *arg, struct udp_pcb* pcb, struct pbuf *p, ip_addr_t *addr, u16_t port) { u8_t mode; u8_t stratum; @@ -597,7 +597,7 @@ sntp_recv(void *arg, struct udp_pcb* pcb, struct pbuf *p, const ip_addr_t *addr, * @param server_addr resolved IP address of the SNTP server */ static void -sntp_send_request(const ip_addr_t *server_addr) +sntp_send_request(ip_addr_t *server_addr) { struct pbuf* p; p = pbuf_alloc(PBUF_TRANSPORT, SNTP_MSG_LEN, PBUF_RAM); @@ -608,10 +608,8 @@ sntp_send_request(const ip_addr_t *server_addr) sntp_initialize_request(sntpmsg); /* send request */ udp_sendto(sntp_pcb, p, server_addr, SNTP_PORT); - pbuf_free(p); - /* set up receive timeout: try next server or retry on timeout */ - sys_timeout((u32_t)SNTP_RECV_TIMEOUT * 1000, sntp_try_next_server, NULL); + sys_timeout((u32_t)SNTP_RECV_TIMEOUT, sntp_try_next_server, NULL); #if SNTP_CHECK_RESPONSE >= 1 /* save server address to verify it in sntp_recv */ ip_addr_set(&sntp_last_server_address, server_addr); @@ -629,7 +627,7 @@ sntp_send_request(const ip_addr_t *server_addr) * DNS found callback when using DNS names as server address. */ static void -sntp_dns_found(const char* hostname, const ip_addr_t *ipaddr, void *arg) +sntp_dns_found(const char* hostname, ip_addr_t *ipaddr, void *arg) { LWIP_UNUSED_ARG(hostname); LWIP_UNUSED_ARG(arg); @@ -690,7 +688,7 @@ sntp_request(void *arg) void sntp_init(void) { - const char *def_addr[] = {SNTP_SERVER_ADDRESS}; + char *def_addr[] = {SNTP_SERVER_ADDRESS}; sntp_num_servers = 0; sntp_set_servers(def_addr, sizeof(def_addr) / sizeof(char*)); @@ -715,7 +713,7 @@ sntp_init(void) /** * Set the NTP servers */ -int sntp_set_servers(const char *server_url[], int num_servers) +int sntp_set_servers(char *server_url[], int num_servers) { int i; @@ -730,8 +728,10 @@ int sntp_set_servers(const char *server_url[], int num_servers) /* Allocate memory and copy servers */ for (i = 0; i < num_servers; i++) { - sntp_server_addresses[i] = strdup(server_url[i]); - if (!sntp_server_addresses[i]) { + sntp_server_addresses[i] = malloc(strlen(server_url[i])); + if (sntp_server_addresses[i]) { + strcpy(sntp_server_addresses[i], server_url[i]); + } else { sntp_num_servers = i; return -2; } diff --git a/extras/sntp/sntp.h b/extras/sntp/sntp.h index 4fde486..dd25cf0 100644 --- a/extras/sntp/sntp.h +++ b/extras/sntp/sntp.h @@ -52,7 +52,7 @@ void sntp_set_timezone(const struct timezone *tz); * Returns 0 if OK, less than 0 if error. * NOTE: This function must NOT be called before sntp_initialize(). */ -int sntp_set_servers(const char *server_url[], int num_servers); +int sntp_set_servers(char *server_url[], int num_servers); /* * Sets the update delay in ms. If requested value is less than 15s, diff --git a/extras/sntp/sntp_fun.c b/extras/sntp/sntp_fun.c index 66956ca..7aaca20 100644 --- a/extras/sntp/sntp_fun.c +++ b/extras/sntp/sntp_fun.c @@ -8,21 +8,10 @@ #include #include #include -#include #include #include #include -#include - - -#ifdef SNTP_LOGD_WITH_PRINTF -#define SNTP_LOGD(FMT, ...) printf(FMT "\n", ##__VA_ARGS__) -#endif - -#ifndef SNTP_LOGD -#define SNTP_LOGD(...) -#define SKIP_DIAGNOSTICS -#endif +#include "sntp.h" #define TIMER_COUNT RTC.COUNTER @@ -31,14 +20,9 @@ #define sntp_base (*((uint64_t*)RTC.SCRATCH)) // Timer value when base was obtained #define tim_ref (RTC.SCRATCH[2]) -// Calibration value -- ( microseconds / RTC tick ) * 2^12 +// Calibration value #define cal (RTC.SCRATCH[3]) -#ifndef SKIP_DIAGNOSTICS -// Keep the last time SNTP updated the time -static struct timeval last_update_time = {0, 0}; -#endif - // Timezone related data. static struct timezone stz; @@ -66,7 +50,7 @@ void sntp_initialize(const struct timezone *tz) { } sntp_base = 0; // To avoid div by 0 exceptions if requesting time before SNTP config - cal = sdk_system_rtc_clock_cali_proc(); + cal = 1; tim_ref = TIMER_COUNT; sntp_init(); } @@ -79,7 +63,7 @@ static inline void sntp_check_timer_wrap(uint32_t current_value) { // Timer wrap has occurred, compensate by subtracting 2^32 to ref. sntp_base -= 1LLU<<32; // DEBUG - SNTP_LOGD("SNTP RTC counter wrapped"); + printf("\nTIMER WRAPPED!\n"); } } @@ -93,9 +77,9 @@ inline time_t sntp_get_rtc_time(int32_t *us) { // Check for timer wrap sntp_check_timer_wrap(tim); base = sntp_base + tim - tim_ref; - secs = (base * cal) / (1000000U<<12); + secs = base * cal / (1000000U<<12); if (us) { - *us = ((base * cal) % (1000000U<<12)) >>12; + *us = base * cal % (1000000U<<12); } return secs; } @@ -113,53 +97,16 @@ int _gettimeofday_r(struct _reent *r, struct timeval *tp, void *tzp) { // Update RTC timer. Called by SNTP module each time it receives an update. void sntp_update_rtc(time_t t, uint32_t us) { + // Apply daylight and timezone correction + t += (stz.tz_minuteswest + stz.tz_dsttime * 60) * 60; + // DEBUG: Compute and print drift + int64_t sntp_current = sntp_base + TIMER_COUNT - tim_ref; + int64_t sntp_correct = (((uint64_t)us + (uint64_t)t * 1000000U)<<12) / cal; + printf("\nRTC Adjust: drift = %ld ticks, cal = %d\n", (time_t)(sntp_correct - sntp_current), cal); - uint32_t now_rtc = TIMER_COUNT; - - // Apply daylight and timezone correction - t += (stz.tz_minuteswest + stz.tz_dsttime * 60) * 60; - -#ifndef SKIP_DIAGNOSTICS - - int64_t sntp_reference_time, local_clock_time, clock_difference; - struct timeval this_update_time, elapsed_since_update; - double ppm; - - // Calculate in diagnostics in microseconds - sntp_reference_time = (uint64_t)us + (uint64_t)t * 1000000U; - local_clock_time = ((sntp_base + now_rtc - tim_ref) * cal) / (1U<<12); - clock_difference = sntp_reference_time - local_clock_time; - - this_update_time.tv_sec = t; - this_update_time.tv_usec = us; - - timersub(&this_update_time, &last_update_time, &elapsed_since_update); - - // If over a day since last update, don't trust the last_update_time - if (elapsed_since_update.tv_sec < 24 * 60 * 60 ) { - ppm = ((double)clock_difference / - ((double)elapsed_since_update.tv_sec * 1000000 - + elapsed_since_update.tv_usec)) - * 1000000; - SNTP_LOGD("SNTP RTC adjust: %0.3Lf s; %0.3f ppm over %0.3f s; cal: %u\n", - ((long double)clock_difference)/1000000, - ppm, - (double)elapsed_since_update.tv_sec - + ((double)elapsed_since_update.tv_usec)/1000000, - cal); - } else { - SNTP_LOGD("SNTP RTC adjust: %0.3Lf s; cal: %u\n", - ((long double)clock_difference)/1000000, cal); - } - - last_update_time.tv_sec = t; - last_update_time.tv_usec = us; - -#endif // SKIP_DIAGNOSTICS - + tim_ref = TIMER_COUNT; cal = sdk_system_rtc_clock_cali_proc(); - tim_ref = now_rtc; - sntp_base = (((uint64_t)us + (uint64_t)t * 1000000U) <<12) / cal; + sntp_base = (((uint64_t)us + (uint64_t)t * 1000000U)<<12) / cal; } diff --git a/extras/softuart/LICENSE b/extras/softuart/LICENSE deleted file mode 100644 index 104c838..0000000 --- a/extras/softuart/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2016 Bernhard Guillon -Copyright (c) 2015 plieningerweb - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/extras/softuart/component.mk b/extras/softuart/component.mk deleted file mode 100644 index 9517cf2..0000000 --- a/extras/softuart/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/softuart - -# expected anyone using this driver includes it as 'softuart/softuart.h' -INC_DIRS += $(softuart_ROOT).. - -# args for passing into compile rule generation -softuart_SRC_DIR = $(softuart_ROOT) - -$(eval $(call component_compile_rules,softuart)) - diff --git a/extras/softuart/softuart.c b/extras/softuart/softuart.c deleted file mode 100644 index 7cfc0fc..0000000 --- a/extras/softuart/softuart.c +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Softuart - * - * Copyright (C) 2017 Ruslan V. Uss - * Copyright (C) 2016 Bernhard Guillon - * - * This code is based on Softuart from here [1] and reworked to - * fit into esp-open-rtos. - * - * it fits my needs to read the GY-GPS6MV2 module with 9600 8n1 - * - * Original Copyright: - * Copyright (c) 2015 plieningerweb - * - * MIT Licensed as described in the file LICENSE - * - * 1 https://github.com/plieningerweb/esp8266-software-uart - */ - -#include "softuart.h" -#include -#include -#include -#include - -//#define SOFTUART_DEBUG - -#ifdef SOFTUART_DEBUG -#define debug(fmt, ...) printf("%s: " fmt "\n", "SOFTUART", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -typedef struct -{ - char receive_buffer[SOFTUART_MAX_RX_BUFF]; - uint8_t receive_buffer_tail; - uint8_t receive_buffer_head; - uint8_t buffer_overflow; -} softuart_buffer_t; - -typedef struct -{ - uint8_t rx_pin, tx_pin; - uint32_t baudrate; - volatile softuart_buffer_t buffer; - uint16_t bit_time; -} softuart_t; - -static softuart_t uarts[SOFTUART_MAX_UARTS] = { { 0 } }; - -inline static int8_t find_uart_by_rx(uint8_t rx_pin) -{ - for (uint8_t i = 0; i < SOFTUART_MAX_UARTS; i++) - if (uarts[i].baudrate && uarts[i].rx_pin == rx_pin) return i; - - return -1; -} - -// GPIO interrupt handler -static void handle_rx(uint8_t gpio_num) -{ - // find uart - int8_t uart_no = find_uart_by_rx(gpio_num); - if (uart_no < 0) return; - - softuart_t *uart = uarts + uart_no; - - // Disable interrupt - gpio_set_interrupt(gpio_num, GPIO_INTTYPE_NONE, handle_rx); - - // Wait till start bit is half over so we can sample the next one in the center - sdk_os_delay_us(uart->bit_time / 2); - - // Now sample bits - uint8_t d = 0; - uint32_t start_time = 0x7FFFFFFF & sdk_system_get_time(); - - for (uint8_t i = 0; i < 8; i++) - { - while ((0x7FFFFFFF & sdk_system_get_time()) < (start_time + (uart->bit_time * (i + 1)))) - { - // If system timer overflow, escape from while loop - if ((0x7FFFFFFF & sdk_system_get_time()) < start_time) - break; - } - // Shift d to the right - d >>= 1; - - // Read bit - if (gpio_read(uart->rx_pin)) - { - // If high, set msb of 8bit to 1 - d |= 0x80; - } - } - - // Store byte in buffer - // If buffer full, set the overflow flag and return - uint8_t next = (uart->buffer.receive_buffer_tail + 1) % SOFTUART_MAX_RX_BUFF; - if (next != uart->buffer.receive_buffer_head) - { - // save new data in buffer: tail points to where byte goes - uart->buffer.receive_buffer[uart->buffer.receive_buffer_tail] = d; // save new byte - uart->buffer.receive_buffer_tail = next; - } - else - { - uart->buffer.buffer_overflow = 1; - } - - // Wait for stop bit - sdk_os_delay_us(uart->bit_time); - - // Done, reenable interrupt - gpio_set_interrupt(uart->rx_pin, GPIO_INTTYPE_EDGE_NEG, handle_rx); -} - -static bool check_uart_no(uint8_t uart_no) -{ - if (uart_no >= SOFTUART_MAX_UARTS) - { - debug("Invalid uart number %d, %d max", uart_no, SOFTUART_MAX_UARTS); - return false; - } - - return true; -} - -static bool check_uart_enabled(uint8_t uart_no) -{ - if (!uarts[uart_no].baudrate) - { - debug("Uart %d is disabled", uart_no); - return false; - } - - return true; -} - -/////////////////////////////////////////////////////////////////////////////// -/// Public -/////////////////////////////////////////////////////////////////////////////// - -bool softuart_open(uint8_t uart_no, uint32_t baudrate, uint8_t rx_pin, uint8_t tx_pin) -{ - // do some checks - if (!check_uart_no(uart_no)) return false; - if (baudrate == 0) - { - debug("Invalid baudrate"); - return false; - } - for (uint8_t i = 0; i < SOFTUART_MAX_UARTS; i++) - if (uarts[i].baudrate && i != uart_no - && (uarts[i].rx_pin == rx_pin || uarts[i].tx_pin == tx_pin || uarts[i].rx_pin == tx_pin || uarts[i].tx_pin == rx_pin)) - { - debug("Cannot share pins between uarts"); - return false; - } - - softuart_close(uart_no); - - softuart_t *uart = uarts + uart_no; - - uart->baudrate = baudrate; - uart->rx_pin = rx_pin; - uart->tx_pin = tx_pin; - - // Calculate bit_time - uart->bit_time = (1000000 / baudrate); - if (((100000000 / baudrate) - (100 * uart->bit_time)) > 50) uart->bit_time++; - - // Setup Rx - gpio_enable(rx_pin, GPIO_INPUT); - gpio_set_pullup(rx_pin, true, false); - - // Setup Tx - gpio_enable(tx_pin, GPIO_OUTPUT); - gpio_set_pullup(tx_pin, true, false); - gpio_write(tx_pin, 1); - - // Setup the interrupt handler to get the start bit - gpio_set_interrupt(rx_pin, GPIO_INTTYPE_EDGE_NEG, handle_rx); - - sdk_os_delay_us(1000); // TODO: not sure if it really needed - - return true; -} - -bool softuart_close(uint8_t uart_no) -{ - if (!check_uart_no(uart_no)) return false; - softuart_t *uart = uarts + uart_no; - - if (!uart->baudrate) return true; - - // Remove interrupt - gpio_set_interrupt(uart->rx_pin, GPIO_INTTYPE_NONE, NULL); - // Mark as unused - uart->baudrate = 0; - - return true; -} - -bool softuart_put(uint8_t uart_no, char c) -{ - if (!check_uart_no(uart_no)) return false; - if (!check_uart_enabled(uart_no)) return false; - softuart_t *uart = uarts + uart_no; - - uint32_t start_time = 0x7FFFFFFF & sdk_system_get_time(); - gpio_write(uart->tx_pin, 0); - - for (uint8_t i = 0; i <= 8; i++) - { - while ((0x7FFFFFFF & sdk_system_get_time()) < (start_time + (uart->bit_time * (i + 1)))) - { - if ((0x7FFFFFFF & sdk_system_get_time()) < start_time) - break; - } - gpio_write(uart->tx_pin, c & (1 << i)); - } - - while ((0x7FFFFFFF & sdk_system_get_time()) < (start_time + (uart->bit_time * 9))) - { - if ((0x7FFFFFFF & sdk_system_get_time()) < start_time) - break; - } - gpio_write(uart->tx_pin, 1); - sdk_os_delay_us(uart->bit_time * 6); - - return true; -} - -bool softuart_puts(uint8_t uart_no, const char *s) -{ - while (*s) - { - if (!softuart_put(uart_no, *s++)) - return false; - } - - return true; -} - -bool softuart_available(uint8_t uart_no) -{ - if (!check_uart_no(uart_no)) return false; - if (!check_uart_enabled(uart_no)) return false; - softuart_t *uart = uarts + uart_no; - - return (uart->buffer.receive_buffer_tail + SOFTUART_MAX_RX_BUFF - uart->buffer.receive_buffer_head) % SOFTUART_MAX_RX_BUFF; -} - -uint8_t softuart_read(uint8_t uart_no) -{ - if (!check_uart_no(uart_no)) return 0; - if (!check_uart_enabled(uart_no)) return 0; - softuart_t *uart = uarts + uart_no; - - // Empty buffer? - if (uart->buffer.receive_buffer_head == uart->buffer.receive_buffer_tail) return 0; - - // Read from "head" - uint8_t d = uart->buffer.receive_buffer[uart->buffer.receive_buffer_head]; // grab next byte - uart->buffer.receive_buffer_head = (uart->buffer.receive_buffer_head + 1) % SOFTUART_MAX_RX_BUFF; - return d; -} - diff --git a/extras/softuart/softuart.h b/extras/softuart/softuart.h deleted file mode 100644 index e5fa8f6..0000000 --- a/extras/softuart/softuart.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Softuart for esp-open-rtos - * - * Copyright (C) 2017 Ruslan V. Uss - * Copyright (C) 2016 Bernhard Guillon - * - * This code is based on Softuart from here [1] and reworked to - * fit into esp-open-rtos. For now only the RX part is ported. - * Also the configuration of the pin is for now hardcoded. - * - * it fits my needs to read the GY-GPS6MV2 module with 9600 8n1 - * - * Original Copyright: - * Copyright (c) 2015 plieningerweb - * - * MIT Licensed as described in the file LICENSE - * - * 1 https://github.com/plieningerweb/esp8266-software-uart - */ -#ifndef SOFTUART_H_ -#define SOFTUART_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -#ifndef SOFTUART_MAX_UARTS - #define SOFTUART_MAX_UARTS 2 -#endif - -#ifndef SOFTUART_MAX_RX_BUFF - #define SOFTUART_MAX_RX_BUFF 64 //!< Must be power of two: 2, 4, 8, 16 etc. -#endif - -/** - * Initialize software uart and setup interrupt handler - * @param uart_no Software uart index, 0..SOFTUART_MAX_UARTS - * @param baudrate Baudrate, e.g. 9600, 19200, etc - * @param rx_pin GPIO pin number for RX - * @param tx_pin GPIO pin number for TX - * @return true if no errors occured otherwise false - */ -bool softuart_open(uint8_t uart_no, uint32_t baudrate, uint8_t rx_pin, uint8_t tx_pin); - -/** - * Deinitialize software uart - * @param uart_no Software uart index, 0..SOFTUART_MAX_UARTS - * @return true if no errors occured otherwise false - */ -bool softuart_close(uint8_t uart_no); - -/** - * Put char to software uart - * @param uart_no Software uart index, 0..SOFTUART_MAX_UARTS - * @param c Char - * @return true if no errors occured otherwise false - */ -bool softuart_put(uint8_t uart_no, char c); - -/** - * Put string to software uart - * @param uart_no Software uart index, 0..SOFTUART_MAX_UARTS - * @param s Null-terminated string - * @return true if no errors occured otherwise false - */ -bool softuart_puts(uint8_t uart_no, const char *s); - -/** - * Check if data is available - * @param uart_no Software uart index, 0..SOFTUART_MAX_UARTS - * @return true if data is available otherwise false - */ -bool softuart_available(uint8_t uart_no); - -/** - * Read current byte from internal buffer if available. - * - * NOTE: This call is non blocking. - * NOTE: You have to check softuart_available() first. - * @param uart_no Software uart index, 0..SOFTUART_MAX_UARTS - * @return current byte if available otherwise 0 - */ -uint8_t softuart_read(uint8_t uart_no); - -#ifdef __cplusplus -} -#endif - -#endif /* SOFTUART_H_ */ diff --git a/extras/spiffs/README.md b/extras/spiffs/README.md deleted file mode 100644 index 4bc694e..0000000 --- a/extras/spiffs/README.md +++ /dev/null @@ -1,165 +0,0 @@ -# SPIFFS ESP8266 File system - -This component adds file system support for ESP8266. File system of choice -for ESP8266 is [SPIFFS](https://github.com/pellepl/spiffs). -It was specifically designed to use with SPI NOR flash on embedded systems. -The main advantage of SPIFFS is wear leveling, which prolongs life time -of a flash memory. - -## Features - - * SPIFFS - embedded file system for NOR flash memory. - * POSIX file operations. - * Static files upload to ESP8266 file system within build process. - * SPIFFS singleton or run-time configuration. Selectable by -`SPIFFS_SINGLETON` variable in Makefile. - -## Usage - -### Configuration - -SPIFFS can be configured in two ways. As a SINGLETON with configuration -parameters provided at compile-time. And during run-time. The default -configuration is a SINGLETON. The desired configuration can be selected in -program's Makefile with variable `SPIFFS_SINGLETON = 0`. - -If SPIFFS is configured in runtime (SPIFFS_SINGLETON = 0) the method -`esp_spiffs_init` accepts two arguments: address and size. Where address -and size is the location of SPIFFS region in SPI flash and its size. - -In order to use file system in a project the following steps should be made: - * Add SPIFFS component in a project Makefile `EXTRA_COMPONENTS = extras/spiffs` - * Specify your flash size in the Makefile `FLASH_SIZE = 32` - * Specify the start address of file system region on the flash memory -`SPIFFS_BASE_ADDR = 0x200000`. It still needed even for `SPIFFS_SINGLETON = 0` -in order to flash SPIFFS image to the right location during `make flash`. -If no SPIFFS image is going to be flashed this variable can be omitted. - * If you want to upload files to a file system during flash process specify -the directory with files `$(eval $(call make_spiffs_image,files))` - -In the end the Makefile should look like: - -``` -PROGRAM=spiffs_example -EXTRA_COMPONENTS = extras/spiffs -FLASH_SIZE = 32 - -SPIFFS_BASE_ADDR = 0x200000 -SPIFFS_SIZE = 0x100000 - -include ../../common.mk - -$(eval $(call make_spiffs_image,files)) -``` - -Note: Macro call to prepare SPIFFS image for flashing should go after -`include common.mk` - -### Files upload - -To upload files to a file system during flash process the following macro is -used: - -``` -$(eval $(call make_spiffs_image,files)) -``` - -It enables the build of a helper utility **mkspiffs**. This utility creates -an SPIFFS image with files in the specified directory. - -The SPIFFS image is created during build stage, after `make` is run. -The image is flashed into the device along with firmware during flash stage, -after `make flash` is run. - -**mkspiffs** utility uses the same SPIFFS source code and the same -configuration as ESP8266. So the created image should always be compatible -with SPIFFS on a device. - -The build process will catch any changes in files directory and rebuild the -image each time `make` is run. - -## Example - -### Mount - -``` -esp_spiffs_init(); // allocate memory buffers -if (esp_spiffs_mount() != SPIFFS_OK) { - printf("Error mounting SPIFFS\n"); -} -``` - -### Format - -Formatting SPIFFS is a little bit awkward. Before formatting SPIFFS must be -mounted and unmounted. -``` -esp_spiffs_init(); -if (esp_spiffs_mount() != SPIFFS_OK) { - printf("Error mount SPIFFS\n"); -} -SPIFFS_unmount(&fs); // FS must be unmounted before formating -if (SPIFFS_format(&fs) == SPIFFS_OK) { - printf("Format complete\n"); -} else { - printf("Format failed\n"); -} -esp_spiffs_mount(); -``` - -### POSIX read - -Nothing special here. - -``` -const int buf_size = 0xFF; -uint8_t buf[buf_size]; - -int fd = open("test.txt", O_RDONLY); -if (fd < 0) { - printf("Error opening file\n"); -} - -read(fd, buf, buf_size); -printf("Data: %s\n", buf); - -close(fd); -``` - -### SPIFFS read - -SPIFFS interface is intended to be as close to POSIX as possible. - -``` -const int buf_size = 0xFF; -uint8_t buf[buf_size]; - -spiffs_file fd = SPIFFS_open(&fs, "other.txt", SPIFFS_RDONLY, 0); -if (fd < 0) { - printf("Error opening file\n"); -} - -SPIFFS_read(&fs, fd, buf, buf_size); -printf("Data: %s\n", buf); - -SPIFFS_close(&fs, fd); -``` - -### POSIX write - -``` -uint8_t buf[] = "Example data, written by ESP8266"; - -int fd = open("other.txt", O_WRONLY|O_CREAT, 0); -if (fd < 0) { - printf("Error opening file\n"); -} - -write(fd, buf, sizeof(buf)); - -close(fd); -``` - -## Resources - -[SPIFFS](https://github.com/pellepl/spiffs) diff --git a/extras/spiffs/component.mk b/extras/spiffs/component.mk deleted file mode 100644 index c5c60c3..0000000 --- a/extras/spiffs/component.mk +++ /dev/null @@ -1,72 +0,0 @@ -# Component makefile for extras/spiffs - -# If spiffs is configured as SINGLETON it must be configured in compile time. -SPIFFS_SINGLETON ?= 1 - -SPIFFS_BASE_ADDR ?= 0x300000 -SPIFFS_SIZE ?= 0x100000 -SPIFFS_LOG_PAGE_SIZE ?= 256 -SPIFFS_LOG_BLOCK_SIZE ?= 8192 - - -spiffs_CFLAGS += -DSPIFFS_SINGLETON=$(SPIFFS_SINGLETON) -ifeq ($(SPIFFS_SINGLETON),1) -# Singleton configuration -spiffs_CFLAGS += -DSPIFFS_BASE_ADDR=$(SPIFFS_BASE_ADDR) -spiffs_CFLAGS += -DSPIFFS_SIZE=$(SPIFFS_SIZE) -endif - -spiffs_CFLAGS += -DSPIFFS_LOG_PAGE_SIZE=$(SPIFFS_LOG_PAGE_SIZE) -spiffs_CFLAGS += -DSPIFFS_LOG_BLOCK_SIZE=$(SPIFFS_LOG_BLOCK_SIZE) - -# Main program needs SPIFFS definitions because it includes spiffs_config.h -PROGRAM_CFLAGS += $(spiffs_CFLAGS) - -spiffs_CFLAGS := $(CFLAGS) $(spiffs_CFLAGS) - -INC_DIRS += $(spiffs_ROOT) -INC_DIRS += $(spiffs_ROOT)spiffs/src - -# args for passing into compile rule generation -spiffs_SRC_DIR = $(spiffs_ROOT)spiffs/src -spiffs_SRC_DIR += $(spiffs_ROOT) - -# Create an SPIFFS image of specified directory and flash it with -# the rest of the firmware. -# -# Argumens: -# $(1) - directory with files which go into spiffs image -# -# Example: -# $(eval $(call make_spiffs_image,files)) -define make_spiffs_image -SPIFFS_IMAGE = $(addprefix $(FIRMWARE_DIR),spiffs.bin) -MKSPIFFS_DIR = $(ROOT)/extras/spiffs/mkspiffs -MKSPIFFS = $$(MKSPIFFS_DIR)/mkspiffs -SPIFFS_FILE_LIST = $(shell find $(1)) - -all: $$(SPIFFS_IMAGE) - -clean: clean_spiffs_img clean_mkspiffs - -$$(SPIFFS_IMAGE): $$(MKSPIFFS) $$(SPIFFS_FILE_LIST) Makefile - $$< -D $(1) -f $$@ -s $(SPIFFS_SIZE) -p $(SPIFFS_LOG_PAGE_SIZE) \ - -b $(SPIFFS_LOG_BLOCK_SIZE) - -# Rebuild SPIFFS if Makefile is changed, where SPIFF_SIZE is defined -$$(spiffs_ROOT)spiffs_config.h: Makefile - $$(Q) touch $$@ - -$$(MKSPIFFS): - $$(MAKE) -C $$(MKSPIFFS_DIR) - -clean_spiffs_img: - $$(Q) rm -f $$(SPIFFS_IMAGE) - -clean_mkspiffs: - $$(Q) $$(MAKE) -C $$(MKSPIFFS_DIR) clean - -SPIFFS_ESPTOOL_ARGS = $(SPIFFS_BASE_ADDR) $$(SPIFFS_IMAGE) -endef - -$(eval $(call component_compile_rules,spiffs)) diff --git a/extras/spiffs/esp_spiffs.c b/extras/spiffs/esp_spiffs.c deleted file mode 100644 index a541595..0000000 --- a/extras/spiffs/esp_spiffs.c +++ /dev/null @@ -1,188 +0,0 @@ -/** - * ESP8266 SPIFFS HAL configuration. - * - * Part of esp-open-rtos - * Copyright (c) 2016 sheinz https://github.com/sheinz - * MIT License - */ -#include "esp_spiffs.h" -#include "spiffs.h" -#include -#include -#include -#include - -spiffs fs; - -typedef struct { - void *buf; - uint32_t size; -} fs_buf_t; - -static spiffs_config config = {0}; -static fs_buf_t work_buf = {0}; -static fs_buf_t fds_buf = {0}; -static fs_buf_t cache_buf = {0}; - -/** - * Number of file descriptors opened at the same time - */ -#define ESP_SPIFFS_FD_NUMBER 5 - -#define ESP_SPIFFS_CACHE_PAGES 5 - -static s32_t esp_spiffs_read(u32_t addr, u32_t size, u8_t *dst) -{ - if (!spiflash_read(addr, dst, size)) { - return SPIFFS_ERR_INTERNAL; - } - - return SPIFFS_OK; -} - -static s32_t esp_spiffs_write(u32_t addr, u32_t size, u8_t *src) -{ - if (!spiflash_write(addr, src, size)) { - return SPIFFS_ERR_INTERNAL; - } - - return SPIFFS_OK; -} - -static s32_t esp_spiffs_erase(u32_t addr, u32_t size) -{ - uint32_t sectors = size / SPI_FLASH_SECTOR_SIZE; - - for (uint32_t i = 0; i < sectors; i++) { - if (!spiflash_erase_sector(addr + (SPI_FLASH_SECTOR_SIZE * i))) { - return SPIFFS_ERR_INTERNAL; - } - } - - return SPIFFS_OK; -} - -#if SPIFFS_SINGLETON == 1 -void esp_spiffs_init() -{ -#else -void esp_spiffs_init(uint32_t addr, uint32_t size) -{ - config.phys_addr = addr; - config.phys_size = size; - - config.phys_erase_block = SPIFFS_ESP_ERASE_SIZE; - config.log_page_size = SPIFFS_LOG_PAGE_SIZE; - config.log_block_size = SPIFFS_LOG_BLOCK_SIZE; - - // Initialize fs.cfg so the following helper functions work correctly - memcpy(&fs.cfg, &config, sizeof(spiffs_config)); -#endif - work_buf.size = 2 * SPIFFS_LOG_PAGE_SIZE; - fds_buf.size = SPIFFS_buffer_bytes_for_filedescs(&fs, ESP_SPIFFS_FD_NUMBER); - cache_buf.size= SPIFFS_buffer_bytes_for_cache(&fs, ESP_SPIFFS_CACHE_PAGES); - - work_buf.buf = malloc(work_buf.size); - fds_buf.buf = malloc(fds_buf.size); - cache_buf.buf = malloc(cache_buf.size); - - config.hal_read_f = esp_spiffs_read; - config.hal_write_f = esp_spiffs_write; - config.hal_erase_f = esp_spiffs_erase; - - config.fh_ix_offset = SPIFFS_FILEHDL_OFFSET; - -} - -void esp_spiffs_deinit() -{ - free(work_buf.buf); - work_buf.buf = 0; - - free(fds_buf.buf); - fds_buf.buf = 0; - - free(cache_buf.buf); - cache_buf.buf = 0; -} - -int32_t esp_spiffs_mount() -{ - printf("SPIFFS memory, work_buf_size=%d, fds_buf_size=%d, cache_buf_size=%d\n", - work_buf.size, fds_buf.size, cache_buf.size); - - int32_t err = SPIFFS_mount(&fs, &config, (uint8_t*)work_buf.buf, - (uint8_t*)fds_buf.buf, fds_buf.size, - cache_buf.buf, cache_buf.size, 0); - - if (err != SPIFFS_OK) { - printf("Error spiffs mount: %d\n", err); - } - - return err; -} - -// This implementation replaces implementation in core/newlib_syscals.c -long _write_filesystem_r(struct _reent *r, int fd, const char *ptr, int len ) -{ - return SPIFFS_write(&fs, (spiffs_file)fd, (char*)ptr, len); -} - -// This implementation replaces implementation in core/newlib_syscals.c -long _read_filesystem_r( struct _reent *r, int fd, char *ptr, int len ) -{ - return SPIFFS_read(&fs, (spiffs_file)fd, ptr, len); -} - -int _open_r(struct _reent *r, const char *pathname, int flags, int mode) -{ - uint32_t spiffs_flags = SPIFFS_RDONLY; - - if (flags & O_CREAT) spiffs_flags |= SPIFFS_CREAT; - if (flags & O_APPEND) spiffs_flags |= SPIFFS_APPEND; - if (flags & O_TRUNC) spiffs_flags |= SPIFFS_TRUNC; - if (flags & O_RDONLY) spiffs_flags |= SPIFFS_RDONLY; - if (flags & O_WRONLY) spiffs_flags |= SPIFFS_WRONLY; - if (flags & O_EXCL) spiffs_flags |= SPIFFS_EXCL; - /* if (flags & O_DIRECT) spiffs_flags |= SPIFFS_DIRECT; no support in newlib */ - - return SPIFFS_open(&fs, pathname, spiffs_flags, mode); -} - -// This implementation replaces implementation in core/newlib_syscals.c -int _close_filesystem_r(struct _reent *r, int fd) -{ - return SPIFFS_close(&fs, (spiffs_file)fd); -} - -int _unlink_r(struct _reent *r, const char *path) -{ - return SPIFFS_remove(&fs, path); -} - -int _fstat_r(struct _reent *r, int fd, void *buf) -{ - spiffs_stat s; - struct stat *sb = (struct stat*)buf; - - int result = SPIFFS_fstat(&fs, (spiffs_file)fd, &s); - sb->st_size = s.size; - - return result; -} - -int _stat_r(struct _reent *r, const char *pathname, void *buf) -{ - spiffs_stat s; - struct stat *sb = (struct stat*)buf; - - int result = SPIFFS_stat(&fs, pathname, &s); - sb->st_size = s.size; - - return result; -} - -off_t _lseek_r(struct _reent *r, int fd, off_t offset, int whence) -{ - return SPIFFS_lseek(&fs, (spiffs_file)fd, offset, whence); -} diff --git a/extras/spiffs/esp_spiffs.h b/extras/spiffs/esp_spiffs.h deleted file mode 100644 index faae31b..0000000 --- a/extras/spiffs/esp_spiffs.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * ESP8266 SPIFFS HAL configuration. - * - * Part of esp-open-rtos - * Copyright (c) 2016 sheinz https://github.com/sheinz - * MIT License - */ -#ifndef __ESP_SPIFFS_H__ -#define __ESP_SPIFFS_H__ - -#include "spiffs.h" - -extern spiffs fs; - -#if SPIFFS_SINGLETON == 1 -/** - * Prepare for SPIFFS mount. - * - * The function allocates all the necessary buffers. - */ -void esp_spiffs_init(); -#else -/** - * Prepare for SPIFFS mount. - * - * The function allocates all the necessary buffers. - * - * @param addr Base address for spiffs in flash memory. - * @param size File sistem size. - */ -void esp_spiffs_init(uint32_t addr, uint32_t size); -#endif - - -/** - * Free all memory buffers that were used by SPIFFS. - * - * The function should be called after SPIFFS unmount if the file system is not - * going to need any more. - */ -void esp_spiffs_deinit(); - -/** - * Mount SPIFFS. - * - * esp_spiffs_init must be called first. - * - * Return SPIFFS return code. - */ -int32_t esp_spiffs_mount(); - -#endif // __ESP_SPIFFS_H__ diff --git a/extras/spiffs/mkspiffs/.gitignore b/extras/spiffs/mkspiffs/.gitignore deleted file mode 100644 index 55864af..0000000 --- a/extras/spiffs/mkspiffs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/mkspiffs -/*.o diff --git a/extras/spiffs/mkspiffs/Makefile b/extras/spiffs/mkspiffs/Makefile deleted file mode 100644 index 1ca497c..0000000 --- a/extras/spiffs/mkspiffs/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -# explicitly use gcc as in xtensa build environment it might be set to -# cross compiler -CC = gcc - -SOURCES := spiffs_hydrogen.c -SOURCES += spiffs_cache.c -SOURCES += spiffs_gc.c -SOURCES += spiffs_check.c -SOURCES += spiffs_nucleus.c -SOURCES += mkspiffs.c - -OBJECTS := $(SOURCES:.c=.o) - -VPATH = ../spiffs/src - -CFLAGS += -I.. -CFLAGS += -DSPIFFS_SINGLETON=0 - -all: mkspiffs - -$(OBJECTS): $(SOURCES) - -$(OBJECTS): ../spiffs_config.h - -mkspiffs: $(OBJECTS) - -clean: - @rm -f mkspiffs - @rm -f *.o - -.PHONY: all clean diff --git a/extras/spiffs/mkspiffs/README.md b/extras/spiffs/mkspiffs/README.md deleted file mode 100644 index 57a50d0..0000000 --- a/extras/spiffs/mkspiffs/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# mkspiffs Create spiffs image - -mkspiffs is a command line utility to create an image of SPIFFS in order -to write to flash. - -## Usage - -mkspiffs will be built automatically if you include the following line in your -makefile: - -``` -$(eval $(call make_spiffs_image,files)) -``` - -where *files* is the directory with files that should go into SPIFFS image. - -mkspiffs can be built separately. Simply run `make` in the mkspiffs directory. - -To manually generate SPIFFS image from a directory SPIFFS configuration must be -provided as command line arguments. - -Arguments: - * -D Directory with files that will be put in SPIFFS image. - * -f SPIFFS image file name. - * -s SPIFFS size. - * -p Logical page size. - * -b Logical block size. - -All arguments are mandatory. - -For example: - -``` -mkspiffs -D ./my_files -f spiffs.img -s 0x10000 -p 256 -b 8192 -``` diff --git a/extras/spiffs/mkspiffs/mkspiffs.c b/extras/spiffs/mkspiffs/mkspiffs.c deleted file mode 100644 index 9ed6a7d..0000000 --- a/extras/spiffs/mkspiffs/mkspiffs.c +++ /dev/null @@ -1,298 +0,0 @@ -/** - * The MIT License (MIT) - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "spiffs_config.h" -#include "../spiffs/src/spiffs.h" - -static spiffs fs; -static void *image = 0; -static void *work_buf = 0; -static void *fds_buf = 0; -static void *cache_buf = 0; - -typedef struct { - uint32_t fs_size; - uint32_t log_page_size; - uint32_t log_block_size; -} fs_config_t; - -static void print_usage(const char *prog_name, const char *error_msg) -{ - if (error_msg) { - printf("Error: %s\n", error_msg); - } - printf("Usage: "); - printf("%s [-D directory] [-f image-name] [-s size]\n", prog_name); - printf("\t[-p page-size] [-b block-size]\n\n"); - printf("Example:\n"); - printf("\t%s -D ./my_files -f spiffs.img -s 0x10000 -p 256 -b 8192\n\n", - prog_name); -} - -static s32_t _read_data(u32_t addr, u32_t size, u8_t *dst) -{ - memcpy(dst, (uint8_t*)image + addr, size); - return SPIFFS_OK; -} - -static s32_t _write_data(u32_t addr, u32_t size, u8_t *src) -{ - uint32_t i; - uint8_t *dst = image + addr; - - for (i = 0; i < size; i++) { - dst[i] &= src[i]; // mimic NOR flash, flip only 1 to 0 - } - return SPIFFS_OK; -} - -static s32_t _erase_data(u32_t addr, u32_t size) -{ - memset((uint8_t*)image + addr, 0xFF, size); - return SPIFFS_OK; -} - -static bool init_spiffs(bool allocate_mem, const fs_config_t *fs_config) -{ - spiffs_config config = {0}; - printf("Initializing SPIFFS, size=%d\n", fs_config->fs_size); - - config.hal_read_f = _read_data; - config.hal_write_f = _write_data; - config.hal_erase_f = _erase_data; - - config.phys_addr = 0; - config.phys_size = fs_config->fs_size; - config.log_page_size = fs_config->log_page_size; - config.log_block_size = fs_config->log_block_size; - config.phys_erase_block = SPIFFS_ESP_ERASE_SIZE; - - // initialize fs.cfg so the following helper functions work correctly - memcpy(&fs.cfg, &config, sizeof(spiffs_config)); - - int workBufSize = 2 * fs_config->log_page_size; - int fdsBufSize = SPIFFS_buffer_bytes_for_filedescs(&fs, 5); - int cacheBufSize = SPIFFS_buffer_bytes_for_cache(&fs, 5); - - if (allocate_mem) { - image = malloc(fs_config->fs_size); - work_buf = malloc(workBufSize); - fds_buf = malloc(fdsBufSize); - cache_buf = malloc(cacheBufSize); - printf("spiffs memory, work_buf_size=%d, fds_buf_size=%d, cache_buf_size=%d\n", - workBufSize, fdsBufSize, cacheBufSize); - } - - int32_t err = SPIFFS_mount(&fs, &config, work_buf, fds_buf, fdsBufSize, - cache_buf, cacheBufSize, 0); - - return err == SPIFFS_OK; -} - -static bool format_spiffs() -{ - SPIFFS_unmount(&fs); - - if (SPIFFS_format(&fs) == SPIFFS_OK) { - printf("Format complete\n"); - } else { - printf("Failed to format SPIFFS\n"); - return false; - } - - return true; -} - -static void spiffs_free() -{ - free(image); - image = NULL; - - free(work_buf); - work_buf = NULL; - - free(fds_buf); - fds_buf = NULL; - - free(cache_buf); - cache_buf = NULL; -} - -static bool process_file(const char *src_file, const char *dst_file) -{ - int fd; - const int buf_size = 256; - uint8_t buf[buf_size]; - int data_len; - - fd = open(src_file, O_RDONLY); - if (fd < 0) { - printf("Error openning file: %s\n", src_file); - } - - spiffs_file out_fd = SPIFFS_open(&fs, dst_file, - SPIFFS_O_CREAT | SPIFFS_O_WRONLY, 0); - while ((data_len = read(fd, buf, buf_size)) != 0) { - if (SPIFFS_write(&fs, out_fd, buf, data_len) != data_len) { - printf("Error writing to SPIFFS file\n"); - break; - } - } - SPIFFS_close(&fs, out_fd); - close(fd); - return true; -} - -static bool process_directory(const char *direcotry) -{ - DIR *dp; - struct dirent *ep; - char path[256], *filename; - - dp = opendir(direcotry); - if (dp != NULL) { - while ((ep = readdir(dp)) != 0) { - if (!strcmp(ep->d_name, ".") || - !strcmp(ep->d_name, "..")) { - continue; - } - if(ep->d_type == DT_DIR) { - char *new_dir_name = malloc(strlen(direcotry) + strlen(ep->d_name) + 2); - sprintf(new_dir_name, "%s/%s", direcotry, ep->d_name); - process_directory(new_dir_name); - free(new_dir_name); - continue; - } - if (ep->d_type != DT_REG) { - continue; // not a regular file - } - sprintf(path, "%s/%s", direcotry, ep->d_name); - filename = strchr(path, '/'); - filename = filename ? &filename[1] : path; - - printf("Processing file source %s, dest: %s\n", path, filename); - if (!process_file(path, filename)) { - printf("Error processing file\n"); - break; - } - } - closedir(dp); - } else { - printf("Error reading direcotry: %s\n", direcotry); - } - return true; -} - -static bool write_image(const char *out_file, const fs_config_t *fs_config) -{ - int fd; - int size = fs_config->fs_size; - uint8_t *p = (uint8_t*)image; - fd = open(out_file, O_WRONLY | O_CREAT | O_TRUNC, 0666); - if (fd < 0) { - printf("Error creating file %s\n", out_file); - return false; - } - - printf("Writing image to file: %s\n", out_file); - - while (size != 0) { - write(fd, p, fs_config->log_page_size); - p += fs_config->log_page_size; - size -= fs_config->log_page_size; - } - - close(fd); - return true; -} - -int main(int argc, char *argv[]) -{ - int result = 0; - int option = 0; - fs_config_t fs_config = {0}; - char *image_file_name = 0; - char *directory = 0; - - while ((option = getopt(argc, argv, "D:f:s:p:b:e:")) != -1) { - switch (option) { - case 'D': // directory - directory = optarg; - break; - case 'f': // image file name - image_file_name = optarg; - break; - case 's': // file system size - fs_config.fs_size = (uint32_t)strtol(optarg, NULL, 0); - break; - case 'p': // logical page size - fs_config.log_page_size = (uint32_t)strtol(optarg, NULL, 0); - break; - case 'b': // logical block size - fs_config.log_block_size = (uint32_t)strtol(optarg, NULL, 0); - break; - default: - print_usage(argv[0], NULL); - return -1; - } - } - - if (!image_file_name || !directory || !fs_config.fs_size - || !fs_config.log_page_size || !fs_config.log_block_size) { - print_usage(argv[0], NULL); - return -1; - } - - init_spiffs(/*allocate_mem=*/true, &fs_config); - - if (format_spiffs()) { - if (init_spiffs(/*allocate_mem=*/false, &fs_config)) { - if (process_directory(directory)) { - SPIFFS_unmount(&fs); - if (!write_image(image_file_name, &fs_config)) { - printf("Error writing image\n"); - } - } else { - printf("Error processing direcotry\n"); - } - } else { - printf("Failed to mount SPIFFS\n"); - } - } else { - printf("Error formating spiffs\n"); - } - - spiffs_free(); - return result; -} diff --git a/extras/spiffs/spiffs b/extras/spiffs/spiffs deleted file mode 160000 index 3993774..0000000 --- a/extras/spiffs/spiffs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 39937743fbbec4b82308ee08332bf9180408d23b diff --git a/extras/spiffs/spiffs_config.h b/extras/spiffs/spiffs_config.h deleted file mode 100644 index 52c3aea..0000000 --- a/extras/spiffs/spiffs_config.h +++ /dev/null @@ -1,305 +0,0 @@ -/* - * spiffs_config.h - * - * Created on: Jul 3, 2013 - * Author: petera - */ - -#ifndef SPIFFS_CONFIG_H_ -#define SPIFFS_CONFIG_H_ - -// ----------- 8< ------------ -#include -#include -#include -#include -#include -#include -// #include // for vPortEnterCritical/vPortExitCritical -// ----------- >8 ------------ - -typedef signed int s32_t; -typedef unsigned int u32_t; -typedef signed short s16_t; -typedef unsigned short u16_t; -typedef signed char s8_t; -typedef unsigned char u8_t; - -// compile time switches - -// Set generic spiffs debug output call. -#ifndef SPIFFS_DBG -#define SPIFFS_DBG(...) //printf(__VA_ARGS__) -#endif -// Set spiffs debug output call for garbage collecting. -#ifndef SPIFFS_GC_DBG -#define SPIFFS_GC_DBG(...) //printf(__VA_ARGS__) -#endif -// Set spiffs debug output call for caching. -#ifndef SPIFFS_CACHE_DBG -#define SPIFFS_CACHE_DBG(...) //printf(__VA_ARGS__) -#endif -// Set spiffs debug output call for system consistency checks. -#ifndef SPIFFS_CHECK_DBG -#define SPIFFS_CHECK_DBG(...) //printf(__VA_ARGS__) -#endif - -// Enable/disable API functions to determine exact number of bytes -// for filedescriptor and cache buffers. Once decided for a configuration, -// this can be disabled to reduce flash. -#ifndef SPIFFS_BUFFER_HELP -#define SPIFFS_BUFFER_HELP 1 -#endif - -// Enables/disable memory read caching of nucleus file system operations. -// If enabled, memory area must be provided for cache in SPIFFS_mount. -#ifndef SPIFFS_CACHE -#define SPIFFS_CACHE 1 -#endif -#if SPIFFS_CACHE -// Enables memory write caching for file descriptors in hydrogen -#ifndef SPIFFS_CACHE_WR -#define SPIFFS_CACHE_WR 1 -#endif - -// Enable/disable statistics on caching. Debug/test purpose only. -#ifndef SPIFFS_CACHE_STATS -#define SPIFFS_CACHE_STATS 0 -#endif -#endif - -// Always check header of each accessed page to ensure consistent state. -// If enabled it will increase number of reads, will increase flash. -#ifndef SPIFFS_PAGE_CHECK -#define SPIFFS_PAGE_CHECK 1 -#endif - -// Define maximum number of gc runs to perform to reach desired free pages. -#ifndef SPIFFS_GC_MAX_RUNS -#define SPIFFS_GC_MAX_RUNS 3 -#endif - -// Enable/disable statistics on gc. Debug/test purpose only. -#ifndef SPIFFS_GC_STATS -#define SPIFFS_GC_STATS 0 -#endif - -// Garbage collecting examines all pages in a block which and sums up -// to a block score. Deleted pages normally gives positive score and -// used pages normally gives a negative score (as these must be moved). -// To have a fair wear-leveling, the erase age is also included in score, -// whose factor normally is the most positive. -// The larger the score, the more likely it is that the block will -// picked for garbage collection. - -// Garbage collecting heuristics - weight used for deleted pages. -#ifndef SPIFFS_GC_HEUR_W_DELET -#define SPIFFS_GC_HEUR_W_DELET (5) -#endif -// Garbage collecting heuristics - weight used for used pages. -#ifndef SPIFFS_GC_HEUR_W_USED -#define SPIFFS_GC_HEUR_W_USED (-1) -#endif -// Garbage collecting heuristics - weight used for time between -// last erased and erase of this block. -#ifndef SPIFFS_GC_HEUR_W_ERASE_AGE -#define SPIFFS_GC_HEUR_W_ERASE_AGE (50) -#endif - -// Object name maximum length. Note that this length include the -// zero-termination character, meaning maximum string of characters -// can at most be SPIFFS_OBJ_NAME_LEN - 1. -#ifndef SPIFFS_OBJ_NAME_LEN -#define SPIFFS_OBJ_NAME_LEN (32) -#endif - -// Size of buffer allocated on stack used when copying data. -// Lower value generates more read/writes. No meaning having it bigger -// than logical page size. -#ifndef SPIFFS_COPY_BUFFER_STACK -#define SPIFFS_COPY_BUFFER_STACK (64) -#endif - -// Enable this to have an identifiable spiffs filesystem. This will look for -// a magic in all sectors to determine if this is a valid spiffs system or -// not on mount point. If not, SPIFFS_format must be called prior to mounting -// again. -#ifndef SPIFFS_USE_MAGIC -#define SPIFFS_USE_MAGIC (1) -#endif - -#if SPIFFS_USE_MAGIC -// Only valid when SPIFFS_USE_MAGIC is enabled. If SPIFFS_USE_MAGIC_LENGTH is -// enabled, the magic will also be dependent on the length of the filesystem. -// For example, a filesystem configured and formatted for 4 megabytes will not -// be accepted for mounting with a configuration defining the filesystem as 2 -// megabytes. -#ifndef SPIFFS_USE_MAGIC_LENGTH -#define SPIFFS_USE_MAGIC_LENGTH (1) -#endif -#endif - -// SPIFFS_LOCK and SPIFFS_UNLOCK protects spiffs from reentrancy on api level -// These should be defined on a multithreaded system - -// define this to enter a mutex if you're running on a multithreaded system -#ifndef SPIFFS_LOCK -#define SPIFFS_LOCK(fs) // vPortEnterCritical() -#endif -// define this to exit a mutex if you're running on a multithreaded system -#ifndef SPIFFS_UNLOCK -#define SPIFFS_UNLOCK(fs) // vPortExitCritical() -#endif - -// Enable if only one spiffs instance with constant configuration will exist -// on the target. This will reduce calculations, flash and memory accesses. -// Parts of configuration must be defined below instead of at time of mount. -#ifndef SPIFFS_SINGLETON -#define SPIFFS_SINGLETON 1 -#endif - -// ESP8266 supports only sector erase, which is 4096 bytes -#define SPIFFS_ESP_ERASE_SIZE (4096) - -#if SPIFFS_SINGLETON -// Instead of giving parameters in config struct, singleton build must -// give parameters in defines below. -#ifndef SPIFFS_CFG_PHYS_SZ -#define SPIFFS_CFG_PHYS_SZ(ignore) (SPIFFS_SIZE) -#endif -#ifndef SPIFFS_CFG_PHYS_ERASE_SZ -#define SPIFFS_CFG_PHYS_ERASE_SZ(ignore) (SPIFFS_ESP_ERASE_SIZE) -#endif -#ifndef SPIFFS_CFG_PHYS_ADDR -#define SPIFFS_CFG_PHYS_ADDR(ignore) (SPIFFS_BASE_ADDR) -#endif -#ifndef SPIFFS_CFG_LOG_PAGE_SZ -#define SPIFFS_CFG_LOG_PAGE_SZ(ignore) (SPIFFS_LOG_PAGE_SIZE) -#endif -#ifndef SPIFFS_CFG_LOG_BLOCK_SZ -#define SPIFFS_CFG_LOG_BLOCK_SZ(ignore) (SPIFFS_LOG_BLOCK_SIZE) -#endif -#endif - -// Enable this if your target needs aligned data for index tables -#ifndef SPIFFS_ALIGNED_OBJECT_INDEX_TABLES -#define SPIFFS_ALIGNED_OBJECT_INDEX_TABLES 1 -#endif - -// Enable this if you want the HAL callbacks to be called with the spiffs struct -#ifndef SPIFFS_HAL_CALLBACK_EXTRA -#define SPIFFS_HAL_CALLBACK_EXTRA 0 -#endif - -// Enable this if you want to add an integer offset to all file handles -// (spiffs_file). This is useful if running multiple instances of spiffs on -// same target, in order to recognise to what spiffs instance a file handle -// belongs. -// NB: This adds config field fh_ix_offset in the configuration struct when -// mounting, which must be defined. -#ifndef SPIFFS_FILEHDL_OFFSET -#define SPIFFS_FILEHDL_OFFSET 17 -// Not ideal having to use a literal above, which is necessary because this file -// is also included by tools that run on the host, but at least do some checks -// when building the target code. -#ifdef LWIP_SOCKET_OFFSET -#if SPIFFS_FILEHDL_OFFSET < (LWIP_SOCKET_OFFSET + MEMP_NUM_NETCONN) -#error SPIFFS_FILEHDL_OFFSET clashes with lwip sockets range. -#endif -#endif -#endif - -// Enable this to compile a read only version of spiffs. -// This will reduce binary size of spiffs. All code comprising modification -// of the file system will not be compiled. Some config will be ignored. -// HAL functions for erasing and writing to spi-flash may be null. Cache -// can be disabled for even further binary size reduction (and ram savings). -// Functions modifying the fs will return SPIFFS_ERR_RO_NOT_IMPL. -// If the file system cannot be mounted due to aborted erase operation and -// SPIFFS_USE_MAGIC is enabled, SPIFFS_ERR_RO_ABORTED_OPERATION will be -// returned. -// Might be useful for e.g. bootloaders and such. -#ifndef SPIFFS_READ_ONLY -#define SPIFFS_READ_ONLY 0 -#endif - -// Enable this to add a temporal file cache using the fd buffer. -// The effects of the cache is that SPIFFS_open will find the file faster in -// certain cases. It will make it a lot easier for spiffs to find files -// opened frequently, reducing number of readings from the spi flash for -// finding those files. -// This will grow each fd by 6 bytes. If your files are opened in patterns -// with a degree of temporal locality, the system is optimized. -// Examples can be letting spiffs serve web content, where one file is the css. -// The css is accessed for each html file that is opened, meaning it is -// accessed almost every second time a file is opened. Another example could be -// a log file that is often opened, written, and closed. -// The size of the cache is number of given file descriptors, as it piggybacks -// on the fd update mechanism. The cache lives in the closed file descriptors. -// When closed, the fd know the whereabouts of the file. Instead of forgetting -// this, the temporal cache will keep handling updates to that file even if the -// fd is closed. If the file is opened again, the location of the file is found -// directly. If all available descriptors become opened, all cache memory is -// lost. -#ifndef SPIFFS_TEMPORAL_FD_CACHE -#define SPIFFS_TEMPORAL_FD_CACHE 1 -#endif - -// Temporal file cache hit score. Each time a file is opened, all cached files -// will lose one point. If the opened file is found in cache, that entry will -// gain SPIFFS_TEMPORAL_CACHE_HIT_SCORE points. One can experiment with this -// value for the specific access patterns of the application. However, it must -// be between 1 (no gain for hitting a cached entry often) and 255. -#ifndef SPIFFS_TEMPORAL_CACHE_HIT_SCORE -#define SPIFFS_TEMPORAL_CACHE_HIT_SCORE 4 -#endif - -// Set SPIFFS_TEST_VISUALISATION to non-zero to enable SPIFFS_vis function -// in the api. This function will visualize all filesystem using given printf -// function. -#ifndef SPIFFS_TEST_VISUALISATION -#define SPIFFS_TEST_VISUALISATION 1 -#endif -#if SPIFFS_TEST_VISUALISATION -#ifndef spiffs_printf -#define spiffs_printf(...) printf(__VA_ARGS__) -#endif -// spiffs_printf argument for a free page -#ifndef SPIFFS_TEST_VIS_FREE_STR -#define SPIFFS_TEST_VIS_FREE_STR "_" -#endif -// spiffs_printf argument for a deleted page -#ifndef SPIFFS_TEST_VIS_DELE_STR -#define SPIFFS_TEST_VIS_DELE_STR "/" -#endif -// spiffs_printf argument for an index page for given object id -#ifndef SPIFFS_TEST_VIS_INDX_STR -#define SPIFFS_TEST_VIS_INDX_STR(id) "i" -#endif -// spiffs_printf argument for a data page for given object id -#ifndef SPIFFS_TEST_VIS_DATA_STR -#define SPIFFS_TEST_VIS_DATA_STR(id) "d" -#endif -#endif - -// Types depending on configuration such as the amount of flash bytes -// given to spiffs file system in total (spiffs_file_system_size), -// the logical block size (log_block_size), and the logical page size -// (log_page_size) - -// Block index type. Make sure the size of this type can hold -// the highest number of all blocks - i.e. spiffs_file_system_size / log_block_size -typedef u16_t spiffs_block_ix; -// Page index type. Make sure the size of this type can hold -// the highest page number of all pages - i.e. spiffs_file_system_size / log_page_size -typedef u16_t spiffs_page_ix; -// Object id type - most significant bit is reserved for index flag. Make sure the -// size of this type can hold the highest object id on a full system, -// i.e. 2 + (spiffs_file_system_size / (2*log_page_size))*2 -typedef u16_t spiffs_obj_id; -// Object span index type. Make sure the size of this type can -// hold the largest possible span index on the system - -// i.e. (spiffs_file_system_size / log_page_size) - 1 -typedef u16_t spiffs_span_ix; - -#endif /* SPIFFS_CONFIG_H_ */ diff --git a/extras/ssd1306/LICENSE b/extras/ssd1306/LICENSE deleted file mode 100644 index 1f44f09..0000000 --- a/extras/ssd1306/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Frank Bargstedt - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/extras/ssd1306/README.md b/extras/ssd1306/README.md deleted file mode 100644 index 50d29fc..0000000 --- a/extras/ssd1306/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# Driver for SSD1306/SH1106 OLED LCD - -This driver is written for usage with the ESP8266 and FreeRTOS ([esp-open-rtos](https://github.com/SuperHouse/esp-open-rtos)). - -## Supported display sizes - - - 128x64 - - 128x32 - - 128x16 - - 96x16 - -## Supported connection interfaces - -I2C, SPI3 and SPI4. - -## Usage - -If Reset pin is accesible in your display module, connect it to the RESET pin of ESP8266. -If you don't, display RAM could be glitchy after the power cycle. - -### I2C protocol - -Before using the OLED module you need to call the function `i2c_init(BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K)` -to configure the I2C interface and then you should call `ssd1306_init()`. - -#### Example - -```C -#define SCL_PIN 5 -#define SDA_PIN 4 -#define I2C_BUS 0 -... - -static const ssd1306_t device = { - .protocol = SSD1306_PROTO_I2C, - .screen = SSD1306_SCREEN, // or SH1106_SCREEN - .i2c_dev.bus = I2C_BUS, - .i2c_dev.addr = SSD1306_I2C_ADDR_0, - .width = 128, - .height = 64 -}; - -... - -i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K); - -if (ssd1306_init(&device)) { -// An error occured, while performing SSD1306 init (E.g device not found etc.) -} - -// rest of the code -``` - -### SPI3 and SPI4 protocols - -These protocols are MUCH faster than I2C, but use 2 additional GPIO pins -(besides the **HSPI CLK** and **HSPI MOSI**): **Chip Select** and **Data/Command** (in case of SPI4). - -No additional function calls are required before `ssd1306_init()`. - - -#### SPI4 Example - -```C -#define CS_PIN 5 -#define DC_PIN 4 - -... - -static const ssd1306_t device = { - .protocol = SSD1306_PROTO_SPI4, - .screen = SSD1306_SCREEN, - .cs_pin = CS_PIN, - .dc_pin = DC_PIN, - .width = 128, - .height = 64 -}; - -... - -if (ssd1306_init(&device)) { -// An error occured, while performing SSD1306 init -} - -// rest of the code -``` - -#### SPI3 example -```C - -#define CS_PIN 5 - -... - -static const ssd1306_t device = { - .protocol = SSD1306_PROTO_SPI3, - .screen = SSD1306_SCREEN, - .cs_pin = CS_PIN, - .width = 128, - .height = 64 -}; - -... - -if (ssd1306_init(&device)) { -// An error occured, while performing SSD1306 init -} - -// rest of the code -``` diff --git a/extras/ssd1306/component.mk b/extras/ssd1306/component.mk deleted file mode 100644 index 2cfb14d..0000000 --- a/extras/ssd1306/component.mk +++ /dev/null @@ -1,19 +0,0 @@ -# Component makefile for extras/ssd1306 - -# expected anyone using ssd1306 driver includes it as 'ssd1306/ssd1306.h' -INC_DIRS += $(ssd1306_ROOT).. - -# I2C support is on by default -SSD1306_I2C_SUPPORT ?= 1 -# SPI4 support is on by default -SSD1306_SPI4_SUPPORT ?= 1 -# SPI3 support is on by default -SSD1306_SPI3_SUPPORT ?= 1 - -# args for passing into compile rule generation -ssd1306_SRC_DIR = $(ssd1306_ROOT) - -ssd1306_CFLAGS = -DSSD1306_I2C_SUPPORT=${SSD1306_I2C_SUPPORT} -DSSD1306_SPI4_SUPPORT=${SSD1306_SPI4_SUPPORT} -DSSD1306_SPI3_SUPPORT=${SSD1306_SPI3_SUPPORT} $(CFLAGS) - - -$(eval $(call component_compile_rules,ssd1306)) diff --git a/extras/ssd1306/config.h b/extras/ssd1306/config.h deleted file mode 100644 index 5bce8ea..0000000 --- a/extras/ssd1306/config.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _EXTRAS_SSD1306_CONFIG_H_ -#define _EXTRAS_SSD1306_CONFIG_H_ - -#ifndef SSD1306_I2C_SUPPORT -#define SSD1306_I2C_SUPPORT 1 -#endif - -#ifndef SSD1306_SPI4_SUPPORT -#define SSD1306_SPI4_SUPPORT 1 -#endif - -#ifndef SSD1306_SPI3_SUPPORT -#define SSD1306_SPI3_SUPPORT 1 -#endif - -#endif /* _EXTRAS_SSD1306_CONFIG_H_ */ diff --git a/extras/ssd1306/ssd1306.c b/extras/ssd1306/ssd1306.c deleted file mode 100644 index d218d55..0000000 --- a/extras/ssd1306/ssd1306.c +++ /dev/null @@ -1,1092 +0,0 @@ -/** - * SSD1306 OLED display driver for esp-open-rtos. - * - * Copyright (c) 2016 urx (https://github.com/urx), - * Ruslan V. Uss (https://github.com/UncleRus) - * Zaltora (https://github.com/Zaltora) - * - * MIT Licensed as described in the file LICENSE - * - * @todo HW scrolling, sprites - */ -#include "ssd1306.h" -#include -#if (SSD1306_SPI4_SUPPORT) || (SSD1306_SPI3_SUPPORT) - #include -#endif -#include -#include -#include - -#define SPI_BUS 1 - -//#define SSD1306_DEBUG - -/* SSD1306 commands */ -#define SSD1306_SET_MEM_ADDR_MODE (0x20) - -#define SSD1306_SET_COL_ADDR (0x21) -#define SSD1306_SET_PAGE_ADDR (0x22) -#define SSD1306_SET_DISP_START_LINE (0x40) -#define SSD1306_SET_CONTRAST (0x81) -#define SSD1306_SET_SEGMENT_REMAP0 (0xA0) -#define SSD1306_SET_SEGMENT_REMAP1 (0xA1) -#define SSD1306_SET_ENTIRE_DISP_ON (0xA5) -#define SSD1306_SET_ENTIRE_DISP_OFF (0xA4) -#define SSD1306_SET_INVERSION_OFF (0xA6) -#define SSD1306_SET_INVERSION_ON (0xA7) - -#define SSD1306_SET_MUX_RATIO (0xA8) -#define SSD1306_MUX_RATIO_MASK (0x3F) -#define SSD1306_SET_DISPLAY_OFF (0xAE) -#define SSD1306_SET_DISPLAY_ON (0xAF) -#define SSD1306_SET_SCAN_DIR_FWD (0xC0) -#define SSD1306_SET_SCAN_DIR_BWD (0xC8) -#define SSD1306_SET_DISPLAY_OFFSET (0xD3) -#define SSD1306_SET_OSC_FREQ (0xD5) -#define SSD1306_SET_PRE_CHRG_PER (0xD9) - -#define SSD1306_SET_COM_PINS_HW_CFG (0xDA) -#define SSD1306_COM_PINS_HW_CFG_MASK (0x32) -#define SSD1306_SEQ_COM_PINS_CFG (0x02) -#define SSD1306_ALT_COM_PINS_CFG (0x12) -#define SSD1306_COM_LR_REMAP_OFF (0x02) -#define SSD1306_COM_LR_REMAP_ON (0x22) - -#define SSD1306_SET_DESEL_LVL (0xDB) -#define SSD1306_SET_NOP (0xE3) - -#define SSD1306_SET_CHARGE_PUMP (0x8D) -#define SSD1306_CHARGE_PUMP_EN (0x14) -#define SSD1306_CHARGE_PUMP_DIS (0x10) - -#define SSD1306_SCROLL_HOR_LEFT (0x27) -#define SSD1306_SCROLL_HOR_RIGHT (0x26) -#define SSD1306_SCROLL_HOR_VER_LEFT (0x2A) -#define SSD1306_SCROLL_HOR_VER_RIGHT (0x29) -#define SSD1306_SCROLL_ENABLE (0x2F) -#define SSD1306_SCROLL_DISABLE (0x2E) - -#define SH1106_SET_CHARGE_PUMP (0xAD) -#define SH1106_CHARGE_PUMP_EN (0x8B) -#define SH1106_CHARGE_PUMP_DIS (0x8A) -#define SH1106_CHARGE_PUMP_VALUE (0x30) - -#define SH1106_SET_PAGE_ADDRESS (0xB0) -#define SH1106_SET_LOW_COL_ADDR (0x00) -#define SH1106_SET_HIGH_COL_ADDR (0x10) - -#ifdef SSD1306_DEBUG -#define debug(fmt, ...) printf("%s: " fmt "\n", "SSD1306", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -#define abs(x) ((x)<0 ? -(x) : (x)) -#define swap(x, y) do { typeof(x) temp##x##y = x; x = y; y = temp##x##y; } while (0) - -#if (SSD1306_I2C_SUPPORT) -static int inline i2c_send(const ssd1306_t *dev, uint8_t reg, uint8_t* data, uint8_t len) -{ - return i2c_slave_write(dev->i2c_dev.bus, dev->i2c_dev.addr, ®, data, len); -} -#endif - -/* Issue a command to SSD1306 device - * I2C proto format: - * |S|Slave Address|W|ACK|0x00|Command|Ack|P| - * - * in case of two-bytes command here will be Data byte - * right after the command byte. - */ -int ssd1306_command(const ssd1306_t *dev, uint8_t cmd) -{ - debug("Command: 0x%02x", cmd); - switch (dev->protocol) { -#if (SSD1306_I2C_SUPPORT) - case SSD1306_PROTO_I2C: - return i2c_send(dev, 0x00, &cmd, 1); - break; -#endif -#if (SSD1306_SPI4_SUPPORT) - case SSD1306_PROTO_SPI4: - gpio_write(dev->dc_pin, false); // command mode - gpio_write(dev->cs_pin, false); - spi_transfer_8(SPI_BUS, cmd); - gpio_write(dev->cs_pin, true); - break; -#endif -#if (SSD1306_SPI3_SUPPORT) - case SSD1306_PROTO_SPI3: - gpio_write(dev->cs_pin, false); - spi_set_command(SPI_BUS, 1, 0); // command mode - spi_transfer_8(SPI_BUS, cmd); - spi_clear_command(SPI_BUS); - gpio_write(dev->cs_pin, true); - break; -#endif - default: - debug("Unsupported protocol"); - return -EPROTONOSUPPORT; - } - - return 0; -} - -/* Perform default init routine according - * to SSD1306 datasheet from adafruit.com */ -int ssd1306_init(const ssd1306_t *dev) -{ - uint8_t pin_cfg; - switch (dev->height) { - case 16: - case 32: - pin_cfg = 0x02; - break; - case 48: - case 64: - pin_cfg = 0x12; - break; - default: - debug("Unsupported screen height"); - return -ENOTSUP; - } - - switch (dev->protocol) { -#if (SSD1306_I2C_SUPPORT) - case SSD1306_PROTO_I2C: - break; -#endif -#if (SSD1306_SPI4_SUPPORT) - case SSD1306_PROTO_SPI4: - gpio_enable(dev->cs_pin, GPIO_OUTPUT); - gpio_write(dev->cs_pin, true); - gpio_enable(dev->dc_pin, GPIO_OUTPUT); - spi_init(SPI_BUS, SPI_MODE0, SPI_FREQ_DIV_8M, true, SPI_LITTLE_ENDIAN, true); - break; -#endif -#if (SSD1306_SPI3_SUPPORT) - case SSD1306_PROTO_SPI3: - gpio_enable(dev->cs_pin, GPIO_OUTPUT); - gpio_write(dev->cs_pin, true); - spi_init(SPI_BUS, SPI_MODE0, SPI_FREQ_DIV_8M, true, SPI_LITTLE_ENDIAN, true); - break; -#endif - default: - debug("Unsupported protocol"); - return -EPROTONOSUPPORT; - } - switch (dev->screen) { - case SSD1306_SCREEN: - if (!ssd1306_display_on(dev, false) && - !ssd1306_set_osc_freq(dev, 0x80) && - !ssd1306_set_mux_ratio(dev, dev->height - 1) && - !ssd1306_set_display_offset(dev, 0x0) && - !ssd1306_set_display_start_line(dev, 0x0) && - !ssd1306_set_charge_pump_enabled(dev, true) && - !ssd1306_set_mem_addr_mode(dev, SSD1306_ADDR_MODE_HORIZONTAL) && - !ssd1306_set_segment_remapping_enabled(dev, false) && - !ssd1306_set_scan_direction_fwd(dev, true) && - !ssd1306_set_com_pin_hw_config(dev, pin_cfg) && - !ssd1306_set_contrast(dev, 0x9f) && - !ssd1306_set_precharge_period(dev, 0xf1) && - !ssd1306_set_deseltct_lvl(dev, 0x40) && - !ssd1306_set_whole_display_lighting(dev, true) && - !ssd1306_set_inversion(dev, false) && - !ssd1306_display_on(dev, true)) { - return 0; - } - break; - case SH1106_SCREEN: - if (!ssd1306_display_on(dev, false) && - !ssd1306_set_charge_pump_enabled(dev, true) && - !sh1106_set_charge_pump_voltage(dev,SH1106_VOLTAGE_74) && - !ssd1306_set_osc_freq(dev, 0x80) && - !ssd1306_set_mux_ratio(dev, dev->height - 1) && - !ssd1306_set_display_offset(dev, 0x0) && - !ssd1306_set_display_start_line(dev, 0x0) && - !ssd1306_set_segment_remapping_enabled(dev, true) && - !ssd1306_set_scan_direction_fwd(dev, true) && - !ssd1306_set_com_pin_hw_config(dev, pin_cfg) && - !ssd1306_set_contrast(dev, 0x9f) && - !ssd1306_set_precharge_period(dev, 0xf1) && - !ssd1306_set_deseltct_lvl(dev, 0x40) && - !ssd1306_set_whole_display_lighting(dev, true) && - !ssd1306_set_inversion(dev, false) && - !ssd1306_display_on(dev, true)) { - return 0; - } - break; - } - return -EIO; -} - -static int sh1106_go_coordinate(const ssd1306_t *dev, uint8_t x, uint8_t y) -{ - if (x >= dev->width || y >= (dev->height / 8)) - return -EINVAL; - int err = 0; - x += 2; //offset : panel is 128 ; RAM is 132 for sh1106 - if ((err = ssd1306_command(dev, SH1106_SET_PAGE_ADDRESS + y))) // Set row - return err; - if ((err = ssd1306_command(dev, SH1106_SET_LOW_COL_ADDR | (x & 0xf)))) // Set lower column address - return err; - return ssd1306_command(dev, SH1106_SET_HIGH_COL_ADDR | (x >> 4)); //Set higher column address -} - -int ssd1306_load_frame_buffer(const ssd1306_t *dev, uint8_t buf[]) -{ - uint16_t i; -#if (SSD1306_SPI3_SUPPORT) - uint8_t j; -#endif -#if (SSD1306_I2C_SUPPORT) - uint8_t tab[16] = { 0 }; -#endif - size_t len = dev->width * dev->height / 8; - if (dev->screen == SSD1306_SCREEN) { - if (dev->width == 64 && dev->height == 48) - ssd1306_set_column_addr(dev, 32, 32 + dev->width -1); - else - ssd1306_set_column_addr(dev, 0, dev->width - 1); - ssd1306_set_page_addr(dev, 0, dev->height / 8 - 1); - } - - switch (dev->protocol) { -#if (SSD1306_I2C_SUPPORT) - case SSD1306_PROTO_I2C: - for (i = 0; i < len; i++) { - if (dev->screen == SH1106_SCREEN && i % dev->width == 0) - sh1106_go_coordinate(dev, 0, i / dev->width); - i2c_send(dev, 0x40, buf ? &buf[i] : tab, 16); - i += 15; - } - break; -#endif -#if (SSD1306_SPI4_SUPPORT) - case SSD1306_PROTO_SPI4: - gpio_write(dev->cs_pin, false); - if (dev->screen == SSD1306_SCREEN) { - gpio_write(dev->dc_pin, true); // data mode - if (buf) - spi_transfer(SPI_BUS, buf, NULL, len, SPI_8BIT); - else - spi_repeat_send_8(SPI_BUS, 0, len); - } - else { - for (i = 0; i < (dev->height / 8); i++) { - sh1106_go_coordinate(dev, 0, i); - gpio_write(dev->dc_pin, true); // data mode - gpio_write(dev->cs_pin, false); - if (buf) - spi_transfer(SPI_BUS, &buf[dev->width * i], NULL, dev->width, SPI_8BIT); - else - spi_repeat_send_8(SPI_BUS, 0, dev->width); - } - } - gpio_write(dev->cs_pin, true); - break; -#endif -#if (SSD1306_SPI3_SUPPORT) - case SSD1306_PROTO_SPI3: - gpio_write(dev->cs_pin, false); - if (dev->screen == SSD1306_SCREEN) { - spi_set_command(SPI_BUS, 1, 1); // data mode - if (buf) { - for (i = 0; i < len; i++) { - spi_transfer(SPI_BUS, &buf[i], NULL, 1, SPI_8BIT); - } - } - else { - for (i = 0; i < len; i++) { - spi_transfer_8(SPI_BUS, 0); - } - } - } - else { - for (i = 0; i < (dev->height / 8); i++) { - sh1106_go_coordinate(dev, 0, i); - spi_set_command(SPI_BUS, 1, 1); // data mode - gpio_write(dev->cs_pin, false); - if (buf) - for (j = 0; j < dev->width; j++) - spi_transfer_8(SPI_BUS, buf[dev->width * i + j]); - else - for (j = 0; j < dev->width; j++) - spi_transfer_8(SPI_BUS, buf[dev->width * i + j]); - } - } - spi_clear_command(SPI_BUS); - gpio_write(dev->cs_pin, true); - break; -#endif - default: - debug("Unsupported protocol"); - return -EPROTONOSUPPORT; - } - - return 0; -} - -int ssd1306_display_on(const ssd1306_t *dev, bool on) -{ - return ssd1306_command(dev, on ? SSD1306_SET_DISPLAY_ON : SSD1306_SET_DISPLAY_OFF); -} - -int ssd1306_set_display_start_line(const ssd1306_t *dev, uint8_t start) -{ - if (start > 63) - return -EINVAL; - - return ssd1306_command(dev, SSD1306_SET_DISP_START_LINE | start); -} - -int ssd1306_set_display_offset(const ssd1306_t *dev, uint8_t offset) -{ - if (offset > 63) - return -EINVAL; - - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_DISPLAY_OFFSET))) - return err; - - return ssd1306_command(dev, offset); -} - -int sh1106_set_charge_pump_voltage(const ssd1306_t *dev, sh1106_voltage_t select) -{ - if (dev->screen == SSD1306_SCREEN) { - debug("Unsupported screen type"); - return -ENOTSUP; - } - return ssd1306_command(dev, select | SH1106_CHARGE_PUMP_VALUE); -} - -int ssd1306_set_charge_pump_enabled(const ssd1306_t *dev, bool enabled) -{ - int err = 0; - switch (dev->screen) { - case SH1106_SCREEN: - if ((err = ssd1306_command(dev, SH1106_SET_CHARGE_PUMP))) - return err; - return ssd1306_command(dev, enabled ? SH1106_CHARGE_PUMP_EN : SH1106_CHARGE_PUMP_DIS); - break; - case SSD1306_SCREEN: - if ((err = ssd1306_command(dev, SSD1306_SET_CHARGE_PUMP))) - return err; - return ssd1306_command(dev, enabled ? SSD1306_CHARGE_PUMP_EN : SSD1306_CHARGE_PUMP_DIS); - break; - default: - debug("Unsupported screen type"); - return -ENOTSUP; - } -} - -int ssd1306_set_mem_addr_mode(const ssd1306_t *dev, ssd1306_mem_addr_mode_t mode) -{ - if (dev->screen == SH1106_SCREEN) { - debug("Unsupported screen type"); - return -ENOTSUP; - } - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_MEM_ADDR_MODE))) - return err; - - return ssd1306_command(dev, mode); -} - -int ssd1306_set_segment_remapping_enabled(const ssd1306_t *dev, bool on) -{ - return ssd1306_command(dev, on ? SSD1306_SET_SEGMENT_REMAP1 : SSD1306_SET_SEGMENT_REMAP0); -} - -int ssd1306_set_scan_direction_fwd(const ssd1306_t *dev, bool fwd) -{ - return ssd1306_command(dev, fwd ? SSD1306_SET_SCAN_DIR_FWD : SSD1306_SET_SCAN_DIR_BWD); -} - -int ssd1306_set_com_pin_hw_config(const ssd1306_t *dev, uint8_t config) -{ - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_COM_PINS_HW_CFG))) - return err; - - return ssd1306_command(dev, config & SSD1306_COM_PINS_HW_CFG_MASK); -} - -int ssd1306_set_contrast(const ssd1306_t *dev, uint8_t contrast) -{ - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_CONTRAST))) - return err; - - return ssd1306_command(dev, contrast); -} - -int ssd1306_set_inversion(const ssd1306_t *dev, bool on) -{ - return ssd1306_command(dev, on ? SSD1306_SET_INVERSION_ON : SSD1306_SET_INVERSION_OFF); -} - -int ssd1306_set_osc_freq(const ssd1306_t *dev, uint8_t osc_freq) -{ - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_OSC_FREQ))) - return err; - - return ssd1306_command(dev, osc_freq); -} - -int ssd1306_set_mux_ratio(const ssd1306_t *dev, uint8_t ratio) -{ - if (ratio < 15 || ratio > 63) - return -EINVAL; - - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_MUX_RATIO))) - return err; - - return ssd1306_command(dev, ratio); -} - -int ssd1306_set_column_addr(const ssd1306_t *dev, uint8_t start, uint8_t stop) -{ - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_COL_ADDR))) - return err; - - if ((err = ssd1306_command(dev, start))) - return err; - - return ssd1306_command(dev, stop); -} - -int ssd1306_set_page_addr(const ssd1306_t *dev, uint8_t start, uint8_t stop) -{ - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_PAGE_ADDR))) - return err; - - if ((err = ssd1306_command(dev, start))) - return err; - - return ssd1306_command(dev, stop); -} - -int ssd1306_set_precharge_period(const ssd1306_t *dev, uint8_t prchrg) -{ - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_PRE_CHRG_PER))) - return err; - - return ssd1306_command(dev, prchrg); -} - -int ssd1306_set_deseltct_lvl(const ssd1306_t *dev, uint8_t lvl) -{ - int err = 0; - if ((err = ssd1306_command(dev, SSD1306_SET_DESEL_LVL))) - return err; - - return ssd1306_command(dev, lvl); -} - -int ssd1306_set_whole_display_lighting(const ssd1306_t *dev, bool light) -{ - return ssd1306_command(dev, light ? SSD1306_SET_ENTIRE_DISP_ON : SSD1306_SET_ENTIRE_DISP_OFF); -} - -/* one byte of xbm - 8 dots in line of picture source - * one byte of fb - 8 rows for 1 column of screen - */ -int ssd1306_load_xbm(const ssd1306_t *dev, uint8_t *xbm, uint8_t *fb) -{ - uint8_t bit = 0; - - int row = 0; - int column = 0; - for (row = 0; row < dev->height; row++) { - for (column = 0; column < dev->width / 8; column++) { - uint16_t xbm_offset = row * 16 + column; - for (bit = 0; bit < 8; bit++) { - if (*(xbm + xbm_offset) & 1 << bit) { - *(fb + dev->width * (row / 8) + column * 8 + bit) |= 1 << row % 8; - } - } - } - } - - return ssd1306_load_frame_buffer(dev, fb); -} - -int ssd1306_draw_pixel(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, ssd1306_color_t color) -{ - uint16_t index; - - if ((x >= dev->width) || (x < 0) || (y >= dev->height) || (y < 0)) - return -EINVAL; - - index = x + (y / 8) * dev->width; - switch (color) { - case OLED_COLOR_WHITE: - fb[index] |= (1 << (y & 7)); - break; - case OLED_COLOR_BLACK: - fb[index] &= ~(1 << (y & 7)); - break; - case OLED_COLOR_INVERT: - fb[index] ^= (1 << (y & 7)); - break; - default: - break; - } - return 0; -} - -int ssd1306_draw_hline(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, uint8_t w, ssd1306_color_t color) -{ - uint16_t index; - uint8_t mask, t; - - // boundary check - if ((x >= dev->width) || (x < 0) || (y >= dev->height) || (y < 0)) - return -EINVAL; - if (w == 0) - return -EINVAL; - if (x + w > dev->width) - w = dev->width - x; - - t = w; - index = x + (y / 8) * dev->width; - mask = 1 << (y & 7); - switch (color) { - case OLED_COLOR_WHITE: - while (t--) { - fb[index] |= mask; - ++index; - } - break; - case OLED_COLOR_BLACK: - mask = ~mask; - while (t--) { - fb[index] &= mask; - ++index; - } - break; - case OLED_COLOR_INVERT: - while (t--) { - fb[index] ^= mask; - ++index; - } - break; - default: - break; - } - return 0; -} - -int ssd1306_draw_vline(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, uint8_t h, ssd1306_color_t color) -{ - uint16_t index; - uint8_t fill, mask, mod; - - // boundary check - if ((x >= dev->width) || (x < 0) || (y >= dev->height) || (y < 0)) - return -EINVAL; - if (h == 0) - return -EINVAL; - if (y + h > dev->height) - h = dev->height - y; - - do { - mod = y & 7; - fill = 8 - mod; - - if (fill > h) - fill = h; - - index = x + (y / 8) * dev->width; - mask = ((1 << fill) - 1) << mod; - switch (color) { - case OLED_COLOR_WHITE: - fb[index] |= mask; - break; - case OLED_COLOR_BLACK: - fb[index] &= ~mask; - break; - case OLED_COLOR_INVERT: - fb[index] ^= mask; - break; - default: - break; - } - - y += fill; - h -= fill; - - } while(h > 0); - - return 0; -} - -int ssd1306_draw_rectangle(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, uint8_t w, uint8_t h, ssd1306_color_t color) -{ - int err = 0; - if ((err = ssd1306_draw_hline(dev, fb, x, y, w, color))) - return err; - if ((err = ssd1306_draw_hline(dev, fb, x, y + h - 1, w, color))) - return err; - if ((err = ssd1306_draw_vline(dev, fb, x, y, h, color))) - return err; - return ssd1306_draw_vline(dev, fb, x + w - 1, y, h, color); -} - -int ssd1306_fill_rectangle(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, uint8_t w, uint8_t h, ssd1306_color_t color) -{ - uint16_t index; - uint8_t fill, mask, mod, t; - - // boundary check - if ((x >= dev->width) || (x < 0) || (y >= dev->height) || (y < 0)) - return -EINVAL; - if (w == 0 || h == 0) - return -EINVAL; - if (x + w > dev->width) - w = dev->width - x; - if (y + h > dev->height) - h = dev->height - y; - - do { - mod = y & 7; - fill = 8 - mod; - - if (fill > h) - fill = h; - - t = w; - index = x + (y / 8) * dev->width; - mask = ((1 << fill) - 1) << mod; - switch (color) { - case OLED_COLOR_WHITE: - while (t--) { - fb[index] |= mask; - ++index; - } - break; - case OLED_COLOR_BLACK: - mask = ~mask; - while (t--) { - fb[index] &= mask; - ++index; - } - break; - case OLED_COLOR_INVERT: - while (t--) { - fb[index] ^= mask; - ++index; - } - break; - default: - break; - } - - y += fill; - h -= fill; - - } while(h > 0); - - return 0; -} - -int ssd1306_draw_circle(const ssd1306_t *dev, uint8_t *fb, int8_t x0, int8_t y0, uint8_t r, ssd1306_color_t color) -{ - // Refer to http://en.wikipedia.org/wiki/Midpoint_circle_algorithm for the algorithm - int8_t x = r; - int8_t y = 1; - int16_t radius_err = 1 - x; - int err = 0; - - if (r == 0) - return -EINVAL; - - if ((err = ssd1306_draw_pixel(dev, fb, x0 - r, y0, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0 + r, y0, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0, y0 - r, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0, y0 + r, color))) - return err; - - while (x >= y) { - if ((err = ssd1306_draw_pixel(dev, fb, x0 + x, y0 + y, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0 - x, y0 + y, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0 + x, y0 - y, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0 - x, y0 - y, color))) - return err; - if (x != y) { - /* Otherwise the 4 drawings below are the same as above, causing - * problem when color is INVERT - */ - if ((err = ssd1306_draw_pixel(dev, fb, x0 + y, y0 + x, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0 - y, y0 + x, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0 + y, y0 - x, color))) - return err; - if ((err = ssd1306_draw_pixel(dev, fb, x0 - y, y0 - x, color))) - return err; - } - ++y; - if (radius_err < 0) { - radius_err += 2 * y + 1; - } - else { - --x; - radius_err += 2 * (y - x + 1); - } - - } - return 0; -} - -int ssd1306_fill_circle(const ssd1306_t *dev, uint8_t *fb, int8_t x0, int8_t y0, uint8_t r, ssd1306_color_t color) -{ - int8_t x = 1; - int8_t y = r; - int16_t radius_err = 1 - y; - int8_t x1; - int err = 0; - - if (r == 0) - return -EINVAL; - - if ((err = ssd1306_draw_vline(dev, fb, x0, y0 - r, 2 * r + 1, color))) // Center vertical line - return err; - while (y >= x) { - if ((err = ssd1306_draw_vline(dev, fb, x0 - x, y0 - y, 2 * y + 1, color))) - return err; - if ((err = ssd1306_draw_vline(dev, fb, x0 + x, y0 - y, 2 * y + 1, color))) - return err; - if (color != OLED_COLOR_INVERT) { - if ((err = ssd1306_draw_vline(dev, fb, x0 - y, y0 - x, 2 * x + 1, color))) - return err; - if ((err = ssd1306_draw_vline(dev, fb, x0 + y, y0 - x, 2 * x + 1, color))) - return err; - } - ++x; - if (radius_err < 0) { - radius_err += 2 * x + 1; - } - else { - --y; - radius_err += 2 * (x - y + 1); - } - } - - if (color == OLED_COLOR_INVERT) { - x1 = x; // Save where we stopped - - y = 1; - x = r; - radius_err = 1 - x; - if ((err = ssd1306_draw_hline(dev, fb, x0 + x1, y0, r - x1 + 1, color))) - return err; - if ((err = ssd1306_draw_hline(dev, fb, x0 - r, y0, r - x1 + 1, color))) - return err; - while (x >= y) { - if ((err = ssd1306_draw_hline(dev, fb, x0 + x1, y0 - y, x - x1 + 1, color))) - return err; - if ((err = ssd1306_draw_hline(dev, fb, x0 + x1, y0 + y, x - x1 + 1, color))) - return err; - if ((err = ssd1306_draw_hline(dev, fb, x0 - x, y0 - y, x - x1 + 1, color))) - return err; - if ((err = ssd1306_draw_hline(dev, fb, x0 - x, y0 + y, x - x1 + 1, color))) - return err; - ++y; - if (radius_err < 0) { - radius_err += 2 * y + 1; - } - else { - --x; - radius_err += 2 * (y - x + 1); - } - } - } - return 0; -} - -int ssd1306_draw_line(const ssd1306_t *dev, uint8_t *fb, int16_t x0, int16_t y0, int16_t x1, int16_t y1, ssd1306_color_t color) -{ - if ((x0 >= dev->width) || (x0 < 0) || (y0 >= dev->height) || (y0 < 0)) - return -EINVAL; - if ((x1 >= dev->width) || (x1 < 0) || (y1 >= dev->height) || (y1 < 0)) - return -EINVAL; - - int err; - bool steep = abs(y1 - y0) > abs(x1 - x0); - if (steep) { - swap(x0, y0); - swap(x1, y1); - } - - if (x0 > x1) { - swap(x0, x1); - swap(y0, y1); - } - - int16_t dx, dy; - dx = x1 - x0; - dy = abs(y1 - y0); - - int16_t errx = dx / 2; - int16_t ystep; - - if (y0 < y1) { - ystep = 1; - } - else { - ystep = -1; - } - - for (; x0 <= x1; x0++) { - if (steep) { - if ((err = ssd1306_draw_pixel(dev, fb, y0, x0, color))) - return err; - } - else { - if ((err = ssd1306_draw_pixel(dev, fb, x0, y0, color))) - return err; - } - errx -= dy; - if (errx < 0) { - y0 += ystep; - errx += dx; - } - } - return 0; -} - -int ssd1306_draw_triangle(const ssd1306_t *dev, uint8_t *fb, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, - ssd1306_color_t color) -{ - int err; - if ((err = ssd1306_draw_line(dev, fb, x0, y0, x1, y1, color))) - return err; - if ((err = ssd1306_draw_line(dev, fb, x1, y1, x2, y2, color))) - return err; - return ssd1306_draw_line(dev, fb, x2, y2, x0, y0, color); -} - -int ssd1306_fill_triangle(const ssd1306_t *dev, uint8_t *fb, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, - ssd1306_color_t color) -{ - int16_t a, b, y, last; - int err; - - // Sort coordinates by Y order (y2 >= y1 >= y0) - if (y0 > y1) { - swap(y0, y1);swap(x0, x1); - } - if (y1 > y2) { - swap(y2, y1);swap(x2, x1); - } - if (y0 > y1) { - swap(y0, y1);swap(x0, x1); - } - - if (y0 == y2) { // Handle awkward all-on-same-line case as its own thing - a = b = x0; - if (x1 < a) a = x1; - else if (x1 > b) b = x1; - if (x2 < a) a = x2; - else if (x2 > b) b = x2; - if ((err = ssd1306_draw_hline(dev, fb, a, y0, b - a + 1, color))) - return err; - return 0; - } - - int16_t - dx01 = x1 - x0, - dy01 = y1 - y0, - dx02 = x2 - x0, - dy02 = y2 - y0, - dx12 = x2 - x1, - dy12 = y2 - y1, - sa = 0, - sb = 0; - - // For upper part of triangle, find scanline crossings for segments - // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1 - // is included here (and second loop will be skipped, avoiding a /0 - // error there), otherwise scanline y1 is skipped here and handled - // in the second loop...which also avoids a /0 error here if y0=y1 - // (flat-topped triangle). - if (y1 == y2) last = y1; // Include y1 scanline - else last = y1 - 1; // Skip it - - for (y = y0; y <= last; y++) { - a = x0 + sa / dy01; - b = x0 + sb / dy02; - sa += dx01; - sb += dx02; - /* longhand: - a = x0 + (x1 - x0) * (y - y0) / (y1 - y0); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if (a > b) swap(a, b); - if ((err = ssd1306_draw_hline(dev, fb, a, y, b - a + 1, color))) - return err; - } - - // For lower part of triangle, find scanline crossings for segments - // 0-2 and 1-2. This loop is skipped if y1=y2. - sa = dx12 * (y - y1); - sb = dx02 * (y - y0); - for (; y <= y2; y++) { - a = x1 + sa / dy12; - b = x0 + sb / dy02; - sa += dx12; - sb += dx02; - /* longhand: - a = x1 + (x2 - x1) * (y - y1) / (y2 - y1); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if (a > b) swap(a, b); - if ((err = ssd1306_draw_hline(dev, fb, a, y, b - a + 1, color))) - return err; - } - return 0; -} - -int ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, char c, ssd1306_color_t foreground, - ssd1306_color_t background) -{ - uint8_t i, j; - const uint8_t *bitmap; - uint8_t line = 0; - int err; - - if (font == NULL) - return 0; - - const font_char_desc_t *d = font_get_char_desc(font, c); - if (d == NULL) - return 0; - - bitmap = font->bitmap + d->offset; - for (j = 0; j < font->height; ++j) { - for (i = 0; i < d->width; ++i) { - if (i % 8 == 0) { - line = bitmap[(d->width + 7) / 8 * j + i / 8]; // line data - } - if (line & 0x80) { - err = ssd1306_draw_pixel(dev, fb, x + i, y + j, foreground); - } - else { - switch (background) { - case OLED_COLOR_TRANSPARENT: - // Not drawing for transparent background - break; - case OLED_COLOR_WHITE: - case OLED_COLOR_BLACK: - err = ssd1306_draw_pixel(dev, fb, x + i, y + j, background); - break; - case OLED_COLOR_INVERT: - // I don't know why I need invert background - break; - } - } - if (err) - return -ERANGE; - line = line << 1; - } - } - return d->width; -} - -int ssd1306_draw_string(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, const char *str, - ssd1306_color_t foreground, ssd1306_color_t background) -{ - uint8_t t = x; - int err; - - if (font == NULL || str == NULL) - return 0; - - while (*str) { - if ((err = ssd1306_draw_char(dev, fb, font, x, y, *str, foreground, background)) < 0) - return err; - x += err; - ++str; - if (*str) - x += font->c; - } - return x - t; -} - -int ssd1306_stop_scroll(const ssd1306_t *dev) -{ - return ssd1306_command(dev, SSD1306_SCROLL_DISABLE); -} - -int ssd1306_start_scroll_hori(const ssd1306_t *dev, bool way, uint8_t start, uint8_t stop, ssd1306_scroll_t frame) -{ - int err; - - if (way) { - if ((err = ssd1306_command(dev, SSD1306_SCROLL_HOR_LEFT))) - return err; - } - else { - if ((err = ssd1306_command(dev, SSD1306_SCROLL_HOR_RIGHT))) - return err; - } - if (!ssd1306_command(dev, 0x00) && //dummy - !ssd1306_command(dev, (start&0x07)) && - !ssd1306_command(dev, frame) && - !ssd1306_command(dev, (stop&0x07)) && - !ssd1306_command(dev, 0x00) && //dummy - !ssd1306_command(dev, 0xFF) && //dummy - !ssd1306_command(dev, SSD1306_SCROLL_ENABLE)) { - return 0; - } - return -EIO; -} - -int ssd1306_start_scroll_hori_vert(const ssd1306_t *dev, bool way, uint8_t start, uint8_t stop, uint8_t dy, ssd1306_scroll_t frame) -{ - //this function dont work well if no vertical setting. - if ((!dy) || (dy > 63)) - return -EINVAL; - int err; - - //vertical scrolling selection (all screen) - if ((err = ssd1306_command(dev, 0xA3))) - return err; - if ((err = ssd1306_command(dev, 0))) - return err; - if ((err = ssd1306_command(dev, dev->height))) - return err; - - if (way) { - if ((err = ssd1306_command(dev, SSD1306_SCROLL_HOR_VER_LEFT))) - return err; - } - else { - if ((err = ssd1306_command(dev, SSD1306_SCROLL_HOR_VER_RIGHT))) - return err; - } - if (!ssd1306_command(dev, 0x00) && //dummy - !ssd1306_command(dev, (start&0x07)) && - !ssd1306_command(dev, frame) && - !ssd1306_command(dev, (stop&0x07)) && - !ssd1306_command(dev, dy) && - !ssd1306_command(dev, SSD1306_SCROLL_ENABLE)) { - return 0; - } - return -EIO; -} diff --git a/extras/ssd1306/ssd1306.h b/extras/ssd1306/ssd1306.h deleted file mode 100644 index 045d86f..0000000 --- a/extras/ssd1306/ssd1306.h +++ /dev/null @@ -1,532 +0,0 @@ -/** - * SSD1306 OLED display driver for esp-open-rtos. - * - * Copyright (c) 2016 urx (https://github.com/urx), - * Ruslan V. Uss (https://github.com/UncleRus) - * Zaltora (https://github.com/Zaltora) - * - * MIT Licensed as described in the file LICENSE - */ -#ifndef _SSD1306__H_ -#define _SSD1306__H_ - -#include -#include -#include -#include - -#include "config.h" - -// shifted -#if (SSD1306_I2C_SUPPORT) - #include - #define SSD1306_I2C_ADDR_0 (0x3C) - #define SSD1306_I2C_ADDR_1 (0x3D) -#endif - -#ifdef __cplusplus -extern "C" -{ -#endif - -/** - * SH1106 pump voltage value - */ -typedef enum -{ - SH1106_VOLTAGE_74 = 0, // 7.4 Volt - SH1106_VOLTAGE_80, // 8.0 Volt - SH1106_VOLTAGE_84, // 8.4 Volt - SH1106_VOLTAGE_90 // 9.0 Volt -} sh1106_voltage_t; - -/** - * I/O protocols - */ -typedef enum -{ - SSD1306_PROTO_I2C = 0, //!< I2C - SSD1306_PROTO_SPI4, //!< SPI 8 bits + D/C pin - SSD1306_PROTO_SPI3 //!< SPI 9 bits -} ssd1306_protocol_t; - -/** - * Screen type - */ -typedef enum -{ - SSD1306_SCREEN = 0, - SH1106_SCREEN -} ssd1306_screen_t; - -/** - * Device descriptor - */ -typedef struct -{ - ssd1306_protocol_t protocol; - ssd1306_screen_t screen; - union - { -#if (SSD1306_I2C_SUPPORT) - i2c_dev_t i2c_dev; //!< I2C devuce descriptor, used by SSD1306_PROTO_I2C -#endif -#if (SSD1306_SPI4_SUPPORT) || (SSD1306_SPI3_SUPPORT) - uint8_t cs_pin; //!< Chip Select GPIO pin, used by SSD1306_PROTO_SPI3, SSD1306_PROTO_SPI4 -#endif - }; -#if (SSD1306_SPI4_SUPPORT) - uint8_t dc_pin; //!< Data/Command GPIO pin, used by SSD1306_PROTO_SPI4 -#endif - uint8_t width; //!< Screen width, currently supported 128px, 96px - uint8_t height; //!< Screen height, currently supported 16px, 32px, 64px -} ssd1306_t; - -/** - * Addressing mode, see datasheet - */ -typedef enum -{ - SSD1306_ADDR_MODE_HORIZONTAL = 0, - SSD1306_ADDR_MODE_VERTICAL, - SSD1306_ADDR_MODE_PAGE -} ssd1306_mem_addr_mode_t; - -/** - * Drawing color - */ -typedef enum -{ - OLED_COLOR_TRANSPARENT = -1, //!< Transparent (not drawing) - OLED_COLOR_BLACK = 0, //!< Black (pixel off) - OLED_COLOR_WHITE = 1, //!< White (or blue, yellow, pixel on) - OLED_COLOR_INVERT = 2, //!< Invert pixel (XOR) -} ssd1306_color_t; - -/** - * Scrolling time frame interval - */ -typedef enum -{ - FRAME_5 = 0, - FRAME_64, - FRAME_128, - FRAME_256, - FRAME_3, - FRAME_4, - FRAME_25, - FRAME_2 - -} ssd1306_scroll_t; - -/** - * Issue a single command on SSD1306. - * @param dev Pointer to device descriptor - * @param cmd Command - * @return Non-zero if error occured - */ -int ssd1306_command(const ssd1306_t *dev, uint8_t cmd); - -/** - * Default init for SSD1306 - * @param dev Pointer to device descriptor - * @return Non-zero if error occured - */ -int ssd1306_init(const ssd1306_t *dev); - -/** - * Load picture in xbm format into the SSD1306 RAM. - * @param dev Pointer to device descriptor - * @param xbm Pointer to xbm picture array - * @param fb Pointer to local buffer for storing converted xbm image - * @return Non-zero if error occured - */ -int ssd1306_load_xbm(const ssd1306_t *dev, uint8_t *xbm, uint8_t *fb); - -/** - * Load local framebuffer into the SSD1306 RAM. - * @param dev Pointer to device descriptor - * @param buf Pointer to framebuffer or NULL for clear RAM. Framebuffer size = width * height / 8 - * @return Non-zero if error occured - */ -int ssd1306_load_frame_buffer(const ssd1306_t *dev, uint8_t buf[]); - -/** - * Clear SSD1306 RAM. - * @param dev Pointer to device descriptor - * @return Non-zero if error occured - */ -inline int ssd1306_clear_screen(const ssd1306_t *dev) -{ - return ssd1306_load_frame_buffer(dev, NULL); -} - -/** - * Turn display on or off. - * @param dev Pointer to device descriptor - * @param on Turn on if true - * @return Non-zero if error occured - */ -int ssd1306_display_on(const ssd1306_t *dev, bool on); - -/** - * Set the Display Start Line register to determine starting address of - * display RAM, by selecting a value from 0 to 63. With value equal to 0, - * RAM row 0 is mapped to COM0. With value equal to 1, RAM row 1 is mapped - * to COM0 and so on. - * @param dev Pointer to device descriptor - * @param start Start line, 0..63 - * @return Non-zero if error occured - */ -int ssd1306_set_display_start_line(const ssd1306_t *dev, uint8_t start); - -/** - * Set display offset (see datasheet). - * @param dev Pointer to device descriptor - * @param offset Offset, 0..63 - * @return Non-zero if error occured - */ -int ssd1306_set_display_offset(const ssd1306_t *dev, uint8_t offset); - -/** - * Select charge pump voltage. See value in datasheet. - * @param dev Pointer to device descriptor - * @param select Select charge pump voltage value - * @return Non-zero if error occured - */ -int sh1106_set_charge_pump_voltage(const ssd1306_t *dev, sh1106_voltage_t select); - -/** - * Enable or disable the charge pump. See application note in datasheet. - * @param dev Pointer to device descriptor - * @param enabled Enable charge pump if true - * @return Non-zero if error occured - */ -int ssd1306_set_charge_pump_enabled(const ssd1306_t *dev, bool enabled); - -/** - * Set memory addressing mode. See datasheet. - * @param dev Pointer to device descriptor - * @param mode Addressing mode - * @return Non-zero if error occured - */ -int ssd1306_set_mem_addr_mode(const ssd1306_t *dev, ssd1306_mem_addr_mode_t mode); - -/** - * Change the mapping between the display data column address and the - * segment driver. See datasheet. - * @param dev Pointer to device descriptor - * @param on Enable segment remapping if true - * @return Non-zero if error occured - */ -int ssd1306_set_segment_remapping_enabled(const ssd1306_t *dev, bool on); - -/** - * Set the scan direction of the COM output, allowing layout flexibility - * in the OLED module design. Additionally, the display will show once - * this command is issued. For example, if this command is sent during - * normal display then the graphic display will be vertically flipped - * immediately. - * @param dev Pointer to device descriptor - * @param fwd Forward direction if true, backward otherwise - * @return Non-zero if error occured - */ -int ssd1306_set_scan_direction_fwd(const ssd1306_t *dev, bool fwd); - -/** - * Set the COM signals pin configuration to match the OLED panel - * hardware layout. See datasheet. - * @param dev Pointer to device descriptor - * @param config Sequential COM pin configuration - * @return Non-zero if error occured - */ -int ssd1306_set_com_pin_hw_config(const ssd1306_t *dev, uint8_t config); - -/** - * Set the display contrast. - * @param dev Pointer to device descriptor - * @param contrast Contrast increases as the value increases. - * @return Non-zero if error occured - */ -int ssd1306_set_contrast(const ssd1306_t *dev, uint8_t contrast); - -/** - * Set the display to be either normal or inverse. In normal display - * a RAM data of 1 indicates an “ON” pixel while in inverse display a - * RAM data of 0 indicates an “ON” pixel. - * @param dev Pointer to device descriptor - * @param on Inverse display if true - * @return Non-zero if error occured - */ -int ssd1306_set_inversion(const ssd1306_t *dev, bool on); - -/** - * Set the divide ratio of display clock and oscillator frequency. - * See datasheet. - * @param dev Pointer to device descriptor - * @param osc_freq Lower nibble - DCLK divide ratio, high - * nibble - oscillator frequency - * @return Non-zero if error occured - */ -int ssd1306_set_osc_freq(const ssd1306_t *dev, uint8_t osc_freq); - -/** - * Switch the default 63 multiplex mode to any multiplex ratio, - * ranging from 16 to 63. The output pads COM0~COM63 will be switched - * to the corresponding COM signal. - * @param dev Pointer to device descriptor - * @param ratio Multiplex ratio, 16..63 - * @return Non-zero if error occured - */ -int ssd1306_set_mux_ratio(const ssd1306_t *dev, uint8_t ratio); - -/** - * Specify column start address and end address of the display data RAM. - * This command also sets the column address pointer to column start - * address. This pointer is used to define the current read/write column - * address in graphic display data RAM. If horizontal address increment mode - * is enabled by ssd1306_set_mem_addr_mode(), after finishing read/write - * one column data, it is incremented automatically to the next column - * address. Whenever the column address pointer finishes accessing the - * end column address, it is reset back to start column address and the - * row address is incremented to the next row. - * @param dev Pointer to device descriptor - * @param start Start RAM address - * @param stop End RAM address - * @return Non-zero if error occured - */ -int ssd1306_set_column_addr(const ssd1306_t *dev, uint8_t start, uint8_t stop); - -/** - * Specify page start address and end address of the display data RAM. - * This command also sets the page address pointer to page start address. - * This pointer is used to define the current read/write page address in - * graphic display data RAM. If vertical address increment mode is enabled by - * ssd1306_set_mem_addr_mode(), after finishing read/write one page data, - * it is incremented automatically to the next page address. Whenever the page - * address pointer finishes accessing the end page address, it is reset back - * to start page address. - * @param dev Pointer to device descriptor - * @param start Start RAM address - * @param stop End RAM address - * @return Non-zero if error occured - */ -int ssd1306_set_page_addr(const ssd1306_t *dev, uint8_t start, uint8_t stop); - -/** - * Set the duration of the pre-charge period. The interval is counted in - * number of DCLK, where RESET equals 2 DCLKs. - * @param dev Pointer to device descriptor - * @param prchrg Pre-charge period - * @return Non-zero if error occured - */ -int ssd1306_set_precharge_period(const ssd1306_t *dev, uint8_t prchrg); - -/** - * Adjust the VCOMH regulator output. See datasheet. - * @param dev Pointer to device descriptor - * @param lvl Deselect level - * @return Non-zero if error occured - */ -int ssd1306_set_deseltct_lvl(const ssd1306_t *dev, uint8_t lvl); - -/** - * Force the entire display to be “ON”, regardless of the contents of - * the display data RAM. - * @param dev Pointer to device descriptor - * @param light Force the entire display to be “ON if true - * @return Non-zero if error occured - */ -int ssd1306_set_whole_display_lighting(const ssd1306_t *dev, bool light); - -/** - * Draw one pixel - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x X coordinate - * @param y Y coordinate - * @param color Color of the pixel - * @return Non-zero if error occured - */ -int ssd1306_draw_pixel(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, ssd1306_color_t color); - -/** - * Draw a horizontal line - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x X coordinate or starting (left) point - * @param y Y coordinate or starting (left) point - * @param w Line width - * @param color Color of the line - * @return Non-zero if error occured - */ -int ssd1306_draw_hline(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, uint8_t w, ssd1306_color_t color); - -/** - * Draw a vertical line - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x X coordinate or starting (top) point - * @param y Y coordinate or starting (top) point - * @param h Line height - * @param color Color of the line - * @return Non-zero if error occured - */ -int ssd1306_draw_vline(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, uint8_t h, ssd1306_color_t color); - -/** - * Draw a line - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x0 First x point coordinate - * @param y0 First y point coordinate - * @param x1 Second x point coordinate - * @param y1 Second y point coordinate - * @param color Color of the line - * @return Non-zero if error occured - */ -int ssd1306_draw_line(const ssd1306_t *dev, uint8_t *fb, int16_t x0, int16_t y0, int16_t x1, int16_t y1, ssd1306_color_t color); - -/** - * Draw a rectangle - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x X coordinate or starting (top left) point - * @param y Y coordinate or starting (top left) point - * @param w Rectangle width - * @param h Rectangle height - * @param color Color of the rectangle border - * @return Non-zero if error occured - */ -int ssd1306_draw_rectangle(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, uint8_t w, uint8_t h, ssd1306_color_t color); - -/** - * Draw a filled rectangle - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x X coordinate or starting (top left) point - * @param y Y coordinate or starting (top left) point - * @param w Rectangle width - * @param h Rectangle height - * @param color Color of the rectangle - * @return Non-zero if error occured - */ -int ssd1306_fill_rectangle(const ssd1306_t *dev, uint8_t *fb, int8_t x, int8_t y, uint8_t w, uint8_t h, ssd1306_color_t color); - -/** - * Draw a circle - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x0 X coordinate or center - * @param y0 Y coordinate or center - * @param r Radius - * @param color Color of the circle border - * @return Non-zero if error occured - */ -int ssd1306_draw_circle(const ssd1306_t *dev, uint8_t *fb, int8_t x0, int8_t y0, uint8_t r, ssd1306_color_t color); - -/** - * Draw a filled circle - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x0 X coordinate or center - * @param y0 Y coordinate or center - * @param r Radius - * @param color Color of the circle - * @return Non-zero if error occured - */ -int ssd1306_fill_circle(const ssd1306_t *dev, uint8_t *fb, int8_t x0, int8_t y0, uint8_t r, ssd1306_color_t color); - -/** - * Draw a triangle - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x0 First x point coordinate - * @param y0 First y point coordinate - * @param x1 Second x point coordinate - * @param y1 Second y point coordinate - * @param x2 third x point coordinate - * @param y2 third y point coordinate - * @param color Color of the triangle border - * @return Non-zero if error occured - */ -int ssd1306_draw_triangle(const ssd1306_t *dev, uint8_t *fb, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, ssd1306_color_t color); - -/** - * Draw a filled triangle - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param x0 First x point coordinate - * @param y0 First y point coordinate - * @param x1 Second x point coordinate - * @param y1 Second y point coordinate - * @param x2 third x point coordinate - * @param y2 third y point coordinate - * @param color Color of the triangle - * @return Non-zero if error occured - */ -int ssd1306_fill_triangle(const ssd1306_t *dev, uint8_t *fb, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, ssd1306_color_t color); - -/** - * Draw one character using currently selected font - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param font Pointer to font info structure - * @param x X position of character (top-left corner) - * @param y Y position of character (top-left corner) - * @param c The character to draw - * @param foreground Character color - * @param background Background color - * @return Width of the character or negative value if error occured - */ -int ssd1306_draw_char(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, char c, ssd1306_color_t foreground, ssd1306_color_t background); - -/** - * Draw one character using currently selected font - * @param dev Pointer to device descriptor - * @param fb Pointer to framebuffer. Framebuffer size = width * height / 8 - * @param font Pointer to font info structure - * @param x X position of character (top-left corner) - * @param y Y position of character (top-left corner) - * @param str The string to draw - * @param foreground Character color - * @param background Background color - * @return Width of the string or negative value if error occured - */ -int ssd1306_draw_string(const ssd1306_t *dev, uint8_t *fb, const font_info_t *font, uint8_t x, uint8_t y, const char *str, ssd1306_color_t foreground, ssd1306_color_t background); - -/** - * Stop scrolling (the ram data needs to be rewritten) - * @param dev Pointer to device descriptor - * @return Non-zero if error occured - */ -int ssd1306_stop_scroll(const ssd1306_t *dev); - -/** - * Start horizontal scrolling - * @param dev Pointer to device descriptor - * @param way Orientation ( true: left // false: right ) - * @param start Page address start - * @param stop Page address stop - * @param frame Time interval between each scroll - * @return Non-zero if error occured - */ -int ssd1306_start_scroll_hori(const ssd1306_t *dev, bool way, uint8_t start, uint8_t stop, ssd1306_scroll_t frame); - -/** - * Start horizontal+vertical scrolling (cant vertical scrolling) - * @param dev Pointer to device descriptor - * @param way Orientation ( true: left // false: right ) - * @param start Page address start - * @param stop Page address stop - * @param dy vertical size shifting (min : 1 // max: 63 ) - * @param frame Time interval between each scroll - * @return Non-zero if error occured - */ -int ssd1306_start_scroll_hori_vert(const ssd1306_t *dev, bool way, uint8_t start, uint8_t stop, uint8_t dy, ssd1306_scroll_t frame); - -#ifdef __cplusplus -} -#endif - -#endif // _SSD1306__H_ diff --git a/extras/stdin_uart_interrupt/component.mk b/extras/stdin_uart_interrupt/component.mk index b71150f..e00cf81 100644 --- a/extras/stdin_uart_interrupt/component.mk +++ b/extras/stdin_uart_interrupt/component.mk @@ -4,10 +4,10 @@ # for 'usage' as this module is a drop-in replacement for the original polled # version of reading from the UART. -INC_DIRS += $(stdin_uart_interrupt_ROOT) +INC_DIRS += $(ROOT)extras/stdin_uart_interrupt # args for passing into compile rule generation -stdin_uart_interrupt_SRC_DIR = $(stdin_uart_interrupt_ROOT) -stdin_uart_interrupt_WHOLE_ARCHIVE = yes +extras/stdin_uart_interrupt_INC_DIR = $(ROOT)extras/stdin_uart_interrupt +extras/stdin_uart_interrupt_SRC_DIR = $(ROOT)extras/stdin_uart_interrupt -$(eval $(call component_compile_rules,stdin_uart_interrupt)) +$(eval $(call component_compile_rules,extras/stdin_uart_interrupt)) diff --git a/extras/stdin_uart_interrupt/stdin_uart_interrupt.c b/extras/stdin_uart_interrupt/stdin_uart_interrupt.c index ba0ce4f..e85c913 100644 --- a/extras/stdin_uart_interrupt/stdin_uart_interrupt.c +++ b/extras/stdin_uart_interrupt/stdin_uart_interrupt.c @@ -40,55 +40,30 @@ #define UART0_RX_SIZE (128) // ESP8266 UART HW FIFO size -static QueueHandle_t uart0_queue; +static xSemaphoreHandle uart0_sem = NULL; static bool inited = false; -static bool uart0_rx_init(void); -static int uart0_nonblock; -static TickType_t uart0_vtime = portMAX_DELAY; +static void uart0_rx_init(void); -uint32_t uart0_parity_errors; -uint32_t uart0_framing_errors; -uint32_t uart0_breaks_detected; - -IRAM void uart0_rx_handler(void *arg) +IRAM void uart0_rx_handler(void) { // TODO: Handle UART1, see reg 0x3ff20020, bit2, bit0 represents uart1 and uart0 respectively - - // printf(" [%08x (%d)]\n", READ_PERI_REG(UART_INT_ST(UART0)), READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S)); - - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - - do { - // If new data arrives and the status changes after checking here, them - // the interrupt will be re-triggered. - uint32_t int_status = UART(UART0).INT_STATUS; - - if (int_status & UART_INT_STATUS_RXFIFO_FULL) { - size_t count = UART(UART0).STATUS & (UART_STATUS_RXFIFO_COUNT_M << UART_STATUS_RXFIFO_COUNT_S); - for (size_t i = 0; i < count; i++) { - char ch = UART(UART0).FIFO & (UART_FIFO_DATA_M << UART_FIFO_DATA_S); - xQueueSendToBackFromISR(uart0_queue, &ch, &xHigherPriorityTaskWoken); + if (!UART(UART0).INT_STATUS & UART_INT_STATUS_RXFIFO_FULL) { + return; + } +// printf(" [%08x (%d)]\n", READ_PERI_REG(UART_INT_ST(UART0)), READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S)); + if (UART(UART0).INT_STATUS & UART_INT_STATUS_RXFIFO_FULL) { + UART(UART0).INT_CLEAR = UART_INT_CLEAR_RXFIFO_FULL; + if (UART(UART0).STATUS & (UART_STATUS_RXFIFO_COUNT_M << UART_STATUS_RXFIFO_COUNT_S)) { + long int xHigherPriorityTaskWoken; + _xt_isr_mask(1 << INUM_UART); + _xt_clear_ints(1< 0) { - return i; + for(int i = 0; i < len; i++) { + if (!(UART(UART0).STATUS & (UART_STATUS_RXFIFO_COUNT_M << UART_STATUS_RXFIFO_COUNT_S))) { + _xt_isr_unmask(1 << INUM_UART); + if (!xSemaphoreTake(uart0_sem, portMAX_DELAY)) { + printf("\nFailed to get sem\n"); } - if (nonblock) { - r->_errno = EAGAIN; - return -1; - } - return 0; } + ptr[i] = UART(UART0).FIFO & (UART_FIFO_DATA_M << UART_FIFO_DATA_S); } return len; } -static bool uart0_rx_init(void) +static void uart0_rx_init(void) { - uart0_queue = xQueueCreate(64, sizeof(char)); - - if (!uart0_queue) { - return false; - } - int trig_lvl = 1; + uart0_sem = xSemaphoreCreateCounting(UART0_RX_SIZE, 0); - _xt_isr_attach(INUM_UART, uart0_rx_handler, NULL); + _xt_isr_attach(INUM_UART, uart0_rx_handler); _xt_isr_unmask(1 << INUM_UART); // reset the rx fifo @@ -167,10 +112,7 @@ static bool uart0_rx_init(void) UART(UART0).INT_CLEAR = 0x1ff; // enable rx_interrupt - UART(UART0).INT_ENABLE = UART_INT_ENABLE_RXFIFO_FULL | UART_INT_ENABLE_PARITY_ERR | - UART_INT_ENABLE_FRAMING_ERR | UART_INT_ENABLE_BREAK_DETECTED; + UART(UART0).INT_ENABLE = UART_INT_ENABLE_RXFIFO_FULL; inited = true; - - return true; } diff --git a/extras/stdin_uart_interrupt/stdin_uart_interrupt.h b/extras/stdin_uart_interrupt/stdin_uart_interrupt.h index 3a7e9ca..05652bb 100644 --- a/extras/stdin_uart_interrupt/stdin_uart_interrupt.h +++ b/extras/stdin_uart_interrupt/stdin_uart_interrupt.h @@ -25,19 +25,8 @@ #ifndef __STDIN_UART_INTERRUPT_H__ #define __STDIN_UART_INTERRUPT_H__ -#include "FreeRTOS.h" #include -/* Return number of characters waiting in UART0. */ +// Return number of characters waiting in UART0 uint32_t uart0_num_char(void); - -/* Set UART0 input to nonblocking or blocking, returning the old state. */ -int uart0_set_nonblock(int); - -/* Set the UART0 input wait time in ticks, or zero to wait indefinitely, - * returning the old wait time. The wait time is only used when the input is - * blocking. - */ -TickType_t uart0_set_vtime(TickType_t ticks); - #endif diff --git a/extras/timekeeping/LICENSE b/extras/timekeeping/LICENSE deleted file mode 100644 index c924453..0000000 --- a/extras/timekeeping/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -/*- - * Copyright (c) 2018, Jeff Kletsky - * 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 the copyright holder 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/extras/timekeeping/README.timekeeping.md b/extras/timekeeping/README.timekeeping.md deleted file mode 100644 index 77277e7..0000000 --- a/extras/timekeeping/README.timekeeping.md +++ /dev/null @@ -1,213 +0,0 @@ -# Overview -`timekeeping` provides an implementation of a clock that can provide monotonic time with microsecond resolution and supports many of the common time-of-day functions in a POSIX-like manner through `gettimeofday()`. It does not supply a clock *discipline*, such as NTP or SNTP, but does implement `settimeofday()` and `adjtime()` to allow implementation of clock discipline. - -The system clock is used to as the time reference. Time is available from boot or wake, referenced to the system clock's "zero" until `settimeofday()` is called. - -Timezone functionality is provided through `tzset()`, with the assumption that the `timekeeping` internal clock is set to UTC. - -**Important Note** - -This code does not alter OS-level behavior related to "ticks". For example, `vTaskDelay(const TickType_t xTicksToDelay)` will continue to result in a delay of `xTicksToDelay` *ticks,* which may not be the same length of time as indicated by calls to `gettimeofday()` or related functions. - -# Supported Functionality -## Standard C Library Calls -### Implemented or Updated - - #include - - int - gettimeofday(struct timeval *restrict tp, void *restrict tzp); - - int - settimeofday(const struct timeval *tp, const struct timezone *tzp); - - int - adjtime(const struct timeval *delta, struct timeval *olddelta); - -### Existing, Unmodified - - #include - - int - setenv(const char *name, const char *value, int overwrite); -
- - #include - - void - tzset(void); - -Note that POSIX-style clock selection and timers have not been modified at this time. - -## Implementation-specific Details - -See [notes below](#managing-system-clock-wrap) on the need to call `gettimeofday()` or `adjtime()` at least once an hour to detect and compensate for clock "wrap". - -Note that, in keeping with current practice, calls to `settimeofday()` and `gettimeofday()` do not utilize incoming values in the timezone argument to modify the value referenced by the time argument. In this implementation, the time argument for `gettimeofday()` and `settimeofday()` is *always* relative to the internal clock's datum (assumed by this implementation to be UTC). - -With the prototypes in ``, it is either not possible (`const`) or unsafe (`void`) to modify the timezone argument. As a result, this implementation ignores any value passes in the timezone argument entirely. This implementation does not consider it an error to pass a non-null value for the timezone argument. - -It is suggested that time-critical functions be executed from high-priority threads to reduce the likelihood of timing errors that may occur if the thread is swapped out of execution during the calls. - -# Examples - -## Set Time of Day (UTC) - - struct timeval tv; - tv->tv_sec = 1518798027; /* 2018-02-16T16:20:27+00:00 */ - tv->tv_usec = 0; - settimeofday(&tv, NULL); -## Get Time of Day (UTC) - struct timeval tv; - gettimeofday(&tv, NULL); -## Slew Time - struct timeval tv; - tv->tv_sec = 0; - tv->tv_usec = -50 * 1000; /* -50 ms */ - adjtime(&tv, NULL); -## Set Local Time Zone to US Pacific - setenv("TZ", "PST8PDT7,M3.1.0,M11.1.0", 1); - tzset(); -## Set Local Time Zone to UTC - setenv("TZ", "UTC0UTC0", 1); - tzset(); - - -# Timezone Management - -As newlib is typically compiled and supplied with for esp-open-rtos, the timezone can be managed through `setenv()` and `tzset()` using POSIX-style timezone strings. - -For example - - setenv("TZ", "PST8PDT7,M3.1.0,M11.1.0", 1); - tzset(); - -will set United States' Pacific Time rules (as of 2018) for both standard and daylight savings time. As only two rules are implemented in newlib, calculations across changes in timezone rules, or localities that have more than two changes per year are not directly supported by newlib itself. - -Although the source code of `setenv()` appears to call `tzset()` when `TZ` is set, the combination of empirical experience and the POSIX description of `tzset()` -> However, portable applications should call `tzset()` explicitly before using `ctime_r()` or `localtime_r()` because setting timezone information is optional for those functions. - -strongly suggest an explicit call to `tzset()` after changing `TZ`. - -Note that `unsetenv("TZ")` will not "reset" all the internal variables related to timezone implementation. One approach to setting a zero-offset timezone is - - setenv("TZ", "UTC0UTC0"); - tzset(); - -While the timezone rules will still be populated, the global `_daylight` is set to `0` (`DST_NONE`) so that the rules should not be consulted by "compliant" code. Further, the offset in the two rules is set to `0` so that even if the rules are consulted by other code that does not respect the `_daylight` setting there is no offset applied. - -Direct manipulation of the timezone-related variables is not recommended due to multi-threading issues. - -# Implementation Approach -## Hardware Clock -The system clock is used as the underlying clock. A discussion of why the ESP8266 RTC is *not* used may be found in an [appendix](#why-not-the-rtc). Espressif specifies a 15-ppm or better crystal, so the system clock should be accurate to better than 1 ms per minute, or 1.3 seconds per day. For comparison, color-burst crystals are typically in the 30-100 ppm range. - -The system clock is a 32-bit value with one-microsecond resolution. As a result, it will "wrap" every hour and a few minutes. This 32-bit limitation is accommodated for in software. The system clock is allowed to free run; all compensation and adjustments are done in software. - -## Hardware Clock to Internal Clock Conversion - -The "internal clock" is the system's estimate of microseconds since the epoch. As the ESP8266 is a self-contained system and the only consumer of the clock, there is no implementation of a "wall-time CMOS" functionality. - -The value of the internal clock is referred to as `internal_clock` and `system_clock` refers to the current value that would be read using `sdk_system_get_time()`. - - -### Without `adjtime()` Slew in Process -When there is not a pending slew from a call to `adjtime()`, the internal clock is calculated as - - internal_clock = system_clock + clock_offset - -`clock_offset` is a 64-bit, signed integer in units of microseconds and should not overflow until well past the useful lifespan of the ESP8266. `clock_offset` includes the aggregated offset specified by calls to `settimeofday()`, `adjtime()`, as well as the overflow from the [system clock wrapping](#managing-system-clock-wrap). - -### `adjtime()` Implementation - -`adjtime()` is generally used after the initial clock set to slowly slew the time, rather than step it. The reference implementation of NTPv4 limits its slew rate requests to 500 us/s (500 ppm). This rate of slew should be sufficient for the crystal-controlled system clock of the ESP8266. - -The slew rate of the current implementation is fixed 500 us/s by the macro `ADJTIME_SLEW_PERIOD`, measured in units of us of elapsed time per us of slew. By defining it in this way, integer arithmetic can be used, providing significant speed advantages over floating-point calculations. - -When a call to `adjtime()` is made, the current time is captured in `slew_start_time`. The elapsed time in microseconds to slew the requested amount is calculated, added to the current `internal_clock`, and saved as `slew_complete_time`. Until `system_clock + clock_offset` passes `slew_complete_time` there is slew in process and the internal clock is calculated as - - internal_clock = (system_clock + clock_offset) - + ( (system_clock + clock_offset) - - slew_start_time ) - / SIGNED_ADJTIME_SLEW_PERIOD - -where `SIGNED_ADJTIME_SLEW_PERIOD` adopts the sign of the requested `delta`. Use of the un-slewed clock is intentional as it simplifies calculations. - -Once the slew is complete, the amount of slew is added to `clock_offset` and calculation of `internal_clock` resumes as described in the [previous section](#without-adjtime-slew-in-process). See [*Managing System-clock Wrap*](#managing-system-clock-wrap) for how and when this adjustment is made. - -Note that `settimeofday()` is implemented as a "hard set" of the internal clock and will abort any in-progress clock slew. - -Any remaining slew from prior calls to `adjtime()` can be returned by the call in its second argument, *but are overridden by the new value, not added to them.* The remaining slew is calculated as - - olddelta_in_us = (slew_complete_time - (system_clock + clock_offset)) - / SIGNED_ADJTIME_SLEW_PERIOD - -and returned in `struct timeval *olddelta` in normalized form. `adjtime()` can be called with a NULL `delta` and will not modify the slew in that case. - -Note that the magnitude of `delta` cannot exceed `ADJTIME_MAX_SECS_ALLOWED`, presently defined as 2000 (seconds). This is significantly greater than the 128-ms limit within the NTPv4 reference implementation, small enough to prevent overflow of the 32-bit `adjtime_delta` internal, and hopefully larger than any rational use of `adjtime()`. - - -### Managing System-clock Wrap -As previously discussed, the system clock wraps in a little bit more than hour (232 microseconds, ~ 71 minutes). This needs to be detected and accounted for prior to any call to obtain internal time, as well as before it wraps a second time. the internal `_check_system_clock()` manages this, as well as the incorporation of completed slew into `clock_offset`. It is called within the implementations of `settimeofday()`, `adjtime()`, and `gettimeofday()`. - -`_check_system_clock()` operates by recording the last value of the system clock and comparing it to the current value. If the current value is less than the last value, then it is assumed that a single wrap has occurred and the value of `clock_offset` is increased by 232. It also checks to see if there is a completed clock slew. If so, adds the (signed) value of the slew in microseconds to `clock_offset` and resets the internal state variables associated with slew. - -In many situations either or both `adjtime()` or `getttimeofday()` are called at least once an hour. If this is not the case, `gettimeofday(NULL, NULL)` should be called once an hour, using a repeating timer or other appropriate method. - - -# License - -All files in this directory - - Copyright (c) 2018, Jeff Kletsky - 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 the copyright holder 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. - -Some files may have additional copyright and/or licenses. Consult those files for details. At a minimum, this includes: - -* `lwipopts.h` -- Copyright (c) 2001-2003 Swedish Institute of Computer Science. - -# Appendix - -## Why Not the RTC? - -While the ESP8266 RTC seems a plausible choice for time keeping, it has several chip-level implementation details that make it less desirable than the system clock. - -One issue is resolution. The RTC has only a nominal 6-ms resolution, compared to the 1-ms resolution of the system clock. - -A second issue is stability. It is believed that the ESP8266 RTC is a simple RC oscillator. As such, it is likely to be highly temperature sensitive. - -Accuracy is another concern. While the SDK can provide an estimate of the RTC's period, it is likely measured with respect to the system clock and, as such, can be no better than the accuracy of the system clock. Further, it is a very noisy estimate, with values showing short-term standard deviation in the 500-1000 ppm range, compared to the system clock crystal which is spec-ed by Espressif to be 15 ppm or better. As the system clock crystal is likely used to derive the RF, units that have been FCC certified are likely to meet this specification or better (10 ppm is a common value). - -Finally, according to the Espressif SDK documentation, the RTC is reset under many situations that one would have hoped a "true" RTC would maintain time keeping. It notes that "CHIP_EN (including the deep-sleep wakeup)" results in "RTC memory is random value, RTC timer starts from zero". - -While the RTC's longer period means that counter wrap occurs less frequently (~7 hours for the RTC, compared to a little over an hour for the system clock), this is not deemed a significant advantage. - -As a result, the system clock (or an external RTC) is preferred over the ESP8266 internal RTC. - -Normal memory is used for all state variables, rather than the internal RTC memory. If clock-state information needs to be preserved during sleep, it can be obtained through `gettimeofday(&tv, NULL)` and, if desired, any outstanding slew obtained through `adjtime(NULL, &olddelta)`. No accessors to internal `timekeeping` data are believed required. \ No newline at end of file diff --git a/extras/timekeeping/component.mk b/extras/timekeeping/component.mk deleted file mode 100644 index 512c3cc..0000000 --- a/extras/timekeeping/component.mk +++ /dev/null @@ -1,8 +0,0 @@ -# Component makefile for extras/timekeeping - -INC_DIRS += $(timekeeping_ROOT) - -# args for passing into compile rule generation -timekeeping_SRC_DIR = $(timekeeping_ROOT) - -$(eval $(call component_compile_rules,timekeeping)) diff --git a/extras/timekeeping/tests/quick/Makefile b/extras/timekeeping/tests/quick/Makefile deleted file mode 100644 index 6aaf49f..0000000 --- a/extras/timekeeping/tests/quick/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -PROGRAM=timekeeping_quick_tests - -EXTRA_COMPONENTS = extras/timekeeping - -include ../../../../common.mk diff --git a/extras/timekeeping/tests/quick/timekeeping_quick_tests.c b/extras/timekeeping/tests/quick/timekeeping_quick_tests.c deleted file mode 100644 index 4b4b1fe..0000000 --- a/extras/timekeeping/tests/quick/timekeeping_quick_tests.c +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Tests of functionality within extras/timekeeping - */ - -/*- - * Copyright (c) 2018, Jeff Kletsky - * 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 the copyright holder 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. - */ - - -#include -#include - -#include -#include - -/* espressif/esp_system.h uses "bool" but fails to #include */ -#include -#include -#include -#include - -/* Not defined in espressif/esp_wifi.h */ -extern bool -sdk_wifi_set_opmode_current(uint8_t opmode); - -/* For sdk_system_restart_in_nmi() */ -#include - -#include -#include - - -#define BLUE_LED 2 -#define LED_ON 0 -#define LED_OFF 1 - -#define WAIT_FOR_UART_SECS 5 /* 2 might be OK */ - -#define TV2LD(TV) ((long double)TV.tv_sec + (long double)TV.tv_usec * 1.e-6) - -void -dump_tzglobals(void) { - - /* - * Defined in newlib-xtensa/newlib/libc/include/time.h - * implemented in newlib-xtensa/newlib/libc/time/tzvars.c - */ - - printf("_timezone = %li\n", _timezone); - printf("_daylight = %i\n", _daylight); - printf("_tzname[0] = %s\n", _tzname[0]); - printf("_tzname[1] = %s\n", _tzname[1]); -} - -void -dump_tzinfo(void) { - - __tzinfo_type *tzinfo; - __tzrule_type tzrule; - - tzinfo = __gettzinfo(); - printf("{%i, %i,\n", tzinfo->__tznorth, tzinfo->__tzyear); - tzrule = tzinfo->__tzrule[0]; - printf("{%c, %i, %i, %i, %i, %li, %li},\n", - tzrule.ch, tzrule.m, tzrule.n, tzrule.d, tzrule.s, (long)tzrule.change, (long)tzrule.offset); - tzrule = tzinfo->__tzrule[1]; - printf("{%c, %i, %i, %i, %i, %li, %li}}\n", - tzrule.ch, tzrule.m, tzrule.n, tzrule.d, tzrule.s, (long)tzrule.change, (long)tzrule.offset); -} - -void -dump_both(void) { - dump_tzglobals(); - dump_tzinfo(); -} - - -void -testTask(void *pvParameters) -{ - char *env_value; - struct timeval tv; - time_t time_secs; - long num_runs; - long idx; - TickType_t base_ticks; - TickType_t increment_ticks; - int seconds_per_report; - int retval; - uint32_t t0; - uint32_t t1; - - /* These variables for calculation-speed tests */ - int64_t internal_clock; - int64_t system_plus_offset; - int64_t slew_start_time; - int64_t seemingly_useful = 0; -#define ADJTIME_SLEW_PERIOD 2000 -#define ADJTIME_SLEW_RATE 500.e-6 - - - gpio_enable(BLUE_LED, GPIO_OUTPUT); - gpio_write(BLUE_LED, LED_OFF); - - vTaskDelay(WAIT_FOR_UART_SECS * 1000 / portTICK_PERIOD_MS); - - gpio_write(BLUE_LED, LED_ON); - - printf("\n"); - printf("===> setenv/getenv test; expect TEST ='test value'\n"); - - setenv("TEST", "test value", 1); - env_value = getenv("TEST"); - printf("TEST = '%s'\n", env_value); - - printf("\n"); - printf("===> Dump tzinfo before change:\n"); - dump_both(); - - - /* "Full" POSIX TZ spec in 2018 is TZ=PST8PDT7,M3.1.0/02:00:00,M11.1.0/02:00:00 */ - - printf("\n"); - printf("===> Change TZ to PST8PDT7,M3.1.0,M11.1.0\n"); - - setenv("TZ", "PST8PDT7,M3.1.0,M11.1.0", 1); - dump_both(); - - printf("\n"); - printf("===> Call tzset() just in case that's the reason it's not working\n"); - tzset(); - dump_both(); - - - printf("\n"); - printf("===> unsetenv TZ and confirm\n"); - unsetenv("TZ"); - env_value = getenv("TZ"); - if (env_value) { - printf("TZ = %s\n", env_value); - } else { - printf("TZ not found (expected)\n"); - } - tzset(); - dump_both(); - printf("##### NOTE: tzset() only changes the globals if TZ is unset\n"); - - printf("\n"); - printf("===> Change TZ to PST8PDT7,M3.1.0,M11.1.0\n"); - - setenv("TZ", "PST8PDT7,M3.1.0,M11.1.0", 1); - tzset(); - dump_both(); - - printf("\n"); - printf("===> Change TZ to UTC (not terribly useful without zoneinfo\n"); - - setenv("TZ", "UTC", 1); - tzset(); - dump_both(); - printf("##### NOTE: just changes name, not any values; 'UTC0UTC0' better\n"); - - - printf("\n"); - printf("===> Change TZ to UTC0\n"); - - setenv("TZ", "UTC0", 1); - tzset(); - dump_both(); - - printf("\n"); - printf("===> Change TZ to UTC0UTC0\n"); - - setenv("TZ", "UTC0UTC0", 1); - tzset(); - dump_both(); - - printf("\n"); - printf("===> Change TZ to UTC0UTC0,0,0\n"); - - setenv("TZ", "UTC0UTC0,0,0", 1); - tzset(); - dump_both(); - - printf("\n"); - printf("===> Change TZ to UTC0UTC0,J0/0,J0/0\n"); - - setenv("TZ", "UTC0UTC0,J0/0,J0/0", 1); - tzset(); - dump_both(); - - - printf("\n"); - printf("===> Change TZ to PST8PDT7,M3.1.0,M11.1.0\n"); - printf("===> PST: 1518754387 Thursday, February 15, 2018 8:13:07 PM GMT-08:00\n"); - setenv("TZ", "PST8PDT7,M3.1.0,M11.1.0", 1); - tzset(); - time_secs = 1518754387; - printf("%s", ctime(&time_secs)); - printf("===> PDT: 1526469187 Wednesday, May 16, 2018 4:13:07 AM GMT-07:00\n"); - time_secs = 1526469187; - printf("%s", ctime(&time_secs)); - - printf("\n"); - printf("===> back-to-back printf of sdk_system_get_time() then look at gettimeofday()\n"); - printf("System clock: %0.6Lf seconds\n", ((long double)sdk_system_get_time())*1e-6); - printf("System clock: %0.6Lf seconds\n", ((long double)sdk_system_get_time())*1e-6); - gettimeofday(&tv, NULL); - printf("now: %0.6Lf seconds\n", TV2LD(tv)); - - setenv("TZ", "UTC0UTC0,0,0", 1); - tzset(); - printf("UTC: %s", ctime(&tv.tv_sec)); /* ctime() includes \n */ - - setenv("TZ", "PST8PDT7,M3.1.0,M11.1.0", 1); - tzset(); - printf("PxT: %s", ctime(&tv.tv_sec)); - - printf("\n"); - printf("===> settimeofday to 1518768000, Friday, February 16, 2018 12:00:00 AM GMT-08:00\n"); - tv.tv_sec = 1518768000; - tv.tv_usec = 0; - settimeofday(&tv, NULL); - tv.tv_sec = 0; - tv.tv_usec = 0; - gettimeofday(&tv, NULL); - printf("PST: %s", ctime(&tv.tv_sec)); - - - num_runs = 1e3; - - printf("\n===== Calculation speed tests, %ld runs each, results in us =====\n", num_runs); - - system_plus_offset = 1518768000; - slew_start_time = system_plus_offset; - - t0 = sdk_system_get_time(); - for (idx = 0; idx < num_runs; idx++) { - internal_clock = - (int64_t)(system_plus_offset - + (system_plus_offset - - slew_start_time) - / ADJTIME_SLEW_PERIOD); - seemingly_useful = seemingly_useful + internal_clock; - system_plus_offset++; /* It's hard to keep this loop from being optimized out! */ - } - t1 = sdk_system_get_time(); - if (seemingly_useful != 0) - printf("internal clock with / ADJTIME_SLEW_PERIOD: %ld for %ld runs\n", (long)t1 - (long)t0, idx); - - t0 = sdk_system_get_time(); - for (idx = 0; idx < num_runs; idx++) { - internal_clock = - (int64_t)(system_plus_offset - + (double)(system_plus_offset - - slew_start_time) - * ADJTIME_SLEW_RATE); - seemingly_useful = seemingly_useful + internal_clock; - system_plus_offset++; - } - t1 = sdk_system_get_time(); - if (seemingly_useful != 0) - printf("internal clock with (double) * ADJTIME_SLEW_RATE: %ld for %ld runs\n", (long)t1 - (long)t0, idx); - - - t0 = sdk_system_get_time(); - for (idx = 0; idx < num_runs; idx++) { - internal_clock = - (int64_t)(system_plus_offset - + (int64_t)((double)(system_plus_offset - - slew_start_time) - * ADJTIME_SLEW_RATE)); - seemingly_useful = seemingly_useful + internal_clock; - system_plus_offset++; - } - t1 = sdk_system_get_time(); - if (seemingly_useful != 0) - printf("internal clock with (unint64_t) and (double) * ADJTIME_SLEW_RATE: %ld for %ld runs\n", (long)t1 - (long)t0, idx); - - printf("\n===== time-display run =====\n"); - - num_runs = 10; - - seconds_per_report = 1; - - increment_ticks = (seconds_per_report * 1000) / portTICK_PERIOD_MS; - - base_ticks = xTaskGetTickCount(); - - for (idx = 0; idx <= num_runs; idx++) { - gettimeofday(&tv, NULL); - printf("%20.6Lf at %ld ticks\n", TV2LD(tv), (long)(xTaskGetTickCount() - base_ticks)); - vTaskDelay((base_ticks - xTaskGetTickCount()) + (increment_ticks * (idx + 1))); - } - - printf("\n===== other tests =====\n"); - printf("===> confirm time() function works\n"); - printf("%li from time(NULL)\n", (long)time(NULL)); - printf("%li and %li from time(&time_secs)\n", (long)time(&time_secs), (long)time_secs); - - printf("\n===> Confirm that too-large slew is rejected\n"); - - tv.tv_sec = 10000; - tv.tv_usec = 0; - retval = adjtime(&tv, NULL); - if (retval == 0) { - printf("adjtime with +10000 s FAILED TO FAIL\n"); - } else { - printf("adjtime with +10000 s properly rejected the change, errno: %d\n", errno); - } - tv.tv_sec = -10000; - tv.tv_usec = 0; - retval = adjtime(&tv, NULL); - if (retval == 0) { - printf("adjtime with -10000 s FAILED TO FAIL\n"); - } else { - printf("adjtime with -10000 s properly rejected the change, errno: %d\n", errno); - } - - - printf("\n"); - printf("All done; reboot imminent\n"); - - gpio_write(BLUE_LED, LED_OFF); - - sdk_system_restart_in_nmi(); -} - - - -void -user_init(void) -{ - uart_set_baud(0, 115200); - sdk_wifi_set_opmode_current(NULL_MODE); /* Temporarily disable */ - xTaskCreate(testTask, "testTask", 512, NULL, 2, NULL); -} diff --git a/extras/timekeeping/tests/slew/Makefile b/extras/timekeeping/tests/slew/Makefile deleted file mode 100644 index 9c6aafe..0000000 --- a/extras/timekeeping/tests/slew/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -PROGRAM=timekeeping_slew_tests - -EXTRA_COMPONENTS = extras/timekeeping - -include ../../../../common.mk diff --git a/extras/timekeeping/tests/slew/timekeeping_slew_tests.c b/extras/timekeeping/tests/slew/timekeeping_slew_tests.c deleted file mode 100644 index 5cb6ed8..0000000 --- a/extras/timekeeping/tests/slew/timekeeping_slew_tests.c +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Tests of functionality within extras/timekeeping - */ - -/*- - * Copyright (c) 2018, Jeff Kletsky - * 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 the copyright holder 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. - */ - - -#include -#include - -#include -#include - -/* espressif/esp_system.h uses "bool" but fails to #include */ -#include -#include -#include -#include - -/* Not defined in espressif/esp_wifi.h */ -extern bool -sdk_wifi_set_opmode_current(uint8_t opmode); - -/* For sdk_system_restart_in_nmi() */ -#include - -#include -#include - - -#define BLUE_LED 2 -#define LED_ON 0 -#define LED_OFF 1 - -#define WAIT_FOR_UART_SECS 5 /* 2 might be OK */ - -#define TV2LD(TV) ((long double)TV.tv_sec + (long double)TV.tv_usec * 1.e-6) - -void -testTask(void *pvParameters) -{ - struct timeval tv; - long num_runs; - long idx; - TickType_t base_ticks; - TickType_t increment_ticks; - int seconds_per_report; - struct timeval delta; - struct timeval olddelta; - - - gpio_enable(BLUE_LED, GPIO_OUTPUT); - gpio_write(BLUE_LED, LED_OFF); - - vTaskDelay(WAIT_FOR_UART_SECS * 1000 / portTICK_PERIOD_MS); - - gpio_write(BLUE_LED, LED_ON); - - printf("\n"); - printf("settimeofday to 1000000000\n"); - tv.tv_sec = 1000000000; - tv.tv_usec = 0; - settimeofday(&tv, NULL); - - - printf("\n===== time-display runs =====\n"); - - num_runs = 10; - seconds_per_report = 1; - - increment_ticks = (seconds_per_report * 1000) / portTICK_PERIOD_MS; - - base_ticks = xTaskGetTickCount(); - - for (idx = 0; idx <= num_runs; idx++) { - gettimeofday(&tv, NULL); - printf("%20.6Lf at %ld ticks\n", TV2LD(tv), (long)(xTaskGetTickCount() - base_ticks)); - vTaskDelay((base_ticks - xTaskGetTickCount()) + (increment_ticks * (idx + 1))); - } - - - num_runs = 15; - seconds_per_report = 1; - increment_ticks = (seconds_per_report * 1000) / portTICK_PERIOD_MS; - - delta.tv_sec = 0; - delta.tv_usec = 5000; /* 5 ms -- should take 10 seconds */ - - printf("\n"); - printf("with +5 ms slew requested\n"); - adjtime(&delta, NULL); - base_ticks = xTaskGetTickCount(); - - for (idx = 0; idx <= num_runs; idx++) { - gettimeofday(&tv, NULL); - adjtime(NULL, &olddelta); - printf("%20.6Lf at %ld ticks; %0.6Lf olddelta\n", - TV2LD(tv), (long)(xTaskGetTickCount() - base_ticks), TV2LD(olddelta)); - vTaskDelay((base_ticks - xTaskGetTickCount()) + (increment_ticks * (idx + 1))); - } - - delta.tv_sec = 0; - delta.tv_usec = -5000; /* -5 ms -- should take 10 seconds */ - - printf("\n"); - printf("with -5 ms slew requested\n"); - adjtime(&delta, NULL); - base_ticks = xTaskGetTickCount(); - - for (idx = 0; idx <= num_runs; idx++) { - gettimeofday(&tv, NULL); - adjtime(NULL, &olddelta); - printf("%20.6Lf at %ld ticks; %0.6Lf olddelta\n", - TV2LD(tv), (long)(xTaskGetTickCount() - base_ticks), TV2LD(olddelta)); - vTaskDelay((base_ticks - xTaskGetTickCount()) + (increment_ticks * (idx + 1))); - } - - num_runs = 15; - seconds_per_report = 20; - increment_ticks = (seconds_per_report * 1000) / portTICK_PERIOD_MS; - - delta.tv_sec = 0; - delta.tv_usec = 130 * 1000; /* 130 ms -- 128 ms needed for NTP */ - - printf("\n"); - printf("with 130 ms slew requested (20-s reporting period)\n"); - adjtime(&delta, NULL); - base_ticks = xTaskGetTickCount(); - - for (idx = 0; idx <= num_runs; idx++) { - gettimeofday(&tv, NULL); - adjtime(NULL, &olddelta); - printf("%20.6Lf at %ld ticks; %0.6Lf olddelta\n", - TV2LD(tv), (long)(xTaskGetTickCount() - base_ticks), TV2LD(olddelta)); - vTaskDelay((base_ticks - xTaskGetTickCount()) + (increment_ticks * (idx + 1))); - } - - delta.tv_sec = 0; - delta.tv_usec = -130 * 1000; /* -130 ms -- 128 ms needed for NTP */ - - printf("\n"); - printf("with -130 ms slew requested\n"); - adjtime(&delta, NULL); - base_ticks = xTaskGetTickCount(); - - for (idx = 0; idx <= num_runs; idx++) { - gettimeofday(&tv, NULL); - adjtime(NULL, &olddelta); - printf("%20.6Lf at %ld ticks; %0.6Lf olddelta\n", - TV2LD(tv), (long)(xTaskGetTickCount() - base_ticks), TV2LD(olddelta)); - vTaskDelay((base_ticks - xTaskGetTickCount()) + (increment_ticks * (idx + 1))); - } - - printf("\n"); - printf("All done; reboot imminent\n"); - - gpio_write(BLUE_LED, LED_OFF); - - sdk_system_restart_in_nmi(); -} - - - -void -user_init(void) -{ - uart_set_baud(0, 115200); - sdk_wifi_set_opmode_current(NULL_MODE); /* Temporarily disable */ - xTaskCreate(testTask, "testTask", 512, NULL, 2, NULL); -} diff --git a/extras/timekeeping/tests/sntp-run/Makefile b/extras/timekeeping/tests/sntp-run/Makefile deleted file mode 100644 index 6098b35..0000000 --- a/extras/timekeeping/tests/sntp-run/Makefile +++ /dev/null @@ -1,20 +0,0 @@ - -PROGRAM=timekeeping_sntp_run - -# Test the use of extras/timekeeping with LWIP SNTP - -EXTRA_COMPONENTS = extras/timekeeping - -# Can work for broadcast or poll -# (assuming you have NTP broadcast already configured on the network) - -# Broadcast / poll and hosts for poll set in timekeeping_sntp_run.c -# SNTP parameters set at the top of lwipopts.h - - -# To set then only log time difference (rather than correct the clock) -# define TIMEKEEPING_SET_AND_MEASURE_ONLY - -# PROGRAM_CFLAGS = $(CFLAGS) -DTIMEKEEPING_SET_AND_MEASURE_ONLY - -include ../../../../common.mk diff --git a/extras/timekeeping/tests/sntp-run/lwipopts.h b/extras/timekeeping/tests/sntp-run/lwipopts.h deleted file mode 100644 index 24c718e..0000000 --- a/extras/timekeeping/tests/sntp-run/lwipopts.h +++ /dev/null @@ -1,996 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Simon Goldschmidt - * - */ -#ifndef __LWIPOPTS_H__ -#define __LWIPOPTS_H__ - - - - -/* - * Local settings and linkage for use of LWIP SNTP - * Additions to original: esp-open-rtos/lwip/include/lwipopts.h - */ - -/* #define SNTP_DEBUG LWIP_DBG_ON */ - -#define SNTP_SERVER_DNS 1 - -/* - * 0 -- off - * 1 -- enables address/port check - * 2 -- adds timestamp check against that sent - * Rest not yet implemented as of 2018-02-08; upstream commit 010b0210 - * 3 -- will add field-level checks - * 4 -- will add root delay/dispersion tests - */ -#define SNTP_CHECK_RESPONSE 2 - -#define SNTP_COMP_ROUNDTRIP 1 - -#define SNTP_STARTUP_DELAY 0 - -/* 60 seconds is lower threshold by NTPv4 spec */ -#define SNTP_UPDATE_DELAY (64 * 1000) - -/* - * Getter has to be a inline #define - * as it modifies arguments in place - * u32_t in lwip/apps/sntp.c - * lwip/include/arch/cc.h:typedef uint32_t u32_t; - */ -#include -#define SNTP_GET_SYSTEM_TIME(S, F) do { \ - struct timeval _tv; \ - gettimeofday(&_tv, NULL); \ - S = (uint32_t)_tv.tv_sec; \ - F = (uint32_t)_tv.tv_usec; \ -} while (0) - -#define SNTP_SET_SYSTEM_TIME_US(S, F) sntp_impl_set_system_time_us(S, F) - -#include "sntp_impl.h" - -/* - * END local settings and linkage for SNTP - */ - - - - -#define ESP_OPEN_RTOS 1 - -/* See tcp.c tcp_alloc(). */ -#ifndef ESP_TIMEWAIT_THRESHOLD -#define ESP_TIMEWAIT_THRESHOLD 10000 -#endif - -/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided - * by your system, set this to 0 and include in cc.h */ -#define LWIP_TIMEVAL_PRIVATE 0 - -/* - ----------------------------------------------- - ---------- Platform specific locking ---------- - ----------------------------------------------- -*/ -/** - * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain - * critical regions during buffer allocation, deallocation and memory - * allocation and deallocation. - */ -#define SYS_LIGHTWEIGHT_PROT 1 - -/** - * MEMCPY: override this if you have a faster implementation at hand than the - * one included in your C library - */ -#define MEMCPY(dst,src,len) memcpy(dst,src,len) - -/** - * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a - * call to memcpy() if the length is known at compile time and is small. - */ -#define SMEMCPY(dst,src,len) memcpy(dst,src,len) - -/* - ------------------------------------ - ----------- Core locking ----------- - ------------------------------------ -*/ - -/** - * LWIP_TCPIP_CORE_LOCKING - * Creates a global mutex that is held during TCPIP thread operations. - * Can be locked by client code to perform lwIP operations without changing - * into TCPIP thread using callbacks. See LOCK_TCPIP_CORE() and - * UNLOCK_TCPIP_CORE(). - * Your system should provide mutexes supporting priority inversion to use this. - */ -#ifndef LWIP_TCPIP_CORE_LOCKING -#define LWIP_TCPIP_CORE_LOCKING 1 -#endif - -/** - * LWIP_TCPIP_CORE_LOCKING_INPUT: when LWIP_TCPIP_CORE_LOCKING is enabled, - * this lets tcpip_input() grab the mutex for input packets as well, - * instead of allocating a message and passing it to tcpip_thread. - * - * ATTENTION: this does not work when tcpip_input() is called from - * interrupt context! - */ -#ifndef LWIP_TCPIP_CORE_LOCKING_INPUT -#define LWIP_TCPIP_CORE_LOCKING_INPUT 0 -#endif - -/** - * Macro/function to check whether lwIP's threading/locking - * requirements are satisfied during current function call. - * This macro usually calls a function that is implemented in the OS-dependent - * sys layer and performs the following checks: - * - Not in ISR - * - If @ref LWIP_TCPIP_CORE_LOCKING = 1: TCPIP core lock is held - * - If @ref LWIP_TCPIP_CORE_LOCKING = 0: function is called from TCPIP thread - * @see @ref multithreading - */ -#ifndef LWIP_ASSERT_CORE_LOCKED -void sys_check_core_locking(void); -#define LWIP_ASSERT_CORE_LOCKED() sys_check_core_locking() -#endif - -/** - * Called as first thing in the lwIP TCPIP thread. Can be used in conjunction - * with @ref LWIP_ASSERT_CORE_LOCKED to check core locking. - * @see @ref multithreading - */ -#ifndef LWIP_MARK_TCPIP_THREAD -void sys_mark_tcpip_thread(void); -#define LWIP_MARK_TCPIP_THREAD() sys_mark_tcpip_thread() -#endif - -#if LWIP_TCPIP_CORE_LOCKING - -#ifndef LOCK_TCPIP_CORE -void sys_lock_tcpip_core(void); -#define LOCK_TCPIP_CORE() sys_lock_tcpip_core() -#endif - -#ifndef UNLOCK_TCPIP_CORE -void sys_unlock_tcpip_core(void); -#define UNLOCK_TCPIP_CORE() sys_unlock_tcpip_core() -#endif - -#else -#define LOCK_TCPIP_CORE() -#define UNLOCK_TCPIP_CORE() -#endif /* LWIP_TCPIP_CORE_LOCKING */ - -/* - ------------------------------------ - ---------- Memory options ---------- - ------------------------------------ -*/ -/** - * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library - * instead of the lwip internal allocator. Can save code size if you - * already use it. - */ -#define MEM_LIBC_MALLOC 1 - -/** - * MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. - * Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution - * speed (heap alloc can be much slower than pool alloc) and usage from interrupts - * (especially if your netif driver allocates PBUF_POOL pbufs for received frames - * from interrupt)! - * ATTENTION: Currently, this uses the heap for ALL pools (also for private pools, - * not only for internal pools defined in memp_std.h)! - */ -#define MEMP_MEM_MALLOC 1 - -/** - * MEM_ALIGNMENT: should be set to the alignment of the CPU - * 4 byte alignment -> \#define MEM_ALIGNMENT 4 - * 2 byte alignment -> \#define MEM_ALIGNMENT 2 - */ -#define MEM_ALIGNMENT 4 - -/** - * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable - * amount of bytes before and after each memp element in every pool and fills - * it with a prominent default value. - * MEMP_OVERFLOW_CHECK == 0 no checking - * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed - * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time - * memp_malloc() or memp_free() is called (useful but slow!) - */ -#ifndef MEMP_OVERFLOW_CHECK -#define MEMP_OVERFLOW_CHECK 0 -#endif - -/* - ------------------------------------------------ - ---------- Internal Memory Pool Sizes ---------- - ------------------------------------------------ -*/ - -/** - * MEMP_NUM_NETCONN: the number of struct netconns. - * (only needed if you use the sequential API, like api_lib.c) - * This also sets the number of lwip socket descriptors. - */ -#ifndef MEMP_NUM_NETCONN -#define MEMP_NUM_NETCONN 12 -#endif - -/* - -------------------------------- - ---------- ARP options ------- - -------------------------------- -*/ - -/** - * LWIP_ARP==1: Enable ARP functionality. - */ -#ifndef LWIP_ARP -#define LWIP_ARP 1 -#endif - -/** - * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address - * resolution. By default, only the most recent packet is queued per IP address. - * This is sufficient for most protocols and mainly reduces TCP connection - * startup time. Set this to 1 if you know your application sends more than one - * packet in a row to an IP address that is not in the ARP cache. - */ -#ifndef ARP_QUEUEING -#define ARP_QUEUEING 1 -#endif - -/* - -------------------------------- - ---------- IP options ---------- - -------------------------------- -*/ -/** - * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that - * this option does not affect outgoing packet sizes, which can be controlled - * via IP_FRAG. - */ -#ifndef IP_REASSEMBLY -#define IP_REASSEMBLY 1 -#endif - -/** - * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note - * that this option does not affect incoming packet sizes, which can be - * controlled via IP_REASSEMBLY. - */ -#ifndef IP_FRAG -#define IP_FRAG 1 -#endif - -/** - * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) - * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived - * in this time, the whole packet is discarded. - */ -#ifndef IP_REASS_MAXAGE -#define IP_REASS_MAXAGE 3 -#endif - -/** - * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. - * Since the received pbufs are enqueued, be sure to configure - * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive - * packets even if the maximum amount of fragments is enqueued for reassembly! - */ -#ifndef IP_REASS_MAX_PBUFS -#define IP_REASS_MAX_PBUFS 2 -#endif - -/* - ---------------------------------- - ---------- ICMP options ---------- - ---------------------------------- -*/ - -/* - --------------------------------- - ---------- RAW options ---------- - --------------------------------- -*/ - -/* - ---------------------------------- - ---------- DHCP options ---------- - ---------------------------------- -*/ -/** - * LWIP_DHCP==1: Enable DHCP module. - */ -#ifndef LWIP_DHCP -#define LWIP_DHCP 1 -#endif - -/** - * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. - */ -#ifndef DHCP_DOES_ARP_CHECK -#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) -#endif - -#define LWIP_DHCP_BOOTP_FILE 0 - -/* - ------------------------------------ - ---------- AUTOIP options ---------- - ------------------------------------ -*/ -/* - ---------------------------------- - ----- SNMP MIB2 support ----- - ---------------------------------- -*/ -/* - ---------------------------------- - ----- Multicast/IGMP options ----- - ---------------------------------- -*/ -/** - * LWIP_IGMP==1: Turn on IGMP module. - */ -#ifndef LWIP_IGMP -#define LWIP_IGMP 1 -#endif - -/* - ---------------------------------- - ---------- DNS options ----------- - ---------------------------------- -*/ -/** - * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS - * transport. - */ -#ifndef LWIP_DNS -#define LWIP_DNS 1 -#endif - -/** DNS maximum number of entries to maintain locally. */ -#ifndef DNS_TABLE_SIZE -#define DNS_TABLE_SIZE 1 -#endif - -/** DNS maximum host name length supported in the name table. */ -#ifndef DNS_MAX_NAME_LENGTH -#define DNS_MAX_NAME_LENGTH 128 -#endif - -/** Set this to 1 to enable querying ".local" names via mDNS - * using a One-Shot Multicast DNS Query */ -#ifndef LWIP_DNS_SUPPORT_MDNS_QUERIES -#define LWIP_DNS_SUPPORT_MDNS_QUERIES 1 -#endif - -/* - --------------------------------- - ---------- UDP options ---------- - --------------------------------- -*/ -/* - --------------------------------- - ---------- TCP options ---------- - --------------------------------- -*/ -/** - * TCP_MAXRTX: Maximum number of retransmissions of data segments. - */ -#ifndef TCP_MAXRTX -#define TCP_MAXRTX 6 -#endif - -/** - * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. - */ -#ifndef TCP_SYNMAXRTX -#define TCP_SYNMAXRTX 3 -#endif - -/** - * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. - * Define to 0 if your device is low on memory. - */ -#ifndef TCP_QUEUE_OOSEQ -#define TCP_QUEUE_OOSEQ 1 -#endif - -/** - * LWIP_TCP_SACK_OUT==1: TCP will support sending selective acknowledgements (SACKs). - */ -#ifndef LWIP_TCP_SACK_OUT -#define LWIP_TCP_SACK_OUT 1 -#endif - -/** - * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, - * you might want to increase this.) - * For the receive side, this MSS is advertised to the remote side - * when opening a connection. For the transmit size, this MSS sets - * an upper limit on the MSS advertised by the remote host. - */ -#ifndef TCP_MSS -#define TCP_MSS 1460 -#endif - -/** - * TCP_OOSEQ_MAX_BYTES: The default maximum number of bytes queued on ooseq per - * pcb if TCP_OOSEQ_BYTES_LIMIT is not defined. Default is 0 (no limit). - * Only valid for TCP_QUEUE_OOSEQ==1. - */ -#ifndef TCP_OOSEQ_MAX_BYTES -#define TCP_OOSEQ_MAX_BYTES (2 * TCP_MSS) -#endif - -/** - * TCP_OOSEQ_BYTES_LIMIT(ooseq): Return the maximum number of bytes to be queued - * on ooseq per pcb, given the pcb. Only valid for TCP_QUEUE_OOSEQ==1. - */ -#if !defined TCP_OOSEQ_BYTES_LIMIT -#define TCP_OOSEQ_BYTES_LIMIT(ooseq) ooseq_bytes_limit(ooseq) -#endif - -/** - * TCP_OOSEQ_MAX_PBUFS: The default maximum number of pbufs queued on ooseq per - * pcb if TCP_OOSEQ_BYTES_LIMIT is not defined. Default is 0 (no limit). - * Only valid for TCP_QUEUE_OOSEQ==1. - */ -#ifndef TCP_OOSEQ_MAX_PBUFS -#define TCP_OOSEQ_MAX_PBUFS 2 -#endif - -/** - * TCP_OOSEQ_PBUFS_LIMIT(ooseq): Return the maximum number of pbufs to be queued - * on ooseq per pcb, given the pcb. Only valid for TCP_QUEUE_OOSEQ==1. - */ -#ifndef TCP_OOSEQ_PBUFS_LIMIT -#define TCP_OOSEQ_PBUFS_LIMIT(ooseq) ooseq_pbufs_limit(ooseq) -#endif - -/** - * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. - */ -#ifndef TCP_LISTEN_BACKLOG -#define TCP_LISTEN_BACKLOG 1 -#endif - -/** - * The maximum allowed backlog for TCP listen netconns. - * This backlog is used unless another is explicitly specified. - * 0xff is the maximum (u8_t). - */ -#ifndef TCP_DEFAULT_LISTEN_BACKLOG -#define TCP_DEFAULT_LISTEN_BACKLOG 2 -#endif - -/** - * TCP_OVERSIZE: The maximum number of bytes that tcp_write may - * allocate ahead of time in an attempt to create shorter pbuf chains - * for transmission. The meaningful range is 0 to TCP_MSS. Some - * suggested values are: - * - * 0: Disable oversized allocation. Each tcp_write() allocates a new - pbuf (old behaviour). - * 1: Allocate size-aligned pbufs with minimal excess. Use this if your - * scatter-gather DMA requires aligned fragments. - * 128: Limit the pbuf/memory overhead to 20%. - * TCP_MSS: Try to create unfragmented TCP packets. - * TCP_MSS/4: Try to create 4 fragments or less per TCP packet. - */ -#ifndef TCP_OVERSIZE -#define TCP_OVERSIZE TCP_MSS -#endif - -/** - * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. - * The timestamp option is currently only used to help remote hosts, it is not - * really used locally. Therefore, it is only enabled when a TS option is - * received in the initial SYN packet from a remote host. - */ -#ifndef LWIP_TCP_TIMESTAMPS -#define LWIP_TCP_TIMESTAMPS 1 -#endif - -/** - * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an - * explicit window update - */ -#ifndef TCP_WND_UPDATE_THRESHOLD -#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4)) -#endif - -/* - ---------------------------------- - ---------- Pbuf options ---------- - ---------------------------------- -*/ - -/** - * PBUF_LINK_ENCAPSULATION_HLEN: the number of bytes that should be allocated - * for an additional encapsulation header before ethernet headers (e.g. 802.11) - * - * 1. LINK_HLEN 14Byte will be remove in WLAN layer - * 2. IEEE80211_HDR_MAX_LEN needs 40 bytes. - * 3. encryption needs exra 4 bytes ahead of actual data payload, and require - * DAddr and SAddr to be 4-byte aligned. - * 4. TRANSPORT and IP are all 20, 4 bytes aligned, nice... - * 5. LCC add 6 bytes more, We don't consider WAPI yet... - * 6. define LWIP_MEM_ALIGN to be 4 Byte aligned, pbuf struct is 16B, Only thing may be - * matter is ether_hdr is not 4B aligned. - * - * So, we need extra (40 + 4 - 14) = 30 and it's happen to be 4-Byte aligned - * - * 1. lwip - * | empty 30B | eth_hdr (14B) | payload ...| - * total: 44B ahead payload - * 2. net80211 - * | max 80211 hdr, 32B | ccmp/tkip iv (8B) | sec rsv(4B) | payload ...| - * total: 40B ahead sec_rsv and 44B ahead payload - * - */ -#define PBUF_LINK_ENCAPSULATION_HLEN 36 - -/* - ------------------------------------------------ - ---------- Network Interfaces options ---------- - ------------------------------------------------ -*/ -/** - * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname - * field. - */ -#ifndef LWIP_NETIF_HOSTNAME -#define LWIP_NETIF_HOSTNAME 1 -#endif - -/** - * LWIP_NETIF_API==1: Support netif api (in netifapi.c) - */ -#ifndef LWIP_NETIF_API -#define LWIP_NETIF_API 0 -#endif - -/** - * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface - * changes its up/down status (i.e., due to DHCP IP acquisition) - */ -#ifndef LWIP_NETIF_STATUS_CALLBACK -#define LWIP_NETIF_STATUS_CALLBACK 0 -#endif - -/** - * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP *tries* to put all data - * to be sent into one single pbuf. This is for compatibility with DMA-enabled - * MACs that do not support scatter-gather. - * Beware that this might involve CPU-memcpy before transmitting that would not - * be needed without this flag! Use this only if you need to! - */ -#define LWIP_NETIF_TX_SINGLE_PBUF 1 - -/* - ------------------------------------ - ---------- LOOPIF options ---------- - ------------------------------------ -*/ - -/* - ------------------------------------ - ---------- SLIPIF options ---------- - ------------------------------------ -*/ - -/* - ------------------------------------ - ---------- Thread options ---------- - ------------------------------------ -*/ -/** - * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef TCPIP_THREAD_STACKSIZE -#define TCPIP_THREAD_STACKSIZE 480 -#endif - -/** - * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#define TCPIP_THREAD_PRIO (configMAX_PRIORITIES-5) - -/** - * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages - * The queue size value itself is platform-dependent, but is passed to - * sys_mbox_new() when tcpip_init is called. - */ -#define TCPIP_MBOX_SIZE 16 - -/** - * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#define DEFAULT_UDP_RECVMBOX_SIZE 6 - -/** - * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#define DEFAULT_TCP_RECVMBOX_SIZE 6 - -/** - * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. - * The queue size value itself is platform-dependent, but is passed to - * sys_mbox_new() when the acceptmbox is created. - */ -#define DEFAULT_ACCEPTMBOX_SIZE 6 - -/* - ---------------------------------------------- - ---------- Sequential layer options ---------- - ---------------------------------------------- -*/ - -/* - ------------------------------------ - ---------- Socket options ---------- - ------------------------------------ -*/ - -/** - * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. - * Disable this option if you use a POSIX operating system that uses the same - * names (read, write & close). (only used if you use sockets.c) - */ -#define LWIP_POSIX_SOCKETS_IO_NAMES 0 - -/** - * LWIP_SOCKET_OFFSET==n: Increases the file descriptor number created by LwIP with n. - * This can be useful when there are multiple APIs which create file descriptors. - * When they all start with a different offset and you won't make them overlap you can - * re implement read/write/close/ioctl/fnctl to send the requested action to the right - * library (sharing select will need more work though). - */ -#ifndef LWIP_SOCKET_OFFSET -#define LWIP_SOCKET_OFFSET 3 -#endif - -/** - * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and - * SO_SNDTIMEO processing. - */ -#ifndef LWIP_SO_SNDTIMEO -#define LWIP_SO_SNDTIMEO 1 -#endif - -/** - * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and - * SO_RCVTIMEO processing. - */ -#ifndef LWIP_SO_RCVTIMEO -#define LWIP_SO_RCVTIMEO 1 -#endif - -/** - * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT - * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set - * in seconds. (does not require sockets.c, and will affect tcp.c) - */ -#ifndef LWIP_TCP_KEEPALIVE -#define LWIP_TCP_KEEPALIVE 1 -#endif - -/** - * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. - */ -#ifndef LWIP_SO_RCVBUF -#define LWIP_SO_RCVBUF 0 -#endif - -/** - * SO_REUSE==1: Enable SO_REUSEADDR option. - */ -#ifndef SO_REUSE -#define SO_REUSE 1 -#endif - -/* - ---------------------------------------- - ---------- Statistics options ---------- - ---------------------------------------- -*/ - -/** - * LWIP_STATS==1: Enable statistics collection in lwip_stats. - */ -#ifndef LWIP_STATS -#define LWIP_STATS 0 -#endif - -/** - * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. - */ -#ifndef LWIP_STATS_DISPLAY -#define LWIP_STATS_DISPLAY 0 -#endif - -/* - --------------------------------- - ---------- PPP options ---------- - --------------------------------- -*/ - -/* - -------------------------------------- - ---------- Checksum options ---------- - -------------------------------------- -*/ - -/* - --------------------------------------- - ---------- IPv6 options --------------- - --------------------------------------- -*/ -/** - * LWIP_IPV6==1: Enable IPv6 - */ -#ifndef LWIP_IPV6 -#define LWIP_IPV6 0 -#endif - -/* - --------------------------------------- - ---------- Hook options --------------- - --------------------------------------- -*/ - -/* - --------------------------------------- - ---------- mDNS options --------------- - --------------------------------------- -*/ - -/** - * LWIP_MDNS_RESPONDER_QUEUE_ANNOUNCEMENTS==1: Unsolicited announcements are - * queued and run from a timer callback. - */ -#ifndef LWIP_MDNS_RESPONDER_QUEUE_ANNOUNCEMENTS -#define LWIP_MDNS_RESPONDER_QUEUE_ANNOUNCEMENTS 1 -#endif - -/* - --------------------------------------- - ---------- Debugging options ---------- - --------------------------------------- -*/ - -// Uncomment this line, and set the individual debug options you want, for IP stack debug output -//#define LWIP_DEBUG - -/** - * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is - * compared against this value. If it is smaller, then debugging - * messages are written. - */ -//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING - -/** - * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable - * debug messages of certain types. - */ -#define LWIP_DBG_TYPES_ON LWIP_DBG_ON - -/** - * ETHARP_DEBUG: Enable debugging in etharp.c. - */ -#define ETHARP_DEBUG LWIP_DBG_OFF - -/** - * NETIF_DEBUG: Enable debugging in netif.c. - */ -#define NETIF_DEBUG LWIP_DBG_OFF - -/** - * PBUF_DEBUG: Enable debugging in pbuf.c. - */ -#define PBUF_DEBUG LWIP_DBG_OFF - -/** - * API_LIB_DEBUG: Enable debugging in api_lib.c. - */ -#define API_LIB_DEBUG LWIP_DBG_OFF - -/** - * API_MSG_DEBUG: Enable debugging in api_msg.c. - */ -#define API_MSG_DEBUG LWIP_DBG_OFF - -/** - * SOCKETS_DEBUG: Enable debugging in sockets.c. - */ -#define SOCKETS_DEBUG LWIP_DBG_OFF - -/** - * ICMP_DEBUG: Enable debugging in icmp.c. - */ -#define ICMP_DEBUG LWIP_DBG_OFF - -/** - * IGMP_DEBUG: Enable debugging in igmp.c. - */ -#define IGMP_DEBUG LWIP_DBG_OFF - -/** - * INET_DEBUG: Enable debugging in inet.c. - */ -#define INET_DEBUG LWIP_DBG_OFF - -/** - * IP_DEBUG: Enable debugging for IP. - */ -#define IP_DEBUG LWIP_DBG_OFF - -/** - * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. - */ -#define IP_REASS_DEBUG LWIP_DBG_OFF - -/** - * RAW_DEBUG: Enable debugging in raw.c. - */ -#define RAW_DEBUG LWIP_DBG_OFF - -/** - * MEM_DEBUG: Enable debugging in mem.c. - */ -#define MEM_DEBUG LWIP_DBG_OFF - -/** - * MEMP_DEBUG: Enable debugging in memp.c. - */ -#define MEMP_DEBUG LWIP_DBG_OFF - -/** - * SYS_DEBUG: Enable debugging in sys.c. - */ -#define SYS_DEBUG LWIP_DBG_OFF - -/** - * TIMERS_DEBUG: Enable debugging in timers.c. - */ -#define TIMERS_DEBUG LWIP_DBG_OFF - -/** - * TCP_DEBUG: Enable debugging for TCP. - */ -#define TCP_DEBUG LWIP_DBG_OFF - -/** - * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. - */ -#define TCP_INPUT_DEBUG LWIP_DBG_OFF - -/** - * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. - */ -#define TCP_FR_DEBUG LWIP_DBG_OFF - -/** - * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit - * timeout. - */ -#define TCP_RTO_DEBUG LWIP_DBG_OFF - -/** - * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. - */ -#define TCP_CWND_DEBUG LWIP_DBG_OFF - -/** - * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. - */ -#define TCP_WND_DEBUG LWIP_DBG_OFF - -/** - * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. - */ -#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF - -/** - * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. - */ -#define TCP_RST_DEBUG LWIP_DBG_OFF - -/** - * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. - */ -#define TCP_QLEN_DEBUG LWIP_DBG_OFF - -/** - * UDP_DEBUG: Enable debugging in UDP. - */ -#define UDP_DEBUG LWIP_DBG_OFF - -/** - * TCPIP_DEBUG: Enable debugging in tcpip.c. - */ -#define TCPIP_DEBUG LWIP_DBG_OFF - -/** - * SLIP_DEBUG: Enable debugging in slipif.c. - */ -#define SLIP_DEBUG LWIP_DBG_OFF - -/** - * DHCP_DEBUG: Enable debugging in dhcp.c. - */ -#define DHCP_DEBUG LWIP_DBG_OFF - -/** - * AUTOIP_DEBUG: Enable debugging in autoip.c. - */ -#define AUTOIP_DEBUG LWIP_DBG_OFF - -/** - * DNS_DEBUG: Enable debugging for DNS. - */ -#define DNS_DEBUG LWIP_DBG_OFF - -/** - * IP6_DEBUG: Enable debugging for IPv6. - */ -#define IP6_DEBUG LWIP_DBG_OFF - -/** - * MDNS_DEBUG: Enable debugging for multicast DNS. - */ -#define MDNS_DEBUG LWIP_DBG_OFF - -/* - -------------------------------------------------- - ---------- Performance tracking options ---------- - -------------------------------------------------- -*/ - -#endif /* __LWIPOPTS_H__ */ diff --git a/extras/timekeeping/tests/sntp-run/sntp_impl.c b/extras/timekeeping/tests/sntp-run/sntp_impl.c deleted file mode 100644 index afcc763..0000000 --- a/extras/timekeeping/tests/sntp-run/sntp_impl.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Test implementation of callback for LWIP SNTP - * - * Production code would likely decide how to handle - * various magnitude changes, be robust to outliers, - * and be brisk about it all - */ - -/*- - * Copyright (c) 2018, Jeff Kletsky - * 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 the copyright holder 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. - */ - - -#include - -#include - -#include "sntp_impl.h" - -/********************************************************** - * IMPORTANT: THIS IS A TEST HARNESS, NOT PRODUCTION CODE * - ********************************************************** - * - * Spikes in delay of over 200 ms have been observed in testing. - * Such spikes would likely cause both a forward and a backward jump - * in time using this simplistic approach. Increasing the threshold to, - * for example, 250 ms would require 2000 * 250 ms = 500 sec ~ 10 min - * for the time to slew back after a "bad set" or series of "bad" packets. - * - * PRODUCTION CODE SHOULD USE AN APPLICATION-APPROPRIATE CLOCK DISCIPLINE - */ -#ifndef SNTP_IMPL_STEP_THRESHOLD -#define SNTP_IMPL_STEP_THRESHOLD 125000 -#endif - - -#define TV2LD(TV) ((long double)TV.tv_sec + (long double)TV.tv_usec * 1.e-6) -#include - - -/* - * Called by lwip/apps/sntp.c through - * #define SNTP_SET_SYSTEM_TIME_US(S, F) sntp_impl_set_system_time_us(S, F) - * u32_t matches lwip/apps/sntp.c - */ -void -sntp_impl_set_system_time_us(uint32_t secs, uint32_t us) { - - struct timeval new; - struct timeval old; - struct timeval dt; - -#ifdef TIMEKEEPING_SET_AND_MEASURE_ONLY - static long double time_has_been_set_at; -#endif - - gettimeofday(&old, NULL); - - new.tv_sec = secs; - new.tv_usec = us; - - timersub(&new, &old, &dt); - -#ifdef TIMEKEEPING_SET_AND_MEASURE_ONLY - - if (time_has_been_set_at == 0) { - settimeofday(&new, NULL); - time_has_been_set_at = TV2LD(new); - } - - printf("SNTP: %20.6Lf delta: %10.3Lf ms %3.1Lf ppm\n", - TV2LD(new), TV2LD(dt)*1e3, (TV2LD(dt) / (TV2LD(new) - time_has_been_set_at))*1e6); - -#else /* Normal operation */ - - if (secs || abs(us) > SNTP_IMPL_STEP_THRESHOLD) { - settimeofday(&new, NULL); - } else { - adjtime(&dt, NULL); - } - - printf("SNTP: %20.6Lf delta: %7.3Lf ms\n", - TV2LD(new), TV2LD(dt)*1e3); - -#endif -} diff --git a/extras/timekeeping/tests/sntp-run/sntp_impl.h b/extras/timekeeping/tests/sntp-run/sntp_impl.h deleted file mode 100644 index 4a7628b..0000000 --- a/extras/timekeeping/tests/sntp-run/sntp_impl.h +++ /dev/null @@ -1,42 +0,0 @@ -/*- - * Copyright (c) 2018, Jeff Kletsky - * 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 the copyright holder 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. - */ - -#ifndef EXTRAS_TIMEKEEPING_SNTP_IMPL_H -#define EXTRAS_TIMEKEEPING_SNTP_IMPL_H - -#include - -void -sntp_impl_set_system_time_us(uint32_t secs, uint32_t frac); - -/* See lwipopts.h for #define statements to couple with LWIP SNTP */ - -#endif /* EXTRAS_TIMEKEEPING_SNTP_IMPL_H */ diff --git a/extras/timekeeping/tests/sntp-run/timekeeping_sntp_run.c b/extras/timekeeping/tests/sntp-run/timekeeping_sntp_run.c deleted file mode 100644 index a8195d0..0000000 --- a/extras/timekeeping/tests/sntp-run/timekeeping_sntp_run.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Simple test using LWIP SNTP - */ - -/*- - * Copyright (c) 2018, Jeff Kletsky - * 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 the copyright holder 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. - */ - - -#include -#include - -#include -#include - -/* espressif/esp_system.h uses "bool" but fails to #include */ -#include -#include -#include - -/* For sdk_system_restart_in_nmi() */ -#include - -#include -#include - -#include - - -#define BLUE_LED 2 -#define LED_ON 0 -#define LED_OFF 1 - -#define WAIT_FOR_UART_SECS 5 /* 2 might be OK */ - -#define TV2LD(TV) ((long double)TV.tv_sec + (long double)TV.tv_usec * 1.e-6) - -void -sntp_task(void *pvParameters) { - - while (sdk_wifi_station_get_connect_status() != STATION_GOT_IP) { - vTaskDelay(10); - }; - - /* - * Set one of SNTP_OPMODE_LISTENONLY or SNTP_OPMODE_POLL - */ - - - /* - * SNTP_OPMODE_LISTENONLY - * just needs the mode set, no server names required - * (requires broadcast NTP on your network) - */ - - sntp_setoperatingmode(SNTP_OPMODE_LISTENONLY); - - /* - * SNTP_OPMODE_POLL - * Needs one or more server names set - * additional servers are "fail over" - * Can use a DNS name or an address literal - * LWIP can also be configured with SNTP_GET_SERVERS_FROM_DHCP - * (DHCP-specified SNTP servers untested at this time) - * - * NOTE: Early testing with polling shows higher deviations - * than seen with broadcast, even with RTT compensation - * Cause unknown at this time, but believed to be within SNTP - * amd not part of timekeeping itself. - */ - -/* - sntp_setoperatingmode(SNTP_OPMODE_POLL); - sntp_setservername(0, "ntp_a.example.com"); - sntp_setservername(1, "ntp_b.example.com"); - sntp_setservername(2, "ntp_c.example.com"); -*/ - - /* Once set up, this is all it takes */ - sntp_init(); - - /* - * Have high-priority thread "parked", might as well use it - * Show calling gettimeofday() once an hour to check for timer wrap - * (the SNTP process itself, if connected, should be sufficient) - */ - while (1) { - vTaskDelay(60 * 60 * (1000 / portTICK_PERIOD_MS)); - printf("gettimeofday(NULL, NULL)\n"); - gettimeofday(NULL, NULL); - } -} - - - -void -user_init(void) -{ - uart_set_baud(0, 115200); - sdk_wifi_set_opmode(STATION_MODE); - /* - * Run at a high enough priority so that the initial time-set doesn't get interrupted - * Later calls and listen-only mode calls run in the high-priority "tcpip_thread" (LWIP) - * - * While 196 heap seemed sufficient for many tests, use of an NTP pool - * with DNS caused heap errors/warnings on starting NTP at 256 heap - */ - xTaskCreate(sntp_task, "SNTP task", 288, NULL, 6, NULL); -} diff --git a/extras/timekeeping/tests/wrap/Makefile b/extras/timekeeping/tests/wrap/Makefile deleted file mode 100644 index 0f0a4f9..0000000 --- a/extras/timekeeping/tests/wrap/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -PROGRAM=timekeeping_wrap_test - -EXTRA_COMPONENTS = extras/timekeeping - -include ../../../../common.mk diff --git a/extras/timekeeping/tests/wrap/timekeeping_wrap_test.c b/extras/timekeeping/tests/wrap/timekeeping_wrap_test.c deleted file mode 100644 index 70df3e3..0000000 --- a/extras/timekeeping/tests/wrap/timekeeping_wrap_test.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Tests of functionality within extras/timekeeping - */ - -/*- - * Copyright (c) 2018, Jeff Kletsky - * 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 the copyright holder 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. - */ - -#include -#include - -#include -#include - -#include -#include - -#include -#include - -/* espressif/esp_system.h uses "bool" but fails to #include */ -#include -#include - - -#define BLUE_LED 2 -#define LED_ON 0 -#define LED_OFF 1 - -#define WAIT_FOR_UART_SECS 5 /* 2 might be OK */ - -/* For sdk_system_restart_in_nmi() */ -#include - -/* Not defined in espressif/esp_wifi.h */ -extern bool -sdk_wifi_set_opmode_current(uint8_t opmode); - -#define TV2LD(TV) ((long double)TV.tv_sec + (long double)TV.tv_usec * 1.e-6) - - -void -testTask(void *pvParameters) -{ - struct timeval tv; - TickType_t base_ticks; - TickType_t increment_ticks; - int idx; - long num_runs; - int seconds_per_report; - - gpio_enable(BLUE_LED, GPIO_OUTPUT); - gpio_write(BLUE_LED, LED_OFF); - - vTaskDelay(WAIT_FOR_UART_SECS * 1000 / portTICK_PERIOD_MS); - - gpio_write(BLUE_LED, LED_ON); - - - printf("\n"); - printf("settimeofday to 1000000000\n"); - tv.tv_sec = 1000000000; - tv.tv_usec = 0; - settimeofday(&tv, NULL); - - tv.tv_sec = 0; - tv.tv_usec = 0; - - printf("\n===== 4500-second (75 min) time-display run =====\n"); - printf(" 2^32 = 4294967296; ~4295 seconds\n"); - - num_runs = 450; - seconds_per_report = 10; - - increment_ticks = (seconds_per_report * 1000) / portTICK_PERIOD_MS; - - base_ticks = xTaskGetTickCount(); - - for (idx = 0; idx <= num_runs; idx++) { - gettimeofday(&tv, NULL); - printf("%20.6Lf at %8.3lf sec elapsed; %10lu system clock\n", - TV2LD(tv), (double)(xTaskGetTickCount() - base_ticks)/100, (long unsigned int)sdk_system_get_time()); - vTaskDelay((base_ticks - xTaskGetTickCount()) + (increment_ticks * (idx + 1))); - } - - printf("\n"); - printf("All done; reboot imminent\n"); - - gpio_write(BLUE_LED, LED_OFF); - - sdk_system_restart_in_nmi(); -} - - - -void -user_init(void) -{ - uart_set_baud(0, 115200); - sdk_wifi_set_opmode_current(NULL_MODE); /* Temporarily disable */ - xTaskCreate(testTask, "testTask", 512, NULL, 2, NULL); -} diff --git a/extras/timekeeping/timekeeping.c b/extras/timekeeping/timekeeping.c deleted file mode 100644 index 1fb65fd..0000000 --- a/extras/timekeeping/timekeeping.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Basic timekeeping functions - * - * Independent of clock discipline - */ - -/*- - * Copyright (c) 2018, Jeff Kletsky - * 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 the copyright holder 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. - */ - - -#include -#include -#include - -/* espressif/esp_system.h uses "bool" but fails to #include */ -#include -#include - -#include - - -/* #define here for easier use of other system clocks */ -#define GET_SYSTEM_CLOCK_US() sdk_system_get_time() - -typedef uint32_t system_clock_t; -#define SYSTEM_CLOCK_WRAP_US 0x100000000LL - -/* - * Define the slew rate in terms of microseconds of time to slew 1 microsecond - * This allows the use of integer arithmetic - * 2000 us to slew 1 us is 500 us of slew per sec, consistent with NTP usage - */ -#define ADJTIME_SLEW_PERIOD 2000 - -/* - * Try to prevent gross errors in calls to adjtime(), - * such as calling with the desired time - * NTP typically won't try to slew more than 128 ms - * At 500 ppm, can slew 1.8 seconds/hour - * A little less than what an int32_t can represent should be more than enough - * (2**31)/1e6 < 2147 - */ -#define ADJTIME_MAX_SECS_ALLOWED 2000 - - -/* - * Assume that newlib was compiled to implement tz locking - * See newlib-xtensa/newlib/libc/time/local.h - * - * __tz_lock is implemented by newlib and calls - * __tz_lock() calls __lock_acquire() which calls - * xSemaphoreTake() -- NOT RECURSIVE - * Use of __tz_lock() in applications may result in deadlock - * - * As that local.h is not available within esp-open-rtos - * replicate the definitions and provide proto here - */ -#define TZ_LOCK __tz_lock() -#define TZ_UNLOCK __tz_unlock() - -extern void __tz_lock(void); -extern void __tz_unlock(void); - - -/* - * Multi-threading considerations - * - * While the calls related to timekeeping are generally "tight" - * there is the possiblity that the calling process will be swapped out. - * Selection of proper task priority should mitigate this - * - * taskENTER_CRITICAL() and taskEXIT_CRITICAL() might be useful - * for specialized requirements. Before considering their use - * determine if configMAX_SYSCALL_INTERRUPT_PRIORITY is enabled - * and is at a level that permits at least ticks. - * See also configMAX_API_CALL_INTERRUPT_PRIORITY - * - * TIMEKEEPING_LOCK_USE_CRITICAL doesn't make much sense - * if it prevents interrupts related to ticks! - * - * TIMEKEEPING_LOCK_USE_CRITICAL is UNTESTED - */ - -#ifdef TIMEKEEPING_LOCK_USE_CRITICAL -#define TIMEKEEPING_LOCK() do {TZ_LOCK; taskENTER_CRITICAL();} while (0) -#define TIMEKEEPING_UNLOCK() do {taskEXIT_CRITICAL(); TZ_UNLOCK;} while (0) -#else -#define TIMEKEEPING_LOCK() TZ_LOCK -#define TIMEKEEPING_UNLOCK() TZ_UNLOCK -#endif - -#define SIGNED_ADJTIME_SLEW_PERIOD (timekeeping_state.adjtime_delta < 0 \ - ? -ADJTIME_SLEW_PERIOD : ADJTIME_SLEW_PERIOD) - -#define UNUSED_PARAM(X) ((void)X) - -/* - * All units in timekeeping_state are microseconds - * Intentionally *signed* values as, for example, might want to reset to zero - * for a time other than when the system clock started ticking - */ -static struct -{ - int64_t clock_offset; - system_clock_t last_system_clock_value; - int32_t adjtime_delta; - int64_t slew_start_time; - int64_t slew_complete_time; -} timekeeping_state; - - -static inline void -_reset_adjtime_state() { - - /* This should only be called under TIMEKEEPING_LOCK */ - - timekeeping_state.adjtime_delta = 0; - timekeeping_state.slew_start_time = 0; - timekeeping_state.slew_complete_time = 0; -} - -static void -_check_system_clock(void) { - - /* This should only be called under TIMEKEEPING_LOCK */ - - system_clock_t current_system_clock; - - current_system_clock = GET_SYSTEM_CLOCK_US(); - - if (current_system_clock < timekeeping_state.last_system_clock_value) { - timekeeping_state.clock_offset = - timekeeping_state.clock_offset + SYSTEM_CLOCK_WRAP_US; - } - - timekeeping_state.last_system_clock_value = current_system_clock; - - if (timekeeping_state.slew_complete_time - && ((GET_SYSTEM_CLOCK_US() + timekeeping_state.clock_offset) - >= timekeeping_state.slew_complete_time)) { - timekeeping_state.clock_offset = - timekeeping_state.clock_offset + timekeeping_state.adjtime_delta; - _reset_adjtime_state(); - } -} - - -int -_settimeofday_r(struct _reent *r, const struct timeval *tv, const struct timezone *tz) { - - UNUSED_PARAM(tz); - - int retval = 0; - system_clock_t current_system_clock; - int64_t desired_internal_clock; - - /* Effectively a system call, be picky */ - if (tv && (tv->tv_usec < 0 || tv->tv_usec >= 1000000 || tv->tv_sec < 0)) { - retval = -1; - r->_errno = EINVAL; - } - - TIMEKEEPING_LOCK(); - - _check_system_clock(); - - if (tv && !retval) { - - current_system_clock = GET_SYSTEM_CLOCK_US(); - desired_internal_clock = ((int64_t) tv->tv_sec * 1000000) + tv->tv_usec; - - timekeeping_state.clock_offset = - desired_internal_clock - current_system_clock; - - _reset_adjtime_state(); - - } - - TIMEKEEPING_UNLOCK(); - - return (retval); -} - - -/* "Override" the newlib definition used for gettimeofday and variants */ -int -_gettimeofday_r(struct _reent *r, struct timeval *tv, void *tz) { - - UNUSED_PARAM(r); - UNUSED_PARAM(tz); - - system_clock_t current_system_clock; - int64_t system_plus_offset; - int64_t internal_clock; - - current_system_clock = GET_SYSTEM_CLOCK_US(); - - TIMEKEEPING_LOCK(); - - _check_system_clock(); - - if (tv) { - - system_plus_offset = - current_system_clock + timekeeping_state.clock_offset; - if (!timekeeping_state.slew_complete_time) { - internal_clock = system_plus_offset; - } else { - internal_clock = - (int64_t)(system_plus_offset - + (system_plus_offset - - timekeeping_state.slew_start_time) - / SIGNED_ADJTIME_SLEW_PERIOD); - } - - tv->tv_sec = internal_clock / 1000000; - tv->tv_usec = internal_clock % 1000000; - - } - - TIMEKEEPING_UNLOCK(); - - return (0); -} - - -int -_adjtime_r(struct _reent *r, const struct timeval *delta, struct timeval *olddelta) { - - int retval = 0; - system_clock_t current_system_clock; - int64_t system_plus_offset; - int32_t slew; - - current_system_clock = GET_SYSTEM_CLOCK_US(); - - /* Effectively a system call, be picky */ - if (delta && (delta->tv_usec <= -1000000 || delta->tv_usec >= 1000000 - || delta->tv_sec > ADJTIME_MAX_SECS_ALLOWED - || delta->tv_sec < -ADJTIME_MAX_SECS_ALLOWED)) { - retval = -1; - r->_errno = EINVAL; - } - - TIMEKEEPING_LOCK(); - - _check_system_clock(); - - if (!retval) { - - system_plus_offset = - current_system_clock + timekeeping_state.clock_offset; - - if (olddelta) { - if (timekeeping_state.slew_complete_time) { - slew = (int32_t)((timekeeping_state.slew_complete_time - - system_plus_offset) - / SIGNED_ADJTIME_SLEW_PERIOD); - olddelta->tv_sec = slew / 1000000; - olddelta->tv_usec = slew % 1000000; - } else { - olddelta->tv_sec = 0; - olddelta->tv_usec = 0; - } - } - - if (delta) { - timekeeping_state.adjtime_delta = delta->tv_sec * 1000000 + delta->tv_usec; - timekeeping_state.slew_start_time = system_plus_offset; - timekeeping_state.slew_complete_time = - timekeeping_state.slew_start_time - + (int64_t) timekeeping_state.adjtime_delta - * SIGNED_ADJTIME_SLEW_PERIOD; - } - - } /* if (!retval) */ - - TIMEKEEPING_UNLOCK(); - - return (retval); -} - - - -int -settimeofday(const struct timeval *tv, const struct timezone *tz) { - - return _settimeofday_r(_REENT, tv, tz); -} - -int -adjtime(const struct timeval *delta, struct timeval *olddelta) { - - return _adjtime_r(_REENT, delta, olddelta); -} diff --git a/extras/tsl2561/component.mk b/extras/tsl2561/component.mk deleted file mode 100644 index 47cf9cd..0000000 --- a/extras/tsl2561/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/tsl2561 - -# Include the TSL2561 driver as "tsl2561/tsl2561.h" -INC_DIRS += $(tsl2561_ROOT).. - -# args for passing into compile rule generation -tsl2561_SRC_DIR = $(tsl2561_ROOT) - -$(eval $(call component_compile_rules,tsl2561)) diff --git a/extras/tsl2561/tsl2561.c b/extras/tsl2561/tsl2561.c deleted file mode 100644 index b4dc9b5..0000000 --- a/extras/tsl2561/tsl2561.c +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Part of esp-open-rtos - * Copyright (C) 2016 Brian Schwind (https://github.com/bschwind) - * BSD Licensed as described in the file LICENSE - */ - -#include -#include "FreeRTOS.h" -#include "task.h" -#include "tsl2561.h" - -// Registers -#define TSL2561_REG_COMMAND 0x80 -#define TSL2561_REG_CONTROL 0x00 -#define TSL2561_REG_TIMING 0x01 -#define TSL2561_REG_THRESHOLD_LOW_0 0x02 -#define TSL2561_REG_THRESHOLD_LOW_1 0x03 -#define TSL2561_REG_THRESHOLD_HIGH_0 0x04 -#define TSL2561_REG_THRESHOLD_HIGH_1 0x05 -#define TSL2561_REG_INTERRUPT 0x06 -#define TSL2561_REG_PART_ID 0x0A -#define TSL2561_REG_CHANNEL_0_LOW 0x0C -#define TSL2561_REG_CHANNEL_0_HIGH 0x0D -#define TSL2561_REG_CHANNEL_1_LOW 0x0E -#define TSL2561_REG_CHANNEL_1_HIGH 0x0F - -// TSL2561 Misc Values -#define TSL2561_ON 0x03 -#define TSL2561_OFF 0x00 -#define TSL2561_READ_WORD 0x20 - -// Integration times in milliseconds -#define TSL2561_INTEGRATION_TIME_13MS 20 -#define TSL2561_INTEGRATION_TIME_101MS 110 -#define TSL2561_INTEGRATION_TIME_402MS 410 // Default - -// Calculation constants -#define LUX_SCALE 14 -#define RATIO_SCALE 9 -#define CH_SCALE 10 -#define CHSCALE_TINT0 0x7517 -#define CHSCALE_TINT1 0x0fe7 - -// Package constants -#define TSL2561_PACKAGE_CS 0x00 -#define TSL2561_PACKAGE_T_FN_CL 0x01 - -// Constants from the TSL2561 data sheet -#define K1T 0x0040 // 0.125 * 2^RATIO_SCALE -#define B1T 0x01f2 // 0.0304 * 2^LUX_SCALE -#define M1T 0x01be // 0.0272 * 2^LUX_SCALE -#define K2T 0x0080 // 0.250 * 2^RATIO_SCALE -#define B2T 0x0214 // 0.0325 * 2^LUX_SCALE -#define M2T 0x02d1 // 0.0440 * 2^LUX_SCALE -#define K3T 0x00c0 // 0.375 * 2^RATIO_SCALE -#define B3T 0x023f // 0.0351 * 2^LUX_SCALE -#define M3T 0x037b // 0.0544 * 2^LUX_SCALE -#define K4T 0x0100 // 0.50 * 2^RATIO_SCALE -#define B4T 0x0270 // 0.0381 * 2^LUX_SCALE -#define M4T 0x03fe // 0.0624 * 2^LUX_SCALE -#define K5T 0x0138 // 0.61 * 2^RATIO_SCALE -#define B5T 0x016f // 0.0224 * 2^LUX_SCALE -#define M5T 0x01fc // 0.0310 * 2^LUX_SCALE -#define K6T 0x019a // 0.80 * 2^RATIO_SCALE -#define B6T 0x00d2 // 0.0128 * 2^LUX_SCALE -#define M6T 0x00fb // 0.0153 * 2^LUX_SCALE -#define K7T 0x029a // 1.3 * 2^RATIO_SCALE -#define B7T 0x0018 // 0.00146 * 2^LUX_SCALE -#define M7T 0x0012 // 0.00112 * 2^LUX_SCALE -#define K8T 0x029a // 1.3 * 2^RATIO_SCALE -#define B8T 0x0000 // 0.000 * 2^LUX_SCALE -#define M8T 0x0000 // 0.000 * 2^LUX_SCALE -#define K1C 0x0043 // 0.130 * 2^RATIO_SCALE -#define B1C 0x0204 // 0.0315 * 2^LUX_SCALE -#define M1C 0x01ad // 0.0262 * 2^LUX_SCALE -#define K2C 0x0085 // 0.260 * 2^RATIO_SCALE -#define B2C 0x0228 // 0.0337 * 2^LUX_SCALE -#define M2C 0x02c1 // 0.0430 * 2^LUX_SCALE -#define K3C 0x00c8 // 0.390 * 2^RATIO_SCALE -#define B3C 0x0253 // 0.0363 * 2^LUX_SCALE -#define M3C 0x0363 // 0.0529 * 2^LUX_SCALE -#define K4C 0x010a // 0.520 * 2^RATIO_SCALE -#define B4C 0x0282 // 0.0392 * 2^LUX_SCALE -#define M4C 0x03df // 0.0605 * 2^LUX_SCALE -#define K5C 0x014d // 0.65 * 2^RATIO_SCALE -#define B5C 0x0177 // 0.0229 * 2^LUX_SCALE -#define M5C 0x01dd // 0.0291 * 2^LUX_SCALE -#define K6C 0x019a // 0.80 * 2^RATIO_SCALE -#define B6C 0x0101 // 0.0157 * 2^LUX_SCALE -#define M6C 0x0127 // 0.0180 * 2^LUX_SCALE -#define K7C 0x029a // 1.3 * 2^RATIO_SCALE -#define B7C 0x0037 // 0.00338 * 2^LUX_SCALE -#define M7C 0x002b // 0.00260 * 2^LUX_SCALE -#define K8C 0x029a // 1.3 * 2^RATIO_SCALE -#define B8C 0x0000 // 0.000 * 2^LUX_SCALE -#define M8C 0x0000 // 0.000 * 2^LUX_SCALE - -#ifdef TSL2561_DEBUG -#include -#define debug(fmt, ...) printf("%s: " fmt "\n", "TSL2561", ## __VA_ARGS__) -#else -#define debug(fmt, ...) -#endif - -static int write_register(i2c_dev_t *i2c_dev, uint8_t reg, uint8_t value) -{ - reg = TSL2561_REG_COMMAND | reg; - return i2c_slave_write(i2c_dev->bus, i2c_dev->addr, ®, &value, 1); -} - -static uint8_t read_register(i2c_dev_t *i2c_dev, uint8_t reg) -{ - uint8_t data[1]; - reg = TSL2561_REG_COMMAND | reg; - - if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, ®, data, 1)) - { - debug("Error in tsl2561 read_register\n"); - } - - return data[0]; -} - -static uint16_t read_register_16(i2c_dev_t *i2c_dev, uint8_t low_register_addr) -{ - uint16_t value = 0; - uint8_t data[2]; - low_register_addr = TSL2561_REG_COMMAND | TSL2561_READ_WORD | low_register_addr; - - if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, &low_register_addr, data, 2)) - { - debug("Error with i2c_slave_read in read_register_16\n"); - } - - value = ((uint16_t)data[1] << 8) | (data[0]); - - return value; -} - -static int enable(i2c_dev_t *i2c_dev) -{ - return write_register(i2c_dev, TSL2561_REG_CONTROL, TSL2561_ON); -} - -static int disable(i2c_dev_t *i2c_dev) -{ - return write_register(i2c_dev, TSL2561_REG_CONTROL, TSL2561_OFF); -} - -void tsl2561_init(tsl2561_t *device) -{ - if (enable(&device->i2c_dev)) - { - debug("Error initializing tsl2561\n"); - } - - uint8_t control_reg = (read_register(&device->i2c_dev, TSL2561_REG_CONTROL) & TSL2561_ON); - - if (control_reg != TSL2561_ON) - { - debug("Error initializing tsl2561, control register wasn't set to ON\n"); - } - - // Fetch the package type - uint8_t part_reg = read_register(&device->i2c_dev, TSL2561_REG_PART_ID); - uint8_t package = part_reg >> 6; - device->package_type = package; - - // Fetch the gain and integration time - uint8_t timing_register = read_register(&device->i2c_dev, TSL2561_REG_TIMING); - device->gain = timing_register & 0x10; - device->integration_time = timing_register & 0x03; - - disable(&device->i2c_dev); -} - -void tsl2561_set_integration_time(tsl2561_t *device, tsl2561_integration_time_t integration_time_id) -{ - enable(&device->i2c_dev); - write_register(&device->i2c_dev, TSL2561_REG_TIMING, integration_time_id | device->gain); - disable(&device->i2c_dev); - - device->integration_time = integration_time_id; -} - -void tsl2561_set_gain(tsl2561_t *device, tsl2561_gain_t gain) -{ - enable(&device->i2c_dev); - write_register(&device->i2c_dev, TSL2561_REG_TIMING, gain | device->integration_time); - disable(&device->i2c_dev); - - device->gain = gain; -} - -static void get_channel_data(tsl2561_t *device, uint16_t *channel0, uint16_t *channel1) -{ - enable(&device->i2c_dev); - - // Since we just enabled the chip, we need to sleep - // for the chip's integration time so it can gather a reading - switch (device->integration_time) - { - case TSL2561_INTEGRATION_13MS: - vTaskDelay(TSL2561_INTEGRATION_TIME_13MS / portTICK_PERIOD_MS); - break; - case TSL2561_INTEGRATION_101MS: - vTaskDelay(TSL2561_INTEGRATION_TIME_101MS / portTICK_PERIOD_MS); - break; - default: - vTaskDelay(TSL2561_INTEGRATION_TIME_402MS / portTICK_PERIOD_MS); - break; - } - - *channel0 = read_register_16(&device->i2c_dev, TSL2561_REG_CHANNEL_0_LOW); - *channel1 = read_register_16(&device->i2c_dev, TSL2561_REG_CHANNEL_1_LOW); - - disable(&device->i2c_dev); -} - -bool tsl2561_read_lux(tsl2561_t *device, uint32_t *lux) -{ - bool success = true; - uint32_t chScale; - uint32_t channel1; - uint32_t channel0; - - switch (device->integration_time) - { - case TSL2561_INTEGRATION_13MS: - chScale = CHSCALE_TINT0; - break; - case TSL2561_INTEGRATION_101MS: - chScale = CHSCALE_TINT1; - break; - default: - chScale = (1 << CH_SCALE); - break; - } - - // Scale if gain is 1x - if (device->gain == TSL2561_GAIN_1X) - { - // 16x is nominal, so if the gain is set to 1x then - // we need to scale by 16 - chScale = chScale << 4; - } - - uint16_t ch0; - uint16_t ch1; - get_channel_data(device, &ch0, &ch1); - - // Scale the channel values - channel0 = (ch0 * chScale) >> CH_SCALE; - channel1 = (ch1 * chScale) >> CH_SCALE; - - // Find the ratio of the channel values (channel1 / channel0) - // Protect against divide by zero - uint32_t ratio1 = 0; - if (channel0 != 0) - { - ratio1 = (channel1 << (RATIO_SCALE+1)) / channel0; - } - - // Round the ratio value - uint32_t ratio = (ratio1 + 1) >> 1; - - uint32_t b; - uint32_t m; - switch (device->package_type) - { - case TSL2561_PACKAGE_CS: - if ((ratio >= 0) && (ratio <= K1C)) - { - b = B1C; - m = M1C; - } - else if (ratio <= K2C) - { - b = B2C; - m = M2C; - } - else if (ratio <= K3C) - { - b = B3C; - m = M3C; - } - else if (ratio <= K4C) - { - b = B4C; - m = M4C; - } - else if (ratio <= K5C) - { - b = B5C; - m = M5C; - } - else if (ratio <= K6C) - { - b = B6C; - m = M6C; - } - else if (ratio <= K7C) - { - b = B7C; - m = M7C; - } - else if (ratio > K8C) - { - b = B8C; - m = M8C; - } - - break; - case TSL2561_PACKAGE_T_FN_CL: - if ((ratio >= 0) && (ratio <= K1T)) - { - b = B1T; - m = M1T; - } - else if (ratio <= K2T) - { - b = B2T; - m = M2T; - } - else if (ratio <= K3T) - { - b = B3T; - m = M3T; - } - else if (ratio <= K4T) - { - b = B4T; - m = M4T; - } - else if (ratio <= K5T) - { - b = B5T; - m = M5T; - } - else if (ratio <= K6T) - { - b = B6T; - m = M6T; - } - else if (ratio <= K7T) - { - b = B7T; - m = M7T; - } - else if (ratio > K8T) - { - b = B8T; - m = M8T; - } - - break; - default: - debug("Invalid package type in CalculateLux\n"); - b = 0; - m = 0; - success = false; - break; - } - - int32_t temp; - temp = ((channel0 * b) - (channel1 * m)); - - // Do not allow negative lux value - if (temp < 0) - { - temp = 0; - } - - // Round lsb (2^(LUX_SCALE−1)) - temp += (1 << (LUX_SCALE - 1)); - - // Strip off fractional portion - *lux = temp >> LUX_SCALE; - - return success; -} diff --git a/extras/tsl2561/tsl2561.h b/extras/tsl2561/tsl2561.h deleted file mode 100644 index 9f880b3..0000000 --- a/extras/tsl2561/tsl2561.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Part of esp-open-rtos - * Copyright (C) 2016 Brian Schwind (https://github.com/bschwind) - * BSD Licensed as described in the file LICENSE - */ - -#ifndef __TSL2561_H__ -#define __TSL2561_H__ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// I2C Addresses -typedef enum -{ - TSL2561_I2C_ADDR_VCC = 0x49, - TSL2561_I2C_ADDR_GND = 0x29, - TSL2561_I2C_ADDR_FLOAT = 0x39 // Default -} tsl2561_i2c_addr_t; - -// Integration time IDs -typedef enum -{ - TSL2561_INTEGRATION_13MS = 0x00, - TSL2561_INTEGRATION_101MS = 0x01, - TSL2561_INTEGRATION_402MS = 0x02 // Default -} tsl2561_integration_time_t; - -// Gain IDs -typedef enum -{ - TSL2561_GAIN_1X = 0x00, // Default - TSL2561_GAIN_16X = 0x10 -} tsl2561_gain_t; - -typedef struct { - i2c_dev_t i2c_dev; - uint8_t integration_time; - uint8_t gain; - uint8_t package_type; -} tsl2561_t; - -void tsl2561_init(tsl2561_t *device); -void tsl2561_set_integration_time(tsl2561_t *device, tsl2561_integration_time_t integration_time_id); -void tsl2561_set_gain(tsl2561_t *device, tsl2561_gain_t gain); -bool tsl2561_read_lux(tsl2561_t *device, uint32_t *lux); - -#ifdef __cplusplus -} -#endif - -#endif // __TSL2561_H__ diff --git a/extras/tsl4531/component.mk b/extras/tsl4531/component.mk deleted file mode 100644 index 8752823..0000000 --- a/extras/tsl4531/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/tsl4531 - -# Include the TSL4531 driver as "tsl4531/tsl4531.h" -INC_DIRS += $(tsl4531_ROOT).. - -# args for passing into compile rule generation -tsl4531_SRC_DIR = $(tsl4531_ROOT) - -$(eval $(call component_compile_rules,tsl4531)) diff --git a/extras/tsl4531/tsl4531.c b/extras/tsl4531/tsl4531.c deleted file mode 100644 index cac7669..0000000 --- a/extras/tsl4531/tsl4531.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Part of esp-open-rtos - * Copyright (C) 2017 Brian Schwind (https://github.com/bschwind) - * BSD Licensed as described in the file LICENSE - */ - -#include -#include "FreeRTOS.h" -#include "task.h" -#include "tsl4531.h" - -// Registers -#define TSL4531_REG_COMMAND 0x80 -#define TSL4531_REG_CONTROL 0x00 -#define TSL4531_REG_CONFIG 0x01 -#define TSL4531_REG_DATA_LOW 0x04 -#define TSL4531_REG_DATA_HIGH 0x05 -#define TSL4531_REG_DEVICE_ID 0x0A - -// TSL4531 Misc Values -#define TSL4531_ON 0x03 -#define TSL4531_OFF 0x00 - -// Integration times in milliseconds -#define TSL4531_INTEGRATION_TIME_100MS 120 -#define TSL4531_INTEGRATION_TIME_200MS 240 -#define TSL4531_INTEGRATION_TIME_400MS 480 // Default - -static int write_register(i2c_dev_t *i2c_dev, uint8_t reg, uint8_t value) -{ - reg = TSL4531_REG_COMMAND | reg; - return i2c_slave_write(i2c_dev->bus, i2c_dev->addr, ®, &value, 1); -} - -static uint8_t read_register(i2c_dev_t *i2c_dev, uint8_t reg) -{ - uint8_t data[1]; - reg = TSL4531_REG_COMMAND | reg; - - if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, ®, data, 1)) - { - printf("Error in tsl4531 read_register\n"); - } - - return data[0]; -} - -static uint16_t read_register_16(i2c_dev_t *i2c_dev, uint8_t low_register_addr) -{ - uint16_t value = 0; - uint8_t data[2]; - low_register_addr = TSL4531_REG_COMMAND | low_register_addr; - - if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, &low_register_addr, data, 2)) - { - printf("Error with i2c_slave_read in read_register_16\n"); - } - - value = ((uint16_t)data[1] << 8) | (data[0]); - - return value; -} - -static int enable(tsl4531_t *device) -{ - return write_register(&device->i2c_dev, TSL4531_REG_CONTROL, TSL4531_ON); -} - -static int disable(tsl4531_t *device) -{ - return write_register(&device->i2c_dev, TSL4531_REG_CONTROL, TSL4531_OFF); -} - -void tsl4531_init(tsl4531_t *device) -{ - if (enable(device)) - { - printf("Error initializing tsl4531, the enable write failed\n"); - } - - uint8_t control_reg = read_register(&device->i2c_dev, TSL4531_REG_CONTROL); - - if (control_reg != TSL4531_ON) { - printf("Error initializing tsl4531, control register wasn't set to ON\n"); - } - - uint8_t idRegister = read_register(&device->i2c_dev, TSL4531_REG_DEVICE_ID); - uint8_t id = (idRegister & 0xF0) >> 4; - - if (id == TSL4531_PART_TSL45317) { - device->part_id = TSL4531_PART_TSL45317; - } else if (id == TSL4531_PART_TSL45313) { - device->part_id = TSL4531_PART_TSL45313; - } else if (id == TSL4531_PART_TSL45315) { - device->part_id = TSL4531_PART_TSL45315; - } else if (id == TSL4531_PART_TSL45311) { - device->part_id = TSL4531_PART_TSL45311; - } else { - printf("Unknown part id for TSL4531 sensor: %u\n", id); - } - - disable(device); -} - -void tsl4531_set_integration_time(tsl4531_t *device, tsl4531_integration_time_t integration_time_id) -{ - uint8_t power_save_bit = device->skip_power_save ? 0x08 : 0x00; - uint8_t integration_time_bits = 0x03 & integration_time_id; - uint8_t new_config_reg = power_save_bit | integration_time_bits; - - enable(device); - write_register(&device->i2c_dev, TSL4531_REG_CONFIG, new_config_reg); - disable(device); - - device->integration_time_id = integration_time_id; -} - -void tsl4531_set_power_save_skip(tsl4531_t *device, bool skip_power_save) -{ - uint8_t power_save_bit = skip_power_save ? 0x08 : 0x00; - uint8_t integration_time_bits = 0x03 & device->integration_time_id; - uint8_t new_config_reg = power_save_bit | integration_time_bits; - - enable(device); - write_register(&device->i2c_dev, TSL4531_REG_CONFIG, new_config_reg); - disable(device); - - device->skip_power_save = skip_power_save; -} - -bool tsl4531_read_lux(tsl4531_t *device, uint16_t *lux) -{ - bool success = true; - uint16_t multiplier = 1; - - enable(device); - - switch (device->integration_time_id) - { - case TSL4531_INTEGRATION_100MS: - multiplier = 4; - vTaskDelay(TSL4531_INTEGRATION_TIME_100MS / portTICK_PERIOD_MS); - break; - case TSL4531_INTEGRATION_200MS: - multiplier = 2; - vTaskDelay(TSL4531_INTEGRATION_TIME_200MS / portTICK_PERIOD_MS); - break; - case TSL4531_INTEGRATION_400MS: - multiplier = 1; - vTaskDelay(TSL4531_INTEGRATION_TIME_400MS / portTICK_PERIOD_MS); - break; - default: - multiplier = 1; - vTaskDelay(TSL4531_INTEGRATION_TIME_400MS / portTICK_PERIOD_MS); - break; - } - - uint16_t lux_data = read_register_16(&device->i2c_dev, TSL4531_REG_DATA_LOW); - - disable(device); - - *lux = multiplier * lux_data; - - return success; -} diff --git a/extras/tsl4531/tsl4531.h b/extras/tsl4531/tsl4531.h deleted file mode 100644 index d4ab7ec..0000000 --- a/extras/tsl4531/tsl4531.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Part of esp-open-rtos - * Copyright (C) 2017 Brian Schwind (https://github.com/bschwind) - * BSD Licensed as described in the file LICENSE - */ - -#ifndef __TSL4531_H__ -#define __TSL4531_H__ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// I2C Addresses -typedef enum -{ - TSL4531_I2C_ADDR = 0x29 -} tsl4531_i2c_addr_t; - -// Integration time IDs -typedef enum -{ - TSL4531_INTEGRATION_100MS = 0x02, - TSL4531_INTEGRATION_200MS = 0x01, - TSL4531_INTEGRATION_400MS = 0x00 // Default -} tsl4531_integration_time_t; - -// Part IDs -typedef enum -{ - TSL4531_PART_TSL45317 = 0x08, - TSL4531_PART_TSL45313 = 0x09, - TSL4531_PART_TSL45315 = 0x0A, - TSL4531_PART_TSL45311 = 0x0B -} tsl4531_part_id_t; - -typedef struct { - i2c_dev_t i2c_dev; - uint8_t integration_time_id; - bool skip_power_save; - tsl4531_part_id_t part_id; -} tsl4531_t; - -void tsl4531_init(tsl4531_t *device); -void tsl4531_set_integration_time(tsl4531_t *device, tsl4531_integration_time_t integration_time_id); -void tsl4531_set_power_save_skip(tsl4531_t *device, bool skip_power_save); -bool tsl4531_read_lux(tsl4531_t *device, uint16_t *lux); - -#ifdef __cplusplus -} -#endif - -#endif // __TSL4531_H__ diff --git a/extras/tsoftuart/component.mk b/extras/tsoftuart/component.mk deleted file mode 100644 index f8c0b70..0000000 --- a/extras/tsoftuart/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/tsoftuart - -# Expected anyone using tsoftuart includes it as 'tsoftuart/tsoftuart.h' -INC_DIRS += $(tsoftuart_ROOT).. - -# args for passing into compile rule generation -tsoftuart_INC_DIR = -tsoftuart_SRC_DIR = $(tsoftuart_ROOT) - -$(eval $(call component_compile_rules,tsoftuart)) diff --git a/extras/tsoftuart/tsoftuart.c b/extras/tsoftuart/tsoftuart.c deleted file mode 100644 index dbcc7cf..0000000 --- a/extras/tsoftuart/tsoftuart.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Software timer based UART driver. - * - * Copyright (C) 2018 to 2019 OurAirQuality.org - * - * Licensed under the Apache License, Version 2.0, January 2004 (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/ - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS WITH THE SOFTWARE. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include "FreeRTOS.h" -#include "task.h" -#include "tsoftuart/tsoftuart.h" - - -/* - * The design builds a sequence of UART output transitions - the delay between - * each toggling of the output. This sequence is then followed by a timer and - * the timer handler toggles the state and resets the timer for the next - * transition until done. This design avoids the code having to spin to - * implement delays, and avoid having to disable interrupts for more reliable - * timing. - * - * The MAC timer interrupt is used here as it has a high priority which helps - * keep accurate output transition times. The MAC timer interrupt is a NMI and - * the handler needs to take care not to interact widely. The handler only - * accesses the timer queue, which has already been initialized. - * - * This software UART is not completely reliable, but might suit debug output - * or communication that has an error detection layer, and it is more reliable - * at lower baud rates. While it can run up to 115200 baud it is not very - * reliable at these higher rates. It is not uncommon for the MAC timer - * handler to be delayed 20us, so at UART baud rates above 19200 errors are - * expected. This driver attempts to measure the timing errors and this can be - * used to help detect when timing errors have occurred. - */ - -static void IRAM output_handler(void *arg) -{ - tsoftuart_t *uart = arg; - uint32_t tail = uart->output_queue_tail; - - do { - uint32_t state = uart->output_queue_state ^ 1; - uint64_t current = mactime_get_count(); - gpio_write(uart->tx_pin, state); - uart->output_queue_state = state; - - if (tail == 0) { - // First transition. - uart->output_start_time = current; - uart->output_expected_time = current; - } - - /* The difference can be negative because the delay is skipped - * if very short, see below. */ - int32_t err = current - uart->output_expected_time; - if (err > uart->output_queue_error_high) { - uart->output_queue_error_high = err; - } - if (err < uart->output_queue_error_low) { - uart->output_queue_error_low = err; - } - - if (tail >= uart->output_queue_head) { - // Done. - uart->output_queue_tail = tail; - uart->output_done = 1; - return; - } - - /* Offset from the start. */ - uint32_t next = uart->output_queue[tail++]; - uint64_t target = uart->output_start_time + next; - uart->output_expected_time = target; - /* Target an earlier time, that would not give an error if - * actually met, to give more room for the response delay. */ - target -= 4; - int64_t diff = target - current; - if (diff >= 0) { - uart->output_queue_tail = tail; - mactime_add_pending(&uart->output_mactimer, target); - break; - } - } while(1); -} - -void tsoftuart_putc(tsoftuart_t *uart, uint8_t ch) -{ - uart->output_queue_state = 1; - gpio_write(uart->tx_pin, uart->output_queue_state); - - uart->output_queue_head = 0; - uart->output_queue_tail = 0; - - uart->output_queue_error_high = 0; - uart->output_queue_error_low = 0; - - uart->output_done = 0; - - uint32_t state = 0; - uint32_t count = 1; - size_t head = 0; - uint32_t cumulative = 0; - uint32_t td = uart->td; - - - for (size_t i = 0; i < 8; i++) { - if ((ch & 1) == state) { - /* No change */ - count++; - } else { - cumulative += count * td; - uart->output_queue[head++] = (cumulative + 128) >> 8; - state ^= 1; - count = 1; - } - ch >>= 1; - } - - if (state == 0) { - cumulative += count * td; - uart->output_queue[head++] = (cumulative + 128) >> 8; - state ^= 1; - count = 1; - } - - uart->output_queue_head = head; - - /* Trigger the first transition in the future. */ - mactimer_arm(&uart->output_mactimer, 20); - - /* Wait until the transmittions is expected to have completed. */ - uint32_t delay = (td * 11 + 128) >> 8; - vTaskDelay(((delay / 1000) + portTICK_PERIOD_MS) / portTICK_PERIOD_MS); - - /* Double check that it is done. There is a possibility that the timer has - * failed to trigger, and this needed to be detected and the timer removed - * from the pending list before retrying. */ - size_t i; - for (i = 0; uart->output_done == 0 && i < 10; i++) { - vTaskDelay(1); - } - - if (uart->output_done == 0) { - /* Remove the timer. */ - mactimer_disarm(&uart->output_mactimer); - /* Set the output high */ - gpio_write(uart->tx_pin, 1); - } -} - -ssize_t tsoftuart_write(tsoftuart_t *uart, const void *ptr, size_t len) -{ - for(int i = 0; i < len; i++) { - tsoftuart_putc(uart, ((char *)ptr)[i]); - } - return len; -} - -tsoftuart_t *tsoftuart_init(uint8_t tx_pin, uint32_t baud_rate) -{ - tsoftuart_t *uart = malloc(sizeof(tsoftuart_t)); - - if (uart) { - uart->tx_pin = tx_pin; - uart->td = 256000000 / baud_rate; - gpio_enable(tx_pin, GPIO_OUTPUT); - gpio_set_pullup(tx_pin, true, false); - gpio_write(tx_pin, 1); - mactimer_init(); - mactimer_setfn(&uart->output_mactimer, output_handler, uart); - } - - return uart; -} - diff --git a/extras/tsoftuart/tsoftuart.h b/extras/tsoftuart/tsoftuart.h deleted file mode 100644 index e1a9250..0000000 --- a/extras/tsoftuart/tsoftuart.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Software timer based UART driver. - * - * Copyright (C) 2018 to 2019 OurAirQuality.org - * - * Licensed under the Apache License, Version 2.0, January 2004 (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/ - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS WITH THE SOFTWARE. - * - */ - -#ifndef _TSOFTUART_H -#define _TSOFTUART_H - -#include "mactimer/mactimer.h" - -typedef struct tsoftuart { - uint32_t tx_pin; - /* Bit time period in usec * 256 */ - uint32_t td; - mactimer_t output_mactimer; - uint32_t output_queue[16]; - volatile uint64_t output_start_time; - volatile size_t output_queue_head; - volatile size_t output_queue_tail; - size_t output_queue_state; - uint64_t output_expected_time; - int32_t output_queue_error_high; - int32_t output_queue_error_low; - uint32_t output_done; -} tsoftuart_t; - -void tsoftuart_putc(tsoftuart_t *uart, uint8_t ch); -ssize_t tsoftuart_write(tsoftuart_t *uart, const void *ptr, size_t len); -tsoftuart_t *tsoftuart_init(uint8_t tx_pin, uint32_t baud_rate); - -#endif /* _TSOFTUART_H */ diff --git a/extras/ultrasonic/component.mk b/extras/ultrasonic/component.mk deleted file mode 100644 index 9b20df0..0000000 --- a/extras/ultrasonic/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ultrasonic - -# expected anyone using this driver includes it as 'ultrasonic/ultrasonic.h' -INC_DIRS += $(ultrasonic_ROOT).. - -# args for passing into compile rule generation -ultrasonic_SRC_DIR = $(ultrasonic_ROOT) - -$(eval $(call component_compile_rules,ultrasonic)) diff --git a/extras/ultrasonic/ultrasonic.c b/extras/ultrasonic/ultrasonic.c deleted file mode 100644 index 21ae493..0000000 --- a/extras/ultrasonic/ultrasonic.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Driver for ultrasonic range meters, e.g. HC-SR04, HY-SRF05 and so on - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#include "ultrasonic.h" -#include -#include -#include - -#define TRIGGER_LOW_DELAY 4 -#define TRIGGER_HIGH_DELAY 10 -#define PING_TIMEOUT 6000 -#define ROUNDTRIP 58 - -#define timeout_expired(start, len) ((uint32_t)(sdk_system_get_time() - (start)) >= (len)) - -void ultrasoinc_init(const ultrasonic_sensor_t *dev) -{ - gpio_enable(dev->trigger_pin, GPIO_OUTPUT); - gpio_enable(dev->echo_pin, GPIO_INPUT); - gpio_write(dev->trigger_pin, false); -} - -int32_t ultrasoinc_measure_cm(const ultrasonic_sensor_t *dev, uint32_t max_distance) -{ - // Ping: Low for 2..4 us, then high 10 us - gpio_write(dev->trigger_pin, false); - sdk_os_delay_us(TRIGGER_LOW_DELAY); - gpio_write(dev->trigger_pin, true); - sdk_os_delay_us(TRIGGER_HIGH_DELAY); - gpio_write(dev->trigger_pin, false); - - // Previous ping isn't ended - if (gpio_read(dev->echo_pin)) - return ULTRASONIC_ERROR_PING; - - // Wait for echo - uint32_t start = sdk_system_get_time(); - while (!gpio_read(dev->echo_pin)) - { - if (timeout_expired(start, PING_TIMEOUT)) - return ULTRASONIC_ERROR_PING_TIMEOUT; - } - - // got echo, measuring - uint32_t echo_start = sdk_system_get_time(); - uint32_t time = echo_start; - uint32_t meas_timeout = echo_start + max_distance * ROUNDTRIP; - while (gpio_read(dev->echo_pin)) - { - time = sdk_system_get_time(); - if (timeout_expired(echo_start, meas_timeout)) - return ULTRASONIC_ERROR_ECHO_TIMEOUT; - } - - return (time - echo_start) / ROUNDTRIP; -} diff --git a/extras/ultrasonic/ultrasonic.h b/extras/ultrasonic/ultrasonic.h deleted file mode 100644 index 6ade82d..0000000 --- a/extras/ultrasonic/ultrasonic.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Driver for ultrasonic range meters, e.g. HC-SR04, HY-SRF05 and so on - * - * Part of esp-open-rtos - * Copyright (C) 2016 Ruslan V. Uss - * BSD Licensed as described in the file LICENSE - */ -#ifndef EXTRAS_ULTRASONIC_H_ -#define EXTRAS_ULTRASONIC_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define ULTRASONIC_ERROR_PING (-1) -#define ULTRASONIC_ERROR_PING_TIMEOUT (-2) -#define ULTRASONIC_ERROR_ECHO_TIMEOUT (-3) - -/** - * Device descriptor - */ -typedef struct -{ - uint8_t trigger_pin; - uint8_t echo_pin; -} ultrasonic_sensor_t; - -/** - * Init ranging module - * \param dev Pointer to the device descriptor - */ -void ultrasoinc_init(const ultrasonic_sensor_t *dev); - -/** - * Measure distance - * \param dev Pointer to the device descriptor - * \param max_distance Maximal distance to measure, centimeters - * \return Distance in centimeters or ULTRASONIC_ERROR_xxx if error occured - */ -int32_t ultrasoinc_measure_cm(const ultrasonic_sensor_t *dev, uint32_t max_distance); - -#ifdef __cplusplus -} -#endif - -#endif /* EXTRAS_ULTRASONIC_H_ */ diff --git a/extras/wificfg/component.mk b/extras/wificfg/component.mk deleted file mode 100644 index 5412c52..0000000 --- a/extras/wificfg/component.mk +++ /dev/null @@ -1,10 +0,0 @@ -# Component makefile for extras/wificfg - -# Expected anyone using wificfg includes it as 'wificfg/wificfg.h' -INC_DIRS += $(wificfg_ROOT).. - -# args for passing into compile rule generation -wificfg_INC_DIR = -wificfg_SRC_DIR = $(wificfg_ROOT) - -$(eval $(call component_compile_rules,wificfg)) diff --git a/extras/wificfg/content/challenge.html b/extras/wificfg/content/challenge.html deleted file mode 100644 index 568ead2..0000000 --- a/extras/wificfg/content/challenge.html +++ /dev/null @@ -1,30 +0,0 @@ -"" -"" -"" -"" -"", -"" -"" -"" -"" -"" -"" -"
" -"Unlock the configuration interface" -"
" -"
" -"
" -"
" -"
" -"
" -"" -"" diff --git a/extras/wificfg/content/favicon.ico b/extras/wificfg/content/favicon.ico deleted file mode 100644 index 93f7af2..0000000 --- a/extras/wificfg/content/favicon.ico +++ /dev/null @@ -1,11 +0,0 @@ -"HTTP/1.1 200 \r\n" -"Content-Type: image/svg+xml\r\n" -"Cache-Control: max-age=900\r\n" -"Transfer-Encoding: chunked\r\n" -"Connection: close\r\n" -"\r\n", -"" -"" -"" -"" -"" diff --git a/extras/wificfg/content/script.js b/extras/wificfg/content/script.js deleted file mode 100644 index 68064c5..0000000 --- a/extras/wificfg/content/script.js +++ /dev/null @@ -1,8 +0,0 @@ -"HTTP/1.1 200 \r\n" -"Content-Type: text/javascript\r\n" -"Cache-Control: max-age=900\r\n" -"Transfer-Encoding: chunked\r\n" -"Connection: close\r\n" -"\r\n", -"function myFunction() { var x = document.getElementById(\"myTopnav\");" -"if (x.className === \"topnav\") { x.className += \" responsive\"; } else { x.className = \"topnav\"; } }" diff --git a/extras/wificfg/content/style.css b/extras/wificfg/content/style.css deleted file mode 100644 index 9155940..0000000 --- a/extras/wificfg/content/style.css +++ /dev/null @@ -1,19 +0,0 @@ -"HTTP/1.1 200 \r\n" -"Content-Type: text/css\r\n" -"Cache-Control: max-age=900\r\n" -"Transfer-Encoding: chunked\r\n" -"\r\n", -".dlh dd,h1{font-weight:300}.dlh{font-size:0;text-align:center}" -".dlh dd,.dlh dt{width:48%;width:calc(50% - 10px);margin:8px 0;display:inline-block;font-size:16px;vertical-align:middle}" -".dlh dt{text-align:right;padding-right:10px}" -".dlh dd{font-size:18px;text-align:left;padding-left:10px}" -"ul.topnav{list-style-type:none;margin:0;padding:0;overflow:hidden;background-color:#bbb}" -"ul.topnav li{float:left}" -"ul.topnav li a{display:inline-block;color:#444;text-align:center;padding:14px 16px;text-decoration:none;transition:.3s;font-size:17px}" -"ul.topnav li a:hover{background-color:#ddd}ul.topnav li.icon{display:none}" -"@media screen and (max-width:680px){ul.topnav li:not(.active){display:none}ul.topnav li.icon{float:right;display:inline-block}ul.topnav.responsive{position:relative}ul.topnav.responsive li.icon{position:absolute;right:0;top:0}ul.topnav.responsive li{float:none;display:inline}ul.topnav.responsive li a{display:block;text-align:left}}" -"html{min-height:100%}" -"body{background:#d0e4f7;background:-moz-linear-gradient(top, #d0e4f7 0%, #73b1e7 24%, #0a77d5 50%, #539fe1 79%, #87bcea 100%);background:-webkit-linear-gradient(top, #d0e4f7 0%,#73b1e7 24%,#0a77d5 50%,#539fe1 79%,#87bcea 100%);background:linear-gradient(to bottom, #d0e4f7 0%,#73b1e7 24%,#0a77d5 50%,#539fe1 79%,#87bcea 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d0e4f7', endColorstr='#87bcea',GradientType=0)}" -"body{font-family:helvetica,arial,sans-serif;font-size:16px}" -"h1{font-size:26px}" -"p{font-size:14px}" diff --git a/extras/wificfg/content/tasks.html b/extras/wificfg/content/tasks.html deleted file mode 100644 index d084ea7..0000000 --- a/extras/wificfg/content/tasks.html +++ /dev/null @@ -1,18 +0,0 @@ -"" -"" -"" -"" -"", -"" -"" -"" -"" -"", -"" diff --git a/extras/wificfg/content/wificfg/ap.html b/extras/wificfg/content/wificfg/ap.html deleted file mode 100644 index 7118c15..0000000 --- a/extras/wificfg/content/wificfg/ap.html +++ /dev/null @@ -1,91 +0,0 @@ -"" -"" -"" -"" -"", -"" -"" -"" -"" -"" -"
" -"
" -"WiFi Access Point configuration" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
 
" -"
" -"" -"
" -"" diff --git a/extras/wificfg/content/wificfg/index.html b/extras/wificfg/content/wificfg/index.html deleted file mode 100644 index cb81712..0000000 --- a/extras/wificfg/content/wificfg/index.html +++ /dev/null @@ -1,52 +0,0 @@ -"" -"" -"" -"" -"", -"" -"" -"" -"" -"" -"

WiFi Status

" -"
", -"
" -"
" -"
" -"
" -"Lock the configuration interface" -"

These WiFi configuration pages can be disabled for security on a shared network. If a password is supplied then they can be unlocked. Warning: if no password is supplied then it will not be possible to unlock these pages via this interface.

" -"
" -"
" -"
" -"
" -"" -"
" -"
" -"
" -"
" -"
" -"Restart device" -"

A restart is necessary for some changes to take effect.

" -"
" -"
" -"
" -"
" -"Erase configuration" -"

Erases the device configuration stored in the flash memory and restarts the device. " -"This might be useful to clear stored passwords and private configuration information." -"

" -"
" -"
" -"
", -"" diff --git a/extras/wificfg/content/wificfg/sta.html b/extras/wificfg/content/wificfg/sta.html deleted file mode 100644 index d46d4c0..0000000 --- a/extras/wificfg/content/wificfg/sta.html +++ /dev/null @@ -1,71 +0,0 @@ -"" -"" -"" -"" -"", -"" -"" -"" -"" -"" -"
" -"
" -"WiFi Station configuration" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
" -"
 
" -"
" -"" -"
" -"" diff --git a/extras/wificfg/wificfg.c b/extras/wificfg/wificfg.c deleted file mode 100644 index 1e4c5d2..0000000 --- a/extras/wificfg/wificfg.c +++ /dev/null @@ -1,2292 +0,0 @@ -/* - * WiFi configuration via a simple web server. - * - * Copyright (C) 2016 OurAirQuality.org - * - * Licensed under the Apache License, Version 2.0, January 2004 (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/ - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS WITH THE SOFTWARE. - * - */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "lwip/err.h" -#include "lwip/sockets.h" -#include "lwip/sys.h" -#include "lwip/netdb.h" -#include "lwip/dns.h" - -#include "wificfg.h" -#include "sysparam.h" - -#if EXTRAS_MDNS_RESPONDER -#include -#endif - -#if LWIP_MDNS_RESPONDER -#include -#endif - - -const char *wificfg_default_ssid = "EOR_%02X%02X%02X"; -const char *wificfg_default_password = "esp-open-rtos"; -const char *wificfg_default_hostname = "eor-%02x%02x%02x"; - -/* The http task stack allocates a single buffer to do much of it's work. */ -#define HTTP_BUFFER_SIZE 54 - -/* - * Read a line terminated by "\r\n" or "\n" to be robust. Used to read the http - * status line and headers. On success returns the number of characters read, - * which might be more that the available buffer size 'len'. Excess characters - * in a line are discarded as a protection against excessively long lines. On - * failure -1 is returned. The character case is lowered to give a canonical - * case for easier comparision. The buffer is null terminated on success, even - * if truncated. - */ -static int read_crlf_line(int s, char *buf, size_t len) -{ - size_t num = 0; - - do { - char c; - ssize_t r = read(s, &c, 1); - - /* Expecting a known terminator so fail on EOF. */ - if (r <= 0) - return -1; - - if (c == '\n') - break; - - /* Remove a trailing '\r', and many unexpected characters. */ - if (c < 0x20 || c > 0x7e) - continue; - - if (num < len) - buf[num] = tolower((unsigned char)c); - - num++; - } while(1); - - /* Null terminate. */ - buf[num >= len ? len - 1 : num] = 0; - - return num; -} - -ssize_t wificfg_form_name_value(int s, bool *valp, size_t *rem, char *buf, size_t len) -{ - size_t num = 0; - - do { - if (*rem == 0) - break; - - char c; - ssize_t r = read(s, &c, 1); - - /* Expecting a known number of characters so fail on EOF. */ - if (r <= 0) return -1; - - (*rem)--; - - if (valp && c == '=') { - *valp = true; - break; - } - - if (c == '&') { - if (valp) - *valp = false; - break; - } - - if (num < len) - buf[num] = c; - - num++; - } while(1); - - /* Null terminate. */ - buf[num >= len ? len - 1 : num] = 0; - - return num; -} - -void wificfg_form_url_decode(char *string) -{ - char *src = string; - char *src_end = string + strlen(string); - char *dst = string; - - while (src < src_end) { - char c = *src++; - if (c == '+') { - c = ' '; - } else if (c == '%' && src < src_end - 1) { - unsigned char c1 = src[0]; - unsigned char c2 = src[1]; - if (isxdigit(c1) && isxdigit(c2)) { - c1 = tolower(c1); - int d1 = (c1 >= 'a' && c1 <= 'z') ? c1 - 'a' + 10 : c1 - '0'; - c2 = tolower(c2); - int d2 = (c2 >= 'a' && c2 <= 'z') ? c2 - 'a' + 10 : c2 - '0'; - *dst++ = (d1 << 4) + d2; - src += 2; - continue; - } - } - *dst++ = c; - } - - *dst = 0; -} - -/* HTML escaping. */ -void wificfg_html_escape(char *string, char *buf, size_t len) -{ - size_t i; - size_t out = 0; - - for (i = 0, out = 0; out < len - 1; ) { - char c = string[i++]; - if (!c) - break; - - if (c == '&') { - if (out >= len - 5) - break; - buf[out] = '&'; - buf[out + 1] = 'a'; - buf[out + 2] = 'm'; - buf[out + 3] = 'p'; - buf[out + 4] = ';'; - out += 5; - continue; - } - if (c == '"') { - if (out >= len - 6) - break; - buf[out] = '&'; - buf[out + 1] = 'q'; - buf[out + 2] = 'u'; - buf[out + 3] = 'o'; - buf[out + 4] = 't'; - buf[out + 5] = ';'; - out += 6; - continue; - } - if (c == '<') { - if (out >= len - 4) - break; - buf[out] = '&'; - buf[out + 1] = 'l'; - buf[out + 2] = 't'; - buf[out + 3] = ';'; - out += 4; - continue; - } - if (c == '>') { - if (out >= len - 4) - break; - buf[out] = '&'; - buf[out + 1] = 'g'; - buf[out + 2] = 't'; - buf[out + 3] = ';'; - out += 4; - continue; - } - - buf[out++] = c; - } - - buf[out] = 0; -} - -/* Various keywords are interned as they are read. */ - -static const struct { - const char *str; - wificfg_method method; -} method_table[] = { - {"get", HTTP_METHOD_GET}, - {"post", HTTP_METHOD_POST}, - {"head", HTTP_METHOD_HEAD} -}; - -static wificfg_method intern_http_method(char *str) -{ - size_t i; - for (i = 0; i < sizeof(method_table) / sizeof(method_table[0]); i++) { - if (!strcmp(str, method_table[i].str)) - return method_table[i].method; - } - return HTTP_METHOD_OTHER; -} - -/* - * The web server recognizes only these header names. Other headers are ignored. - */ -typedef enum { - HTTP_HEADER_HOST, - HTTP_HEADER_CONTENT_LENGTH, - HTTP_HEADER_CONTENT_TYPE, - HTTP_HEADER_CONNECTION, - HTTP_HEADER_OTHER -} http_header; - -static const struct { - const char *str; - http_header name; -} http_header_table[] = { - {"host", HTTP_HEADER_HOST}, - {"content-length", HTTP_HEADER_CONTENT_LENGTH}, - {"content-type", HTTP_HEADER_CONTENT_TYPE}, - {"connection", HTTP_HEADER_CONNECTION} -}; - -static http_header intern_http_header(char *str) -{ - size_t i; - for (i = 0; i < sizeof(http_header_table) / sizeof(http_header_table[0]); i++) { - if (!strcmp(str, http_header_table[i].str)) - return http_header_table[i].name; - } - return HTTP_HEADER_OTHER; -} - - -static const struct { - const char *str; - wificfg_content_type type; -} content_type_table[] = { - {"application/x-www-form-urlencoded", HTTP_CONTENT_TYPE_WWW_FORM_URLENCODED} -}; - -static wificfg_content_type intern_http_content_type(char *str) -{ - size_t i; - for (i = 0; i < sizeof(content_type_table) / sizeof(content_type_table[0]); i++) { - if (!strcmp(str, content_type_table[i].str)) - return content_type_table[i].type; - } - return HTTP_CONTENT_TYPE_OTHER; -} - -static char *skip_whitespace(char *string) -{ - while (isspace((unsigned char)*string)) string++; - return string; -} - -static char *skip_to_whitespace(char *string) -{ - do { - unsigned char c = *string; - if (!c || isspace(c)) - break; - string++; - } while (1); - - return string; -} - -ssize_t wificfg_write_string(int s, const char *str) -{ - ssize_t res = write(s, str, strlen(str)); - return res; -} - -ssize_t wificfg_write_string_chunk(int s, const char *str, char *buf, size_t len) -{ - size_t str_len = strlen(str); - - if (str_len == 0) { - /* Can not be encoded, would be EOF. */ - return 0; - } - - if (str_len + 6 < len) { - /* Can fit the chunk in the buffer. */ - memmove(buf + 4, str, str_len); - size_t start = 1; - if (str_len < 10) { - buf[1] = '0' + str_len; - } else if (str_len < 16) { - buf[1] = 'a' + str_len - 10; - } else { - uint32_t digit0 = str_len >> 4; - if (digit0 < 10) { - buf[0] = '0' + digit0; - } else { - buf[0] = 'a' + digit0 - 10; - } - uint32_t digit1 = str_len & 0xf; - if (digit1 < 10) { - buf[1] = '0' + digit1; - } else { - buf[1] = 'a' + digit1 - 10; - } - start = 0; - } - buf[2] = '\r'; - buf[3] = '\n'; - buf[4 + str_len] = '\r'; - buf[4 + str_len + 1] = '\n'; - return write(s, buf + start, 4 - start + str_len + 2); - } - - /* Else too big for the buffer. */ - char size_buf[8]; - size_t size_len = snprintf(size_buf, sizeof(size_buf), "%x\r\n", str_len); - ssize_t res = write(s, size_buf, size_len); - if (res != size_len) { - return res; - } - res = write(s, str, str_len); - if (res != str_len) { - return res; - } - return write(s, size_buf + size_len - 2, 2); -} - -ssize_t wificfg_write_chunk_end(int s) -{ - return wificfg_write_string(s, "0\r\n\r\n"); -} - -typedef enum { - FORM_NAME_CFG_ENABLE, - FORM_NAME_CFG_PASSWORD, - FORM_NAME_HOSTNAME, - FORM_NAME_STA_ENABLE, - FORM_NAME_STA_DISABLED_RESTARTS, - FORM_NAME_STA_SSID, - FORM_NAME_STA_PASSWORD, - FORM_NAME_STA_DHCP, - FORM_NAME_STA_IP_ADDR, - FORM_NAME_STA_NETMASK, - FORM_NAME_STA_GATEWAY, - FORM_NAME_STA_MDNS, - FORM_NAME_AP_ENABLE, - FORM_NAME_AP_DISABLE_IF_STA, - FORM_NAME_AP_DISABLED_RESTARTS, - FORM_NAME_AP_SSID, - FORM_NAME_AP_PASSWORD, - FORM_NAME_AP_SSID_HIDDEN, - FORM_NAME_AP_CHANNEL, - FORM_NAME_AP_AUTHMODE, - FORM_NAME_AP_MAX_CONN, - FORM_NAME_AP_BEACON_INTERVAL, - FORM_NAME_AP_IP_ADDR, - FORM_NAME_AP_NETMASK, - FORM_NAME_AP_DHCP_LEASES, - FORM_NAME_AP_DNS, - FORM_NAME_AP_MDNS, - FORM_NAME_DONE, - FORM_NAME_NONE -} form_name; - -static const struct { - const char *str; - form_name name; -} form_name_table[] = { - {"cfg_enable", FORM_NAME_CFG_ENABLE}, - {"cfg_password", FORM_NAME_CFG_PASSWORD}, - {"hostname", FORM_NAME_HOSTNAME}, - {"sta_enable", FORM_NAME_STA_ENABLE}, - {"sta_disabled_restarts", FORM_NAME_STA_DISABLED_RESTARTS}, - {"sta_ssid", FORM_NAME_STA_SSID}, - {"sta_dhcp", FORM_NAME_STA_DHCP}, - {"sta_password", FORM_NAME_STA_PASSWORD}, - {"sta_ip_addr", FORM_NAME_STA_IP_ADDR}, - {"sta_netmask", FORM_NAME_STA_NETMASK}, - {"sta_gateway", FORM_NAME_STA_GATEWAY}, - {"sta_mdns", FORM_NAME_STA_MDNS}, - {"ap_enable", FORM_NAME_AP_ENABLE}, - {"ap_disable_if_sta", FORM_NAME_AP_DISABLE_IF_STA}, - {"ap_disabled_restarts", FORM_NAME_AP_DISABLED_RESTARTS}, - {"ap_ssid", FORM_NAME_AP_SSID}, - {"ap_password", FORM_NAME_AP_PASSWORD}, - {"ap_ssid_hidden", FORM_NAME_AP_SSID_HIDDEN}, - {"ap_channel", FORM_NAME_AP_CHANNEL}, - {"ap_authmode", FORM_NAME_AP_AUTHMODE}, - {"ap_max_conn", FORM_NAME_AP_MAX_CONN}, - {"ap_beacon_interval", FORM_NAME_AP_BEACON_INTERVAL}, - {"ap_ip_addr", FORM_NAME_AP_IP_ADDR}, - {"ap_netmask", FORM_NAME_AP_NETMASK}, - {"ap_dhcp_leases", FORM_NAME_AP_DHCP_LEASES}, - {"ap_dns", FORM_NAME_AP_DNS}, - {"ap_mdns", FORM_NAME_AP_MDNS}, - {"done", FORM_NAME_DONE} -}; - -static form_name intern_form_name(char *str) -{ - size_t i; - for (i = 0; i < sizeof(form_name_table) / sizeof(form_name_table[0]); i++) { - if (!strcmp(str, form_name_table[i].str)) - return form_name_table[i].name; - } - return FORM_NAME_NONE; -} - - -static const char *http_favicon[] = { -#include "content/favicon.ico" -}; - -static int handle_favicon(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_favicon[0]) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_favicon[1], buf, len) < 0) return -1; - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} - -// .value-lg{font-size:24px}.label-extra{display:block;font-style:italic;font-size:13px} -// devo: "Cache-Control: no-store\r\n" -static const char *http_style[] = { -#include "content/style.css" -}; - - -static int handle_style(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_style[0]) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_style[1], buf, len) < 0) return -1; - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} - -static const char *http_script[] = { -#include "content/script.js" -}; - -static int handle_script(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_script[0]) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_script[1], buf, len) < 0) return -1; - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} - - -static const char http_success_header[] = "HTTP/1.1 200 \r\n" - "Content-Type: text/html; charset=utf-8\r\n" - "Cache-Control: no-store\r\n" - "Transfer-Encoding: chunked\r\n" - "Connection: close\r\n" - "\r\n"; - -static const char http_redirect_header[] = "HTTP/1.1 302 \r\n" - "Location: /wificfg/\r\n" - "Content-Length: 0\r\n" - "Connection: close\r\n" - "\r\n"; - -static int handle_wificfg_redirect(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - return wificfg_write_string(s, http_redirect_header); -} - -static int handle_ipaddr_redirect(int s, char *buf, size_t len) -{ - if (wificfg_write_string(s, "HTTP/1.1 302 \r\nLocation: http://") < 0) return -1; - - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (getsockname(s, (struct sockaddr *)&addr, &addr_len) == 0) { - if (((struct sockaddr *)&addr)->sa_family == AF_INET) { - struct sockaddr_in *sa = (struct sockaddr_in *)&addr; - snprintf(buf, len, IPSTR, IP2STR((ip4_addr_t *)&sa->sin_addr.s_addr)); - if (wificfg_write_string(s, buf) < 0) return -1; - } -#if LWIP_IPV6 - if (((struct sockaddr *)&addr)->sa_family == AF_INET6) { - struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&addr; - const ip6_addr_t *addr6 = (const ip6_addr_t*)&(sa->sin6_addr); - if (ip6_addr_isipv4mappedipv6(addr6)) { - snprintf(buf, len, IPSTR, IP2STR((ip4_addr_t *)&addr6->addr[3])); - if (wificfg_write_string(s, buf) < 0) return -1; - } else { - if (wificfg_write_string(s, "[") < 0) return -1; - if (ip6addr_ntoa_r(addr6, buf, len)) { - if (wificfg_write_string(s, buf) < 0) return -1; - } - if (wificfg_write_string(s, "]") < 0) return -1; - } - } -#endif - } - - /* Always close here - expect a new connection. */ - return wificfg_write_string(s, "\r\nContent-Length: 0\r\n" - "Connection: close\r\n" - "\r\n"); -} - -int wificfg_write_html_title(int s, char *buf, size_t len, const char *str) -{ - /* Use the hostname or AP SSID as the title prefix. */ - char *hostname = NULL; - sysparam_get_string("hostname", &hostname); - if (!hostname) { - sysparam_get_string("wifi_ap_ssid", &hostname); - } - if (hostname) { - wificfg_html_escape(hostname, buf, len); - free(hostname); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (str) { - if (wificfg_write_string_chunk(s, " ", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, str, buf, len) < 0) return -1; - } - } - - return 0; -} - -static const char *http_wificfg_content[] = { -#include "content/wificfg/index.html" -}; - -static int handle_wificfg_index(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_success_header) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_wificfg_content[0], buf, len) < 0) return -1; - if (wificfg_write_html_title(s, buf, len, "Wifi Config") < 0) return -1; - if (wificfg_write_string_chunk(s, http_wificfg_content[1], buf, len) < 0) return -1; - - char *hostname = NULL; - sysparam_get_string("hostname", &hostname); - if (hostname) { - if (wificfg_write_string_chunk(s, "
Hostname
", buf, len) < 0) { - free(hostname); - return -1; - } - wificfg_html_escape(hostname, buf, len); - free(hostname); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
", buf, len) < 0) return -1; - } - - uint32_t chip_id = sdk_system_get_chip_id(); - snprintf(buf, len, "
Chip ID
%08x
", chip_id); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - snprintf(buf, len, "
Uptime
%u seconds
", - xTaskGetTickCount() * portTICK_PERIOD_MS / 1000); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - snprintf(buf, len, "
Free heap
%u bytes
", (int)xPortGetFreeHeapSize()); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - snprintf(buf, len, "
Flash ID
0x%08x
", sdk_spi_flash_get_id()); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - snprintf(buf, len, "
Flash size
%u KiB
", sdk_flashchip.chip_size >> 10); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, "
LwIP version
" LWIP_VERSION_STRING "
", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
FreeRTOS version
" tskKERNEL_VERSION_NUMBER "
", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
Newlib version
" _NEWLIB_VERSION "
", buf, len) < 0) return -1; - - enum sdk_sleep_type sleep_type = sdk_wifi_get_sleep_type(); - const char *sleep_type_str = "??"; - switch (sleep_type) { - case WIFI_SLEEP_NONE: - sleep_type_str = "None"; - break; - case WIFI_SLEEP_LIGHT: - sleep_type_str = "Light"; - break; - case WIFI_SLEEP_MODEM: - sleep_type_str = "Modem"; - break; - default: - break; - } - snprintf(buf, len, "
WiFi sleep type
%s
", sleep_type_str); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - uint8_t opmode = sdk_wifi_get_opmode(); - const char *opmode_str = "??"; - switch (opmode) { - case NULL_MODE: - opmode_str = "Null"; - break; - case STATION_MODE: - opmode_str = "Station"; - break; - case SOFTAP_MODE: - opmode_str = "SoftAP"; - break; - case STATIONAP_MODE: - opmode_str = "StationAP"; - break; - default: - break; - } - snprintf(buf, len, "
OpMode
%s
", opmode_str); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - if (opmode > NULL_MODE) { - snprintf(buf, len, "
WiFi channel
%u
", sdk_wifi_get_channel()); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - const char *phy_mode_str = "??"; - switch (sdk_wifi_get_phy_mode()) { - case PHY_MODE_11B: - phy_mode_str = "11b"; - break; - case PHY_MODE_11G: - phy_mode_str = "11g"; - break; - case PHY_MODE_11N: - phy_mode_str = "11n"; - break; - default: - break; - } - snprintf(buf, len, "
WiFi physical mode
%s
", phy_mode_str); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (opmode == STATION_MODE || opmode == STATIONAP_MODE) { - uint8_t hwaddr[6]; - if (sdk_wifi_get_macaddr(STATION_IF, hwaddr)) { - if (wificfg_write_string_chunk(s, "
Station MAC address
", buf, len) < 0) return -1; - snprintf(buf, len, "
" MACSTR "
", MAC2STR(hwaddr)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - struct ip_info info; - if (sdk_wifi_get_ip_info(STATION_IF, &info)) { - if (wificfg_write_string_chunk(s, "
Station IP address
", buf, len) < 0) return -1; - snprintf(buf, len, "
" IPSTR "
", IP2STR(&info.ip)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
Station netmask
", buf, len) < 0) return -1; - snprintf(buf, len, "
" IPSTR "
", IP2STR(&info.netmask)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
Station gateway
", buf, len) < 0) return -1; - snprintf(buf, len, "
" IPSTR "
", IP2STR(&info.gw)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } -#if LWIP_IPV6 - struct netif *netif = sdk_system_get_netif(STATION_IF); - if (netif) { - for (int i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { - if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i))) { - if (wificfg_write_string_chunk(s, "
Station IPv6
", buf, len) < 0) return -1; - const ip6_addr_t *addr6 = netif_ip6_addr(netif, i); - ip6addr_ntoa_r(addr6, buf, len); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
", buf, len) < 0) return -1; - } - } - } -#endif - } - - if (opmode == SOFTAP_MODE || opmode == STATIONAP_MODE) { - uint8_t hwaddr[6]; - if (sdk_wifi_get_macaddr(SOFTAP_IF, hwaddr)) { - if (wificfg_write_string_chunk(s, "
AP MAC address
", buf, len) < 0) return -1; - snprintf(buf, len, "
" MACSTR "
", MAC2STR(hwaddr)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - struct ip_info info; - if (sdk_wifi_get_ip_info(SOFTAP_IF, &info)) { - if (wificfg_write_string_chunk(s, "
AP IP address
", buf, len) < 0) return -1; - snprintf(buf, len, "
" IPSTR "
", IP2STR(&info.ip)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
AP netmask
", buf, len) < 0) return -1; - snprintf(buf, len, "
" IPSTR "
", IP2STR(&info.netmask)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
AP gateway
", buf, len) < 0) return -1; - snprintf(buf, len, "
" IPSTR "
", IP2STR(&info.gw)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - -#if LWIP_IPV6 - struct netif *netif = sdk_system_get_netif(SOFTAP_IF); - if (netif) { - for (int i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) { - if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i))) { - if (wificfg_write_string_chunk(s, "
AP IPv6
", buf, len) < 0) return -1; - const ip6_addr_t *addr6 = netif_ip6_addr(netif, i); - ip6addr_ntoa_r(addr6, buf, len); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, "
", buf, len) < 0) return -1; - } - } - } -#endif - } - - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (getpeername(s, (struct sockaddr *)&addr, &addr_len) == 0) { - if (((struct sockaddr *)&addr)->sa_family == AF_INET) { - struct sockaddr_in *sa = (struct sockaddr_in *)&addr; - if (wificfg_write_string_chunk(s, "
Peer address
", buf, len) < 0) return -1; - snprintf(buf, len, "
" IPSTR ", port %u
", - IP2STR((ip4_addr_t *)&sa->sin_addr.s_addr), ntohs(sa->sin_port)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - -#if LWIP_IPV6 - if (((struct sockaddr *)&addr)->sa_family == AF_INET6) { - struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&addr; - if (wificfg_write_string_chunk(s, "
Peer address
", buf, len) < 0) return -1; - const ip6_addr_t *addr6 = (const ip6_addr_t*)&(sa->sin6_addr); - if (ip6_addr_isipv4mappedipv6(addr6)) { - snprintf(buf, len, IPSTR, IP2STR((ip4_addr_t *)&addr6->addr[3])); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } else { - if (ip6addr_ntoa_r(addr6, buf, len)) { - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - } - snprintf(buf, len, ", port %u
", ntohs(sa->sin6_port)); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } -#endif - } - - if (wificfg_write_string_chunk(s, http_wificfg_content[2], buf, len) < 0) return -1; - - char *password = NULL; - sysparam_get_string("cfg_password", &password); - if (password) { - wificfg_html_escape(password, buf, len); - free(password); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wificfg_content[3], buf, len) < 0) return -1; - - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} - -static int handle_wificfg_index_post(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (content_type != HTTP_CONTENT_TYPE_WWW_FORM_URLENCODED) { - return wificfg_write_string(s, "HTTP/1.1 400 \r\n" - "Content-Type: text/html\r\n" - "Content-Length: 0\r\n" - "Connection: close\r\n\r\n"); - } - - size_t rem = content_length; - bool valp = false; - - while (rem > 0) { - ssize_t r = wificfg_form_name_value(s, &valp, &rem, buf, len); - - if (r < 0) { - break; - } - - wificfg_form_url_decode(buf); - - form_name name = intern_form_name(buf); - - if (valp) { - ssize_t r = wificfg_form_name_value(s, NULL, &rem, buf, len); - if (r < 0) { - break; - } - - wificfg_form_url_decode(buf); - - switch (name) { - case FORM_NAME_CFG_ENABLE: { - uint8_t enable = strtoul(buf, NULL, 10) != 0; - sysparam_set_int8("cfg_enable", enable); - break; - } - case FORM_NAME_CFG_PASSWORD: - sysparam_set_string("cfg_password", buf); - break; - default: - break; - } - } - } - - return wificfg_write_string(s, http_redirect_header); -} - -static const char *http_wifi_station_content[] = { -#include "content/wificfg/sta.html" -}; - -static int handle_wifi_station(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_success_header) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_wifi_station_content[0], buf, len) < 0) return -1; - if (wificfg_write_html_title(s, buf, len, "Wifi station") < 0) return -1; - if (wificfg_write_string_chunk(s, http_wifi_station_content[1], buf, len) < 0) return -1; - - int8_t wifi_sta_enable = 1; - sysparam_get_int8("wifi_sta_enable", &wifi_sta_enable); - if (wifi_sta_enable && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, http_wifi_station_content[2], buf, len) < 0) return -1; - - int8_t wifi_sta_disabled_restarts = 0; - sysparam_get_int8("wifi_sta_disabled_restarts", &wifi_sta_disabled_restarts); - snprintf(buf, len, "%u", wifi_sta_disabled_restarts); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, http_wifi_station_content[3], buf, len) < 0) return -1; - - char *wifi_sta_ssid = NULL; - sysparam_get_string("wifi_sta_ssid", &wifi_sta_ssid); - if (wifi_sta_ssid) { - wificfg_html_escape(wifi_sta_ssid, buf, len); - free(wifi_sta_ssid); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_station_content[4], buf, len) < 0) return -1; - - char *wifi_sta_password = NULL; - sysparam_get_string("wifi_sta_password", &wifi_sta_password); - if (wifi_sta_password) { - wificfg_html_escape(wifi_sta_password, buf, len); - free(wifi_sta_password); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_station_content[5], buf, len) < 0) return -1; - - char *hostname = NULL; - sysparam_get_string("hostname", &hostname); - if (hostname) { - wificfg_html_escape(hostname, buf, len); - free(hostname); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_station_content[6], buf, len) < 0) return -1; - - int8_t wifi_sta_dhcp = 1; - sysparam_get_int8("wifi_sta_dhcp", &wifi_sta_dhcp); - if (wifi_sta_dhcp && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, http_wifi_station_content[7], buf, len) < 0) return -1; - if (!wifi_sta_dhcp && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_station_content[8], buf, len) < 0) return -1; - - char *wifi_sta_ip_addr = NULL; - sysparam_get_string("wifi_sta_ip_addr", &wifi_sta_ip_addr); - if (wifi_sta_ip_addr) { - wificfg_html_escape(wifi_sta_ip_addr, buf, len); - free(wifi_sta_ip_addr); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_station_content[9], buf, len) < 0) return -1; - - char *wifi_sta_netmask = NULL; - sysparam_get_string("wifi_sta_netmask", &wifi_sta_netmask); - if (wifi_sta_netmask) { - wificfg_html_escape(wifi_sta_netmask, buf, len); - free(wifi_sta_netmask); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_station_content[10], buf, len) < 0) return -1; - - char *wifi_sta_gateway = NULL; - sysparam_get_string("wifi_sta_gateway", &wifi_sta_gateway); - if (wifi_sta_gateway) { - wificfg_html_escape(wifi_sta_gateway, buf, len); - free(wifi_sta_gateway); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_station_content[11], buf, len) < 0) return -1; - - int8_t wifi_sta_mdns = 1; - sysparam_get_int8("wifi_sta_mdns", &wifi_sta_mdns); - if (wifi_sta_mdns && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_station_content[12], buf, len) < 0) return -1; - - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} - -static int handle_wifi_station_post(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (content_type != HTTP_CONTENT_TYPE_WWW_FORM_URLENCODED) { - return wificfg_write_string(s, "HTTP/1.1 400 \r\n" - "Content-Type: text/html\r\n" - "Content-Length: 0\r\n" - "Connection: close\r\n\r\n"); - } - - size_t rem = content_length; - bool valp = false; - - /* Delay committing some values until all have been read. */ - bool done = false; - uint8_t sta_enable = 0; - uint8_t mdns_enable = 0; - - while (rem > 0) { - int r = wificfg_form_name_value(s, &valp, &rem, buf, len); - - if (r < 0) { - break; - } - - wificfg_form_url_decode(buf); - - form_name name = intern_form_name(buf); - - if (valp) { - int r = wificfg_form_name_value(s, NULL, &rem, buf, len); - if (r < 0) { - break; - } - - wificfg_form_url_decode(buf); - - switch (name) { - case FORM_NAME_STA_ENABLE: { - sta_enable = strtoul(buf, NULL, 10) != 0; - break; - } - case FORM_NAME_STA_DISABLED_RESTARTS: { - uint32_t restarts = strtoul(buf, NULL, 10); - if (restarts <= 255) - sysparam_set_int8("wifi_sta_disabled_restarts", restarts); - break; - } - case FORM_NAME_STA_SSID: - sysparam_set_string("wifi_sta_ssid", buf); - break; - case FORM_NAME_STA_PASSWORD: - sysparam_set_string("wifi_sta_password", buf); - break; - case FORM_NAME_HOSTNAME: - sysparam_set_string("hostname", buf); - break; - case FORM_NAME_STA_DHCP: { - uint8_t enable = strtoul(buf, NULL, 10) != 0; - sysparam_set_int8("wifi_sta_dhcp", enable); - break; - } - case FORM_NAME_STA_IP_ADDR: - sysparam_set_string("wifi_sta_ip_addr", buf); - break; - case FORM_NAME_STA_NETMASK: - sysparam_set_string("wifi_sta_netmask", buf); - break; - case FORM_NAME_STA_GATEWAY: - sysparam_set_string("wifi_sta_gateway", buf); - break; - case FORM_NAME_STA_MDNS: { - mdns_enable = strtoul(buf, NULL, 10) != 0; - break; - } - case FORM_NAME_DONE: - done = true; - break; - default: - break; - } - } - } - - if (done) { - sysparam_set_int8("wifi_sta_enable", sta_enable); - sysparam_set_int8("wifi_sta_mdns", mdns_enable); - } - - return wificfg_write_string(s, http_redirect_header); -} - -static const char *http_wifi_ap_content[] = { -#include "content/wificfg/ap.html" -}; - -static int handle_wifi_ap(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_success_header) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_wifi_ap_content[0], buf, len) < 0) return -1; - if (wificfg_write_html_title(s, buf, len, "Wifi access point") < 0) return -1; - if (wificfg_write_string_chunk(s, http_wifi_ap_content[1], buf, len) < 0) return -1; - - int8_t wifi_ap_enable = 1; - sysparam_get_int8("wifi_ap_enable", &wifi_ap_enable); - if (wifi_ap_enable && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[2], buf, len) < 0) return -1; - - int8_t wifi_ap_disable_if_sta = 1; - sysparam_get_int8("wifi_ap_disable_if_sta", &wifi_ap_disable_if_sta); - if (wifi_ap_disable_if_sta && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[3], buf, len) < 0) return -1; - - int8_t wifi_ap_disabled_restarts = 0; - sysparam_get_int8("wifi_ap_disabled_restarts", &wifi_ap_disabled_restarts); - snprintf(buf, len, "%u", wifi_ap_disabled_restarts); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[4], buf, len) < 0) return -1; - - char *wifi_ap_ssid = NULL; - sysparam_get_string("wifi_ap_ssid", &wifi_ap_ssid); - if (wifi_ap_ssid) { - wificfg_html_escape(wifi_ap_ssid, buf, len); - free(wifi_ap_ssid); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[5], buf, len) < 0) return -1; - - char *wifi_ap_password = NULL; - sysparam_get_string("wifi_ap_password", &wifi_ap_password); - if (wifi_ap_password) { - wificfg_html_escape(wifi_ap_password, buf, len); - free(wifi_ap_password); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[6], buf, len) < 0) return -1; - - int8_t wifi_ap_ssid_hidden = 0; - sysparam_get_int8("wifi_ap_ssid_hidden", &wifi_ap_ssid_hidden); - if (wifi_ap_ssid_hidden && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[7], buf, len) < 0) return -1; - - int8_t wifi_ap_channel = 6; - sysparam_get_int8("wifi_ap_channel", &wifi_ap_channel); - snprintf(buf, len, "%u", wifi_ap_channel); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[8], buf, len) < 0) return -1; - - int8_t wifi_ap_authmode = AUTH_WPA_WPA2_PSK; - sysparam_get_int8("wifi_ap_authmode", &wifi_ap_authmode); - if (wifi_ap_authmode == AUTH_OPEN && wificfg_write_string_chunk(s, " selected", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, http_wifi_ap_content[9], buf, len) < 0) return -1; - if (wifi_ap_authmode == AUTH_WPA_PSK && wificfg_write_string_chunk(s, " selected", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, http_wifi_ap_content[10], buf, len) < 0) return -1; - if (wifi_ap_authmode == AUTH_WPA2_PSK && wificfg_write_string_chunk(s, " selected", buf, len) < 0) return -1; - if (wificfg_write_string_chunk(s, http_wifi_ap_content[11], buf, len) < 0) return -1; - if (wifi_ap_authmode == AUTH_WPA_WPA2_PSK && wificfg_write_string_chunk(s, " selected", buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[12], buf, len) < 0) return -1; - - int8_t wifi_ap_max_conn = 3; - sysparam_get_int8("wifi_ap_max_conn", &wifi_ap_max_conn); - snprintf(buf, len, "%u", wifi_ap_max_conn); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[13], buf, len) < 0) return -1; - - int32_t wifi_ap_beacon_interval = 100; - sysparam_get_int32("wifi_ap_beacon_interval", &wifi_ap_beacon_interval); - snprintf(buf, len, "%u", wifi_ap_beacon_interval); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[14], buf, len) < 0) return -1; - - char *wifi_ap_ip_addr = NULL; - sysparam_get_string("wifi_ap_ip_addr", &wifi_ap_ip_addr); - if (wifi_ap_ip_addr) { - wificfg_html_escape(wifi_ap_ip_addr, buf, len); - free(wifi_ap_ip_addr); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[15], buf, len) < 0) return -1; - - char *wifi_ap_netmask = NULL; - sysparam_get_string("wifi_ap_netmask", &wifi_ap_netmask); - if (wifi_ap_netmask) { - wificfg_html_escape(wifi_ap_netmask, buf, len); - free(wifi_ap_netmask); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[16], buf, len) < 0) return -1; - - int8_t wifi_ap_dhcp_leases = 4; - sysparam_get_int8("wifi_ap_dhcp_leases", &wifi_ap_dhcp_leases); - snprintf(buf, len, "%u", wifi_ap_dhcp_leases); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[17], buf, len) < 0) return -1; - - int8_t wifi_ap_dns = 1; - sysparam_get_int8("wifi_ap_dns", &wifi_ap_dns); - if (wifi_ap_dns && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[18], buf, len) < 0) return -1; - - int8_t wifi_ap_mdns = 1; - sysparam_get_int8("wifi_ap_mdns", &wifi_ap_mdns); - if (wifi_ap_mdns && wificfg_write_string_chunk(s, "checked", buf, len) < 0) return -1; - - if (wificfg_write_string_chunk(s, http_wifi_ap_content[19], buf, len) < 0) return -1; - - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} - -static int handle_wifi_ap_post(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (content_type != HTTP_CONTENT_TYPE_WWW_FORM_URLENCODED) { - return wificfg_write_string(s, "HTTP/1.1 400 \r\n" - "Content-Type: text/html\r\n" - "Content-Length: 0\r\n" - "Connection: close\r\n\r\n"); - } - - size_t rem = content_length; - bool valp = false; - - /* Delay committing some values until all have been read. */ - bool done = false; - uint8_t ap_enable = 0; - uint8_t ap_disable_if_sta = 0; - uint8_t ssid_hidden = 0; - uint8_t dns_enable = 0; - uint8_t mdns_enable = 0; - - while (rem > 0) { - ssize_t r = wificfg_form_name_value(s, &valp, &rem, buf, len); - - if (r < 0) { - break; - } - - wificfg_form_url_decode(buf); - - form_name name = intern_form_name(buf); - - if (valp) { - ssize_t r = wificfg_form_name_value(s, NULL, &rem, buf, len); - if (r < 0) { - break; - } - - wificfg_form_url_decode(buf); - - switch (name) { - case FORM_NAME_AP_ENABLE: { - ap_enable = strtoul(buf, NULL, 10) != 0; - break; - } - case FORM_NAME_AP_DISABLE_IF_STA: { - ap_disable_if_sta = strtoul(buf, NULL, 10) != 0; - break; - } - case FORM_NAME_AP_DISABLED_RESTARTS: { - uint32_t restarts = strtoul(buf, NULL, 10); - if (restarts <= 255) - sysparam_set_int8("wifi_ap_disabled_restarts", restarts); - break; - } - case FORM_NAME_AP_SSID: - sysparam_set_string("wifi_ap_ssid", buf); - break; - case FORM_NAME_AP_PASSWORD: - sysparam_set_string("wifi_ap_password", buf); - break; - case FORM_NAME_AP_SSID_HIDDEN: { - ssid_hidden = strtoul(buf, NULL, 10) != 0; - break; - } - case FORM_NAME_AP_CHANNEL: { - uint32_t channel = strtoul(buf, NULL, 10); - if (channel >= 1 && channel <= 14) - sysparam_set_int8("wifi_ap_channel", channel); - break; - } - case FORM_NAME_AP_AUTHMODE: { - uint32_t mode = strtoul(buf, NULL, 10); - if (mode == AUTH_OPEN || mode == AUTH_WPA_PSK || - mode == AUTH_WPA2_PSK || mode == AUTH_WPA_WPA2_PSK) { - sysparam_set_int8("wifi_ap_authmode", mode); - } - break; - } - case FORM_NAME_AP_MAX_CONN: { - uint32_t max_conn = strtoul(buf, NULL, 10); - if (max_conn <= 8) - sysparam_set_int8("wifi_ap_max_conn", max_conn); - break; - } - case FORM_NAME_AP_BEACON_INTERVAL: { - uint32_t interval = strtoul(buf, NULL, 10); - if (interval <= 10000) - sysparam_set_int32("wifi_ap_beacon_interval", interval); - break; - } - case FORM_NAME_AP_IP_ADDR: - sysparam_set_string("wifi_ap_ip_addr", buf); - break; - case FORM_NAME_AP_NETMASK: - sysparam_set_string("wifi_ap_netmask", buf); - break; - case FORM_NAME_AP_DHCP_LEASES: { - uint32_t leases = strtoul(buf, NULL, 10); - if (leases <= 16) - sysparam_set_int8("wifi_ap_dhcp_leases", leases); - break; - } - case FORM_NAME_AP_DNS: { - dns_enable = strtoul(buf, NULL, 10) != 0; - break; - } - case FORM_NAME_AP_MDNS: { - mdns_enable = strtoul(buf, NULL, 10) != 0; - break; - } - case FORM_NAME_DONE: - done = true; - break; - default: - break; - } - } - } - - if (done) { - sysparam_set_int8("wifi_ap_enable", ap_enable); - sysparam_set_int8("wifi_ap_disable_if_sta", ap_disable_if_sta); - sysparam_set_int8("wifi_ap_ssid_hidden", ssid_hidden); - sysparam_set_int8("wifi_ap_dns", dns_enable); - sysparam_set_int8("wifi_ap_mdns", mdns_enable); - } - - return wificfg_write_string(s, http_redirect_header); -} - -static bool got_sta_connect = false; -void wificfg_got_sta_connect() -{ - /* Only process this once, to not continue adjusting the settings. */ - if (got_sta_connect) { - return; - } - got_sta_connect = true; - - /* Skip if AP not even enabled. */ - int8_t wifi_ap_enable = 1; - sysparam_get_int8("wifi_ap_enable", &wifi_ap_enable); - if (!wifi_ap_enable) { - return; - } - - int8_t wifi_ap_disable_if_sta = 1; - sysparam_get_int8("wifi_ap_disable_if_sta", &wifi_ap_disable_if_sta); - - if (wifi_ap_disable_if_sta) { - int8_t wifi_ap_disabled_restarts = 0; - sysparam_get_int8("wifi_ap_disabled_restarts", &wifi_ap_disabled_restarts); - if (wifi_ap_disabled_restarts == 0) { - sysparam_set_int8("wifi_ap_disabled_restarts", 1); - } - } -} - -void wificfg_wait_until_sta_connected() -{ - while (1) { - uint8_t connect_status = sdk_wifi_station_get_connect_status(); - if (connect_status == STATION_GOT_IP) - break; - vTaskDelay(1000 / portTICK_PERIOD_MS); - } - - /* - * Notifty wificfg to disable the AP interface on the next restart - * if that option is enabled. - */ - wificfg_got_sta_connect(); -} - -struct shutdown_hook { - struct shutdown_hook *next; - void (*fn)(void *); - void *arg; -}; - -static struct shutdown_hook *shutdown_hooks; - -bool wificfg_add_shutdown_hook(void (*fn)(void *), void *arg) -{ - struct shutdown_hook *hook = malloc(sizeof(struct shutdown_hook)); - - if (!hook) { - return false; - } - - hook->next = shutdown_hooks; - hook->fn = fn; - hook->arg = arg; - shutdown_hooks = hook; - return true; -} - -static int handle_restart_post(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - wificfg_write_string(s, http_redirect_header); - close(s); - struct shutdown_hook *hook; - for (hook = shutdown_hooks; hook; hook = hook->next) { - hook->fn(hook->arg); - } - vTaskDelay(2000 / portTICK_PERIOD_MS); - sdk_system_restart(); - return 0; -} - -static int handle_erase_post(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - wificfg_write_string(s, http_redirect_header); - close(s); - vTaskDelay(2000 / portTICK_PERIOD_MS); - - /* - * Erase the area starting from the sysparams to the end of the flash. - * Configuration information may be in the sdk parameter area too, which is - * in these sectors. - */ - uint32_t num_sectors = 5 + DEFAULT_SYSPARAM_SECTORS; - uint32_t start = sdk_flashchip.chip_size - num_sectors * sdk_flashchip.sector_size; - uint32_t i; - vPortEnterCritical(); - for (i = 0; i < num_sectors; i++) { - spiflash_erase_sector(start + i * sdk_flashchip.sector_size); - } - sdk_system_restart(); - return 0; -} - -/* Minimal not-found response. */ -static const char not_found_header[] = "HTTP/1.1 404 \r\n" - "Content-Type: text/html; charset=utf-8\r\n" - "Cache-Control: no-store\r\n" - "Content-Length: 0\r\n" - "Connection: close\r\n" - "\r\n"; - -static const char *http_wificfg_challenge_content[] = { -#include "content/challenge.html" -}; - -static int handle_wificfg_challenge(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_success_header) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_wificfg_challenge_content[0], buf, len) < 0) return -1; - if (wificfg_write_html_title(s, buf, len, "Challenge") < 0) return -1; - if (wificfg_write_string_chunk(s, http_wificfg_challenge_content[1], buf, len) < 0) return -1; - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} - -static int handle_wificfg_challenge_post(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (content_type != HTTP_CONTENT_TYPE_WWW_FORM_URLENCODED) { - return wificfg_write_string(s, "HTTP/1.1 400 \r\n" - "Content-Type: text/html\r\n" - "Content-Length: 0\r\n" - "Connection: close\r\n\r\n"); - } - size_t rem = content_length; - bool valp = false; - - int8_t enable = 1; - sysparam_get_int8("cfg_enable", &enable); - char *password = NULL; - sysparam_get_string("cfg_password", &password); - - if (!enable && password && strlen(password)) { - while (rem > 0) { - int r = wificfg_form_name_value(s, &valp, &rem, buf, len); - - if (r < 0) { - break; - } - - wificfg_form_url_decode(buf); - - form_name name = intern_form_name(buf); - - if (valp) { - int r = wificfg_form_name_value(s, NULL, &rem, buf, len); - if (r < 0) { - break; - } - - wificfg_form_url_decode(buf); - - switch (name) { - case FORM_NAME_CFG_PASSWORD: - if (strcmp(password, buf) == 0) - sysparam_set_int8("cfg_enable", 1); - break; - default: - break; - } - } - } - } - - if (password) - free(password); - - return wificfg_write_string(s, http_redirect_header); -} - -#ifdef configUSE_TRACE_FACILITY -static const char *http_tasks_content[] = { -#include "content/tasks.html" -}; - -static int handle_tasks(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len) -{ - if (wificfg_write_string(s, http_success_header) < 0) return -1; - - if (method != HTTP_METHOD_HEAD) { - if (wificfg_write_string_chunk(s, http_tasks_content[0], buf, len) < 0) return -1; - if (wificfg_write_html_title(s, buf, len, "Tasks") < 0) return -1; - if (wificfg_write_string_chunk(s, http_tasks_content[1], buf, len) < 0) return -1; - int num_tasks = uxTaskGetNumberOfTasks(); - TaskStatus_t *task_status = pvPortMalloc(num_tasks * sizeof(TaskStatus_t)); - - if (task_status != NULL) { - int i; - - if (wificfg_write_string_chunk(s, "", buf, len) < 0) { - free(task_status); - return -1; - } - - /* Generate the (binary) data. */ - num_tasks = uxTaskGetSystemState(task_status, num_tasks, NULL); - - /* Create a human readable table from the binary data. */ - for(i = 0; i < num_tasks; i++) { - char cStatus; - switch(task_status[i].eCurrentState) { - case eRunning: cStatus = '*'; break; - case eReady: cStatus = 'R'; break; - case eBlocked: cStatus = 'B'; break; - case eSuspended: cStatus = 'S'; break; - case eDeleted: cStatus = 'D'; break; - default: cStatus = '?'; break; - } - - snprintf(buf, len, "", task_status[i].pcTaskName); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) { - free(task_status); - return -1; - } - snprintf(buf, len, "", - (unsigned int)task_status[i].xTaskNumber, - cStatus); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) { - free(task_status); - return -1; - } - snprintf(buf, len, "", - (unsigned int)task_status[i].uxCurrentPriority, - (unsigned int)task_status[i].uxBasePriority); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) { - free(task_status); - return -1; - } - snprintf(buf, len, "", - (unsigned int)task_status[i].ulRunTimeCounter, - (unsigned int)task_status[i].usStackHighWaterMark); - if (wificfg_write_string_chunk(s, buf, buf, len) < 0) { - free(task_status); - return -1; - } - } - - free(task_status); - - if (wificfg_write_string_chunk(s, "
Task nameTask numberStatusPriorityBase priorityRuntimeStack high-water
%s%u%c%u%u%u%u
", buf, len) < 0) return -1; - } - - if (wificfg_write_string_chunk(s, http_tasks_content[2], buf, len) < 0) return -1; - if (wificfg_write_chunk_end(s) < 0) return -1; - } - return 0; -} -#endif /* configUSE_TRACE_FACILITY */ - -static const wificfg_dispatch wificfg_dispatch_list[] = { - {"/favicon.ico", HTTP_METHOD_GET, handle_favicon, false}, - {"/style.css", HTTP_METHOD_GET, handle_style, false}, - {"/script.js", HTTP_METHOD_GET, handle_script, false}, - {"/", HTTP_METHOD_GET, handle_wificfg_redirect, false}, - {"/index.html", HTTP_METHOD_GET, handle_wificfg_redirect, false}, - {"/wificfg/", HTTP_METHOD_GET, handle_wificfg_index, true}, - {"/wificfg/", HTTP_METHOD_POST, handle_wificfg_index_post, true}, - {"/wificfg/sta.html", HTTP_METHOD_GET, handle_wifi_station, true}, - {"/wificfg/sta.html", HTTP_METHOD_POST, handle_wifi_station_post, true}, - {"/wificfg/ap.html", HTTP_METHOD_GET, handle_wifi_ap, true}, - {"/wificfg/ap.html", HTTP_METHOD_POST, handle_wifi_ap_post, true}, - {"/challenge.html", HTTP_METHOD_GET, handle_wificfg_challenge, false}, - {"/challenge.html", HTTP_METHOD_POST, handle_wificfg_challenge_post, false}, - {"/wificfg/restart.html", HTTP_METHOD_POST, handle_restart_post, true}, - {"/wificfg/erase.html", HTTP_METHOD_POST, handle_erase_post, true}, -#ifdef configUSE_TRACE_FACILITY - {"/tasks", HTTP_METHOD_GET, handle_tasks, false}, - {"/tasks.html", HTTP_METHOD_GET, handle_tasks, false}, -#endif /* configUSE_TRACE_FACILITY */ - {NULL, HTTP_METHOD_ANY, NULL} -}; - -static const wificfg_dispatch wificfg_challenge_dispatch = {"/challenge.html", HTTP_METHOD_GET, handle_wificfg_challenge, false}; - -typedef struct { - int32_t port; - /* - * Two dispatch lists. First is used for the config pages. Second - * can be used to extend the pages handled in app code. - */ - const wificfg_dispatch *wificfg_dispatch; - const wificfg_dispatch *dispatch; -} server_params; - -/* - * Test if the http host string is a literal IP address. This is needed for the - * softap mode captive portal and must return false for typical server strings - * which will be redirected, and true for literal IP address to avoid a redirect - * for them. - */ -static bool host_is_name(const char *host) -{ - if (host == NULL) { - return true; - } - - size_t len = strlen(host); - - if (len < 4) { - return true; - } - - char first = host[0]; - char last = host[len - 1]; - - if (first == '[' && last == ']') { - /* Likely an IPv6 address */ - return false; - } - - if (first >= '0' && first <= '9' && last >= '0' && last <= '9') { - /* Likely IPv4 address */ - return false; - } - - return true; -} - - -/* - * The http server uses a single thread to service all requests, one request at - * a time, to keep peak resource usage to a minimum. Keeping connections open - * would cause delays switching between connections. Thus it closes the - * connection after each response. - * - * To help avoid the resource usage of connections in the time-wait state, the - * server asks the client to initiate the connection close and waits a short - * period for it to do so before closing the connection itself. - * - * The response length is always well defined, either sending the content-length - * header or using chunk transfer encoding. Thus the client knows the end of - * responses without the server having to close the connection, and this allows - * the client to close the connection. - * - * Always closing the connection also allows the connection-close header to be - * statically bundled in with the response. - */ -static void server_task(void *pvParameters) -{ - char *hostname_local = NULL; - char *hostname = NULL; - - sysparam_get_string("hostname", &hostname); - if (hostname) { - size_t len = strlen(hostname) + 6 + 1; - hostname_local = (char *)malloc(len); - if (hostname_local) { - snprintf(hostname_local, len, "%s.local", hostname); - } - - int8_t wifi_sta_mdns = 1; - int8_t wifi_ap_mdns = 1; - sysparam_get_int8("wifi_sta_mdns", &wifi_sta_mdns); - sysparam_get_int8("wifi_ap_mdns", &wifi_ap_mdns); - - struct netif *station_netif = sdk_system_get_netif(STATION_IF); - struct netif *softap_netif = sdk_system_get_netif(SOFTAP_IF); - if ((wifi_sta_mdns && station_netif) || (wifi_ap_mdns && softap_netif)) { -#if LWIP_MDNS_RESPONDER - LOCK_TCPIP_CORE(); - mdns_resp_init(); - UNLOCK_TCPIP_CORE(); -#endif -#if EXTRAS_MDNS_RESPONDER - mdns_init(); - mdns_add_facility(hostname, "_http", NULL, mdns_TCP + mdns_Browsable, 80, 600); -#endif - } -#if LWIP_MDNS_RESPONDER - LOCK_TCPIP_CORE(); - if (wifi_sta_mdns && station_netif) { - LOCK_TCPIP_CORE(); - mdns_resp_add_netif(station_netif, hostname, 120); - mdns_resp_add_service(station_netif, hostname, "_http", - DNSSD_PROTO_TCP, 80, 3600, NULL, NULL); - UNLOCK_TCPIP_CORE(); - } - if (wifi_ap_mdns && softap_netif) { - LOCK_TCPIP_CORE(); - mdns_resp_add_netif(softap_netif, hostname, 120); - mdns_resp_add_service(softap_netif, hostname, "_http", - DNSSD_PROTO_TCP, 80, 3600, NULL, NULL); - UNLOCK_TCPIP_CORE(); - } - UNLOCK_TCPIP_CORE(); -#endif - - free(hostname); - } - - server_params *params = pvParameters; - -#if LWIP_IPV6 - int listenfd = socket(AF_INET6, SOCK_STREAM, 0); - struct sockaddr_in6 serv_addr; - memset(&serv_addr, '0', sizeof(serv_addr)); - serv_addr.sin6_family = AF_INET6; - serv_addr.sin6_port = htons(params->port); - serv_addr.sin6_flowinfo = 0; - serv_addr.sin6_addr = in6addr_any; - serv_addr.sin6_scope_id = IP6_NO_ZONE; -#else - int listenfd = socket(AF_INET, SOCK_STREAM, 0); - struct sockaddr_in serv_addr; - memset(&serv_addr, '0', sizeof(serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_port = htons(params->port); - serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); -#endif - bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); - listen(listenfd, 2); - - for (;;) { - int s = accept(listenfd, (struct sockaddr *)NULL, (socklen_t *)NULL); - if (s >= 0) { - const struct timeval timeout = { 10, 0 }; /* 10 second timeout */ - setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); - setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); - - /* Buffer for reading the request and headers and the post method - * names and values. Also used for building dynamically generated - * responses. */ - char buf[HTTP_BUFFER_SIZE]; - - for (;;) { - /* Read the request line */ - int request_line_size = read_crlf_line(s, buf, sizeof(buf)); - if (request_line_size < 5) { - break; - } - - /* Parse the http method, path, and protocol version. */ - char *method_end = skip_to_whitespace(buf); - char *path_string = skip_whitespace(method_end); - *method_end = 0; - wificfg_method method = intern_http_method(buf); - char *path_end = skip_to_whitespace(path_string); - *path_end = 0; - - /* Dispatch to separate functions to handle the requests. */ - const wificfg_dispatch *match = NULL; - const wificfg_dispatch *dispatch; - - /* - * Check the optional application supplied dispatch table - * first to allow overriding the wifi config paths. - */ - if (params->dispatch) { - for (dispatch = params->dispatch; dispatch->path != NULL; dispatch++) { - if (strcmp(path_string, dispatch->path) == 0 && - (dispatch->method == HTTP_METHOD_ANY || - method == dispatch->method)) { - match = dispatch; - break; - } - } - } - - if (!match) { - for (dispatch = params->wificfg_dispatch; dispatch->path != NULL; dispatch++) { - if (strcmp(path_string, dispatch->path) == 0 && - (dispatch->method == HTTP_METHOD_ANY || - method == dispatch->method)) { - match = dispatch; - break; - } - } - } - - if (match && match->secure) { - /* A secure url so check if enabled. */ - int8_t enable = 1; - sysparam_get_int8("cfg_enable", &enable); - if (!enable) { - /* Is there a recovery password? */ - char *password = NULL; - sysparam_get_string("cfg_password", &password); - if (password && strlen(password) > 0) { - match = &wificfg_challenge_dispatch; - } else { - match = NULL; - } - if (password) - free(password); - } - } - - /* Read the headers, noting some of interest. */ - wificfg_content_type content_type = HTTP_CONTENT_TYPE_OTHER; - bool connection_close = false; - bool host_redirect = false; - long content_length = 0; - - for (;;) { - int header_length = read_crlf_line(s, buf, sizeof(buf)); - if (header_length <= 0) - break; - - char *name_end = buf; - for (; ; name_end++) { - char c = *name_end; - if (!c || c == ':') - break; - } - if (*name_end == ':') { - char *value = name_end + 1; - *name_end = 0; - http_header header = intern_http_header(buf); - value = skip_whitespace(value); - switch (header) { - case HTTP_HEADER_HOST: - if (!host_is_name(value)) { - break; - } - if (!hostname_local || - (hostname_local && strcmp(value, hostname_local))) { - host_redirect = true; - } - break; - case HTTP_HEADER_CONTENT_LENGTH: - content_length = strtoul(value, NULL, 10); - break; - case HTTP_HEADER_CONTENT_TYPE: - content_type = intern_http_content_type(value); - break; - case HTTP_HEADER_CONNECTION: - connection_close = strcmp(value, "close") == 0; - break; - default: - break; - } - } - } - - if (host_redirect) { - /* Redirect to an IP address. */ - handle_ipaddr_redirect(s, buf, sizeof(buf)); - /* Close the connection. */ - break; - } - - if (match) { - if ((*match->handler)(s, method, content_length, content_type, buf, sizeof(buf)) < 0) break; - } else { - if (wificfg_write_string(s, not_found_header) < 0) break; - } - - /* - * At this point the client is expected to close the connection, - * so wait briefly for it to do so before giving up. While here - * consume any excess input to avoid a connection reset - this - * can happen if the handler aborted early. - */ - const struct timeval timeout1 = { 1, 0 }; /* 1 second timeout */ - setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout1, sizeof(timeout1)); - size_t len; - for (len = 0; len < 4096; len++) { - char c; - ssize_t res = read(s, &c, 1); - if (res != 1) break; - } - - if (connection_close) - break; - - /* Close anyway. */ - break; - } - - close(s); - - if (sdk_wifi_station_get_connect_status() == STATION_GOT_IP) { - wificfg_got_sta_connect(); - } - } - } -} - - -static void dns_task(void *pvParameters) -{ - char *wifi_ap_ip_addr = NULL; - sysparam_get_string("wifi_ap_ip_addr", &wifi_ap_ip_addr); - if (!wifi_ap_ip_addr) { - printf("dns: no ip address\n"); - vTaskDelete(NULL); - } - ip4_addr_t server_addr; - server_addr.addr = ipaddr_addr(wifi_ap_ip_addr); - -#if LWIP_IPV6 - int fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); - struct sockaddr_in6 serv_addr; - memset(&serv_addr, '0', sizeof(serv_addr)); - serv_addr.sin6_family = AF_INET6; - serv_addr.sin6_port = htons(53); - serv_addr.sin6_flowinfo = 0; - serv_addr.sin6_addr = in6addr_any; - serv_addr.sin6_scope_id = IP6_NO_ZONE; -#else - int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - struct sockaddr_in serv_addr; - memset(&serv_addr, '0', sizeof(serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); - serv_addr.sin_port = htons(53); -#endif - bind(fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); - - const struct ifreq ifreq0 = { "en0" }; - const struct ifreq ifreq1 = { "en1" }; - setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, - sdk_wifi_get_opmode() == STATIONAP_MODE ? &ifreq1 : &ifreq0, - sizeof(ifreq0)); - - for (;;) { - char buffer[96]; - struct sockaddr_storage src_addr; - socklen_t src_addr_len = sizeof(src_addr); - ssize_t count = recvfrom(fd, buffer, sizeof(buffer), 0, (struct sockaddr*)&src_addr, &src_addr_len); - - /* Drop messages that are too large to send a response in the buffer */ - if (count > 0 && count <= sizeof(buffer) - 16) { - size_t qname_len = strlen(buffer + 12) + 1; - uint32_t reply_len = 2 + 10 + qname_len + 16 + 4; - - char *head = buffer + 2; - *head++ = 0x80; // Flags - *head++ = 0x00; - *head++ = 0x00; // Q count - *head++ = 0x01; - *head++ = 0x00; // A count - *head++ = 0x01; - *head++ = 0x00; // Auth count - *head++ = 0x00; - *head++ = 0x00; // Add count - *head++ = 0x00; - head += qname_len; - *head++ = 0x00; // Q type - *head++ = 0x01; - *head++ = 0x00; // Q class - *head++ = 0x01; - *head++ = 0xC0; // LBL offs - *head++ = 0x0C; - *head++ = 0x00; // Type - *head++ = 0x01; - *head++ = 0x00; // Class - *head++ = 0x01; - *head++ = 0x00; // TTL - *head++ = 0x00; - *head++ = 0x00; - *head++ = 0x78; - *head++ = 0x00; // RD len - *head++ = 0x04; - *head++ = ip4_addr1(&server_addr); - *head++ = ip4_addr2(&server_addr); - *head++ = ip4_addr3(&server_addr); - *head++ = ip4_addr4(&server_addr); - - sendto(fd, buffer, reply_len, 0, (struct sockaddr*)&src_addr, src_addr_len); - } - } -} - - -void wificfg_init(uint32_t port, const wificfg_dispatch *dispatch) -{ - char *wifi_sta_ssid = NULL; - char *wifi_sta_password = NULL; - char *wifi_ap_ssid = NULL; - char *wifi_ap_password = NULL; - - uint32_t base_addr; - uint32_t num_sectors; - if (sysparam_get_info(&base_addr, &num_sectors) != SYSPARAM_OK) { - printf("Warning: WiFi config, sysparam not initialized\n"); - return; - } - - /* Default a hostname. */ - char *hostname = NULL; - sysparam_get_string("hostname", &hostname); - if (!hostname && wificfg_default_hostname) { - uint8_t macaddr[6]; - char name[32]; - sdk_wifi_get_macaddr(1, macaddr); - snprintf(name, sizeof(name), wificfg_default_hostname, macaddr[3], - macaddr[4], macaddr[5]); - sysparam_set_string("hostname", name); - } - if (hostname) { - free(hostname); - } - - sysparam_get_string("wifi_ap_ssid", &wifi_ap_ssid); - sysparam_get_string("wifi_ap_password", &wifi_ap_password); - sysparam_get_string("wifi_sta_ssid", &wifi_sta_ssid); - sysparam_get_string("wifi_sta_password", &wifi_sta_password); - - int8_t wifi_sta_enable = 1; - int8_t wifi_ap_enable = 1; - sysparam_get_int8("wifi_sta_enable", &wifi_sta_enable); - sysparam_get_int8("wifi_ap_enable", &wifi_ap_enable); - - int8_t wifi_sta_disabled_restarts = 0; - sysparam_get_int8("wifi_sta_disabled_restarts", &wifi_sta_disabled_restarts); - if (wifi_sta_disabled_restarts > 0) { - wifi_sta_enable = 0; - wifi_sta_disabled_restarts--; - sysparam_set_int8("wifi_sta_disabled_restarts", wifi_sta_disabled_restarts); - } - - int8_t wifi_ap_disabled_restarts = 0; - sysparam_get_int8("wifi_ap_disabled_restarts", &wifi_ap_disabled_restarts); - if (wifi_ap_disabled_restarts > 0) { - wifi_ap_enable = 0; - wifi_ap_disabled_restarts--; - sysparam_set_int8("wifi_ap_disabled_restarts", wifi_ap_disabled_restarts); - } - - /* Validate the configuration. */ - - if (wifi_sta_enable && (!wifi_sta_ssid || !wifi_sta_password || - strlen(wifi_sta_ssid) < 1 || - strlen(wifi_sta_ssid) > 32 || - !wifi_sta_password || - strlen(wifi_sta_password) < 8 || - strlen(wifi_sta_password) >= 64)) { - wifi_sta_enable = 0; - } - - if (wifi_ap_enable) { - /* Default AP ssid and password. */ - if (!wifi_ap_ssid && wificfg_default_ssid) { - uint8_t macaddr[6]; - char ssid[32]; - sdk_wifi_get_macaddr(1, macaddr); - snprintf(ssid, sizeof(ssid), wificfg_default_ssid, macaddr[3], - macaddr[4], macaddr[5]); - sysparam_set_string("wifi_ap_ssid", ssid); - sysparam_get_string("wifi_ap_ssid", &wifi_ap_ssid); - - if (!wifi_ap_password && wificfg_default_password) { - sysparam_set_string("wifi_ap_password", wificfg_default_password); - sysparam_get_string("wifi_ap_password", &wifi_ap_password); - } - } - - /* If the ssid and password are not valid then disable the AP interface. */ - if (!wifi_ap_ssid || strlen(wifi_ap_ssid) < 1 || strlen(wifi_ap_ssid) >= 32 || - !wifi_ap_password || strlen(wifi_ap_password) < 8 || strlen(wifi_ap_password) >= 64) { - wifi_ap_enable = 0; - } - } - - int8_t wifi_mode = NULL_MODE; - if (wifi_sta_enable && wifi_ap_enable) - wifi_mode = STATIONAP_MODE; - else if (wifi_sta_enable) - wifi_mode = STATION_MODE; - else if (wifi_ap_enable) - wifi_mode = SOFTAP_MODE; - sdk_wifi_set_opmode(wifi_mode); - - if (wifi_sta_enable) { - struct sdk_station_config config; - strcpy((char *)config.ssid, wifi_sta_ssid); - strcpy((char *)config.password, wifi_sta_password); - config.bssid_set = 0; - - int8_t wifi_sta_dhcp = 1; - sysparam_get_int8("wifi_sta_dhcp", &wifi_sta_dhcp); - - if (!wifi_sta_dhcp) { - char *wifi_sta_ip_addr = NULL; - char *wifi_sta_netmask = NULL; - char *wifi_sta_gateway = NULL; - sysparam_get_string("wifi_sta_ip_addr", &wifi_sta_ip_addr); - sysparam_get_string("wifi_sta_netmask", &wifi_sta_netmask); - sysparam_get_string("wifi_sta_gateway", &wifi_sta_gateway); - - if (wifi_sta_ip_addr && strlen(wifi_sta_ip_addr) > 4 && - wifi_sta_netmask && strlen(wifi_sta_netmask) > 4 && - wifi_sta_gateway && strlen(wifi_sta_gateway) > 4) { - sdk_wifi_station_dhcpc_stop(); - struct ip_info info; - memset(&info, 0x0, sizeof(info)); - info.ip.addr = ipaddr_addr(wifi_sta_ip_addr); - info.netmask.addr = ipaddr_addr(wifi_sta_netmask); - info.gw.addr = ipaddr_addr(wifi_sta_gateway); - sdk_wifi_set_ip_info(STATION_IF, &info); - } - if (wifi_sta_ip_addr) free(wifi_sta_ip_addr); - if (wifi_sta_netmask) free(wifi_sta_netmask); - if (wifi_sta_gateway) free(wifi_sta_gateway); - } - - sdk_wifi_station_set_config(&config); - } - - if (wifi_ap_enable) { - /* Read and validate paramenters. */ - int8_t wifi_ap_ssid_hidden = 0; - sysparam_get_int8("wifi_ap_ssid_hidden", &wifi_ap_ssid_hidden); - if (wifi_ap_ssid_hidden < 0 || wifi_ap_ssid_hidden > 1) { - wifi_ap_ssid_hidden = 1; - } - - int8_t wifi_ap_channel = 6; - sysparam_get_int8("wifi_ap_channel", &wifi_ap_channel); - - /* AU does not allow channels above 13, although 14 works. */ - if (wifi_ap_channel > 13) { - wifi_ap_channel = 13; - } -#if 0 - /* US does not allow channels above 11, although they work. */ - if (wifi_ap_channel > 11) { - wifi_ap_channel = 11; - } -#endif - if (wifi_ap_channel < 1 || wifi_ap_channel > 14) { - wifi_ap_channel = 6; - } - - int8_t wifi_ap_authmode = AUTH_WPA_WPA2_PSK; - sysparam_get_int8("wifi_ap_authmode", &wifi_ap_authmode); - if (wifi_ap_authmode != AUTH_OPEN && wifi_ap_authmode != AUTH_WPA_PSK && - wifi_ap_authmode != AUTH_WPA2_PSK && wifi_ap_authmode != AUTH_WPA_WPA2_PSK) { - wifi_ap_authmode = AUTH_WPA_WPA2_PSK; - } - - int8_t wifi_ap_max_conn = 3; - sysparam_get_int8("wifi_ap_max_conn", &wifi_ap_max_conn); - if (wifi_ap_max_conn < 1 || wifi_ap_max_conn > 8) { - wifi_ap_max_conn = 3; - } - - int32_t wifi_ap_beacon_interval = 100; - sysparam_get_int32("wifi_ap_beacon_interval", &wifi_ap_beacon_interval); - if (wifi_ap_beacon_interval < 0 || wifi_ap_beacon_interval > 1000) { - wifi_ap_beacon_interval = 100; - } - - /* Default AP IP address and netmask. */ - char *wifi_ap_ip_addr = NULL; - sysparam_get_string("wifi_ap_ip_addr", &wifi_ap_ip_addr); - if (!wifi_ap_ip_addr) { - sysparam_set_string("wifi_ap_ip_addr", "172.16.0.1"); - sysparam_get_string("wifi_ap_ip_addr", &wifi_ap_ip_addr); - } - char *wifi_ap_netmask = NULL; - sysparam_get_string("wifi_ap_netmask", &wifi_ap_netmask); - if (!wifi_ap_netmask) { - sysparam_set_string("wifi_ap_netmask", "255.255.0.0"); - sysparam_get_string("wifi_ap_netmask", &wifi_ap_netmask); - } - - if (strlen(wifi_ap_ip_addr) >= 7 && strlen(wifi_ap_netmask) >= 7) { - struct ip_info ap_ip; - ap_ip.ip.addr = ipaddr_addr(wifi_ap_ip_addr); - ap_ip.netmask.addr = ipaddr_addr(wifi_ap_netmask); - IP4_ADDR(&ap_ip.gw, 0, 0, 0, 0); - sdk_wifi_set_ip_info(1, &ap_ip); - - struct sdk_softap_config ap_config = { - .ssid_hidden = wifi_ap_ssid_hidden, - .channel = wifi_ap_channel, - .authmode = wifi_ap_authmode, - .max_connection = wifi_ap_max_conn, - .beacon_interval = wifi_ap_beacon_interval, - }; - strcpy((char *)ap_config.ssid, wifi_ap_ssid); - ap_config.ssid_len = strlen(wifi_ap_ssid); - strcpy((char *)ap_config.password, wifi_ap_password); - sdk_wifi_softap_set_config(&ap_config); - - int8_t wifi_ap_dhcp_leases = 4; - sysparam_get_int8("wifi_ap_dhcp_leases", &wifi_ap_dhcp_leases); - - if (wifi_ap_dhcp_leases) { - ip4_addr_t first_client_ip; - first_client_ip.addr = ap_ip.ip.addr + htonl(1); - - int8_t wifi_ap_dns = 1; - sysparam_get_int8("wifi_ap_dns", &wifi_ap_dns); - if (wifi_ap_dns < 0 || wifi_ap_dns > 1) - wifi_ap_dns = 1; - - dhcpserver_start(&first_client_ip, wifi_ap_dhcp_leases); - dhcpserver_set_router(&ap_ip.ip); - if (wifi_ap_dns) { - dhcpserver_set_dns(&ap_ip.ip); - xTaskCreate(dns_task, "WiFi Cfg DNS", 384, NULL, 2, NULL); - } - } - } - - free(wifi_ap_ip_addr); - free(wifi_ap_netmask); - } - - if (wifi_sta_ssid) free(wifi_sta_ssid); - if (wifi_sta_password) free(wifi_sta_password); - if (wifi_ap_ssid) free(wifi_ap_ssid); - if (wifi_ap_password) free(wifi_ap_password); - - if (wifi_mode != NULL_MODE) { - server_params *params = malloc(sizeof(server_params)); - params->port = port; - params->wificfg_dispatch = wificfg_dispatch_list; - params->dispatch = dispatch; - - size_t stack_size = 464; - xTaskCreate(server_task, "WiFi Cfg HTTP", stack_size, params, 2, NULL); - } -} diff --git a/extras/wificfg/wificfg.h b/extras/wificfg/wificfg.h deleted file mode 100644 index 3461c7a..0000000 --- a/extras/wificfg/wificfg.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * WiFi configuration via a simple web server. - * - * Copyright (C) 2016 OurAirQuality.org - * - * Licensed under the Apache License, Version 2.0, January 2004 (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/ - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS WITH THE SOFTWARE. - * - */ - -#ifndef __WIFICFG_H__ -#define __WIFICFG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Printf format used to initialize a default AP ssid. It is passed the last - * three bytes of the mac address. This may be NULL to not default the ssid, - * but the AP network will not run without a ssid. - */ -extern const char *wificfg_default_ssid; - -/* - * A default password for the AP interface. This may be NULL to not default the - * password, but the AP network will not run without a password. The minimum - * length is 8 characters. - */ -extern const char *wificfg_default_password; - -/* - * A default hostname printf format string. This may be NULL to not default the - * hostname. - */ -extern const char *wificfg_default_hostname; - -/* - * The web server parses the http method string in these enums. The ANY method - * is only use for dispatch. The method enum is passed to the handler functions. - */ -typedef enum { - HTTP_METHOD_GET, - HTTP_METHOD_POST, - HTTP_METHOD_HEAD, - HTTP_METHOD_OTHER, - HTTP_METHOD_ANY, -} wificfg_method; - -/* - * The web server parses these content-type header values. This is passed to the - * dispatch function. - */ -typedef enum { - HTTP_CONTENT_TYPE_WWW_FORM_URLENCODED, - HTTP_CONTENT_TYPE_OTHER -} wificfg_content_type; - -/* - * The function signature for the http server request handler functions. - * - * The buffer, with its length, is usable by the handler. - */ -typedef int (* wificfg_handler)(int s, wificfg_method method, - uint32_t content_length, - wificfg_content_type content_type, - char *buf, size_t len); - -typedef struct { - const char *path; - wificfg_method method; - wificfg_handler handler; - bool secure; -} wificfg_dispatch; - - -/* - * Start the Wifi Configuration http server task. The IP port number - * and a path dispatch list are needed. The dispatch list can not be - * stack allocated as it is passed to another task. - */ -void wificfg_init(uint32_t port, const wificfg_dispatch *dispatch); - -/* - * Support for reading a form name or value from the socket. The name or value - * is truncated to the buffer length. The number of characters read is limited - * to the remainder which is updated. The 'valp' flag is set if a value follows. - */ -ssize_t wificfg_form_name_value(int s, bool *valp, size_t *rem, char *buf, size_t len); - -/* Support for form url-encoding decoder. */ -void wificfg_form_url_decode(char *string); - -/* Support for html-escaping of form values. */ -void wificfg_html_escape(char *string, char *buf, size_t len); - -/* Support for writing a string in a response. */ -ssize_t wificfg_write_string(int s, const char *str); - -/* Support for writing a string in a response, with chunk transfer encoding. - * An optional buffer may be supplied to use to construct a chunk with the - * header and trailer, reducing the number of write() calls, and the str may be - * at the start of this buffer. - */ -ssize_t wificfg_write_string_chunk(int s, const char *str, char *buf, size_t len); - -/* Write a chunk transfer encoding end marker. */ -ssize_t wificfg_write_chunk_end(int s); - -/* Write a html title meta data, using the hostname or AP SSI. */ -int wificfg_write_html_title(int s, char *buf, size_t len, const char *str); - -/* Wait until the station interface has connected to an access point, - * and obtained an IP address. */ -void wificfg_wait_until_sta_connected(void); - -bool wificfg_add_shutdown_hook(void (*fn)(void *), void *arg); - -#ifdef __cplusplus -} -#endif - -#endif // __WIFICFG_H__ diff --git a/extras/ws2812/ws2812.h b/extras/ws2812/ws2812.h index 7ef157a..d614e60 100644 --- a/extras/ws2812/ws2812.h +++ b/extras/ws2812/ws2812.h @@ -35,10 +35,6 @@ #include "espressif/esp_common.h" // sdk_os_delay_us #include "esp/gpio.h" -#ifdef __cplusplus -extern "C" { -#endif - /** * @brief Struct for easy manipulation of RGB colors. * @@ -208,8 +204,5 @@ void ws2812_seq_end(void) sdk_os_delay_us(50); // display the loaded colors } -#ifdef __cplusplus -} -#endif #endif /* WS2812_DRV_H */ diff --git a/extras/ws2812_i2s/README.md b/extras/ws2812_i2s/README.md deleted file mode 100644 index 1cd6953..0000000 --- a/extras/ws2812_i2s/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# WS2812 led driver - -This driver uses I2S and DMA subsystems to drive WS2812 leds. -The idea to use I2S to control WS2812 leds belongs to [CNLohr](https://github.com/CNLohr). - -## Pros - - * Not using CPU to generate pulses. - * Interrupt neutral. Reliable operation even with high network load. - -## Cons - - * Using RAM for DMA buffer. 12 bytes per pixel. - * Can not change output PIN. Use I2S DATA output pin which is GPIO3. - diff --git a/extras/ws2812_i2s/component.mk b/extras/ws2812_i2s/component.mk deleted file mode 100644 index 08b4449..0000000 --- a/extras/ws2812_i2s/component.mk +++ /dev/null @@ -1,9 +0,0 @@ -# Component makefile for extras/ws2812_i2s - -# expected anyone using ws2812_i2s driver includes it as 'ws2812_i2s/ws2812_i2s.h' -INC_DIRS += $(ws2812_i2s_ROOT).. - -# args for passing into compile rule generation -ws2812_i2s_SRC_DIR = $(ws2812_i2s_ROOT) - -$(eval $(call component_compile_rules,ws2812_i2s)) diff --git a/extras/ws2812_i2s/ws2812_i2s.c b/extras/ws2812_i2s/ws2812_i2s.c deleted file mode 100644 index 88caf27..0000000 --- a/extras/ws2812_i2s/ws2812_i2s.c +++ /dev/null @@ -1,201 +0,0 @@ -/** - * The MIT License (MIT) - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include "ws2812_i2s.h" -#include "i2s_dma/i2s_dma.h" - -#include -#include - -// #define WS2812_I2S_DEBUG - -#ifdef WS2812_I2S_DEBUG -#include -#define debug(fmt, ...) printf("%s" fmt "\n", "ws2812_i2s: ", ## __VA_ARGS__); -#else -#define debug(fmt, ...) -#endif - -#define MAX_DMA_BLOCK_SIZE 4095 -// #define DMA_PIXEL_SIZE 16 // each colour takes 4 bytes - -/** - * Amount of zero data to produce WS2812 reset condition. - * DMA data must be multiple of 4 - * 16 bytes of 0 gives ~50 microseconds of low pulse - */ -#define WS2812_ZEROES_LENGTH 16 - -static uint8_t i2s_dma_zero_buf[WS2812_ZEROES_LENGTH] = {0}; - -static dma_descriptor_t *dma_block_list; -static uint32_t dma_block_list_size; - -static void *dma_buffer; -static uint32_t dma_buffer_size; - -#ifdef WS2812_I2S_DEBUG -volatile uint32_t dma_isr_counter = 0; -#endif - -static volatile bool i2s_dma_processing = false; - -static void dma_isr_handler(void *arg) -{ - if (i2s_dma_is_eof_interrupt()) { -#ifdef WS2812_I2S_DEBUG - dma_isr_counter++; -#endif - i2s_dma_processing = false; - } - i2s_dma_clear_interrupt(); -} - -/** - * Form a linked list of descriptors (dma blocks). - * The last two blocks are zero block and stop block. - * The last block is a stop terminal block. It has no data and no next block. - */ -static inline void init_descriptors_list(uint8_t *buf, uint32_t total_dma_data_size) -{ - for (int i = 0; i < dma_block_list_size; i++) { - dma_block_list[i].owner = 1; - dma_block_list[i].eof = 0; - dma_block_list[i].sub_sof = 0; - dma_block_list[i].unused = 0; - dma_block_list[i].buf_ptr = buf; - - if (total_dma_data_size >= MAX_DMA_BLOCK_SIZE) { - dma_block_list[i].datalen = MAX_DMA_BLOCK_SIZE; - dma_block_list[i].blocksize = MAX_DMA_BLOCK_SIZE; - total_dma_data_size -= MAX_DMA_BLOCK_SIZE; - buf += MAX_DMA_BLOCK_SIZE; - } else { - dma_block_list[i].datalen = total_dma_data_size; - dma_block_list[i].blocksize = total_dma_data_size; - total_dma_data_size = 0; - } - - if (i == (dma_block_list_size - 2)) { // zero block - dma_block_list[i].buf_ptr = i2s_dma_zero_buf; - dma_block_list[i].datalen = WS2812_ZEROES_LENGTH; - dma_block_list[i].blocksize = WS2812_ZEROES_LENGTH; - } - - if (i == (dma_block_list_size - 1)) { // stop block - // it needs a valid buffer even if no data to output - dma_block_list[i].buf_ptr = i2s_dma_zero_buf; - dma_block_list[i].datalen = 0; - dma_block_list[i].blocksize = WS2812_ZEROES_LENGTH; - dma_block_list[i].next_link_ptr = 0; - - // the last stop block should trigger interrupt - dma_block_list[i].eof = 1; - } else { - dma_block_list[i].next_link_ptr = &dma_block_list[i + 1]; - } - } -} - -int ws2812_i2s_init(uint32_t pixels_number, pixeltype_t type) -{ - dma_buffer_size = pixels_number * type; - dma_block_list_size = dma_buffer_size / MAX_DMA_BLOCK_SIZE; - - if (dma_buffer_size % MAX_DMA_BLOCK_SIZE) { - dma_block_list_size += 1; - } - - dma_block_list_size += 2; // zero block and stop block - - debug("allocating %d dma blocks\n", dma_block_list_size); - - if(!dma_block_list) - { - dma_block_list = (dma_descriptor_t*)malloc( - dma_block_list_size * sizeof(dma_descriptor_t)); - if(!dma_block_list) - { - return -1; - } - } - debug("allocating %d bytes for DMA buffer\n", dma_buffer_size); - if(!dma_buffer) - { - dma_buffer = malloc(dma_buffer_size); - if(!dma_buffer) - { - return -1; - } - } - memset(dma_buffer, 0xFA, dma_buffer_size); - - init_descriptors_list(dma_buffer, dma_buffer_size); - - i2s_clock_div_t clock_div = i2s_get_clock_div(3333333); - i2s_pins_t i2s_pins = {.data = true, .clock = false, .ws = false}; - - debug("i2s clock dividers, bclk=%d, clkm=%d\n", - clock_div.bclk_div, clock_div.clkm_div); - - i2s_dma_init(dma_isr_handler, NULL, clock_div, i2s_pins); - return 0; -} - -const IRAM_DATA int16_t bitpatterns[16] = -{ - 0b1000100010001000, 0b1000100010001110, 0b1000100011101000, 0b1000100011101110, - 0b1000111010001000, 0b1000111010001110, 0b1000111011101000, 0b1000111011101110, - 0b1110100010001000, 0b1110100010001110, 0b1110100011101000, 0b1110100011101110, - 0b1110111010001000, 0b1110111010001110, 0b1110111011101000, 0b1110111011101110, -}; - -void ws2812_i2s_update(ws2812_pixel_t *pixels, pixeltype_t type) -{ - while (i2s_dma_processing) {}; - - uint16_t *p_dma_buf = dma_buffer; - - for (uint32_t i = 0; i < (dma_buffer_size / type); i++) { - // green - *p_dma_buf++ = bitpatterns[pixels[i].green & 0x0F]; - *p_dma_buf++ = bitpatterns[pixels[i].green >> 4]; - - // red - *p_dma_buf++ = bitpatterns[pixels[i].red & 0x0F]; - *p_dma_buf++ = bitpatterns[pixels[i].red >> 4]; - - // blue - *p_dma_buf++ = bitpatterns[pixels[i].blue & 0x0F]; - *p_dma_buf++ = bitpatterns[pixels[i].blue >> 4]; - - if(type == PIXEL_RGBW) { - // white - *p_dma_buf++ = bitpatterns[pixels[i].white & 0x0F]; - *p_dma_buf++ = bitpatterns[pixels[i].white >> 4]; - } - } - - i2s_dma_processing = true; - i2s_dma_start(dma_block_list); -} diff --git a/extras/ws2812_i2s/ws2812_i2s.h b/extras/ws2812_i2s/ws2812_i2s.h deleted file mode 100644 index c6c8df5..0000000 --- a/extras/ws2812_i2s/ws2812_i2s.h +++ /dev/null @@ -1,70 +0,0 @@ -/** - * The MIT License (MIT) - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#ifndef __WS2812_I2S_H__ -#define __WS2812_I2S_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef union { - struct { - uint8_t blue; //LSB - uint8_t green; - uint8_t red; - uint8_t white; - }; - uint32_t color; // 0xWWRRGGBB -} ws2812_pixel_t; - -typedef enum { - PIXEL_RGB = 12, - PIXEL_RGBW = 16 -} pixeltype_t; - -/** - * Initialize i2s and dma subsystems to work with ws2812 led strip. - * - * Please note that each pixel will take 12 bytes of RAM. - * - * @param pixels_number Number of pixels in the strip. - */ -int ws2812_i2s_init(uint32_t pixels_number, pixeltype_t type); - -/** - * Update ws2812 pixels. - * - * @param pixels Array of 'pixels_number' pixels. The array must contain all - * the pixels. - */ -void ws2812_i2s_update(ws2812_pixel_t *pixels, pixeltype_t type); - -#ifdef __cplusplus -} -#endif - -#endif // __WS2812_I2S_H__ diff --git a/include/.gitignore b/include/.gitignore deleted file mode 100644 index c452a26..0000000 --- a/include/.gitignore +++ /dev/null @@ -1 +0,0 @@ -private_ssid_config.h diff --git a/include/espressif/esp8266/eagle_soc.h b/include/espressif/esp8266/eagle_soc.h index 8e3855b..cf60190 100644 --- a/include/espressif/esp8266/eagle_soc.h +++ b/include/espressif/esp8266/eagle_soc.h @@ -66,7 +66,7 @@ //}} //DPORT{{ -#define HOST_INF_SEL (PERIPHS_DPORT_BASEADDR + 0x28) +#define HOST_INF_SEL (0x28) #define DPORT_LINK_DEVICE_SEL 0x000000FF #define DPORT_LINK_DEVICE_SEL_S 8 #define DPORT_PERI_IO_SWAP 0x000000FF diff --git a/include/espressif/esp_misc.h b/include/espressif/esp_misc.h index 8427d60..6490fa5 100644 --- a/include/espressif/esp_misc.h +++ b/include/espressif/esp_misc.h @@ -27,8 +27,6 @@ void sdk_os_delay_us(uint16_t us); void sdk_os_install_putc1(void (*p)(char c)); void sdk_os_putc(char c); -void sdk_gpio_output_set(uint32_t set_mask, uint32_t clear_mask, uint32_t enable_mask, uint32_t disable_mask); - #ifdef __cplusplus } #endif diff --git a/include/espressif/esp_sta.h b/include/espressif/esp_sta.h index c5f585a..fdfc1cf 100644 --- a/include/espressif/esp_sta.h +++ b/include/espressif/esp_sta.h @@ -15,10 +15,10 @@ extern "C" { #endif struct sdk_station_config { - uint8_t ssid[32]; /* Null terminated string */ - uint8_t password[64]; /* Null terminated string */ - uint8_t bssid_set; /* One if bssid is used, otherwise zero. */ - uint8_t bssid[6]; /* The BSSID bytes */ + uint8_t ssid[32]; + uint8_t password[64]; + uint8_t bssid_set; + uint8_t bssid[6]; }; bool sdk_wifi_station_get_config(struct sdk_station_config *config); diff --git a/include/espressif/esp_system.h b/include/espressif/esp_system.h index 690bc60..04af582 100644 --- a/include/espressif/esp_system.h +++ b/include/espressif/esp_system.h @@ -28,8 +28,6 @@ struct sdk_rst_info{ uint32_t rtn_addr; }; -struct netif *sdk_system_get_netif(uint32_t mode); - struct sdk_rst_info* sdk_system_get_rst_info(void); const char* sdk_system_get_sdk_version(void); @@ -39,8 +37,8 @@ enum sdk_sleep_type { WIFI_SLEEP_LIGHT = 1, WIFI_SLEEP_MODEM = 2, }; -bool sdk_wifi_set_sleep_type(enum sdk_sleep_type); -enum sdk_sleep_type sdk_wifi_get_sleep_type(void); +void sdk_wifi_set_sleep_type(enum sdk_sleep_type); +enum sdk_sleep_type sdk_wifi_get_sleep_type(enum sdk_sleep_type); void sdk_system_restore(void); void sdk_system_restart(void); @@ -56,8 +54,8 @@ uint32_t sdk_system_get_chip_id(void); uint32_t sdk_system_rtc_clock_cali_proc(void); uint32_t sdk_system_get_rtc_time(void); -bool sdk_system_rtc_mem_read(uint32_t src_addr, void *des_addr, uint16_t save_size); -bool sdk_system_rtc_mem_write(uint32_t des_addr, void *src_addr, uint16_t save_size); +bool sdk_system_rtc_mem_read(uint8_t src, void *dst, uint16_t n); +bool sdk_system_rtc_mem_write(uint8_t dst, const void *src, uint16_t n); void sdk_system_uart_swap(void); void sdk_system_uart_de_swap(void); diff --git a/include/espressif/esp_wifi.h b/include/espressif/esp_wifi.h index 8932974..5d9ba19 100644 --- a/include/espressif/esp_wifi.h +++ b/include/espressif/esp_wifi.h @@ -44,9 +44,9 @@ enum { }; struct ip_info { - struct ip4_addr ip; - struct ip4_addr netmask; - struct ip4_addr gw; + struct ip_addr ip; + struct ip_addr netmask; + struct ip_addr gw; }; bool sdk_wifi_get_ip_info(uint8_t if_index, struct ip_info *info); diff --git a/include/espressif/osapi.h b/include/espressif/osapi.h deleted file mode 100644 index 1c1808f..0000000 --- a/include/espressif/osapi.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _OSAPI_H_ -#define _OSAPI_H_ - -void sdk_os_timer_setfn(ETSTimer *ptimer, ETSTimerFunc *pfunction, void *parg); -void sdk_os_timer_arm(ETSTimer *ptimer, uint32_t milliseconds, bool repeat_flag); -void sdk_os_timer_disarm(ETSTimer *ptimer); - -#endif diff --git a/include/espressif/queue.h b/include/espressif/queue.h index 7725a3b..a760c8d 100644 --- a/include/espressif/queue.h +++ b/include/espressif/queue.h @@ -1,61 +1,6 @@ -/* - * Copyright (c) 1991, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. - * - */ - #ifndef _SYS_QUEUE_H_ #define _SYS_QUEUE_H_ -/* - * Note: This header file comes to us from the Espressif - * SDK. Espressif adapted it from BSD's queue.h. The BSD copyright - * notice and the following extract from the explanatory statement - * were re-added by esp-open-rtos. - * - * FreeBSD version of this header: - * https://svnweb.freebsd.org/base/head/sys/sys/queue.h?view=markup - * - * **** - * - * A singly-linked list is headed by a single forward pointer. The elements - * are singly linked for minimum space and pointer manipulation overhead at - * the expense of O(n) removal for arbitrary elements. New elements can be - * added to the list after an existing element or at the head of the list. - * Elements being removed from the head of the list should use the explicit - * macro for this purpose for optimum efficiency. A singly-linked list may - * only be traversed in the forward direction. Singly-linked lists are ideal - * for applications with large datasets and few or no removals or for - * implementing a LIFO queue. - * - * For details on the use of these macros, see the queue(3) manual page. - * - */ - #define QMD_SAVELINK(name, link) #define TRASHIT(x) diff --git a/include/espressif/sdk_private.h b/include/espressif/sdk_private.h index 7ae4336..fa643a7 100644 --- a/include/espressif/sdk_private.h +++ b/include/espressif/sdk_private.h @@ -20,7 +20,7 @@ extern "C" { #endif -struct ip4_addr; +struct ip_addr; /********************************************* * Defined in libmain.a @@ -43,6 +43,17 @@ int sdk_uart_rx_one_char(char *buf); */ void sdk_os_putc(char c); +/* Called when an IP gets set on the "station" (client) interface. + */ +void sdk_system_station_got_ip_set(struct ip_addr *ip_addr, struct ip_addr *sn_mask, struct ip_addr *gw_addr); + +/* This is a no-op wrapper around ppRecycleRxPkt, which is defined in libpp.a + + It's called when a pbuf is freed, and allows pp to reuse the 'eb' pointer to ESP-specific + pbuf data. (See esp-lwip pbuf.h) + */ +void sdk_system_pp_recycle_rx_pkt(void *eb); + #ifdef __cplusplus } #endif diff --git a/include/espressif/spi_flash.h b/include/espressif/spi_flash.h index 1c6a3b1..44c8677 100644 --- a/include/espressif/spi_flash.h +++ b/include/espressif/spi_flash.h @@ -1,13 +1,11 @@ -/* +/* * copyright (c) Espressif System 2010 - * + * */ #ifndef __SPI_FLASH_H__ #define __SPI_FLASH_H__ -#include "flashchip.h" - #ifdef __cplusplus extern "C" { #endif @@ -36,7 +34,7 @@ sdk_SpiFlashOpResult sdk_spi_flash_erase_sector(uint16_t sec); src is pointer to a buffer to read bytes from. Should be 4-byte aligned. size is length of buffer in bytes. Should be a multiple of 4. */ -sdk_SpiFlashOpResult sdk_spi_flash_write(uint32_t des_addr, uint32_t *src, uint32_t size); +sdk_SpiFlashOpResult sdk_spi_flash_write(uint32_t des_addr, const void *src, uint32_t size); /* Read data from flash. @@ -44,7 +42,30 @@ sdk_SpiFlashOpResult sdk_spi_flash_write(uint32_t des_addr, uint32_t *src, uint3 des is pointer to a buffer to read bytes into. Should be 4-byte aligned. size is number of bytes to read. Should be a multiple of 4. */ -sdk_SpiFlashOpResult sdk_spi_flash_read(uint32_t src_addr, uint32_t *des, uint32_t size); +sdk_SpiFlashOpResult sdk_spi_flash_read(uint32_t src_addr, void *des, uint32_t size); + + +/* SDK uses this structure internally to account for flash size. + + chip_size field is initialised during startup from the flash size + saved in the image header (on the first 8 bytes of SPI flash). + + Other field are initialised to hardcoded values by the SDK. + + Based on RE work by @foogod at + http://esp8266-re.foogod.com/wiki/Flashchip_%28IoT_RTOS_SDK_0.9.9%29 +*/ +typedef struct { + uint32_t device_id; + uint32_t chip_size; /* in bytes */ + uint32_t block_size; /* in bytes */ + uint32_t sector_size; /* in bytes */ + uint32_t page_size; /* in bytes */ + uint32_t status_mask; +} sdk_flashchip_t; + +extern sdk_flashchip_t sdk_flashchip; + #ifdef __cplusplus } diff --git a/include/espressif/user_interface.h b/include/espressif/user_interface.h deleted file mode 100644 index 223efba..0000000 --- a/include/espressif/user_interface.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __USER_INTERFACE_H__ -#define __USER_INTERFACE_H__ - -#include -#include -#include -#include "espressif/esp_wifi.h" - -enum sdk_dhcp_status { - DHCP_STOPPED, - DHCP_STARTED -}; - -uint8_t sdk_system_get_boot_version(void); -uint32_t sdk_system_get_userbin_addr(void); -uint8_t sdk_system_get_boot_mode(void); -bool sdk_system_restart_enhance(uint8_t bin_type, uint32_t bin_addr); -bool sdk_system_upgrade_userbin_set(uint8_t userbin); -uint8_t sdk_system_upgrade_userbin_check(void); -bool sdk_system_upgrade_flag_set(uint8_t flag); -uint8_t sdk_system_upgrade_flag_check(void); -bool sdk_system_upgrade_reboot(void); -bool sdk_wifi_station_dhcpc_start(void); -bool sdk_wifi_station_dhcpc_stop(void); -enum sdk_dhcp_status sdk_wifi_station_dhcpc_status(void); - -#endif diff --git a/include/etstimer.h b/include/etstimer.h deleted file mode 100644 index 36e1a59..0000000 --- a/include/etstimer.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Structures and constants used by some SDK routines - * - * Part of esp-open-rtos - * Copyright (C) 2015 Superhouse Automation Pty Ltd - * BSD Licensed as described in the file LICENSE - */ - -/* Note: The following definitions are normally found (in the non-RTOS SDK) in - * the ets_sys.h distributed by Espressif. Unfortunately, they are not found - * anywhere in the RTOS SDK headers, and differ substantially from the non-RTOS - * versions, so the structures defined here had to be obtained by careful - * examination of the code found in the Espressif RTOS SDK. - */ - -/* Note also: These cannot be included in esp8266/ets_sys.h, because it is - * included from FreeRTOS.h, creating an (unnecessary) circular dependency. - * They have therefore been put into their own header file instead. - */ - -#ifndef _ETSTIMER_H -#define _ETSTIMER_H - -#include "FreeRTOS.h" -#include "timers.h" -#include "esp/types.h" - -typedef void ETSTimerFunc(void *); - -typedef struct ETSTimer_st { - struct ETSTimer_st *timer_next; - TimerHandle_t timer_handle; - uint32_t _unknown; - uint32_t timer_ms; - ETSTimerFunc *timer_func; - bool timer_repeat; - void *timer_arg; -} ETSTimer; - -void sdk_ets_timer_setfn(ETSTimer *ptimer, ETSTimerFunc *pfunction, void *parg); -void sdk_ets_timer_arm(ETSTimer *ptimer, uint32_t milliseconds, bool repeat_flag); -void sdk_ets_timer_disarm(ETSTimer *ptimer); - -#endif /* _ETSTIMER_H */ diff --git a/include/ssid_config.h b/include/ssid_config.h index 9136731..a13e09a 100644 --- a/include/ssid_config.h +++ b/include/ssid_config.h @@ -3,16 +3,29 @@ // // We all need to add our personal SSID/password to each ESP project but we // do not want that information pushed to Github. This file solves that -// problem. Create an include/private_ssid_config.h file with the following two -// definitions uncommented: +// problem. // -// #define WIFI_SSID "mywifissid" -// #define WIFI_PASS "my secret password" +// First tell git to ignore changes to this file: // +// git update-index --assume-unchanged include/ssid_config.h +// +// Then, enter your SSID and passphrase below and it will never be committed +// to Github. +// +// Change password on project basis? Copy the default version this file to your +// project directory, redo the instructions and you have separate wifi settings +// for that project. +// +// For reference, see +// https://www.kernel.org/pub/software/scm/git/docs/git-update-index.html +// + +#error "You need to enter your wifi credentials in this file and follow the instructions here to keep the password safe from Github commits." #ifndef __SSID_CONFIG_H__ #define __SSID_CONFIG_H__ -#include "private_ssid_config.h" +#define WIFI_SSID "mywifissid" +#define WIFI_PASS "my secret password" #endif // __SSID_CONFIG_H__ diff --git a/ld/program.ld b/ld/program.ld index e169abd..88fa0f4 100644 --- a/ld/program.ld +++ b/ld/program.ld @@ -21,6 +21,20 @@ MEMORY pvPortMalloc = malloc; vPortFree = free; +/* FreeRTOS lock functions. + + Rely on a patch to libc that produces weak linked versions of the + below symbols. Currently treating locking primitives like universal + global critical section rather than individual locks, but this seems + OK from the use cases in newlib. +*/ +_lock_acquire = vPortEnterCritical; +_lock_acquire_recursive = vPortEnterCritical; +_lock_try_acquire = vPortEnterCritical; +_lock_try_acquire_recursive = vPortEnterCritical; +_lock_release = vPortExitCritical; +_lock_release_recursive = vPortExitCritical; + /* SDK compatibility */ ets_printf = printf; @@ -113,14 +127,13 @@ SECTIONS *libc.a:*bzero.o(.literal .text .literal.* .text.*) *libc.a:*lock.o(.literal .text .literal.* .text.*) - *libc.a:*-printf.o(.literal .text .literal.* .text.*) - *libc.a:*-sprintf.o(.literal .text .literal.* .text.*) - *libc.a:*-fprintf.o(.literal .text .literal.* .text.*) - *libc.a:*-svfprintf.o(.literal .text .literal.* .text.*) - *libc.a:*-vfprintf.o(.literal .text .literal.* .text.*) + *libc.a:*printf.o(.literal .text .literal.* .text.*) *libc.a:*findfp.o(.literal .text .literal.* .text.*) *libc.a:*fputwc.o(.literal .text .literal.* .text.*) + /* xthal_set_intset() called from PendSV in NMI context */ + *libhal.a:*set_intset.o(.literal .text .literal.* .text.*) + *(.stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) *(.fini.literal) *(.fini) @@ -253,13 +266,10 @@ SECTIONS *(.gnu.linkonce.r.*) __XT_EXCEPTION_TABLE__ = ABSOLUTE(.); *(.xt_except_table) - *(.gcc_except_table .gcc_except_table.*) + *(.gcc_except_table) *(.gnu.linkonce.e.*) *(.gnu.version_r) - . = (. + 3) & ~ 3; - __eh_frame = ABSOLUTE(.); - KEEP(*(.eh_frame)) - . = (. + 7) & ~ 3; + *(.eh_frame) . = ALIGN(4); *(.dynamic) *(.gnu.version_d) diff --git a/ld/rom.ld b/ld/rom.ld index 3fcb04d..95c2666 100644 --- a/ld/rom.ld +++ b/ld/rom.ld @@ -57,18 +57,18 @@ PROVIDE ( __umoddi3 = 0x4000d770 ); PROVIDE ( __umodsi3 = 0x4000e268 ); PROVIDE ( __umulsidi3 = 0x4000dcf0 ); -PROVIDE ( bzero = 0x4000de84 ); -PROVIDE ( memcmp = 0x4000dea8 ); -PROVIDE ( memcpy = 0x4000df48 ); -PROVIDE ( memmove = 0x4000e04c ); -PROVIDE ( memset = 0x4000e190 ); +PROVIDE ( bzero = 0x40002ae8 ); +PROVIDE ( memcmp = 0x400018d4 ); +PROVIDE ( memcpy = 0x400018b4 ); +PROVIDE ( memmove = 0x400018c4 ); +PROVIDE ( memset = 0x400018a4 ); -PROVIDE ( strcmp = 0x4000bdc8 ); -PROVIDE ( strcpy = 0x4000bec8 ); -PROVIDE ( strlen = 0x4000bf4c ); -PROVIDE ( strncmp = 0x4000bfa8 ); -PROVIDE ( strncpy = 0x4000c0a0 ); -PROVIDE ( strstr = 0x4000e1e0 ); +PROVIDE ( strcmp = 0x40002aa8 ); +PROVIDE ( strcpy = 0x40002a88 ); +PROVIDE ( strlen = 0x40002ac8 ); +PROVIDE ( strncmp = 0x40002ab8 ); +PROVIDE ( strncpy = 0x40002a98 ); +PROVIDE ( strstr = 0x40002ad8 ); PROVIDE ( ETS_INTR_LOCK = 0x40000f74 ); PROVIDE ( ETS_INTR_UNLOCK = 0x40000f80 ); diff --git a/lib/allsymbols.rename b/lib/allsymbols.rename index cf30bc9..7f56f1f 100644 --- a/lib/allsymbols.rename +++ b/lib/allsymbols.rename @@ -279,17 +279,14 @@ NoiseTimerInterval sdk_NoiseTimerInterval operation_test sdk_operation_test os_delay_us sdk_os_delay_us os_get_cpu_frequency sdk_os_get_cpu_frequency -os_get_random sdk_os_get_random os_get_time sdk_os_get_time os_install_putc1 sdk_os_install_putc1 os_putc sdk_os_putc -os_random sdk_os_random os_timer_arm sdk_os_timer_arm os_timer_disarm sdk_os_timer_disarm os_timer_setfn sdk_os_timer_setfn os_update_cpu_frequency sdk_os_update_cpu_frequency pbkdf2_sha1 sdk_pbkdf2_sha1 -pbuf_alloc sdk_pbuf_alloc pbus_set_rxbbgain sdk_pbus_set_rxbbgain pend_flag_noise_check sdk_pend_flag_noise_check pend_flag_periodic_cal sdk_pend_flag_periodic_cal @@ -420,7 +417,6 @@ ram_set_txbb_atten sdk_ram_set_txbb_atten ram_start_noisefloor sdk_ram_start_noisefloor ram_tx_mac_disable sdk_ram_tx_mac_disable ram_tx_mac_enable sdk_ram_tx_mac_enable -rand hwrand rc4_skip sdk_rc4_skip rcAttach sdk_rcAttach rc_cal sdk_rc_cal diff --git a/lib/libgcc.a b/lib/libgcc.a deleted file mode 100644 index b981970..0000000 Binary files a/lib/libgcc.a and /dev/null differ diff --git a/lib/libgcc.remove b/lib/libgcc.remove deleted file mode 100644 index f573074..0000000 --- a/lib/libgcc.remove +++ /dev/null @@ -1,24 +0,0 @@ -# Object files to be removed from libgcc -# These are provided by the ROM. -_addsubdf3.o -_addsubsf3.o -_divdf3.o -_divdi3.o -_divsi3.o -_extendsfdf2.o -_fixdfsi.o -_fixunssfsi.o -_floatsidf.o -_floatsisf.o -_floatunsidf.o -_floatunsisf.o -_muldf3.o -_muldi3.o -_mulsf3.o -_subdf3.o -_subsf3.o -_truncdfsf2.o -_udivdi3.o -_umoddi3.o -_umodsi3.o -_umulsidi3.o diff --git a/lib/libmain.a b/lib/libmain.a index cd6f83a..60657ec 100644 Binary files a/lib/libmain.a and b/lib/libmain.a differ diff --git a/lib/libmain.remove b/lib/libmain.remove index 158fba7..35145b3 100644 --- a/lib/libmain.remove +++ b/lib/libmain.remove @@ -3,4 +3,3 @@ printf-stdarg.o libc.o xtensa_vectors.o app_main.o -ets_timer.o diff --git a/lib/libnet80211.a b/lib/libnet80211.a index 1146020..4a36331 100644 Binary files a/lib/libnet80211.a and b/lib/libnet80211.a differ diff --git a/lib/libpp.a b/lib/libpp.a index 4a6c942..2747863 100644 Binary files a/lib/libpp.a and b/lib/libpp.a differ diff --git a/lib/libwpa.a b/lib/libwpa.a index 1c99007..a8fa39a 100644 Binary files a/lib/libwpa.a and b/lib/libwpa.a differ diff --git a/lib/libwpa.remove b/lib/libwpa.remove index 2b3ad84..e69de29 100644 --- a/lib/libwpa.remove +++ b/lib/libwpa.remove @@ -1,2 +0,0 @@ -# Object files to be removed from libwpa -os_xtensa.o diff --git a/libc/README.md b/libc/README.md index e3c84cb..0a2941d 100644 --- a/libc/README.md +++ b/libc/README.md @@ -1,9 +1,3 @@ -Newlib from git://sourceware.org/git/newlib-cygwin.git with xtensa & locking patches see https://github.com/ourairquality/newlib and built from commit 984b749fb223daab954060c04720933290584f00 +Newlib 2.2.0 with xtensa & locking patches, built from commit daa6ae40cdc8099f54c3e68a586fc1b906169c5a -The build commands were: - -mkdir build -cd build -../configure --with-newlib --enable-multilib --disable-newlib-io-c99-formats --enable-newlib-supplied-syscalls --enable-target-optspace --program-transform-name="s&^&xtensa-lx106-elf-&" --disable-option-checking --with-target-subdir=xtensa-lx106-elf --target=xtensa-lx106-elf --enable-newlib-nano-malloc --enable-newlib-nano-formatted-io --enable-newlib-reent-small --disable-newlib-mb --enable-newlib-global-stdio-streams --prefix=/tmp/libc -env CROSS_CFLAGS="-DSIGNAL_PROVIDED -DABORT_PROVIDED" make -make install +For details on newlib in esp-open-rtos, see https://github.com/SuperHouse/esp-open-rtos/wiki/libc-configuration diff --git a/libc/libc.remove b/libc/libc.remove deleted file mode 100644 index ddf65ba..0000000 --- a/libc/libc.remove +++ /dev/null @@ -1,13 +0,0 @@ -# Object files to remove from libc.a -# These are provided by the ROM. -lib_a-bzero.o -lib_a-memcmp.o -lib_a-memcpy.o -lib_a-memmove.o -lib_a-memset.o -lib_a-strcmp.o -lib_a-strcpy.o -lib_a-strlen.o -lib_a-strncmp.o -lib_a-strncpy.o -lib_a-strstr.o diff --git a/libc/share/info/configure.info b/libc/share/info/configure.info new file mode 100644 index 0000000..eccae2a --- /dev/null +++ b/libc/share/info/configure.info @@ -0,0 +1,2721 @@ +This is configure.info, produced by makeinfo version 6.0 from +configure.texi. + +INFO-DIR-SECTION GNU admin +START-INFO-DIR-ENTRY +* configure: (configure). The GNU configure and build system +END-INFO-DIR-ENTRY + +This file documents the GNU configure and build system. + + Copyright (C) 1998 Cygnus Solutions. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: configure.info, Node: Top, Next: Introduction, Up: (dir) + +GNU configure and build system +****************************** + +The GNU configure and build system. + +* Menu: + +* Introduction:: Introduction. +* Getting Started:: Getting Started. +* Files:: Files. +* Configuration Names:: Configuration Names. +* Cross Compilation Tools:: Cross Compilation Tools. +* Canadian Cross:: Canadian Cross. +* Cygnus Configure:: Cygnus Configure. +* Multilibs:: Multilibs. +* FAQ:: Frequently Asked Questions. +* Index:: Index. + + +File: configure.info, Node: Introduction, Next: Getting Started, Prev: Top, Up: Top + +1 Introduction +************** + +This document describes the GNU configure and build systems. It +describes how autoconf, automake, libtool, and make fit together. It +also includes a discussion of the older Cygnus configure system. + + This document does not describe in detail how to use each of the +tools; see the respective manuals for that. Instead, it describes which +files the developer must write, which files are machine generated and +how they are generated, and where certain common problems should be +addressed. + + This document draws on several sources, including the autoconf manual +by David MacKenzie (*note autoconf overview: (autoconf)Top.), the +automake manual by David MacKenzie and Tom Tromey (*note automake +overview: (automake)Top.), the libtool manual by Gordon Matzigkeit +(*note libtool overview: (libtool)Top.), and the Cygnus configure manual +by K. Richard Pixley. + +* Menu: + +* Goals:: Goals. +* Tools:: The tools. +* History:: History. +* Building:: Building. + + +File: configure.info, Node: Goals, Next: Tools, Up: Introduction + +1.1 Goals +========= + +The GNU configure and build system has two main goals. + + The first is to simplify the development of portable programs. The +system permits the developer to concentrate on writing the program, +simplifying many details of portability across Unix and even Windows +systems, and permitting the developer to describe how to build the +program using simple rules rather than complex Makefiles. + + The second is to simplify the building of programs distributed as +source code. All programs are built using a simple, standardized, two +step process. The program builder need not install any special tools in +order to build the program. + + +File: configure.info, Node: Tools, Next: History, Prev: Goals, Up: Introduction + +1.2 Tools +========= + +The GNU configure and build system is comprised of several different +tools. Program developers must build and install all of these tools. + + People who just want to build programs from distributed sources +normally do not need any special tools beyond a Unix shell, a make +program, and a C compiler. + +autoconf + provides a general portability framework, based on testing the + features of the host system at build time. +automake + a system for describing how to build a program, permitting the + developer to write a simplified 'Makefile'. +libtool + a standardized approach to building shared libraries. +gettext + provides a framework for translation of text messages into other + languages; not really discussed in this document. +m4 + autoconf requires the GNU version of m4; the standard Unix m4 does + not suffice. +perl + automake requires perl. + + +File: configure.info, Node: History, Next: Building, Prev: Tools, Up: Introduction + +1.3 History +=========== + +This is a very brief and probably inaccurate history. + + As the number of Unix variants increased during the 1980s, it became +harder to write programs which could run on all variants. While it was +often possible to use '#ifdef' to identify particular systems, +developers frequently did not have access to every system, and the +characteristics of some systems changed from version to version. + + By 1992, at least three different approaches had been developed: + * The Metaconfig program, by Larry Wall, Harlan Stenn, and Raphael + Manfredi. + * The Cygnus configure script, by K. Richard Pixley, and the gcc + configure script, by Richard Stallman. These use essentially the + same approach, and the developers communicated regularly. + * The autoconf program, by David MacKenzie. + + The Metaconfig program is still used for Perl and a few other +programs. It is part of the Dist package. I do not know if it is being +developed. + + In 1994, David MacKenzie and others modified autoconf to incorporate +all the features of Cygnus configure. Since then, there has been a slow +but steady conversion of GNU programs from Cygnus configure to autoconf. +gcc has been converted, eliminating the gcc configure script. + + GNU autoconf was regularly maintained until late 1996. As of this +writing in June, 1998, it has no public maintainer. + + Most programs are built using the make program, which requires the +developer to write Makefiles describing how to build the programs. +Since most programs are built in pretty much the same way, this led to a +lot of duplication. + + The X Window system is built using the imake tool, which uses a +database of rules to eliminate the duplication. However, building a +tool which was developed using imake requires that the builder have +imake installed, violating one of the goals of the GNU system. + + The new BSD make provides a standard library of Makefile fragments, +which permits developers to write very simple Makefiles. However, this +requires that the builder install the new BSD make program. + + In 1994, David MacKenzie wrote the first version of automake, which +permitted writing a simple build description which was converted into a +Makefile which could be used by the standard make program. In 1995, Tom +Tromey completely rewrote automake in Perl, and he continues to enhance +it. + + Various free packages built libraries, and by around 1995 several +included support to build shared libraries on various platforms. +However, there was no consistent approach. In early 1996, Gordon +Matzigkeit began working on libtool, which provided a standardized +approach to building shared libraries. This was integrated into +automake from the start. + + The development of automake and libtool was driven by the GNITS +project, a group of GNU maintainers who designed standardized tools to +help meet the GNU coding standards. + + +File: configure.info, Node: Building, Prev: History, Up: Introduction + +1.4 Building +============ + +Most readers of this document should already know how to build a tool by +running 'configure' and 'make'. This section may serve as a quick +introduction or reminder. + + Building a tool is normally as simple as running 'configure' followed +by 'make'. You should normally run 'configure' from an empty directory, +using some path to refer to the 'configure' script in the source +directory. The directory in which you run 'configure' is called the +"object directory". + + In order to use a object directory which is different from the source +directory, you must be using the GNU version of 'make', which has the +required 'VPATH' support. Despite this restriction, using a different +object directory is highly recommended: + * It keeps the files generated during the build from cluttering up + your sources. + * It permits you to remove the built files by simply removing the + entire build directory. + * It permits you to build from the same sources with several sets of + configure options simultaneously. + + If you don't have GNU 'make', you will have to run 'configure' in the +source directory. All GNU packages should support this; in particular, +GNU packages should not assume the presence of GNU 'make'. + + After running 'configure', you can build the tools by running 'make'. + + To install the tools, run 'make install'. Installing the tools will +copy the programs and any required support files to the "installation +directory". The location of the installation directory is controlled by +'configure' options, as described below. + + In the Cygnus tree at present, the info files are built and installed +as a separate step. To build them, run 'make info'. To install them, +run 'make install-info'. The equivalent html files are also built and +installed in a separate step. To build the html files, run 'make html'. +To install the html files run 'make install-html'. + + All 'configure' scripts support a wide variety of options. The most +interesting ones are '--with' and '--enable' options which are generally +specific to particular tools. You can usually use the '--help' option +to get a list of interesting options for a particular configure script. + + The only generic options you are likely to use are the '--prefix' and +'--exec-prefix' options. These options are used to specify the +installation directory. + + The directory named by the '--prefix' option will hold machine +independent files such as info files. + + The directory named by the '--exec-prefix' option, which is normally +a subdirectory of the '--prefix' directory, will hold machine dependent +files such as executables. + + The default for '--prefix' is '/usr/local'. The default for +'--exec-prefix' is the value used for '--prefix'. + + The convention used in Cygnus releases is to use a '--prefix' option +of '/usr/cygnus/RELEASE', where RELEASE is the name of the release, and +to use a '--exec-prefix' option of '/usr/cygnus/RELEASE/H-HOST', where +HOST is the configuration name of the host system (*note Configuration +Names::). + + Do not use either the source or the object directory as the +installation directory. That will just lead to confusion. + + +File: configure.info, Node: Getting Started, Next: Files, Prev: Introduction, Up: Top + +2 Getting Started +***************** + +To start using the GNU configure and build system with your software +package, you must write three files, and you must run some tools to +manually generate additional files. + +* Menu: + +* Write configure.in:: Write configure.in. +* Write Makefile.am:: Write Makefile.am. +* Write acconfig.h:: Write acconfig.h. +* Generate files:: Generate files. +* Getting Started Example:: Example. + + +File: configure.info, Node: Write configure.in, Next: Write Makefile.am, Up: Getting Started + +2.1 Write configure.in +====================== + +You must first write the file 'configure.in'. This is an autoconf input +file, and the autoconf manual describes in detail what this file should +look like. + + You will write tests in your 'configure.in' file to check for +conditions that may change from one system to another, such as the +presence of particular header files or functions. + + For example, not all systems support the 'gettimeofday' function. If +you want to use the 'gettimeofday' function when it is available, and to +use some other function when it is not, you would check for this by +putting 'AC_CHECK_FUNCS(gettimeofday)' in 'configure.in'. + + When the configure script is run at build time, this will arrange to +define the preprocessor macro 'HAVE_GETTIMEOFDAY' to the value 1 if the +'gettimeofday' function is available, and to not define the macro at all +if the function is not available. Your code can then use '#ifdef' to +test whether it is safe to call 'gettimeofday'. + + If you have an existing body of code, the 'autoscan' program may help +identify potential portability problems, and hence configure tests that +you will want to use. *Note (autoconf)Invoking autoscan::. + + Another handy tool for an existing body of code is 'ifnames'. This +will show you all the preprocessor conditionals that the code already +uses. *Note (autoconf)Invoking ifnames::. + + Besides the portability tests which are specific to your particular +package, every 'configure.in' file should contain the following macros. + +'AC_INIT' + This macro takes a single argument, which is the name of a file in + your package. For example, 'AC_INIT(foo.c)'. + +'AC_PREREQ(VERSION)' + This macro is optional. It may be used to indicate the version of + 'autoconf' that you are using. This will prevent users from + running an earlier version of 'autoconf' and perhaps getting an + invalid 'configure' script. For example, 'AC_PREREQ(2.12)'. + +'AM_INIT_AUTOMAKE' + This macro takes two arguments: the name of the package, and a + version number. For example, 'AM_INIT_AUTOMAKE(foo, 1.0)'. (This + macro is not needed if you are not using automake). + +'AM_CONFIG_HEADER' + This macro names the header file which will hold the preprocessor + macro definitions at run time. Normally this should be 'config.h'. + Your sources would then use '#include "config.h"' to include it. + + This macro may optionally name the input file for that header file; + by default, this is 'config.h.in', but that file name works poorly + on DOS filesystems. Therefore, it is often better to name it + explicitly as 'config.in'. + + This is what you should normally put in 'configure.in': + AM_CONFIG_HEADER(config.h:config.in) + + (If you are not using automake, use 'AC_CONFIG_HEADER' rather than + 'AM_CONFIG_HEADER'). + +'AM_MAINTAINER_MODE' + This macro always appears in Cygnus configure scripts. Other + programs may or may not use it. + + If this macro is used, the '--enable-maintainer-mode' option is + required to enable automatic rebuilding of generated files used by + the configure system. This of course requires that developers be + aware of, and use, that option. + + If this macro is not used, then the generated files will always be + rebuilt automatically. This will cause problems if the wrong + versions of autoconf, automake, or others are in the builder's + 'PATH'. + + (If you are not using automake, you do not need to use this macro). + +'AC_EXEEXT' + Either this macro or 'AM_EXEEXT' always appears in Cygnus configure + files. Other programs may or may not use one of them. + + This macro looks for the executable suffix used on the host system. + On Unix systems, this is the empty string. On Windows systems, + this is '.exe'. This macro directs automake to use the executable + suffix as appropriate when creating programs. This macro does not + take any arguments. + + The 'AC_EXEEXT' form is new, and is part of a Cygnus patch to + autoconf to support compiling with Visual C++. Older programs use + 'AM_EXEEXT' instead. + + (Programs which do not use automake use neither 'AC_EXEEXT' nor + 'AM_EXEEXT'). + +'AC_PROG_CC' + If you are writing C code, you will normally want to use this + macro. It locates the C compiler to use. It does not take any + arguments. + + However, if this 'configure.in' file is for a library which is to + be compiled by a cross compiler which may not fully work, then you + will not want to use 'AC_PROG_CC'. Instead, you will want to use a + variant which does not call the macro 'AC_PROG_CC_WORKS'. Examples + can be found in various 'configure.in' files for libraries that are + compiled with cross compilers, such as libiberty or libgloss. This + is essentially a bug in autoconf, and there will probably be a + better workaround at some point. + +'AC_PROG_CXX' + If you are writing C++ code, you will want to use this macro. It + locates the C++ compiler to use. It does not take any arguments. + The same cross compiler comments apply as for 'AC_PROG_CC'. + +'AM_PROG_LIBTOOL' + If you want to build libraries, and you want to permit them to be + shared, or you want to link against libraries which were built + using libtool, then you will need this macro. This macro is + required in order to use libtool. + + By default, this will cause all libraries to be built as shared + libraries. To prevent this-to change the default-use + 'AM_DISABLE_SHARED' before 'AM_PROG_LIBTOOL'. The configure + options '--enable-shared' and '--disable-shared' may be used to + override the default at build time. + +'AC_DEFINE(_GNU_SOURCE)' + GNU packages should normally include this line before any other + feature tests. This defines the macro '_GNU_SOURCE' when + compiling, which directs the libc header files to provide the + standard GNU system interfaces including all GNU extensions. If + this macro is not defined, certain GNU extensions may not be + available. + +'AC_OUTPUT' + This macro takes a list of file names which the configure process + should produce. This is normally a list of one or more 'Makefile' + files in different directories. If your package lives entirely in + a single directory, you would use simply 'AC_OUTPUT(Makefile)'. If + you also have, for example, a 'lib' subdirectory, you would use + 'AC_OUTPUT(Makefile lib/Makefile)'. + + If you want to use locally defined macros in your 'configure.in' +file, then you will need to write a 'acinclude.m4' file which defines +them (if not using automake, this file is called 'aclocal.m4'). +Alternatively, you can put separate macros in an 'm4' subdirectory, and +put 'ACLOCAL_AMFLAGS = -I m4' in your 'Makefile.am' file so that the +'aclocal' program will be able to find them. + + The different macro prefixes indicate which tool defines the macro. +Macros which start with 'AC_' are part of autoconf. Macros which start +with 'AM_' are provided by automake or libtool. + + +File: configure.info, Node: Write Makefile.am, Next: Write acconfig.h, Prev: Write configure.in, Up: Getting Started + +2.2 Write Makefile.am +===================== + +You must write the file 'Makefile.am'. This is an automake input file, +and the automake manual describes in detail what this file should look +like. + + The automake commands in 'Makefile.am' mostly look like variable +assignments in a 'Makefile'. automake recognizes special variable +names, and automatically add make rules to the output as needed. + + There will be one 'Makefile.am' file for each directory in your +package. For each directory with subdirectories, the 'Makefile.am' file +should contain the line + SUBDIRS = DIR DIR ... +where each DIR is the name of a subdirectory. + + For each 'Makefile.am', there should be a corresponding 'Makefile' in +the 'AC_OUTPUT' macro in 'configure.in'. + + Every 'Makefile.am' written at Cygnus should contain the line + AUTOMAKE_OPTIONS = cygnus +This puts automake into Cygnus mode. See the automake manual for +details. + + You may to include the version number of 'automake' that you are +using on the 'AUTOMAKE_OPTIONS' line. For example, + AUTOMAKE_OPTIONS = cygnus 1.3 +This will prevent users from running an earlier version of 'automake' +and perhaps getting an invalid 'Makefile.in'. + + If your package builds a program, then in the directory where that +program is built you will normally want a line like + bin_PROGRAMS = PROGRAM +where PROGRAM is the name of the program. You will then want a line +like + PROGRAM_SOURCES = FILE FILE ... +where each FILE is the name of a source file to link into the program +(e.g., 'foo.c'). + + If your package builds a library, and you do not want the library to +ever be built as a shared library, then in the directory where that +library is built you will normally want a line like + lib_LIBRARIES = libNAME.a +where 'libNAME.a' is the name of the library. You will then want a line +like + libNAME_a_SOURCES = FILE FILE ... +where each FILE is the name of a source file to add to the library. + + If your package builds a library, and you want to permit building the +library as a shared library, then in the directory where that library is +built you will normally want a line like + lib_LTLIBRARIES = libNAME.la + The use of 'LTLIBRARIES', and the '.la' extension, indicate a library +to be built using libtool. As usual, you will then want a line like + libNAME_la_SOURCES = FILE FILE ... + + The strings 'bin' and 'lib' that appear above in 'bin_PROGRAMS' and +'lib_LIBRARIES' are not arbitrary. They refer to particular +directories, which may be set by the '--bindir' and '--libdir' options +to 'configure'. If those options are not used, the default values are +based on the '--prefix' or '--exec-prefix' options to 'configure'. It +is possible to use other names if the program or library should be +installed in some other directory. + + The 'Makefile.am' file may also contain almost anything that may +appear in a normal 'Makefile'. automake also supports many other +special variables, as well as conditionals. + + See the automake manual for more information. + + +File: configure.info, Node: Write acconfig.h, Next: Generate files, Prev: Write Makefile.am, Up: Getting Started + +2.3 Write acconfig.h +==================== + +If you are generating a portability header file, (i.e., you are using +'AM_CONFIG_HEADER' in 'configure.in'), then you will have to write a +'acconfig.h' file. It will have to contain the following lines. + + /* Name of package. */ + #undef PACKAGE + + /* Version of package. */ + #undef VERSION + + This requirement is really a bug in the system, and the requirement +may be eliminated at some later date. + + The 'acconfig.h' file will also similar comment and '#undef' lines +for any unusual macros in the 'configure.in' file, including any macro +which appears in a 'AC_DEFINE' macro. + + In particular, if you are writing a GNU package and therefore include +'AC_DEFINE(_GNU_SOURCE)' in 'configure.in' as suggested above, you will +need lines like this in 'acconfig.h': + /* Enable GNU extensions. */ + #undef _GNU_SOURCE + + Normally the 'autoheader' program will inform you of any such +requirements by printing an error message when it is run. However, if +you do anything particular odd in your 'configure.in' file, you will +have to make sure that the right entries appear in 'acconfig.h', since +otherwise the results of the tests may not be available in the +'config.h' file which your code will use. + + (Thee 'PACKAGE' and 'VERSION' lines are not required if you are not +using automake, and in that case you may not need a 'acconfig.h' file at +all). + + +File: configure.info, Node: Generate files, Next: Getting Started Example, Prev: Write acconfig.h, Up: Getting Started + +2.4 Generate files +================== + +Once you have written 'configure.in', 'Makefile.am', 'acconfig.h', and +possibly 'acinclude.m4', you must use autoconf and automake programs to +produce the first versions of the generated files. This is done by +executing the following sequence of commands. + + aclocal + autoconf + autoheader + automake + + The 'aclocal' and 'automake' commands are part of the automake +package, and the 'autoconf' and 'autoheader' commands are part of the +autoconf package. + + If you are using a 'm4' subdirectory for your macros, you will need +to use the '-I m4' option when you run 'aclocal'. + + If you are not using the Cygnus tree, use the '-a' option when +running 'automake' command in order to copy the required support files +into your source directory. + + If you are using libtool, you must build and install the libtool +package with the same '--prefix' and '--exec-prefix' options as you used +with the autoconf and automake packages. You must do this before +running any of the above commands. If you are not using the Cygnus +tree, you will need to run the 'libtoolize' program to copy the libtool +support files into your directory. + + Once you have managed to run these commands without getting any +errors, you should create a new empty directory, and run the 'configure' +script which will have been created by 'autoconf' with the +'--enable-maintainer-mode' option. This will give you a set of +Makefiles which will include rules to automatically rebuild all the +generated files. + + After doing that, whenever you have changed some of the input files +and want to regenerated the other files, go to your object directory and +run 'make'. Doing this is more reliable than trying to rebuild the +files manually, because there are complex order dependencies and it is +easy to forget something. + + +File: configure.info, Node: Getting Started Example, Prev: Generate files, Up: Getting Started + +2.5 Example +=========== + +Let's consider a trivial example. + + Suppose we want to write a simple version of 'touch'. Our program, +which we will call 'poke', will take a single file name argument, and +use the 'utime' system call to set the modification and access times of +the file to the current time. We want this program to be highly +portable. + + We'll first see what this looks like without using autoconf and +automake, and then see what it looks like with them. + +* Menu: + +* Getting Started Example 1:: First Try. +* Getting Started Example 2:: Second Try. +* Getting Started Example 3:: Third Try. +* Generate Files in Example:: Generate Files. + + +File: configure.info, Node: Getting Started Example 1, Next: Getting Started Example 2, Up: Getting Started Example + +2.5.1 First Try +--------------- + +Here is our first try at 'poke.c'. Note that we've written it without +ANSI/ISO C prototypes, since we want it to be highly portable. + + #include + #include + #include + #include + + int + main (argc, argv) + int argc; + char **argv; + { + if (argc != 2) + { + fprintf (stderr, "Usage: poke file\n"); + exit (1); + } + + if (utime (argv[1], NULL) < 0) + { + perror ("utime"); + exit (1); + } + + exit (0); + } + + We also write a simple 'Makefile'. + + CC = gcc + CFLAGS = -g -O2 + + all: poke + + poke: poke.o + $(CC) -o poke $(CFLAGS) $(LDFLAGS) poke.o + + So far, so good. + + Unfortunately, there are a few problems. + + On older Unix systems derived from BSD 4.3, the 'utime' system call +does not accept a second argument of 'NULL'. On those systems, we need +to pass a pointer to 'struct utimbuf' structure. Unfortunately, even +older systems don't define that structure; on those systems, we need to +pass an array of two 'long' values. + + The header file 'stdlib.h' was invented by ANSI C, and older systems +don't have a copy. We included it above to get a declaration of 'exit'. + + We can find some of these portability problems by running 'autoscan', +which will create a 'configure.scan' file which we can use as a +prototype for our 'configure.in' file. I won't show the output, but it +will notice the potential problems with 'utime' and 'stdlib.h'. + + In our 'Makefile', we don't provide any way to install the program. +This doesn't matter much for such a simple example, but a real program +will need an 'install' target. For that matter, we will also want a +'clean' target. + + +File: configure.info, Node: Getting Started Example 2, Next: Getting Started Example 3, Prev: Getting Started Example 1, Up: Getting Started Example + +2.5.2 Second Try +---------------- + +Here is our second try at this program. + + We modify 'poke.c' to use preprocessor macros to control what +features are available. (I've cheated a bit by using the same macro +names which autoconf will use). + + #include + + #ifdef STDC_HEADERS + #include + #endif + + #include + + #ifdef HAVE_UTIME_H + #include + #endif + + #ifndef HAVE_UTIME_NULL + + #include + + #ifndef HAVE_STRUCT_UTIMBUF + + struct utimbuf + { + long actime; + long modtime; + }; + + #endif + + static int + utime_now (file) + char *file; + { + struct utimbuf now; + + now.actime = now.modtime = time (NULL); + return utime (file, &now); + } + + #define utime(f, p) utime_now (f) + + #endif /* HAVE_UTIME_NULL */ + + int + main (argc, argv) + int argc; + char **argv; + { + if (argc != 2) + { + fprintf (stderr, "Usage: poke file\n"); + exit (1); + } + + if (utime (argv[1], NULL) < 0) + { + perror ("utime"); + exit (1); + } + + exit (0); + } + + Here is the associated 'Makefile'. We've added support for the +preprocessor flags we use. We've also added 'install' and 'clean' +targets. + + # Set this to your installation directory. + bindir = /usr/local/bin + + # Uncomment this if you have the standard ANSI/ISO C header files. + # STDC_HDRS = -DSTDC_HEADERS + + # Uncomment this if you have utime.h. + # UTIME_H = -DHAVE_UTIME_H + + # Uncomment this if utime (FILE, NULL) works on your system. + # UTIME_NULL = -DHAVE_UTIME_NULL + + # Uncomment this if struct utimbuf is defined in utime.h. + # UTIMBUF = -DHAVE_STRUCT_UTIMBUF + + CC = gcc + CFLAGS = -g -O2 + + ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS) + + all: poke + + poke: poke.o + $(CC) -o poke $(ALL_CFLAGS) $(LDFLAGS) poke.o + + .c.o: + $(CC) -c $(ALL_CFLAGS) poke.c + + install: poke + cp poke $(bindir)/poke + + clean: + rm poke poke.o + + Some problems with this approach should be clear. + + Users who want to compile poke will have to know how 'utime' works on +their systems, so that they can uncomment the 'Makefile' correctly. + + The installation is done using 'cp', but many systems have an +'install' program which may be used, and which supports optional +features such as stripping debugging information out of the installed +binary. + + The use of 'Makefile' variables like 'CC', 'CFLAGS' and 'LDFLAGS' +follows the requirements of the GNU standards. This is convenient for +all packages, since it reduces surprises for users. However, it is easy +to get the details wrong, and wind up with a slightly nonstandard +distribution. + + +File: configure.info, Node: Getting Started Example 3, Next: Generate Files in Example, Prev: Getting Started Example 2, Up: Getting Started Example + +2.5.3 Third Try +--------------- + +For our third try at this program, we will write a 'configure.in' script +to discover the configuration features on the host system, rather than +requiring the user to edit the 'Makefile'. We will also write a +'Makefile.am' rather than a 'Makefile'. + + The only change to 'poke.c' is to add a line at the start of the +file: + #include "config.h" + + The new 'configure.in' file is as follows. + + AC_INIT(poke.c) + AM_INIT_AUTOMAKE(poke, 1.0) + AM_CONFIG_HEADER(config.h:config.in) + AC_PROG_CC + AC_HEADER_STDC + AC_CHECK_HEADERS(utime.h) + AC_EGREP_HEADER(utimbuf, utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF)) + AC_FUNC_UTIME_NULL + AC_OUTPUT(Makefile) + + The first four macros in this file, and the last one, were described +above; see *note Write configure.in::. If we omit these macros, then +when we run 'automake' we will get a reminder that we need them. + + The other macros are standard autoconf macros. + +'AC_HEADER_STDC' + Check for standard C headers. +'AC_CHECK_HEADERS' + Check whether a particular header file exists. +'AC_EGREP_HEADER' + Check for a particular string in a particular header file, in this + case checking for 'utimbuf' in 'utime.h'. +'AC_FUNC_UTIME_NULL' + Check whether 'utime' accepts a NULL second argument to set the + file change time to the current time. + + See the autoconf manual for a more complete description. + + The new 'Makefile.am' file is as follows. Note how simple this is +compared to our earlier 'Makefile'. + + bin_PROGRAMS = poke + + poke_SOURCES = poke.c + + This means that we should build a single program name 'poke'. It +should be installed in the binary directory, which we called 'bindir' +earlier. The program 'poke' is built from the source file 'poke.c'. + + We must also write a 'acconfig.h' file. Besides 'PACKAGE' and +'VERSION', which must be mentioned for all packages which use automake, +we must include 'HAVE_STRUCT_UTIMBUF', since we mentioned it in an +'AC_DEFINE'. + + /* Name of package. */ + #undef PACKAGE + + /* Version of package. */ + #undef VERSION + + /* Whether utime.h defines struct utimbuf. */ + #undef HAVE_STRUCT_UTIMBUF + + +File: configure.info, Node: Generate Files in Example, Prev: Getting Started Example 3, Up: Getting Started Example + +2.5.4 Generate Files +-------------------- + +We must now generate the other files, using the following commands. + + aclocal + autoconf + autoheader + automake + + When we run 'autoheader', it will remind us of any macros we forgot +to add to 'acconfig.h'. + + When we run 'automake', it will want to add some files to our +distribution. It will add them automatically if we use the +'--add-missing' option. + + By default, 'automake' will run in GNU mode, which means that it will +want us to create certain additional files; as of this writing, it will +want 'NEWS', 'README', 'AUTHORS', and 'ChangeLog', all of which are +files which should appear in a standard GNU distribution. We can either +add those files, or run 'automake' with the '--foreign' option. + + Running these tools will generate the following files, all of which +are described in the next chapter. + + * 'aclocal.m4' + * 'configure' + * 'config.in' + * 'Makefile.in' + * 'stamp-h.in' + + +File: configure.info, Node: Files, Next: Configuration Names, Prev: Getting Started, Up: Top + +3 Files +******* + +As was seen in the previous chapter, the GNU configure and build system +uses a number of different files. The developer must write a few files. +The others are generated by various tools. + + The system is rather flexible, and can be used in many different +ways. In describing the files that it uses, I will describe the common +case, and mention some other cases that may arise. + +* Menu: + +* Developer Files:: Developer Files. +* Build Files:: Build Files. +* Support Files:: Support Files. + + +File: configure.info, Node: Developer Files, Next: Build Files, Up: Files + +3.1 Developer Files +=================== + +This section describes the files written or generated by the developer +of a package. + +* Menu: + +* Developer Files Picture:: Developer Files Picture. +* Written Developer Files:: Written Developer Files. +* Generated Developer Files:: Generated Developer Files. + + +File: configure.info, Node: Developer Files Picture, Next: Written Developer Files, Up: Developer Files + +3.1.1 Developer Files Picture +----------------------------- + +Here is a picture of the files which are written by the developer, the +generated files which would be included with a complete source +distribution, and the tools which create those files. The file names +are plain text and the tool names are enclosed by '*' characters (e.g., +'autoheader' is the name of a tool, not the name of a file). + + acconfig.h configure.in Makefile.am + | | | + | --------------+---------------------- | + | | | | | + v v | acinclude.m4 | | + *autoheader* | | v v + | | v --->*automake* + v |--->*aclocal* | | + config.in | | | v + | v | Makefile.in + | aclocal.m4--- + | | + v v + *autoconf* + | + v + configure + +File: configure.info, Node: Written Developer Files, Next: Generated Developer Files, Prev: Developer Files Picture, Up: Developer Files + +3.1.2 Written Developer Files +----------------------------- + +The following files would be written by the developer. + +'configure.in' + This is the configuration script. This script contains invocations + of autoconf macros. It may also contain ordinary shell script + code. This file will contain feature tests for portability issues. + The last thing in the file will normally be an 'AC_OUTPUT' macro + listing which files to create when the builder runs the configure + script. This file is always required when using the GNU configure + system. *Note Write configure.in::. + +'Makefile.am' + This is the automake input file. It describes how the code should + be built. It consists of definitions of automake variables. It + may also contain ordinary Makefile targets. This file is only + needed when using automake (newer tools normally use automake, but + there are still older tools which have not been converted, in which + the developer writes 'Makefile.in' directly). *Note Write + Makefile.am::. + +'acconfig.h' + When the configure script creates a portability header file, by + using 'AM_CONFIG_HEADER' (or, if not using automake, + 'AC_CONFIG_HEADER'), this file is used to describe macros which are + not recognized by the 'autoheader' command. This is normally a + fairly uninteresting file, consisting of a collection of '#undef' + lines with comments. Normally any call to 'AC_DEFINE' in + 'configure.in' will require a line in this file. *Note Write + acconfig.h::. + +'acinclude.m4' + This file is not always required. It defines local autoconf + macros. These macros may then be used in 'configure.in'. If you + don't need any local autoconf macros, then you don't need this file + at all. In fact, in general, you never need local autoconf macros, + since you can put everything in 'configure.in', but sometimes a + local macro is convenient. + + Newer tools may omit 'acinclude.m4', and instead use a + subdirectory, typically named 'm4', and define 'ACLOCAL_AMFLAGS = + -I m4' in 'Makefile.am' to force 'aclocal' to look there for macro + definitions. The macro definitions are then placed in separate + files in that directory. + + The 'acinclude.m4' file is only used when using automake; in older + tools, the developer writes 'aclocal.m4' directly, if it is needed. + + +File: configure.info, Node: Generated Developer Files, Prev: Written Developer Files, Up: Developer Files + +3.1.3 Generated Developer Files +------------------------------- + +The following files would be generated by the developer. + + When using automake, these files are normally not generated manually +after the first time. Instead, the generated 'Makefile' contains rules +to automatically rebuild the files as required. When +'AM_MAINTAINER_MODE' is used in 'configure.in' (the normal case in +Cygnus code), the automatic rebuilding rules will only be defined if you +configure using the '--enable-maintainer-mode' option. + + When using automatic rebuilding, it is important to ensure that all +the various tools have been built and installed on your 'PATH'. Using +automatic rebuilding is highly recommended, so much so that I'm not +going to explain what you have to do if you don't use it. + +'configure' + This is the configure script which will be run when building the + package. This is generated by 'autoconf' from 'configure.in' and + 'aclocal.m4'. This is a shell script. + +'Makefile.in' + This is the file which the configure script will turn into the + 'Makefile' at build time. This file is generated by 'automake' + from 'Makefile.am'. If you aren't using automake, you must write + this file yourself. This file is pretty much a normal 'Makefile', + with some configure substitutions for certain variables. + +'aclocal.m4' + This file is created by the 'aclocal' program, based on the + contents of 'configure.in' and 'acinclude.m4' (or, as noted in the + description of 'acinclude.m4' above, on the contents of an 'm4' + subdirectory). This file contains definitions of autoconf macros + which 'autoconf' will use when generating the file 'configure'. + These autoconf macros may be defined by you in 'acinclude.m4' or + they may be defined by other packages such as automake, libtool or + gettext. If you aren't using automake, you will normally write + this file yourself; in that case, if 'configure.in' uses only + standard autoconf macros, this file will not be needed at all. + +'config.in' + This file is created by 'autoheader' based on 'acconfig.h' and + 'configure.in'. At build time, the configure script will define + some of the macros in it to create 'config.h', which may then be + included by your program. This permits your C code to use + preprocessor conditionals to change its behaviour based on the + characteristics of the host system. This file may also be called + 'config.h.in'. + +'stamp.h-in' + This rather uninteresting file, which I omitted from the picture, + is generated by 'automake'. It always contains the string + 'timestamp'. It is used as a timestamp file indicating whether + 'config.in' is up to date. Using a timestamp file means that + 'config.in' can be marked as up to date without actually changing + its modification time. This is useful since 'config.in' depends + upon 'configure.in', but it is easy to change 'configure.in' in a + way which does not affect 'config.in'. + + +File: configure.info, Node: Build Files, Next: Support Files, Prev: Developer Files, Up: Files + +3.2 Build Files +=============== + +This section describes the files which are created at configure and +build time. These are the files which somebody who builds the package +will see. + + Of course, the developer will also build the package. The +distinction between developer files and build files is not that the +developer does not see the build files, but that somebody who only +builds the package does not have to worry about the developer files. + +* Menu: + +* Build Files Picture:: Build Files Picture. +* Build Files Description:: Build Files Description. + + +File: configure.info, Node: Build Files Picture, Next: Build Files Description, Up: Build Files + +3.2.1 Build Files Picture +------------------------- + +Here is a picture of the files which will be created at build time. +'config.status' is both a created file and a shell script which is run +to create other files, and the picture attempts to show that. + + config.in *configure* Makefile.in + | | | + | v | + | config.status | + | | | + *config.status*<======+==========>*config.status* + | | + v v + config.h Makefile + +File: configure.info, Node: Build Files Description, Prev: Build Files Picture, Up: Build Files + +3.2.2 Build Files Description +----------------------------- + +This is a description of the files which are created at build time. + +'config.status' + The first step in building a package is to run the 'configure' + script. The 'configure' script will create the file + 'config.status', which is itself a shell script. When you first + run 'configure', it will automatically run 'config.status'. An + 'Makefile' derived from an automake generated 'Makefile.in' will + contain rules to automatically run 'config.status' again when + necessary to recreate certain files if their inputs change. + +'Makefile' + This is the file which make will read to build the program. The + 'config.status' script will transform 'Makefile.in' into + 'Makefile'. + +'config.h' + This file defines C preprocessor macros which C code can use to + adjust its behaviour on different systems. The 'config.status' + script will transform 'config.in' into 'config.h'. + +'config.cache' + This file did not fit neatly into the picture, and I omitted it. + It is used by the 'configure' script to cache results between runs. + This can be an important speedup. If you modify 'configure.in' in + such a way that the results of old tests should change (perhaps you + have added a new library to 'LDFLAGS'), then you will have to + remove 'config.cache' to force the tests to be rerun. + + The autoconf manual explains how to set up a site specific cache + file. This can speed up running 'configure' scripts on your + system. + +'stamp.h' + This file, which I omitted from the picture, is similar to + 'stamp-h.in'. It is used as a timestamp file indicating whether + 'config.h' is up to date. This is useful since 'config.h' depends + upon 'config.status', but it is easy for 'config.status' to change + in a way which does not affect 'config.h'. + + +File: configure.info, Node: Support Files, Prev: Build Files, Up: Files + +3.3 Support Files +================= + +The GNU configure and build system requires several support files to be +included with your distribution. You do not normally need to concern +yourself with these. If you are using the Cygnus tree, most are already +present. Otherwise, they will be installed with your source by +'automake' (with the '--add-missing' option) and 'libtoolize'. + + You don't have to put the support files in the top level directory. +You can put them in a subdirectory, and use the 'AC_CONFIG_AUX_DIR' +macro in 'configure.in' to tell 'automake' and the 'configure' script +where they are. + + In this section, I describe the support files, so that you can know +what they are and why they are there. + +'ABOUT-NLS' + Added by automake if you are using gettext. This is a + documentation file about the gettext project. +'ansi2knr.c' + Used by an automake generated 'Makefile' if you put 'ansi2knr' in + 'AUTOMAKE_OPTIONS' in 'Makefile.am'. This permits compiling ANSI C + code with a K&R C compiler. +'ansi2knr.1' + The man page which goes with 'ansi2knr.c'. +'config.guess' + A shell script which determines the configuration name for the + system on which it is run. +'config.sub' + A shell script which canonicalizes a configuration name entered by + a user. +'elisp-comp' + Used to compile Emacs LISP files. +'install-sh' + A shell script which installs a program. This is used if the + configure script can not find an install binary. +'ltconfig' + Used by libtool. This is a shell script which configures libtool + for the particular system on which it is used. +'ltmain.sh' + Used by libtool. This is the actual libtool script which is used, + after it is configured by 'ltconfig' to build a library. +'mdate-sh' + A shell script used by an automake generated 'Makefile' to pretty + print the modification time of a file. This is used to maintain + version numbers for texinfo files. +'missing' + A shell script used if some tool is missing entirely. This is used + by an automake generated 'Makefile' to avoid certain sorts of + timestamp problems. +'mkinstalldirs' + A shell script which creates a directory, including all parent + directories. This is used by an automake generated 'Makefile' + during installation. +'texinfo.tex' + Required if you have any texinfo files. This is used when + converting Texinfo files into DVI using 'texi2dvi' and TeX. +'ylwrap' + A shell script used by an automake generated 'Makefile' to run + programs like 'bison', 'yacc', 'flex', and 'lex'. These programs + default to producing output files with a fixed name, and the + 'ylwrap' script runs them in a subdirectory to avoid file name + conflicts when using a parallel make program. + + +File: configure.info, Node: Configuration Names, Next: Cross Compilation Tools, Prev: Files, Up: Top + +4 Configuration Names +********************* + +The GNU configure system names all systems using a "configuration name". +All such names used to be triplets (they may now contain four parts in +certain cases), and the term "configuration triplet" is still seen. + +* Menu: + +* Configuration Name Definition:: Configuration Name Definition. +* Using Configuration Names:: Using Configuration Names. + + +File: configure.info, Node: Configuration Name Definition, Next: Using Configuration Names, Up: Configuration Names + +4.1 Configuration Name Definition +================================= + +This is a string of the form CPU-MANUFACTURER-OPERATING_SYSTEM. In some +cases, this is extended to a four part form: +CPU-MANUFACTURER-KERNEL-OPERATING_SYSTEM. + + When using a configuration name in a configure option, it is normally +not necessary to specify an entire name. In particular, the +MANUFACTURER field is often omitted, leading to strings such as +'i386-linux' or 'sparc-sunos'. The shell script 'config.sub' will +translate these shortened strings into the canonical form. autoconf +will arrange for 'config.sub' to be run automatically when it is needed. + + The fields of a configuration name are as follows: + +CPU + The type of processor. This is typically something like 'i386' or + 'sparc'. More specific variants are used as well, such as 'mipsel' + to indicate a little endian MIPS processor. +MANUFACTURER + A somewhat freeform field which indicates the manufacturer of the + system. This is often simply 'unknown'. Other common strings are + 'pc' for an IBM PC compatible system, or the name of a workstation + vendor, such as 'sun'. +OPERATING_SYSTEM + The name of the operating system which is run on the system. This + will be something like 'solaris2.5' or 'irix6.3'. There is no + particular restriction on the version number, and strings like + 'aix4.1.4.0' are seen. For an embedded system, which has no + operating system, this field normally indicates the type of object + file format, such as 'elf' or 'coff'. +KERNEL + This is used mainly for GNU/Linux. A typical GNU/Linux + configuration name is 'i586-pc-linux-gnulibc1'. In this case the + kernel, 'linux', is separated from the operating system, + 'gnulibc1'. + + The shell script 'config.guess' will normally print the correct +configuration name for the system on which it is run. It does by +running 'uname' and by examining other characteristics of the system. + + Because 'config.guess' can normally determine the configuration name +for a machine, it is normally only necessary to specify a configuration +name when building a cross-compiler or when building using a +cross-compiler. + + +File: configure.info, Node: Using Configuration Names, Prev: Configuration Name Definition, Up: Configuration Names + +4.2 Using Configuration Names +============================= + +A configure script will sometimes have to make a decision based on a +configuration name. You will need to do this if you have to compile +code differently based on something which can not be tested using a +standard autoconf feature test. + + It is normally better to test for particular features, rather than to +test for a particular system. This is because as Unix evolves, +different systems copy features from one another. Even if you need to +determine whether the feature is supported based on a configuration +name, you should define a macro which describes the feature, rather than +defining a macro which describes the particular system you are on. + + Testing for a particular system is normally done using a case +statement in 'configure.in'. The case statement might look something +like the following, assuming that 'host' is a shell variable holding a +canonical configuration name (which will be the case if 'configure.in' +uses the 'AC_CANONICAL_HOST' or 'AC_CANONICAL_SYSTEM' macro). + + case "${host}" in + i[3-7]86-*-linux-gnu*) do something ;; + sparc*-sun-solaris2.[56789]*) do something ;; + sparc*-sun-solaris*) do something ;; + mips*-*-elf*) do something ;; + esac + + It is particularly important to use '*' after the operating system +field, in order to match the version number which will be generated by +'config.guess'. + + In most cases you must be careful to match a range of processor +types. For most processor families, a trailing '*' suffices, as in +'mips*' above. For the i386 family, something along the lines of +'i[3-7]86' suffices at present. For the m68k family, you will need +something like 'm68*'. Of course, if you do not need to match on the +processor, it is simpler to just replace the entire field by a '*', as +in '*-*-irix*'. + + +File: configure.info, Node: Cross Compilation Tools, Next: Canadian Cross, Prev: Configuration Names, Up: Top + +5 Cross Compilation Tools +************************* + +The GNU configure and build system can be used to build "cross +compilation" tools. A cross compilation tool is a tool which runs on +one system and produces code which runs on another system. + +* Menu: + +* Cross Compilation Concepts:: Cross Compilation Concepts. +* Host and Target:: Host and Target. +* Using the Host Type:: Using the Host Type. +* Specifying the Target:: Specifying the Target. +* Using the Target Type:: Using the Target Type. +* Cross Tools in the Cygnus Tree:: Cross Tools in the Cygnus Tree + + +File: configure.info, Node: Cross Compilation Concepts, Next: Host and Target, Up: Cross Compilation Tools + +5.1 Cross Compilation Concepts +============================== + +A compiler which produces programs which run on a different system is a +cross compilation compiler, or simply a "cross compiler". Similarly, we +speak of cross assemblers, cross linkers, etc. + + In the normal case, a compiler produces code which runs on the same +system as the one on which the compiler runs. When it is necessary to +distinguish this case from the cross compilation case, such a compiler +is called a "native compiler". Similarly, we speak of native +assemblers, etc. + + Although the debugger is not strictly speaking a compilation tool, it +is nevertheless meaningful to speak of a cross debugger: a debugger +which is used to debug code which runs on another system. Everything +that is said below about configuring cross compilation tools applies to +the debugger as well. + + +File: configure.info, Node: Host and Target, Next: Using the Host Type, Prev: Cross Compilation Concepts, Up: Cross Compilation Tools + +5.2 Host and Target +=================== + +When building cross compilation tools, there are two different systems +involved: the system on which the tools will run, and the system for +which the tools generate code. + + The system on which the tools will run is called the "host" system. + + The system for which the tools generate code is called the "target" +system. + + For example, suppose you have a compiler which runs on a GNU/Linux +system and generates ELF programs for a MIPS embedded system. In this +case the GNU/Linux system is the host, and the MIPS ELF system is the +target. Such a compiler could be called a GNU/Linux cross MIPS ELF +compiler, or, equivalently, a 'i386-linux-gnu' cross 'mips-elf' +compiler. + + Naturally, most programs are not cross compilation tools. For those +programs, it does not make sense to speak of a target. It only makes +sense to speak of a target for tools like 'gcc' or the 'binutils' which +actually produce running code. For example, it does not make sense to +speak of the target of a tool like 'bison' or 'make'. + + Most cross compilation tools can also serve as native tools. For a +native compilation tool, it is still meaningful to speak of a target. +For a native tool, the target is the same as the host. For example, for +a GNU/Linux native compiler, the host is GNU/Linux, and the target is +also GNU/Linux. + + +File: configure.info, Node: Using the Host Type, Next: Specifying the Target, Prev: Host and Target, Up: Cross Compilation Tools + +5.3 Using the Host Type +======================= + +In almost all cases the host system is the system on which you run the +'configure' script, and on which you build the tools (for the case when +they differ, *note Canadian Cross::). + + If your configure script needs to know the configuration name of the +host system, and the package is not a cross compilation tool and +therefore does not have a target, put 'AC_CANONICAL_HOST' in +'configure.in'. This macro will arrange to define a few shell variables +when the 'configure' script is run. + +'host' + The canonical configuration name of the host. This will normally + be determined by running the 'config.guess' shell script, although + the user is permitted to override this by using an explicit + '--host' option. +'host_alias' + In the unusual case that the user used an explicit '--host' option, + this will be the argument to '--host'. In the normal case, this + will be the same as the 'host' variable. +'host_cpu' +'host_vendor' +'host_os' + The first three parts of the canonical configuration name. + + The shell variables may be used by putting shell code in +'configure.in'. For an example, see *note Using Configuration Names::. + + +File: configure.info, Node: Specifying the Target, Next: Using the Target Type, Prev: Using the Host Type, Up: Cross Compilation Tools + +5.4 Specifying the Target +========================= + +By default, the 'configure' script will assume that the target is the +same as the host. This is the more common case; for example, it leads +to a native compiler rather than a cross compiler. + + If you want to build a cross compilation tool, you must specify the +target explicitly by using the '--target' option when you run +'configure'. The argument to '--target' is the configuration name of +the system for which you wish to generate code. *Note Configuration +Names::. + + For example, to build tools which generate code for a MIPS ELF +embedded system, you would use '--target mips-elf'. + + +File: configure.info, Node: Using the Target Type, Next: Cross Tools in the Cygnus Tree, Prev: Specifying the Target, Up: Cross Compilation Tools + +5.5 Using the Target Type +========================= + +When writing 'configure.in' for a cross compilation tool, you will need +to use information about the target. To do this, put +'AC_CANONICAL_SYSTEM' in 'configure.in'. + + 'AC_CANONICAL_SYSTEM' will look for a '--target' option and +canonicalize it using the 'config.sub' shell script. It will also run +'AC_CANONICAL_HOST' (*note Using the Host Type::). + + The target type will be recorded in the following shell variables. +Note that the host versions of these variables will also be defined by +'AC_CANONICAL_HOST'. + +'target' + The canonical configuration name of the target. +'target_alias' + The argument to the '--target' option. If the user did not specify + a '--target' option, this will be the same as 'host_alias'. +'target_cpu' +'target_vendor' +'target_os' + The first three parts of the canonical target configuration name. + + Note that if 'host' and 'target' are the same string, you can assume +a native configuration. If they are different, you can assume a cross +configuration. + + It is arguably possible for 'host' and 'target' to represent the same +system, but for the strings to not be identical. For example, if +'config.guess' returns 'sparc-sun-sunos4.1.4', and somebody configures +with '--target sparc-sun-sunos4.1', then the slight differences between +the two versions of SunOS may be unimportant for your tool. However, in +the general case it can be quite difficult to determine whether the +differences between two configuration names are significant or not. +Therefore, by convention, if the user specifies a '--target' option +without specifying a '--host' option, it is assumed that the user wants +to configure a cross compilation tool. + + The variables 'target' and 'target_alias' should be handled +differently. + + In general, whenever the user may actually see a string, +'target_alias' should be used. This includes anything which may appear +in the file system, such as a directory name or part of a tool name. It +also includes any tool output, unless it is clearly labelled as the +canonical target configuration name. This permits the user to use the +'--target' option to specify how the tool will appear to the outside +world. + + On the other hand, when checking for characteristics of the target +system, 'target' should be used. This is because a wide variety of +'--target' options may map into the same canonical configuration name. +You should not attempt to duplicate the canonicalization done by +'config.sub' in your own code. + + By convention, cross tools are installed with a prefix of the +argument used with the '--target' option, also known as 'target_alias' +(*note Using the Target Type::). If the user does not use the +'--target' option, and thus is building a native tool, no prefix is +used. + + For example, if gcc is configured with '--target mips-elf', then the +installed binary will be named 'mips-elf-gcc'. If gcc is configured +without a '--target' option, then the installed binary will be named +'gcc'. + + The autoconf macro 'AC_ARG_PROGRAM' will handle this for you. If you +are using automake, no more need be done; the programs will +automatically be installed with the correct prefixes. Otherwise, see +the autoconf documentation for 'AC_ARG_PROGRAM'. + + +File: configure.info, Node: Cross Tools in the Cygnus Tree, Prev: Using the Target Type, Up: Cross Compilation Tools + +5.6 Cross Tools in the Cygnus Tree +================================== + +The Cygnus tree is used for various packages including gdb, the GNU +binutils, and egcs. It is also, of course, used for Cygnus releases. + + In the Cygnus tree, the top level 'configure' script uses the old +Cygnus configure system, not autoconf. The top level 'Makefile.in' is +written to build packages based on what is in the source tree, and +supports building a large number of tools in a single 'configure'/'make' +step. + + The Cygnus tree may be configured with a '--target' option. The +'--target' option applies recursively to every subdirectory, and permits +building an entire set of cross tools at once. + +* Menu: + +* Host and Target Libraries:: Host and Target Libraries. +* Target Library Configure Scripts:: Target Library Configure Scripts. +* Make Targets in Cygnus Tree:: Make Targets in Cygnus Tree. +* Target libiberty:: Target libiberty + + +File: configure.info, Node: Host and Target Libraries, Next: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree + +5.6.1 Host and Target Libraries +------------------------------- + +The Cygnus tree distinguishes host libraries from target libraries. + + Host libraries are built with the compiler used to build the programs +which run on the host, which is called the host compiler. This includes +libraries such as 'bfd' and 'tcl'. These libraries are built with the +host compiler, and are linked into programs like the binutils or gcc +which run on the host. + + Target libraries are built with the target compiler. If gcc is +present in the source tree, then the target compiler is the gcc that is +built using the host compiler. Target libraries are libraries such as +'newlib' and 'libstdc++'. These libraries are not linked into the host +programs, but are instead made available for use with programs built +with the target compiler. + + For the rest of this section, assume that gcc is present in the +source tree, so that it will be used to build the target libraries. + + There is a complication here. The configure process needs to know +which compiler you are going to use to build a tool; otherwise, the +feature tests will not work correctly. The Cygnus tree handles this by +not configuring the target libraries until the target compiler is built. +In order to permit everything to build using a single +'configure'/'make', the configuration of the target libraries is +actually triggered during the make step. + + When the target libraries are configured, the '--target' option is +not used. Instead, the '--host' option is used with the argument of the +'--target' option for the overall configuration. If no '--target' +option was used for the overall configuration, the '--host' option will +be passed with the output of the 'config.guess' shell script. Any +'--build' option is passed down unchanged. + + This translation of configuration options is done because since the +target libraries are compiled with the target compiler, they are being +built in order to run on the target of the overall configuration. By +the definition of host, this means that their host system is the same as +the target system of the overall configuration. + + The same process is used for both a native configuration and a cross +configuration. Even when using a native configuration, the target +libraries will be configured and built using the newly built compiler. +This is particularly important for the C++ libraries, since there is no +reason to assume that the C++ compiler used to build the host tools (if +there even is one) uses the same ABI as the g++ compiler which will be +used to build the target libraries. + + There is one difference between a native configuration and a cross +configuration. In a native configuration, the target libraries are +normally configured and built as siblings of the host tools. In a cross +configuration, the target libraries are normally built in a subdirectory +whose name is the argument to '--target'. This is mainly for historical +reasons. + + To summarize, running 'configure' in the Cygnus tree configures all +the host libraries and tools, but does not configure any of the target +libraries. Running 'make' then does the following steps: + + * Build the host libraries. + * Build the host programs, including gcc. Note that we call gcc both + a host program (since it runs on the host) and a target compiler + (since it generates code for the target). + * Using the newly built target compiler, configure the target + libraries. + * Build the target libraries. + + The steps need not be done in precisely this order, since they are +actually controlled by 'Makefile' targets. + + +File: configure.info, Node: Target Library Configure Scripts, Next: Make Targets in Cygnus Tree, Prev: Host and Target Libraries, Up: Cross Tools in the Cygnus Tree + +5.6.2 Target Library Configure Scripts +-------------------------------------- + +There are a few things you must know in order to write a configure +script for a target library. This is just a quick sketch, and beginners +shouldn't worry if they don't follow everything here. + + The target libraries are configured and built using a newly built +target compiler. There may not be any startup files or libraries for +this target compiler. In fact, those files will probably be built as +part of some target library, which naturally means that they will not +exist when your target library is configured. + + This means that the configure script for a target library may not use +any test which requires doing a link. This unfortunately includes many +useful autoconf macros, such as 'AC_CHECK_FUNCS'. autoconf macros which +do a compile but not a link, such as 'AC_CHECK_HEADERS', may be used. + + This is a severe restriction, but normally not a fatal one, as target +libraries can often assume the presence of other target libraries, and +thus know which functions will be available. + + As of this writing, the autoconf macro 'AC_PROG_CC' does a link to +make sure that the compiler works. This may fail in a target library, +so target libraries must use a different set of macros to locate the +compiler. See the 'configure.in' file in a directory like 'libiberty' +or 'libgloss' for an example. + + As noted in the previous section, target libraries are sometimes +built in directories which are siblings to the host tools, and are +sometimes built in a subdirectory. The '--with-target-subdir' configure +option will be passed when the library is configured. Its value will be +an empty string if the target library is a sibling. Its value will be +the name of the subdirectory if the target library is in a subdirectory. + + If the overall build is not a native build (i.e., the overall +configure used the '--target' option), then the library will be +configured with the '--with-cross-host' option. The value of this +option will be the host system of the overall build. Recall that the +host system of the library will be the target of the overall build. If +the overall build is a native build, the '--with-cross-host' option will +not be used. + + A library which can be built both standalone and as a target library +may want to install itself into different directories depending upon the +case. When built standalone, or when built native, the library should +be installed in '$(libdir)'. When built as a target library which is +not native, the library should be installed in '$(tooldir)/lib'. The +'--with-cross-host' option may be used to distinguish these cases. + + This same test of '--with-cross-host' may be used to see whether it +is OK to use link tests in the configure script. If the +'--with-cross-host' option is not used, then the library is being built +either standalone or native, and a link should work. + + +File: configure.info, Node: Make Targets in Cygnus Tree, Next: Target libiberty, Prev: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree + +5.6.3 Make Targets in Cygnus Tree +--------------------------------- + +The top level 'Makefile' in the Cygnus tree defines targets for every +known subdirectory. + + For every subdirectory DIR which holds a host library or program, the +'Makefile' target 'all-DIR' will build that library or program. + + There are dependencies among host tools. For example, building gcc +requires first building gas, because the gcc build process invokes the +target assembler. These dependencies are reflected in the top level +'Makefile'. + + For every subdirectory DIR which holds a target library, the +'Makefile' target 'configure-target-DIR' will configure that library. +The 'Makefile' target 'all-target-DIR' will build that library. + + Every 'configure-target-DIR' target depends upon 'all-gcc', since +gcc, the target compiler, is required to configure the tool. Every +'all-target-DIR' target depends upon the corresponding +'configure-target-DIR' target. + + There are several other targets which may be of interest for each +directory: 'install-DIR', 'clean-DIR', and 'check-DIR'. There are also +corresponding 'target' versions of these for the target libraries , such +as 'install-target-DIR'. + + +File: configure.info, Node: Target libiberty, Prev: Make Targets in Cygnus Tree, Up: Cross Tools in the Cygnus Tree + +5.6.4 Target libiberty +---------------------- + +The 'libiberty' subdirectory is currently a special case, in that it is +the only directory which is built both using the host compiler and using +the target compiler. + + This is because the files in 'libiberty' are used when building the +host tools, and they are also incorporated into the 'libstdc++' target +library as support code. + + This duality does not pose any particular difficulties. It means +that there are targets for both 'all-libiberty' and +'all-target-libiberty'. + + In a native configuration, when target libraries are not built in a +subdirectory, the same objects are normally used as both the host build +and the target build. This is normally OK, since libiberty contains +only C code, and in a native configuration the results of the host +compiler and the target compiler are normally interoperable. + + Irix 6 is again an exception here, since the SGI native compiler +defaults to using the 'O32' ABI, and gcc defaults to using the 'N32' +ABI. On Irix 6, the target libraries are built in a subdirectory even +for a native configuration, avoiding this problem. + + There are currently no other libraries built for both the host and +the target, but there is no conceptual problem with adding more. + + +File: configure.info, Node: Canadian Cross, Next: Cygnus Configure, Prev: Cross Compilation Tools, Up: Top + +6 Canadian Cross +**************** + +It is possible to use the GNU configure and build system to build a +program which will run on a system which is different from the system on +which the tools are built. In other words, it is possible to build +programs using a cross compiler. + + This is referred to as a "Canadian Cross". + +* Menu: + +* Canadian Cross Example:: Canadian Cross Example. +* Canadian Cross Concepts:: Canadian Cross Concepts. +* Build Cross Host Tools:: Build Cross Host Tools. +* Build and Host Options:: Build and Host Options. +* CCross not in Cygnus Tree:: Canadian Cross not in Cygnus Tree. +* CCross in Cygnus Tree:: Canadian Cross in Cygnus Tree. +* Supporting Canadian Cross:: Supporting Canadian Cross. + + +File: configure.info, Node: Canadian Cross Example, Next: Canadian Cross Concepts, Up: Canadian Cross + +6.1 Canadian Cross Example +========================== + +Here is an example of a Canadian Cross. + + While running on a GNU/Linux, you can build a program which will run +on a Solaris system. You would use a GNU/Linux cross Solaris compiler +to build the program. + + Of course, you could not run the resulting program on your GNU/Linux +system. You would have to copy it over to a Solaris system before you +would run it. + + Of course, you could also simply build the programs on the Solaris +system in the first place. However, perhaps the Solaris system is not +available for some reason; perhaps you actually don't have one, but you +want to build the tools for somebody else to use. Or perhaps your +GNU/Linux system is much faster than your Solaris system. + + A Canadian Cross build is most frequently used when building programs +to run on a non-Unix system, such as DOS or Windows. It may be simpler +to configure and build on a Unix system than to support the +configuration machinery on a non-Unix system. + + +File: configure.info, Node: Canadian Cross Concepts, Next: Build Cross Host Tools, Prev: Canadian Cross Example, Up: Canadian Cross + +6.2 Canadian Cross Concepts +=========================== + +When building a Canadian Cross, there are at least two different systems +involved: the system on which the tools are being built, and the system +on which the tools will run. + + The system on which the tools are being built is called the "build" +system. + + The system on which the tools will run is called the host system. + + For example, if you are building a Solaris program on a GNU/Linux +system, as in the previous section, the build system would be GNU/Linux, +and the host system would be Solaris. + + It is, of course, possible to build a cross compiler using a Canadian +Cross (i.e., build a cross compiler using a cross compiler). In this +case, the system for which the resulting cross compiler generates code +is called the target system. (For a more complete discussion of host +and target systems, *note Host and Target::). + + An example of building a cross compiler using a Canadian Cross would +be building a Windows cross MIPS ELF compiler on a GNU/Linux system. In +this case the build system would be GNU/Linux, the host system would be +Windows, and the target system would be MIPS ELF. + + The name Canadian Cross comes from the case when the build, host, and +target systems are all different. At the time that these issues were +all being hashed out, Canada had three national political parties. + + +File: configure.info, Node: Build Cross Host Tools, Next: Build and Host Options, Prev: Canadian Cross Concepts, Up: Canadian Cross + +6.3 Build Cross Host Tools +========================== + +In order to configure a program for a Canadian Cross build, you must +first build and install the set of cross tools you will use to build the +program. + + These tools will be build cross host tools. That is, they will run +on the build system, and will produce code that runs on the host system. + + It is easy to confuse the meaning of build and host here. Always +remember that the build system is where you are doing the build, and the +host system is where the resulting program will run. Therefore, you +need a build cross host compiler. + + In general, you must have a complete cross environment in order to do +the build. This normally means a cross compiler, cross assembler, and +so forth, as well as libraries and include files for the host system. + + +File: configure.info, Node: Build and Host Options, Next: CCross not in Cygnus Tree, Prev: Build Cross Host Tools, Up: Canadian Cross + +6.4 Build and Host Options +========================== + +When you run 'configure', you must use both the '--build' and '--host' +options. + + The '--build' option is used to specify the configuration name of the +build system. This can normally be the result of running the +'config.guess' shell script, and it is reasonable to use +'--build=`config.guess`'. + + The '--host' option is used to specify the configuration name of the +host system. + + As we explained earlier, 'config.guess' is used to set the default +value for the '--host' option (*note Using the Host Type::). We can now +see that since 'config.guess' returns the type of system on which it is +run, it really identifies the build system. Since the host system is +normally the same as the build system (i.e., people do not normally +build using a cross compiler), it is reasonable to use the result of +'config.guess' as the default for the host system when the '--host' +option is not used. + + It might seem that if the '--host' option were used without the +'--build' option that the configure script could run 'config.guess' to +determine the build system, and presume a Canadian Cross if the result +of 'config.guess' differed from the '--host' option. However, for +historical reasons, some configure scripts are routinely run using an +explicit '--host' option, rather than using the default from +'config.guess'. As noted earlier, it is difficult or impossible to +reliably compare configuration names (*note Using the Target Type::). +Therefore, by convention, if the '--host' option is used, but the +'--build' option is not used, then the build system defaults to the host +system. + + +File: configure.info, Node: CCross not in Cygnus Tree, Next: CCross in Cygnus Tree, Prev: Build and Host Options, Up: Canadian Cross + +6.5 Canadian Cross not in Cygnus Tree. +====================================== + +If you are not using the Cygnus tree, you must explicitly specify the +cross tools which you want to use to build the program. This is done by +setting environment variables before running the 'configure' script. + + You must normally set at least the environment variables 'CC', 'AR', +and 'RANLIB' to the cross tools which you want to use to build. + + For some programs, you must set additional cross tools as well, such +as 'AS', 'LD', or 'NM'. + + You would set these environment variables to the build cross tools +which you are going to use. + + For example, if you are building a Solaris program on a GNU/Linux +system, and your GNU/Linux cross Solaris compiler were named +'solaris-gcc', then you would set the environment variable 'CC' to +'solaris-gcc'. + + +File: configure.info, Node: CCross in Cygnus Tree, Next: Supporting Canadian Cross, Prev: CCross not in Cygnus Tree, Up: Canadian Cross + +6.6 Canadian Cross in Cygnus Tree +================================= + +This section describes configuring and building a Canadian Cross when +using the Cygnus tree. + +* Menu: + +* Standard Cygnus CCross:: Building a Normal Program. +* Cross Cygnus CCross:: Building a Cross Program. + + +File: configure.info, Node: Standard Cygnus CCross, Next: Cross Cygnus CCross, Up: CCross in Cygnus Tree + +6.6.1 Building a Normal Program +------------------------------- + +When configuring a Canadian Cross in the Cygnus tree, all the +appropriate environment variables are automatically set to 'HOST-TOOL', +where HOST is the value used for the '--host' option, and TOOL is the +name of the tool (e.g., 'gcc', 'as', etc.). These tools must be on your +'PATH'. + + Adding a prefix of HOST will give the usual name for the build cross +host tools. To see this, consider that when these cross tools were +built, they were configured to run on the build system and to produce +code for the host system. That is, they were configured with a +'--target' option that is the same as the system which we are now +calling the host. Recall that the default name for installed cross +tools uses the target system as a prefix (*note Using the Target +Type::). Since that is the system which we are now calling the host, +HOST is the right prefix to use. + + For example, if you configure with '--build=i386-linux-gnu' and +'--host=solaris', then the Cygnus tree will automatically default to +using the compiler 'solaris-gcc'. You must have previously built and +installed this compiler, probably by doing a build with no '--host' +option and with a '--target' option of 'solaris'. + + +File: configure.info, Node: Cross Cygnus CCross, Prev: Standard Cygnus CCross, Up: CCross in Cygnus Tree + +6.6.2 Building a Cross Program +------------------------------ + +There are additional considerations if you want to build a cross +compiler, rather than a native compiler, in the Cygnus tree using a +Canadian Cross. + + When you build a cross compiler using the Cygnus tree, then the +target libraries will normally be built with the newly built target +compiler (*note Host and Target Libraries::). However, this will not +work when building with a Canadian Cross. This is because the newly +built target compiler will be a program which runs on the host system, +and therefore will not be able to run on the build system. + + Therefore, when building a cross compiler with the Cygnus tree, you +must first install a set of build cross target tools. These tools will +be used when building the target libraries. + + Note that this is not a requirement of a Canadian Cross in general. +For example, it would be possible to build just the host cross target +tools on the build system, to copy the tools to the host system, and to +build the target libraries on the host system. The requirement for +build cross target tools is imposed by the Cygnus tree, which expects to +be able to build both host programs and target libraries in a single +'configure'/'make' step. Because it builds these in a single step, it +expects to be able to build the target libraries on the build system, +which means that it must use a build cross target toolchain. + + For example, suppose you want to build a Windows cross MIPS ELF +compiler on a GNU/Linux system. You must have previously installed both +a GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF +compiler. + + In order to build the Windows (configuration name 'i386-cygwin32') +cross MIPS ELF (configure name 'mips-elf') compiler, you might execute +the following commands (long command lines are broken across lines with +a trailing backslash as a continuation character). + + mkdir linux-x-cygwin32 + cd linux-x-cygwin32 + SRCDIR/configure --target i386-cygwin32 --prefix=INSTALLDIR \ + --exec-prefix=INSTALLDIR/H-i386-linux + make + make install + cd .. + mkdir linux-x-mips-elf + cd linux-x-mips-elf + SRCDIR/configure --target mips-elf --prefix=INSTALLDIR \ + --exec-prefix=INSTALLDIR/H-i386-linux + make + make install + cd .. + mkdir cygwin32-x-mips-elf + cd cygwin32-x-mips-elf + SRCDIR/configure --build=i386-linux-gnu --host=i386-cygwin32 \ + --target=mips-elf --prefix=WININSTALLDIR \ + --exec-prefix=WININSTALLDIR/H-i386-cygwin32 + make + make install + + You would then copy the contents of WININSTALLDIR over to the Windows +machine, and run the resulting programs. + + +File: configure.info, Node: Supporting Canadian Cross, Prev: CCross in Cygnus Tree, Up: Canadian Cross + +6.7 Supporting Canadian Cross +============================= + +If you want to make it possible to build a program you are developing +using a Canadian Cross, you must take some care when writing your +configure and make rules. Simple cases will normally work correctly. +However, it is not hard to write configure and make tests which will +fail in a Canadian Cross. + +* Menu: + +* CCross in Configure:: Supporting Canadian Cross in Configure Scripts. +* CCross in Make:: Supporting Canadian Cross in Makefiles. + + +File: configure.info, Node: CCross in Configure, Next: CCross in Make, Up: Supporting Canadian Cross + +6.7.1 Supporting Canadian Cross in Configure Scripts +---------------------------------------------------- + +In a 'configure.in' file, after calling 'AC_PROG_CC', you can find out +whether this is a Canadian Cross configure by examining the shell +variable 'cross_compiling'. In a Canadian Cross, which means that the +compiler is a cross compiler, 'cross_compiling' will be 'yes'. In a +normal configuration, 'cross_compiling' will be 'no'. + + You ordinarily do not need to know the type of the build system in a +configure script. However, if you do need that information, you can get +it by using the macro 'AC_CANONICAL_SYSTEM', the same macro that is used +to determine the target system. This macro will set the variables +'build', 'build_alias', 'build_cpu', 'build_vendor', and 'build_os', +which correspond to the similar 'target' and 'host' variables, except +that they describe the build system. + + When writing tests in 'configure.in', you must remember that you want +to test the host environment, not the build environment. + + Macros like 'AC_CHECK_FUNCS' which use the compiler will test the +host environment. That is because the tests will be done by running the +compiler, which is actually a build cross host compiler. If the +compiler can find the function, that means that the function is present +in the host environment. + + Tests like 'test -f /dev/ptyp0', on the other hand, will test the +build environment. Remember that the configure script is running on the +build system, not the host system. If your configure scripts examines +files, those files will be on the build system. Whatever you determine +based on those files may or may not be the case on the host system. + + Most autoconf macros will work correctly for a Canadian Cross. The +main exception is 'AC_TRY_RUN'. This macro tries to compile and run a +test program. This will fail in a Canadian Cross, because the program +will be compiled for the host system, which means that it will not run +on the build system. + + The 'AC_TRY_RUN' macro provides an optional argument to tell the +configure script what to do in a Canadian Cross. If that argument is +not present, you will get a warning when you run 'autoconf': + warning: AC_TRY_RUN called without default to allow cross compiling +This tells you that the resulting 'configure' script will not work with +a Canadian Cross. + + In some cases while it may better to perform a test at configure +time, it is also possible to perform the test at run time. In such a +case you can use the cross compiling argument to 'AC_TRY_RUN' to tell +your program that the test could not be performed at configure time. + + There are a few other autoconf macros which will not work correctly +with a Canadian Cross: a partial list is 'AC_FUNC_GETPGRP', +'AC_FUNC_SETPGRP', 'AC_FUNC_SETVBUF_REVERSED', and +'AC_SYS_RESTARTABLE_SYSCALLS'. The 'AC_CHECK_SIZEOF' macro is generally +not very useful with a Canadian Cross; it permits an optional argument +indicating the default size, but there is no way to know what the +correct default should be. + + +File: configure.info, Node: CCross in Make, Prev: CCross in Configure, Up: Supporting Canadian Cross + +6.7.2 Supporting Canadian Cross in Makefiles. +--------------------------------------------- + +The main Canadian Cross issue in a 'Makefile' arises when you want to +use a subsidiary program to generate code or data which you will then +include in your real program. + + If you compile this subsidiary program using '$(CC)' in the usual +way, you will not be able to run it. This is because '$(CC)' will build +a program for the host system, but the program is being built on the +build system. + + You must instead use a compiler for the build system, rather than the +host system. In the Cygnus tree, this make variable '$(CC_FOR_BUILD)' +will hold a compiler for the build system. + + Note that you should not include 'config.h' in a file you are +compiling with '$(CC_FOR_BUILD)'. The 'configure' script will build +'config.h' with information for the host system. However, you are +compiling the file using a compiler for the build system (a native +compiler). Subsidiary programs are normally simple filters which do no +user interaction, and it is normally possible to write them in a highly +portable fashion so that the absence of 'config.h' is not crucial. + + The gcc 'Makefile.in' shows a complex situation in which certain +files, such as 'rtl.c', must be compiled into both subsidiary programs +run on the build system and into the final program. This approach may +be of interest for advanced build system hackers. Note that the build +system compiler is rather confusingly called 'HOST_CC'. + + +File: configure.info, Node: Cygnus Configure, Next: Multilibs, Prev: Canadian Cross, Up: Top + +7 Cygnus Configure +****************** + +The Cygnus configure script predates autoconf. All of its interesting +features have been incorporated into autoconf. No new programs should +be written to use the Cygnus configure script. + + However, the Cygnus configure script is still used in a few places: +at the top of the Cygnus tree and in a few target libraries in the +Cygnus tree. Until those uses have been replaced with autoconf, some +brief notes are appropriate here. This is not complete documentation, +but it should be possible to use this as a guide while examining the +scripts themselves. + +* Menu: + +* Cygnus Configure Basics:: Cygnus Configure Basics. +* Cygnus Configure in C++ Libraries:: Cygnus Configure in C++ Libraries. + + +File: configure.info, Node: Cygnus Configure Basics, Next: Cygnus Configure in C++ Libraries, Up: Cygnus Configure + +7.1 Cygnus Configure Basics +=========================== + +Cygnus configure does not use any generated files; there is no program +corresponding to 'autoconf'. Instead, there is a single shell script +named 'configure' which may be found at the top of the Cygnus tree. +This shell script was written by hand; it was not generated by autoconf, +and it is incorrect, and indeed harmful, to run 'autoconf' in the top +level of a Cygnus tree. + + Cygnus configure works in a particular directory by examining the +file 'configure.in' in that directory. That file is broken into four +separate shell scripts. + + The first is the contents of 'configure.in' up to a line that starts +with '# per-host:'. This is the common part. + + The second is the rest of 'configure.in' up to a line that starts +with '# per-target:'. This is the per host part. + + The third is the rest of 'configure.in' up to a line that starts with +'# post-target:'. This is the per target part. + + The fourth is the remainder of 'configure.in'. This is the post +target part. + + If any of these comment lines are missing, the corresponding shell +script is empty. + + Cygnus configure will first execute the common part. This must set +the shell variable 'srctrigger' to the name of a source file, to confirm +that Cygnus configure is looking at the right directory. This may set +the shell variables 'package_makefile_frag' and +'package_makefile_rules_frag'. + + Cygnus configure will next set the 'build' and 'host' shell +variables, and execute the per host part. This may set the shell +variable 'host_makefile_frag'. + + Cygnus configure will next set the 'target' variable, and execute the +per target part. This may set the shell variable +'target_makefile_frag'. + + Any of these scripts may set the 'subdirs' shell variable. This +variable is a list of subdirectories where a 'Makefile.in' file may be +found. Cygnus configure will automatically look for a 'Makefile.in' +file in the current directory. The 'subdirs' shell variable is not +normally used, and I believe that the only directory which uses it at +present is 'newlib'. + + For each 'Makefile.in', Cygnus configure will automatically create a +'Makefile' by adding definitions for 'make' variables such as 'host' and +'target', and automatically editing the values of 'make' variables such +as 'prefix' if they are present. + + Also, if any of the 'makefile_frag' shell variables are set, Cygnus +configure will interpret them as file names relative to either the +working directory or the source directory, and will read the contents of +the file into the generated 'Makefile'. The file contents will be read +in after the first line in 'Makefile.in' which starts with '####'. + + These 'Makefile' fragments are used to customize behaviour for a +particular host or target. They serve to select particular files to +compile, and to define particular preprocessor macros by providing +values for 'make' variables which are then used during compilation. +Cygnus configure, unlike autoconf, normally does not do feature tests, +and normally requires support to be added manually for each new host. + + The 'Makefile' fragment support is similar to the autoconf +'AC_SUBST_FILE' macro. + + After creating each 'Makefile', the post target script will be run +(i.e., it may be run several times). This script may further customize +the 'Makefile'. When it is run, the shell variable 'Makefile' will hold +the name of the 'Makefile', including the appropriate directory +component. + + Like an autoconf generated 'configure' script, Cygnus configure will +create a file named 'config.status' which, when run, will automatically +recreate the configuration. The 'config.status' file will simply +execute the Cygnus configure script again with the appropriate +arguments. + + Any of the parts of 'configure.in' may set the shell variables +'files' and 'links'. Cygnus configure will set up symlinks from the +names in 'links' to the files named in 'files'. This is similar to the +autoconf 'AC_LINK_FILES' macro. + + Finally, any of the parts of 'configure.in' may set the shell +variable 'configdirs' to a set of subdirectories. If it is set, Cygnus +configure will recursively run the configure process in each +subdirectory. If the subdirectory uses Cygnus configure, it will +contain a 'configure.in' file but no 'configure' file, in which case +Cygnus configure will invoke itself recursively. If the subdirectory +has a 'configure' file, Cygnus configure assumes that it is an autoconf +generated 'configure' script, and simply invokes it directly. + + +File: configure.info, Node: Cygnus Configure in C++ Libraries, Prev: Cygnus Configure Basics, Up: Cygnus Configure + +7.2 Cygnus Configure in C++ Libraries +===================================== + +The C++ library configure system, written by Per Bothner, deserves +special mention. It uses Cygnus configure, but it does feature testing +like that done by autoconf generated 'configure' scripts. This approach +is used in the libraries 'libio', 'libstdc++', and 'libg++'. + + Most of the 'Makefile' information is written out by the shell script +'libio/config.shared'. Each 'configure.in' file sets certain shell +variables, and then invokes 'config.shared' to create two package +'Makefile' fragments. These fragments are then incorporated into the +resulting 'Makefile' by the Cygnus configure script. + + The file '_G_config.h' is created in the 'libio' object directory by +running the shell script 'libio/gen-params'. This shell script uses +feature tests to define macros and typedefs in '_G_config.h'. + + +File: configure.info, Node: Multilibs, Next: FAQ, Prev: Cygnus Configure, Up: Top + +8 Multilibs +*********** + +For some targets gcc may have different processor requirements depending +upon command line options. An obvious example is the '-msoft-float' +option supported on several processors. This option means that the +floating point registers are not available, which means that floating +point operations must be done by calling an emulation subroutine rather +than by using machine instructions. + + For such options, gcc is often configured to compile target libraries +twice: once with '-msoft-float' and once without. When gcc compiles +target libraries more than once, the resulting libraries are called +"multilibs". + + Multilibs are not really part of the GNU configure and build system, +but we discuss them here since they require support in the 'configure' +scripts and 'Makefile's used for target libraries. + +* Menu: + +* Multilibs in gcc:: Multilibs in gcc. +* Multilibs in Target Libraries:: Multilibs in Target Libraries. + + +File: configure.info, Node: Multilibs in gcc, Next: Multilibs in Target Libraries, Up: Multilibs + +8.1 Multilibs in gcc +==================== + +In gcc, multilibs are defined by setting the variable 'MULTILIB_OPTIONS' +in the target 'Makefile' fragment. Several other 'MULTILIB' variables +may also be defined there. *Note The Target Makefile Fragment: +(gcc)Target Fragment. + + If you have built gcc, you can see what multilibs it uses by running +it with the '-print-multi-lib' option. The output '.;' means that no +multilibs are used. In general, the output is a sequence of lines, one +per multilib. The first part of each line, up to the ';', is the name +of the multilib directory. The second part is a list of compiler +options separated by '@' characters. + + Multilibs are built in a tree of directories. The top of the tree, +represented by '.' in the list of multilib directories, is the default +library to use when no special compiler options are used. The +subdirectories of the tree hold versions of the library to use when +particular compiler options are used. + + +File: configure.info, Node: Multilibs in Target Libraries, Prev: Multilibs in gcc, Up: Multilibs + +8.2 Multilibs in Target Libraries +================================= + +The target libraries in the Cygnus tree are automatically built with +multilibs. That means that each library is built multiple times. + + This default is set in the top level 'configure.in' file, by adding +'--enable-multilib' to the list of arguments passed to configure when it +is run for the target libraries (*note Host and Target Libraries::). + + Each target library uses the shell script 'config-ml.in', written by +Doug Evans, to prepare to build target libraries. This shell script is +invoked after the 'Makefile' has been created by the 'configure' script. +If multilibs are not enabled, it does nothing, otherwise it modifies the +'Makefile' to support multilibs. + + The 'config-ml.in' script makes one copy of the 'Makefile' for each +multilib in the appropriate subdirectory. When configuring in the +source directory (which is not recommended), it will build a symlink +tree of the sources in each subdirectory. + + The 'config-ml.in' script sets several variables in the various +'Makefile's. The 'Makefile.in' must have definitions for these +variables already; 'config-ml.in' simply changes the existing values. +The 'Makefile' should use default values for these variables which will +do the right thing in the subdirectories. + +'MULTISRCTOP' + 'config-ml.in' will set this to a sequence of '../' strings, where + the number of strings is the number of multilib levels in the + source tree. The default value should be the empty string. +'MULTIBUILDTOP' + 'config-ml.in' will set this to a sequence of '../' strings, where + the number of strings is number of multilib levels in the object + directory. The default value should be the empty string. This + will differ from 'MULTISRCTOP' when configuring in the source tree + (which is not recommended). +'MULTIDIRS' + In the top level 'Makefile' only, 'config-ml.in' will set this to + the list of multilib subdirectories. The default value should be + the empty string. +'MULTISUBDIR' + 'config-ml.in' will set this to the installed subdirectory name to + use for this subdirectory, with a leading '/'. The default value + shold be the empty string. +'MULTIDO' +'MULTICLEAN' + In the top level 'Makefile' only, 'config-ml.in' will set these + variables to commands to use when doing a recursive make. These + variables should both default to the string 'true', so that by + default nothing happens. + + All references to the parent of the source directory should use the +variable 'MULTISRCTOP'. Instead of writing '$(srcdir)/..', you must +write '$(srcdir)/$(MULTISRCTOP)..'. + + Similarly, references to the parent of the object directory should +use the variable 'MULTIBUILDTOP'. + + In the installation target, the libraries should be installed in the +subdirectory 'MULTISUBDIR'. Instead of installing '$(libdir)/libfoo.a', +install '$(libdir)$(MULTISUBDIR)/libfoo.a'. + + The 'config-ml.in' script also modifies the top level 'Makefile' to +add 'multi-do' and 'multi-clean' targets which are used when building +multilibs. + + The default target of the 'Makefile' should include the following +command: + @$(MULTIDO) $(FLAGS_TO_PASS) DO=all multi-do +This assumes that '$(FLAGS_TO_PASS)' is defined as a set of variables to +pass to a recursive invocation of 'make'. This will build all the +multilibs. Note that the default value of 'MULTIDO' is 'true', so by +default this command will do nothing. It will only do something in the +top level 'Makefile' if multilibs were enabled. + + The 'install' target of the 'Makefile' should include the following +command: + @$(MULTIDO) $(FLAGS_TO_PASS) DO=install multi-do + + In general, any operation, other than clean, which should be +performed on all the multilibs should use a '$(MULTIDO)' line, setting +the variable 'DO' to the target of each recursive call to 'make'. + + The 'clean' targets ('clean', 'mostlyclean', etc.) should use +'$(MULTICLEAN)'. For example, the 'clean' target should do this: + @$(MULTICLEAN) DO=clean multi-clean + + +File: configure.info, Node: FAQ, Next: Index, Prev: Multilibs, Up: Top + +9 Frequently Asked Questions +**************************** + +Which do I run first, 'autoconf' or 'automake'? + Except when you first add autoconf or automake support to a + package, you shouldn't run either by hand. Instead, configure with + the '--enable-maintainer-mode' option, and let 'make' take care of + it. + +'autoconf' says something about undefined macros. + This means that you have macros in your 'configure.in' which are + not defined by 'autoconf'. You may be using an old version of + 'autoconf'; try building and installing a newer one. Make sure the + newly installled 'autoconf' is first on your 'PATH'. Also, see the + next question. + +My 'configure' script has stuff like 'CY_GNU_GETTEXT' in it. + This means that you have macros in your 'configure.in' which should + be defined in your 'aclocal.m4' file, but aren't. This usually + means that 'aclocal' was not able to appropriate definitions of the + macros. Make sure that you have installed all the packages you + need. In particular, make sure that you have installed libtool + (this is where 'AM_PROG_LIBTOOL' is defined) and gettext (this is + where 'CY_GNU_GETTEXT' is defined, at least in the Cygnus version + of gettext). + +My 'Makefile' has '@' characters in it. + This may mean that you tried to use an autoconf substitution in + your 'Makefile.in' without adding the appropriate 'AC_SUBST' call + to your 'configure' script. Or it may just mean that you need to + rebuild 'Makefile' in your build directory. To rebuild 'Makefile' + from 'Makefile.in', run the shell script 'config.status' with no + arguments. If you need to force 'configure' to run again, first + run 'config.status --recheck'. These runs are normally done + automatically by 'Makefile' targets, but if your 'Makefile' has + gotten messed up you'll need to help them along. + +Why do I have to run both 'config.status --recheck' and 'config.status'? + Normally, you don't; they will be run automatically by 'Makefile' + targets. If you do need to run them, use 'config.status --recheck' + to run the 'configure' script again with the same arguments as the + first time you ran it. Use 'config.status' (with no arguments) to + regenerate all files ('Makefile', 'config.h', etc.) based on the + results of the configure script. The two cases are separate + because it isn't always necessary to regenerate all the files after + running 'config.status --recheck'. The 'Makefile' targets + generated by automake will use the environment variables + 'CONFIG_FILES' and 'CONFIG_HEADERS' to only regenerate files as + they are needed. + +What is the Cygnus tree? + The Cygnus tree is used for various packages including gdb, the GNU + binutils, and egcs. It is also, of course, used for Cygnus + releases. It is the build system which was developed at Cygnus, + using the Cygnus configure script. It permits building many + different packages with a single configure and make. The configure + scripts in the tree are being converted to autoconf, but the + general build structure remains intact. + +Why do I have to keep rebuilding and reinstalling the tools? + I know, it's a pain. Unfortunately, there are bugs in the tools + themselves which need to be fixed, and each time that happens + everybody who uses the tools need to reinstall new versions of + them. I don't know if there is going to be a clever fix until the + tools stabilize. + +Why not just have a Cygnus tree 'make' target to update the tools? + The tools unfortunately need to be installed before they can be + used. That means that they must be built using an appropriate + prefix, and it seems unwise to assume that every configuration uses + an appropriate prefix. It might be possible to make them work in + place, or it might be possible to install them in some + subdirectory; so far these approaches have not been implemented. + + +File: configure.info, Node: Index, Prev: FAQ, Up: Top + +Index +***** + +[index] +* Menu: + +* '--build' option: Build and Host Options. + (line 9) +* '--host' option: Build and Host Options. + (line 14) +* '--target' option: Specifying the Target. + (line 10) +* '_GNU_SOURCE': Write configure.in. (line 132) +* 'acconfig.h': Written Developer Files. + (line 27) +* 'acconfig.h', writing: Write acconfig.h. (line 6) +* 'acinclude.m4': Written Developer Files. + (line 37) +* 'aclocal.m4': Generated Developer Files. + (line 33) +* 'AC_CANONICAL_HOST': Using the Host Type. (line 10) +* 'AC_CANONICAL_SYSTEM': Using the Target Type. + (line 6) +* 'AC_CONFIG_HEADER': Write configure.in. (line 64) +* 'AC_EXEEXT': Write configure.in. (line 84) +* 'AC_INIT': Write configure.in. (line 37) +* 'AC_OUTPUT': Write configure.in. (line 140) +* 'AC_PREREQ': Write configure.in. (line 41) +* 'AC_PROG_CC': Write configure.in. (line 101) +* 'AC_PROG_CXX': Write configure.in. (line 115) +* 'AM_CONFIG_HEADER': Write configure.in. (line 52) +* 'AM_DISABLE_SHARED': Write configure.in. (line 125) +* 'AM_EXEEXT': Write configure.in. (line 84) +* 'AM_INIT_AUTOMAKE': Write configure.in. (line 47) +* 'AM_MAINTAINER_MODE': Write configure.in. (line 68) +* 'AM_PROG_LIBTOOL': Write configure.in. (line 120) +* 'AM_PROG_LIBTOOL' in 'configure': FAQ. (line 19) +* build option: Build and Host Options. + (line 9) +* building with a cross compiler: Canadian Cross. (line 6) +* canadian cross: Canadian Cross. (line 6) +* canadian cross in configure: CCross in Configure. (line 6) +* canadian cross in cygnus tree: CCross in Cygnus Tree. + (line 6) +* canadian cross in makefile: CCross in Make. (line 6) +* canadian cross, configuring: Build and Host Options. + (line 6) +* canonical system names: Configuration Names. (line 6) +* 'config.cache': Build Files Description. + (line 28) +* 'config.h': Build Files Description. + (line 23) +* 'config.h.in': Generated Developer Files. + (line 45) +* 'config.in': Generated Developer Files. + (line 45) +* 'config.status': Build Files Description. + (line 9) +* 'config.status --recheck': FAQ. (line 40) +* configuration names: Configuration Names. (line 6) +* configuration triplets: Configuration Names. (line 6) +* 'configure': Generated Developer Files. + (line 21) +* configure build system: Build and Host Options. + (line 9) +* configure host: Build and Host Options. + (line 14) +* configure target: Specifying the Target. + (line 10) +* 'configure.in': Written Developer Files. + (line 9) +* 'configure.in', writing: Write configure.in. (line 6) +* configuring a canadian cross: Build and Host Options. + (line 6) +* cross compiler: Cross Compilation Concepts. + (line 6) +* cross compiler, building with: Canadian Cross. (line 6) +* cross tools: Cross Compilation Tools. + (line 6) +* cygnus configure: Cygnus Configure. (line 6) +* 'CY_GNU_GETTEXT' in 'configure': FAQ. (line 19) +* goals: Goals. (line 6) +* history: History. (line 6) +* host names: Configuration Names. (line 6) +* host option: Build and Host Options. + (line 14) +* host system: Host and Target. (line 6) +* host triplets: Configuration Names. (line 6) +* 'HOST_CC': CCross in Make. (line 27) +* 'libg++' configure: Cygnus Configure in C++ Libraries. + (line 6) +* 'libio' configure: Cygnus Configure in C++ Libraries. + (line 6) +* 'libstdc++' configure: Cygnus Configure in C++ Libraries. + (line 6) +* 'Makefile': Build Files Description. + (line 18) +* 'Makefile', garbage characters: FAQ. (line 29) +* 'Makefile.am': Written Developer Files. + (line 18) +* 'Makefile.am', writing: Write Makefile.am. (line 6) +* 'Makefile.in': Generated Developer Files. + (line 26) +* multilibs: Multilibs. (line 6) +* 'stamp-h': Build Files Description. + (line 40) +* 'stamp-h.in': Generated Developer Files. + (line 54) +* system names: Configuration Names. (line 6) +* system types: Configuration Names. (line 6) +* target option: Specifying the Target. + (line 10) +* target system: Host and Target. (line 6) +* triplets: Configuration Names. (line 6) +* undefined macros: FAQ. (line 12) + + + +Tag Table: +Node: Top966 +Node: Introduction1494 +Node: Goals2576 +Node: Tools3300 +Node: History4289 +Node: Building7285 +Node: Getting Started10548 +Node: Write configure.in11061 +Node: Write Makefile.am18275 +Node: Write acconfig.h21431 +Node: Generate files22968 +Node: Getting Started Example24934 +Node: Getting Started Example 125689 +Node: Getting Started Example 227610 +Node: Getting Started Example 330605 +Node: Generate Files in Example32966 +Node: Files34052 +Node: Developer Files34663 +Node: Developer Files Picture35043 +Node: Written Developer Files36343 +Node: Generated Developer Files38895 +Node: Build Files42039 +Node: Build Files Picture42700 +Node: Build Files Description43463 +Node: Support Files45463 +Node: Configuration Names48332 +Node: Configuration Name Definition48831 +Node: Using Configuration Names51151 +Node: Cross Compilation Tools53121 +Node: Cross Compilation Concepts53812 +Node: Host and Target54780 +Node: Using the Host Type56281 +Node: Specifying the Target57628 +Node: Using the Target Type58417 +Node: Cross Tools in the Cygnus Tree61847 +Node: Host and Target Libraries62904 +Node: Target Library Configure Scripts66649 +Node: Make Targets in Cygnus Tree69741 +Node: Target libiberty71089 +Node: Canadian Cross72475 +Node: Canadian Cross Example73316 +Node: Canadian Cross Concepts74435 +Node: Build Cross Host Tools75947 +Node: Build and Host Options76899 +Node: CCross not in Cygnus Tree78685 +Node: CCross in Cygnus Tree79663 +Node: Standard Cygnus CCross80084 +Node: Cross Cygnus CCross81448 +Node: Supporting Canadian Cross84248 +Node: CCross in Configure84863 +Node: CCross in Make88028 +Node: Cygnus Configure89631 +Node: Cygnus Configure Basics90466 +Node: Cygnus Configure in C++ Libraries95144 +Node: Multilibs96151 +Node: Multilibs in gcc97196 +Node: Multilibs in Target Libraries98274 +Node: FAQ102458 +Node: Index106559 + +End Tag Table diff --git a/libc/share/info/standards.info b/libc/share/info/standards.info new file mode 100644 index 0000000..ba33f70 --- /dev/null +++ b/libc/share/info/standards.info @@ -0,0 +1,5720 @@ +This is standards.info, produced by makeinfo version 6.0 from +standards.texi. + +The GNU coding standards, last updated April 12, 2010. + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled "GNU +Free Documentation License". +INFO-DIR-SECTION GNU organization +START-INFO-DIR-ENTRY +* Standards: (standards). GNU coding standards. +END-INFO-DIR-ENTRY + + +File: standards.info, Node: Top, Next: Preface, Prev: (dir), Up: (dir) + +Version +******* + +The GNU coding standards, last updated April 12, 2010. + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled "GNU +Free Documentation License". + +* Menu: + +* Preface:: About the GNU Coding Standards. +* Legal Issues:: Keeping free software free. +* Design Advice:: General program design. +* Program Behavior:: Program behavior for all programs +* Writing C:: Making the best use of C. +* Documentation:: Documenting programs. +* Managing Releases:: The release process. +* References:: Mentioning non-free software or documentation. +* GNU Free Documentation License:: Copying and sharing this manual. +* Index:: + + +File: standards.info, Node: Preface, Next: Legal Issues, Up: Top + +1 About the GNU Coding Standards +******************************** + +The GNU Coding Standards were written by Richard Stallman and other GNU +Project volunteers. Their purpose is to make the GNU system clean, +consistent, and easy to install. This document can also be read as a +guide to writing portable, robust and reliable programs. It focuses on +programs written in C, but many of the rules and principles are useful +even if you write in another programming language. The rules often +state reasons for writing in a certain way. + + If you did not obtain this file directly from the GNU project and +recently, please check for a newer version. You can get the GNU Coding +Standards from the GNU web server in many different formats, including +the Texinfo source, PDF, HTML, DVI, plain text, and more, at: +. + + If you are maintaining an official GNU package, in addition to this +document, please read and follow the GNU maintainer information (*note +Contents: (maintain)Top.). + + If you want to receive diffs for every change to these GNU documents, +join the mailing list 'gnustandards-commit@gnu.org', via the web +interface at +. Archives +are also available there. + + Please send corrections or suggestions for this document to +. If you make a suggestion, please include a +suggested new wording for it, to help us consider the suggestion +efficiently. We prefer a context diff to the Texinfo source, but if +that's difficult for you, you can make a context diff for some other +version of this document, or propose it in any way that makes it clear. +The source repository for this document can be found at +. + + These standards cover the minimum of what is important when writing a +GNU package. Likely, the need for additional standards will come up. +Sometimes, you might suggest that such standards be added to this +document. If you think your standards would be generally useful, please +do suggest them. + + You should also set standards for your package on many questions not +addressed or not firmly specified here. The most important point is to +be self-consistent--try to stick to the conventions you pick, and try to +document them as much as possible. That way, your program will be more +maintainable by others. + + The GNU Hello program serves as an example of how to follow the GNU +coding standards for a trivial program. +. + + This release of the GNU Coding Standards was last updated April 12, +2010. + + +File: standards.info, Node: Legal Issues, Next: Design Advice, Prev: Preface, Up: Top + +2 Keeping Free Software Free +**************************** + +This chapter discusses how you can make sure that GNU software avoids +legal difficulties, and other related issues. + +* Menu: + +* Reading Non-Free Code:: Referring to proprietary programs. +* Contributions:: Accepting contributions. +* Trademarks:: How we deal with trademark issues. + + +File: standards.info, Node: Reading Non-Free Code, Next: Contributions, Up: Legal Issues + +2.1 Referring to Proprietary Programs +===================================== + +Don't in any circumstances refer to Unix source code for or during your +work on GNU! (Or to any other proprietary programs.) + + If you have a vague recollection of the internals of a Unix program, +this does not absolutely mean you can't write an imitation of it, but do +try to organize the imitation internally along different lines, because +this is likely to make the details of the Unix version irrelevant and +dissimilar to your results. + + For example, Unix utilities were generally optimized to minimize +memory use; if you go for speed instead, your program will be very +different. You could keep the entire input file in memory and scan it +there instead of using stdio. Use a smarter algorithm discovered more +recently than the Unix program. Eliminate use of temporary files. Do +it in one pass instead of two (we did this in the assembler). + + Or, on the contrary, emphasize simplicity instead of speed. For some +applications, the speed of today's computers makes simpler algorithms +adequate. + + Or go for generality. For example, Unix programs often have static +tables or fixed-size strings, which make for arbitrary limits; use +dynamic allocation instead. Make sure your program handles NULs and +other funny characters in the input files. Add a programming language +for extensibility and write part of the program in that language. + + Or turn some parts of the program into independently usable +libraries. Or use a simple garbage collector instead of tracking +precisely when to free memory, or use a new GNU facility such as +obstacks. + + +File: standards.info, Node: Contributions, Next: Trademarks, Prev: Reading Non-Free Code, Up: Legal Issues + +2.2 Accepting Contributions +=========================== + +If the program you are working on is copyrighted by the Free Software +Foundation, then when someone else sends you a piece of code to add to +the program, we need legal papers to use it--just as we asked you to +sign papers initially. _Each_ person who makes a nontrivial +contribution to a program must sign some sort of legal papers in order +for us to have clear title to the program; the main author alone is not +enough. + + So, before adding in any contributions from other people, please tell +us, so we can arrange to get the papers. Then wait until we tell you +that we have received the signed papers, before you actually use the +contribution. + + This applies both before you release the program and afterward. If +you receive diffs to fix a bug, and they make significant changes, we +need legal papers for that change. + + This also applies to comments and documentation files. For copyright +law, comments and code are just text. Copyright applies to all kinds of +text, so we need legal papers for all kinds. + + We know it is frustrating to ask for legal papers; it's frustrating +for us as well. But if you don't wait, you are going out on a limb--for +example, what if the contributor's employer won't sign a disclaimer? +You might have to take that code out again! + + You don't need papers for changes of a few lines here or there, since +they are not significant for copyright purposes. Also, you don't need +papers if all you get from the suggestion is some ideas, not actual code +which you use. For example, if someone sent you one implementation, but +you write a different implementation of the same idea, you don't need to +get papers. + + The very worst thing is if you forget to tell us about the other +contributor. We could be very embarrassed in court some day as a +result. + + We have more detailed advice for maintainers of programs; if you have +reached the stage of actually maintaining a program for GNU (whether +released or not), please ask us for a copy. It is also available online +for your perusal: . + + +File: standards.info, Node: Trademarks, Prev: Contributions, Up: Legal Issues + +2.3 Trademarks +============== + +Please do not include any trademark acknowledgements in GNU software +packages or documentation. + + Trademark acknowledgements are the statements that such-and-such is a +trademark of so-and-so. The GNU Project has no objection to the basic +idea of trademarks, but these acknowledgements feel like kowtowing, and +there is no legal requirement for them, so we don't use them. + + What is legally required, as regards other people's trademarks, is to +avoid using them in ways which a reader might reasonably understand as +naming or labeling our own programs or activities. For example, since +"Objective C" is (or at least was) a trademark, we made sure to say that +we provide a "compiler for the Objective C language" rather than an +"Objective C compiler". The latter would have been meant as a shorter +way of saying the former, but it does not explicitly state the +relationship, so it could be misinterpreted as using "Objective C" as a +label for the compiler rather than for the language. + + Please don't use "win" as an abbreviation for Microsoft Windows in +GNU software or documentation. In hacker terminology, calling something +a "win" is a form of praise. If you wish to praise Microsoft Windows +when speaking on your own, by all means do so, but not in GNU software. +Usually we write the name "Windows" in full, but when brevity is very +important (as in file names and sometimes symbol names), we abbreviate +it to "w". For instance, the files and functions in Emacs that deal +with Windows start with 'w32'. + + +File: standards.info, Node: Design Advice, Next: Program Behavior, Prev: Legal Issues, Up: Top + +3 General Program Design +************************ + +This chapter discusses some of the issues you should take into account +when designing your program. + +* Menu: + +* Source Language:: Which languages to use. +* Compatibility:: Compatibility with other implementations. +* Using Extensions:: Using non-standard features. +* Standard C:: Using standard C features. +* Conditional Compilation:: Compiling code only if a conditional is true. + + +File: standards.info, Node: Source Language, Next: Compatibility, Up: Design Advice + +3.1 Which Languages to Use +========================== + +When you want to use a language that gets compiled and runs at high +speed, the best language to use is C. Using another language is like +using a non-standard feature: it will cause trouble for users. Even if +GCC supports the other language, users may find it inconvenient to have +to install the compiler for that other language in order to build your +program. For example, if you write your program in C++, people will +have to install the GNU C++ compiler in order to compile your program. + + C has one other advantage over C++ and other compiled languages: more +people know C, so more people will find it easy to read and modify the +program if it is written in C. + + So in general it is much better to use C, rather than the comparable +alternatives. + + But there are two exceptions to that conclusion: + + * It is no problem to use another language to write a tool + specifically intended for use with that language. That is because + the only people who want to build the tool will be those who have + installed the other language anyway. + + * If an application is of interest only to a narrow part of the + community, then the question of which language it is written in has + less effect on other people, so you may as well please yourself. + + Many programs are designed to be extensible: they include an +interpreter for a language that is higher level than C. Often much of +the program is written in that language, too. The Emacs editor +pioneered this technique. + + The standard extensibility interpreter for GNU software is Guile +(), which implements the language +Scheme (an especially clean and simple dialect of Lisp). Guile also +includes bindings for GTK+/GNOME, making it practical to write modern +GUI functionality within Guile. We don't reject programs written in +other "scripting languages" such as Perl and Python, but using Guile is +very important for the overall consistency of the GNU system. + + +File: standards.info, Node: Compatibility, Next: Using Extensions, Prev: Source Language, Up: Design Advice + +3.2 Compatibility with Other Implementations +============================================ + +With occasional exceptions, utility programs and libraries for GNU +should be upward compatible with those in Berkeley Unix, and upward +compatible with Standard C if Standard C specifies their behavior, and +upward compatible with POSIX if POSIX specifies their behavior. + + When these standards conflict, it is useful to offer compatibility +modes for each of them. + + Standard C and POSIX prohibit many kinds of extensions. Feel free to +make the extensions anyway, and include a '--ansi', '--posix', or +'--compatible' option to turn them off. However, if the extension has a +significant chance of breaking any real programs or scripts, then it is +not really upward compatible. So you should try to redesign its +interface to make it upward compatible. + + Many GNU programs suppress extensions that conflict with POSIX if the +environment variable 'POSIXLY_CORRECT' is defined (even if it is defined +with a null value). Please make your program recognize this variable if +appropriate. + + When a feature is used only by users (not by programs or command +files), and it is done poorly in Unix, feel free to replace it +completely with something totally different and better. (For example, +'vi' is replaced with Emacs.) But it is nice to offer a compatible +feature as well. (There is a free 'vi' clone, so we offer it.) + + Additional useful features are welcome regardless of whether there is +any precedent for them. + + +File: standards.info, Node: Using Extensions, Next: Standard C, Prev: Compatibility, Up: Design Advice + +3.3 Using Non-standard Features +=============================== + +Many GNU facilities that already exist support a number of convenient +extensions over the comparable Unix facilities. Whether to use these +extensions in implementing your program is a difficult question. + + On the one hand, using the extensions can make a cleaner program. On +the other hand, people will not be able to build the program unless the +other GNU tools are available. This might cause the program to work on +fewer kinds of machines. + + With some extensions, it might be easy to provide both alternatives. +For example, you can define functions with a "keyword" 'INLINE' and +define that as a macro to expand into either 'inline' or nothing, +depending on the compiler. + + In general, perhaps it is best not to use the extensions if you can +straightforwardly do without them, but to use the extensions if they are +a big improvement. + + An exception to this rule are the large, established programs (such +as Emacs) which run on a great variety of systems. Using GNU extensions +in such programs would make many users unhappy, so we don't do that. + + Another exception is for programs that are used as part of +compilation: anything that must be compiled with other compilers in +order to bootstrap the GNU compilation facilities. If these require the +GNU compiler, then no one can compile them without having them installed +already. That would be extremely troublesome in certain cases. + + +File: standards.info, Node: Standard C, Next: Conditional Compilation, Prev: Using Extensions, Up: Design Advice + +3.4 Standard C and Pre-Standard C +================================= + +1989 Standard C is widespread enough now that it is ok to use its +features in new programs. There is one exception: do not ever use the +"trigraph" feature of Standard C. + + 1999 Standard C is not widespread yet, so please do not require its +features in programs. It is ok to use its features if they are present. + + However, it is easy to support pre-standard compilers in most +programs, so if you know how to do that, feel free. If a program you +are maintaining has such support, you should try to keep it working. + + To support pre-standard C, instead of writing function definitions in +standard prototype form, + + int + foo (int x, int y) + ... + +write the definition in pre-standard style like this, + + int + foo (x, y) + int x, y; + ... + +and use a separate declaration to specify the argument prototype: + + int foo (int, int); + + You need such a declaration anyway, in a header file, to get the +benefit of prototypes in all the files where the function is called. +And once you have the declaration, you normally lose nothing by writing +the function definition in the pre-standard style. + + This technique does not work for integer types narrower than 'int'. +If you think of an argument as being of a type narrower than 'int', +declare it as 'int' instead. + + There are a few special cases where this technique is hard to use. +For example, if a function argument needs to hold the system type +'dev_t', you run into trouble, because 'dev_t' is shorter than 'int' on +some machines; but you cannot use 'int' instead, because 'dev_t' is +wider than 'int' on some machines. There is no type you can safely use +on all machines in a non-standard definition. The only way to support +non-standard C and pass such an argument is to check the width of +'dev_t' using Autoconf and choose the argument type accordingly. This +may not be worth the trouble. + + In order to support pre-standard compilers that do not recognize +prototypes, you may want to use a preprocessor macro like this: + + /* Declare the prototype for a general external function. */ + #if defined (__STDC__) || defined (WINDOWSNT) + #define P_(proto) proto + #else + #define P_(proto) () + #endif + + +File: standards.info, Node: Conditional Compilation, Prev: Standard C, Up: Design Advice + +3.5 Conditional Compilation +=========================== + +When supporting configuration options already known when building your +program we prefer using 'if (... )' over conditional compilation, as in +the former case the compiler is able to perform more extensive checking +of all possible code paths. + + For example, please write + + if (HAS_FOO) + ... + else + ... + +instead of: + + #ifdef HAS_FOO + ... + #else + ... + #endif + + A modern compiler such as GCC will generate exactly the same code in +both cases, and we have been using similar techniques with good success +in several projects. Of course, the former method assumes that +'HAS_FOO' is defined as either 0 or 1. + + While this is not a silver bullet solving all portability problems, +and is not always appropriate, following this policy would have saved +GCC developers many hours, or even days, per year. + + In the case of function-like macros like 'REVERSIBLE_CC_MODE' in GCC +which cannot be simply used in 'if (...)' statements, there is an easy +workaround. Simply introduce another macro 'HAS_REVERSIBLE_CC_MODE' as +in the following example: + + #ifdef REVERSIBLE_CC_MODE + #define HAS_REVERSIBLE_CC_MODE 1 + #else + #define HAS_REVERSIBLE_CC_MODE 0 + #endif + + +File: standards.info, Node: Program Behavior, Next: Writing C, Prev: Design Advice, Up: Top + +4 Program Behavior for All Programs +*********************************** + +This chapter describes conventions for writing robust software. It also +describes general standards for error messages, the command line +interface, and how libraries should behave. + +* Menu: + +* Non-GNU Standards:: We consider standards such as POSIX; + we don't "obey" them. +* Semantics:: Writing robust programs. +* Libraries:: Library behavior. +* Errors:: Formatting error messages. +* User Interfaces:: Standards about interfaces generally. +* Graphical Interfaces:: Standards for graphical interfaces. +* Command-Line Interfaces:: Standards for command line interfaces. +* Option Table:: Table of long options. +* OID Allocations:: Table of OID slots for GNU. +* Memory Usage:: When and how to care about memory needs. +* File Usage:: Which files to use, and where. + + +File: standards.info, Node: Non-GNU Standards, Next: Semantics, Up: Program Behavior + +4.1 Non-GNU Standards +===================== + +The GNU Project regards standards published by other organizations as +suggestions, not orders. We consider those standards, but we do not +"obey" them. In developing a GNU program, you should implement an +outside standard's specifications when that makes the GNU system better +overall in an objective sense. When it doesn't, you shouldn't. + + In most cases, following published standards is convenient for +users--it means that their programs or scripts will work more portably. +For instance, GCC implements nearly all the features of Standard C as +specified by that standard. C program developers would be unhappy if it +did not. And GNU utilities mostly follow specifications of POSIX.2; +shell script writers and users would be unhappy if our programs were +incompatible. + + But we do not follow either of these specifications rigidly, and +there are specific points on which we decided not to follow them, so as +to make the GNU system better for users. + + For instance, Standard C says that nearly all extensions to C are +prohibited. How silly! GCC implements many extensions, some of which +were later adopted as part of the standard. If you want these +constructs to give an error message as "required" by the standard, you +must specify '--pedantic', which was implemented only so that we can say +"GCC is a 100% implementation of the standard," not because there is any +reason to actually use it. + + POSIX.2 specifies that 'df' and 'du' must output sizes by default in +units of 512 bytes. What users want is units of 1k, so that is what we +do by default. If you want the ridiculous behavior "required" by POSIX, +you must set the environment variable 'POSIXLY_CORRECT' (which was +originally going to be named 'POSIX_ME_HARDER'). + + GNU utilities also depart from the letter of the POSIX.2 +specification when they support long-named command-line options, and +intermixing options with ordinary arguments. This minor incompatibility +with POSIX is never a problem in practice, and it is very useful. + + In particular, don't reject a new feature, or remove an old one, +merely because a standard says it is "forbidden" or "deprecated." + + +File: standards.info, Node: Semantics, Next: Libraries, Prev: Non-GNU Standards, Up: Program Behavior + +4.2 Writing Robust Programs +=========================== + +Avoid arbitrary limits on the length or number of _any_ data structure, +including file names, lines, files, and symbols, by allocating all data +structures dynamically. In most Unix utilities, "long lines are +silently truncated". This is not acceptable in a GNU utility. + + Utilities reading files should not drop NUL characters, or any other +nonprinting characters _including those with codes above 0177_. The +only sensible exceptions would be utilities specifically intended for +interface to certain types of terminals or printers that can't handle +those characters. Whenever possible, try to make programs work properly +with sequences of bytes that represent multibyte characters, using +encodings such as UTF-8 and others. + + Check every system call for an error return, unless you know you wish +to ignore errors. Include the system error text (from 'perror' or +equivalent) in _every_ error message resulting from a failing system +call, as well as the name of the file if any and the name of the +utility. Just "cannot open foo.c" or "stat failed" is not sufficient. + + Check every call to 'malloc' or 'realloc' to see if it returned zero. +Check 'realloc' even if you are making the block smaller; in a system +that rounds block sizes to a power of 2, 'realloc' may get a different +block if you ask for less space. + + In Unix, 'realloc' can destroy the storage block if it returns zero. +GNU 'realloc' does not have this bug: if it fails, the original block is +unchanged. Feel free to assume the bug is fixed. If you wish to run +your program on Unix, and wish to avoid lossage in this case, you can +use the GNU 'malloc'. + + You must expect 'free' to alter the contents of the block that was +freed. Anything you want to fetch from the block, you must fetch before +calling 'free'. + + If 'malloc' fails in a noninteractive program, make that a fatal +error. In an interactive program (one that reads commands from the +user), it is better to abort the command and return to the command +reader loop. This allows the user to kill other processes to free up +virtual memory, and then try the command again. + + Use 'getopt_long' to decode arguments, unless the argument syntax +makes this unreasonable. + + When static storage is to be written in during program execution, use +explicit C code to initialize it. Reserve C initialized declarations +for data that will not be changed. + + Try to avoid low-level interfaces to obscure Unix data structures +(such as file directories, utmp, or the layout of kernel memory), since +these are less likely to work compatibly. If you need to find all the +files in a directory, use 'readdir' or some other high-level interface. +These are supported compatibly by GNU. + + The preferred signal handling facilities are the BSD variant of +'signal', and the POSIX 'sigaction' function; the alternative USG +'signal' interface is an inferior design. + + Nowadays, using the POSIX signal functions may be the easiest way to +make a program portable. If you use 'signal', then on GNU/Linux systems +running GNU libc version 1, you should include 'bsd/signal.h' instead of +'signal.h', so as to get BSD behavior. It is up to you whether to +support systems where 'signal' has only the USG behavior, or give up on +them. + + In error checks that detect "impossible" conditions, just abort. +There is usually no point in printing any message. These checks +indicate the existence of bugs. Whoever wants to fix the bugs will have +to read the source code and run a debugger. So explain the problem with +comments in the source. The relevant data will be in variables, which +are easy to examine with the debugger, so there is no point moving them +elsewhere. + + Do not use a count of errors as the exit status for a program. _That +does not work_, because exit status values are limited to 8 bits (0 +through 255). A single run of the program might have 256 errors; if you +try to return 256 as the exit status, the parent process will see 0 as +the status, and it will appear that the program succeeded. + + If you make temporary files, check the 'TMPDIR' environment variable; +if that variable is defined, use the specified directory instead of +'/tmp'. + + In addition, be aware that there is a possible security problem when +creating temporary files in world-writable directories. In C, you can +avoid this problem by creating temporary files in this manner: + + fd = open (filename, O_WRONLY | O_CREAT | O_EXCL, 0600); + +or by using the 'mkstemps' function from libiberty. + + In bash, use 'set -C' to avoid this problem. + + +File: standards.info, Node: Libraries, Next: Errors, Prev: Semantics, Up: Program Behavior + +4.3 Library Behavior +==================== + +Try to make library functions reentrant. If they need to do dynamic +storage allocation, at least try to avoid any nonreentrancy aside from +that of 'malloc' itself. + + Here are certain name conventions for libraries, to avoid name +conflicts. + + Choose a name prefix for the library, more than two characters long. +All external function and variable names should start with this prefix. +In addition, there should only be one of these in any given library +member. This usually means putting each one in a separate source file. + + An exception can be made when two external symbols are always used +together, so that no reasonable program could use one without the other; +then they can both go in the same file. + + External symbols that are not documented entry points for the user +should have names beginning with '_'. The '_' should be followed by the +chosen name prefix for the library, to prevent collisions with other +libraries. These can go in the same files with user entry points if you +like. + + Static functions and variables can be used as you like and need not +fit any naming convention. + + +File: standards.info, Node: Errors, Next: User Interfaces, Prev: Libraries, Up: Program Behavior + +4.4 Formatting Error Messages +============================= + +Error messages from compilers should look like this: + + SOURCE-FILE-NAME:LINENO: MESSAGE + +If you want to mention the column number, use one of these formats: + + SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE + SOURCE-FILE-NAME:LINENO.COLUMN: MESSAGE + + +Line numbers should start from 1 at the beginning of the file, and +column numbers should start from 1 at the beginning of the line. (Both +of these conventions are chosen for compatibility.) Calculate column +numbers assuming that space and all ASCII printing characters have equal +width, and assuming tab stops every 8 columns. + + The error message can also give both the starting and ending +positions of the erroneous text. There are several formats so that you +can avoid redundant information such as a duplicate line number. Here +are the possible formats: + + SOURCE-FILE-NAME:LINENO-1.COLUMN-1-LINENO-2.COLUMN-2: MESSAGE + SOURCE-FILE-NAME:LINENO-1.COLUMN-1-COLUMN-2: MESSAGE + SOURCE-FILE-NAME:LINENO-1-LINENO-2: MESSAGE + +When an error is spread over several files, you can use this format: + + FILE-1:LINENO-1.COLUMN-1-FILE-2:LINENO-2.COLUMN-2: MESSAGE + + Error messages from other noninteractive programs should look like +this: + + PROGRAM:SOURCE-FILE-NAME:LINENO: MESSAGE + +when there is an appropriate source file, or like this: + + PROGRAM: MESSAGE + +when there is no relevant source file. + + If you want to mention the column number, use this format: + + PROGRAM:SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE + + In an interactive program (one that is reading commands from a +terminal), it is better not to include the program name in an error +message. The place to indicate which program is running is in the +prompt or with the screen layout. (When the same program runs with +input from a source other than a terminal, it is not interactive and +would do best to print error messages using the noninteractive style.) + + The string MESSAGE should not begin with a capital letter when it +follows a program name and/or file name, because that isn't the +beginning of a sentence. (The sentence conceptually starts at the +beginning of the line.) Also, it should not end with a period. + + Error messages from interactive programs, and other messages such as +usage messages, should start with a capital letter. But they should not +end with a period. + + +File: standards.info, Node: User Interfaces, Next: Graphical Interfaces, Prev: Errors, Up: Program Behavior + +4.5 Standards for Interfaces Generally +====================================== + +Please don't make the behavior of a utility depend on the name used to +invoke it. It is useful sometimes to make a link to a utility with a +different name, and that should not change what it does. + + Instead, use a run time option or a compilation switch or both to +select among the alternate behaviors. + + Likewise, please don't make the behavior of the program depend on the +type of output device it is used with. Device independence is an +important principle of the system's design; do not compromise it merely +to save someone from typing an option now and then. (Variation in error +message syntax when using a terminal is ok, because that is a side issue +that people do not depend on.) + + If you think one behavior is most useful when the output is to a +terminal, and another is most useful when the output is a file or a +pipe, then it is usually best to make the default behavior the one that +is useful with output to a terminal, and have an option for the other +behavior. + + Compatibility requires certain programs to depend on the type of +output device. It would be disastrous if 'ls' or 'sh' did not do so in +the way all users expect. In some of these cases, we supplement the +program with a preferred alternate version that does not depend on the +output device type. For example, we provide a 'dir' program much like +'ls' except that its default output format is always multi-column +format. + + +File: standards.info, Node: Graphical Interfaces, Next: Command-Line Interfaces, Prev: User Interfaces, Up: Program Behavior + +4.6 Standards for Graphical Interfaces +====================================== + +When you write a program that provides a graphical user interface, +please make it work with the X Window System and the GTK+ toolkit unless +the functionality specifically requires some alternative (for example, +"displaying jpeg images while in console mode"). + + In addition, please provide a command-line interface to control the +functionality. (In many cases, the graphical user interface can be a +separate program which invokes the command-line program.) This is so +that the same jobs can be done from scripts. + + Please also consider providing a D-bus interface for use from other +running programs, such as within GNOME. (GNOME used to use CORBA for +this, but that is being phased out.) In addition, consider providing a +library interface (for use from C), and perhaps a keyboard-driven +console interface (for use by users from console mode). Once you are +doing the work to provide the functionality and the graphical interface, +these won't be much extra work. + + +File: standards.info, Node: Command-Line Interfaces, Next: Option Table, Prev: Graphical Interfaces, Up: Program Behavior + +4.7 Standards for Command Line Interfaces +========================================= + +It is a good idea to follow the POSIX guidelines for the command-line +options of a program. The easiest way to do this is to use 'getopt' to +parse them. Note that the GNU version of 'getopt' will normally permit +options anywhere among the arguments unless the special argument '--' is +used. This is not what POSIX specifies; it is a GNU extension. + + Please define long-named options that are equivalent to the +single-letter Unix-style options. We hope to make GNU more user +friendly this way. This is easy to do with the GNU function +'getopt_long'. + + One of the advantages of long-named options is that they can be +consistent from program to program. For example, users should be able +to expect the "verbose" option of any GNU program which has one, to be +spelled precisely '--verbose'. To achieve this uniformity, look at the +table of common long-option names when you choose the option names for +your program (*note Option Table::). + + It is usually a good idea for file names given as ordinary arguments +to be input files only; any output files would be specified using +options (preferably '-o' or '--output'). Even if you allow an output +file name as an ordinary argument for compatibility, try to provide an +option as another way to specify it. This will lead to more consistency +among GNU utilities, and fewer idiosyncrasies for users to remember. + + All programs should support two standard options: '--version' and +'--help'. CGI programs should accept these as command-line options, and +also if given as the 'PATH_INFO'; for instance, visiting + in a browser should output the same +information as invoking 'p.cgi --help' from the command line. + +* Menu: + +* --version:: The standard output for -version. +* --help:: The standard output for -help. + + +File: standards.info, Node: --version, Next: --help, Up: Command-Line Interfaces + +4.7.1 '--version' +----------------- + +The standard '--version' option should direct the program to print +information about its name, version, origin and legal status, all on +standard output, and then exit successfully. Other options and +arguments should be ignored once this is seen, and the program should +not perform its normal function. + + The first line is meant to be easy for a program to parse; the +version number proper starts after the last space. In addition, it +contains the canonical name for this program, in this format: + + GNU Emacs 19.30 + +The program's name should be a constant string; _don't_ compute it from +'argv[0]'. The idea is to state the standard or canonical name for the +program, not its file name. There are other ways to find out the +precise file name where a command is found in 'PATH'. + + If the program is a subsidiary part of a larger package, mention the +package name in parentheses, like this: + + emacsserver (GNU Emacs) 19.30 + +If the package has a version number which is different from this +program's version number, you can mention the package version number +just before the close-parenthesis. + + If you _need_ to mention the version numbers of libraries which are +distributed separately from the package which contains this program, you +can do so by printing an additional line of version info for each +library you want to mention. Use the same format for these lines as for +the first line. + + Please do not mention all of the libraries that the program uses +"just for completeness"--that would produce a lot of unhelpful clutter. +Please mention library version numbers only if you find in practice that +they are very important to you in debugging. + + The following line, after the version number line or lines, should be +a copyright notice. If more than one copyright notice is called for, +put each on a separate line. + + Next should follow a line stating the license, preferably using one +of abbrevations below, and a brief statement that the program is free +software, and that users are free to copy and change it. Also mention +that there is no warranty, to the extent permitted by law. See +recommended wording below. + + It is ok to finish the output with a list of the major authors of the +program, as a way of giving credit. + + Here's an example of output that follows these rules: + + GNU hello 2.3 + Copyright (C) 2007 Free Software Foundation, Inc. + License GPLv3+: GNU GPL version 3 or later + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + + You should adapt this to your program, of course, filling in the +proper year, copyright holder, name of program, and the references to +distribution terms, and changing the rest of the wording as necessary. + + This copyright notice only needs to mention the most recent year in +which changes were made--there's no need to list the years for previous +versions' changes. You don't have to mention the name of the program in +these notices, if that is inconvenient, since it appeared in the first +line. (The rules are different for copyright notices in source files; +*note (maintain)Copyright Notices::.) + + Translations of the above lines must preserve the validity of the +copyright notices (*note Internationalization::). If the translation's +character set supports it, the '(C)' should be replaced with the +copyright symbol, as follows: + + (the official copyright symbol, which is the letter C in a circle); + + Write the word "Copyright" exactly like that, in English. Do not +translate it into another language. International treaties recognize +the English word "Copyright"; translations into other languages do not +have legal significance. + + Finally, here is the table of our suggested license abbreviations. +Any abbreviation can be followed by 'vVERSION[+]', meaning that +particular version, or later versions with the '+', as shown above. + + In the case of exceptions for extra permissions with the GPL, we use +'/' for a separator; the version number can follow the license +abbreviation as usual, as in the examples below. + +GPL + GNU General Public License, . + +LGPL + GNU Lesser General Public License, + . + +GPL/Ada + GNU GPL with the exception for Ada. + +Apache + The Apache Software Foundation license, + . + +Artistic + The Artistic license used for Perl, + . + +Expat + The Expat license, . + +MPL + The Mozilla Public License, . + +OBSD + The original (4-clause) BSD license, incompatible with the GNU GPL + . + +PHP + The license used for PHP, . + +public domain + The non-license that is being in the public domain, + . + +Python + The license for Python, . + +RBSD + The revised (3-clause) BSD, compatible with the GNU GPL, + . + +X11 + The simple non-copyleft license used for most versions of the X + Window System, . + +Zlib + The license for Zlib, . + + More information about these licenses and many more are on the GNU +licensing web pages, . + + +File: standards.info, Node: --help, Prev: --version, Up: Command-Line Interfaces + +4.7.2 '--help' +-------------- + +The standard '--help' option should output brief documentation for how +to invoke the program, on standard output, then exit successfully. +Other options and arguments should be ignored once this is seen, and the +program should not perform its normal function. + + Near the end of the '--help' option's output, please place lines +giving the email address for bug reports, the package's home page +(normally 'http://www.gnu.org/software/PKG', and the general page for +help using GNU programs. The format should be like this: + + Report bugs to: MAILING-ADDRESS + PKG home page: + General help using GNU software: + + It is ok to mention other appropriate mailing lists and web pages. + + +File: standards.info, Node: Option Table, Next: OID Allocations, Prev: Command-Line Interfaces, Up: Program Behavior + +4.8 Table of Long Options +========================= + +Here is a table of long options used by GNU programs. It is surely +incomplete, but we aim to list all the options that a new program might +want to be compatible with. If you use names not already in the table, +please send a list of them, with their meanings, +so we can update the table. + +'after-date' + '-N' in 'tar'. + +'all' + '-a' in 'du', 'ls', 'nm', 'stty', 'uname', and 'unexpand'. + +'all-text' + '-a' in 'diff'. + +'almost-all' + '-A' in 'ls'. + +'append' + '-a' in 'etags', 'tee', 'time'; '-r' in 'tar'. + +'archive' + '-a' in 'cp'. + +'archive-name' + '-n' in 'shar'. + +'arglength' + '-l' in 'm4'. + +'ascii' + '-a' in 'diff'. + +'assign' + '-v' in 'gawk'. + +'assume-new' + '-W' in 'make'. + +'assume-old' + '-o' in 'make'. + +'auto-check' + '-a' in 'recode'. + +'auto-pager' + '-a' in 'wdiff'. + +'auto-reference' + '-A' in 'ptx'. + +'avoid-wraps' + '-n' in 'wdiff'. + +'background' + For server programs, run in the background. + +'backward-search' + '-B' in 'ctags'. + +'basename' + '-f' in 'shar'. + +'batch' + Used in GDB. + +'baud' + Used in GDB. + +'before' + '-b' in 'tac'. + +'binary' + '-b' in 'cpio' and 'diff'. + +'bits-per-code' + '-b' in 'shar'. + +'block-size' + Used in 'cpio' and 'tar'. + +'blocks' + '-b' in 'head' and 'tail'. + +'break-file' + '-b' in 'ptx'. + +'brief' + Used in various programs to make output shorter. + +'bytes' + '-c' in 'head', 'split', and 'tail'. + +'c++' + '-C' in 'etags'. + +'catenate' + '-A' in 'tar'. + +'cd' + Used in various programs to specify the directory to use. + +'changes' + '-c' in 'chgrp' and 'chown'. + +'classify' + '-F' in 'ls'. + +'colons' + '-c' in 'recode'. + +'command' + '-c' in 'su'; '-x' in GDB. + +'compare' + '-d' in 'tar'. + +'compat' + Used in 'gawk'. + +'compress' + '-Z' in 'tar' and 'shar'. + +'concatenate' + '-A' in 'tar'. + +'confirmation' + '-w' in 'tar'. + +'context' + Used in 'diff'. + +'copyleft' + '-W copyleft' in 'gawk'. + +'copyright' + '-C' in 'ptx', 'recode', and 'wdiff'; '-W copyright' in 'gawk'. + +'core' + Used in GDB. + +'count' + '-q' in 'who'. + +'count-links' + '-l' in 'du'. + +'create' + Used in 'tar' and 'cpio'. + +'cut-mark' + '-c' in 'shar'. + +'cxref' + '-x' in 'ctags'. + +'date' + '-d' in 'touch'. + +'debug' + '-d' in 'make' and 'm4'; '-t' in Bison. + +'define' + '-D' in 'm4'. + +'defines' + '-d' in Bison and 'ctags'. + +'delete' + '-D' in 'tar'. + +'dereference' + '-L' in 'chgrp', 'chown', 'cpio', 'du', 'ls', and 'tar'. + +'dereference-args' + '-D' in 'du'. + +'device' + Specify an I/O device (special file name). + +'diacritics' + '-d' in 'recode'. + +'dictionary-order' + '-d' in 'look'. + +'diff' + '-d' in 'tar'. + +'digits' + '-n' in 'csplit'. + +'directory' + Specify the directory to use, in various programs. In 'ls', it + means to show directories themselves rather than their contents. + In 'rm' and 'ln', it means to not treat links to directories + specially. + +'discard-all' + '-x' in 'strip'. + +'discard-locals' + '-X' in 'strip'. + +'dry-run' + '-n' in 'make'. + +'ed' + '-e' in 'diff'. + +'elide-empty-files' + '-z' in 'csplit'. + +'end-delete' + '-x' in 'wdiff'. + +'end-insert' + '-z' in 'wdiff'. + +'entire-new-file' + '-N' in 'diff'. + +'environment-overrides' + '-e' in 'make'. + +'eof' + '-e' in 'xargs'. + +'epoch' + Used in GDB. + +'error-limit' + Used in 'makeinfo'. + +'error-output' + '-o' in 'm4'. + +'escape' + '-b' in 'ls'. + +'exclude-from' + '-X' in 'tar'. + +'exec' + Used in GDB. + +'exit' + '-x' in 'xargs'. + +'exit-0' + '-e' in 'unshar'. + +'expand-tabs' + '-t' in 'diff'. + +'expression' + '-e' in 'sed'. + +'extern-only' + '-g' in 'nm'. + +'extract' + '-i' in 'cpio'; '-x' in 'tar'. + +'faces' + '-f' in 'finger'. + +'fast' + '-f' in 'su'. + +'fatal-warnings' + '-E' in 'm4'. + +'file' + '-f' in 'gawk', 'info', 'make', 'mt', 'sed', and 'tar'. + +'field-separator' + '-F' in 'gawk'. + +'file-prefix' + '-b' in Bison. + +'file-type' + '-F' in 'ls'. + +'files-from' + '-T' in 'tar'. + +'fill-column' + Used in 'makeinfo'. + +'flag-truncation' + '-F' in 'ptx'. + +'fixed-output-files' + '-y' in Bison. + +'follow' + '-f' in 'tail'. + +'footnote-style' + Used in 'makeinfo'. + +'force' + '-f' in 'cp', 'ln', 'mv', and 'rm'. + +'force-prefix' + '-F' in 'shar'. + +'foreground' + For server programs, run in the foreground; in other words, don't + do anything special to run the server in the background. + +'format' + Used in 'ls', 'time', and 'ptx'. + +'freeze-state' + '-F' in 'm4'. + +'fullname' + Used in GDB. + +'gap-size' + '-g' in 'ptx'. + +'get' + '-x' in 'tar'. + +'graphic' + '-i' in 'ul'. + +'graphics' + '-g' in 'recode'. + +'group' + '-g' in 'install'. + +'gzip' + '-z' in 'tar' and 'shar'. + +'hashsize' + '-H' in 'm4'. + +'header' + '-h' in 'objdump' and 'recode' + +'heading' + '-H' in 'who'. + +'help' + Used to ask for brief usage information. + +'here-delimiter' + '-d' in 'shar'. + +'hide-control-chars' + '-q' in 'ls'. + +'html' + In 'makeinfo', output HTML. + +'idle' + '-u' in 'who'. + +'ifdef' + '-D' in 'diff'. + +'ignore' + '-I' in 'ls'; '-x' in 'recode'. + +'ignore-all-space' + '-w' in 'diff'. + +'ignore-backups' + '-B' in 'ls'. + +'ignore-blank-lines' + '-B' in 'diff'. + +'ignore-case' + '-f' in 'look' and 'ptx'; '-i' in 'diff' and 'wdiff'. + +'ignore-errors' + '-i' in 'make'. + +'ignore-file' + '-i' in 'ptx'. + +'ignore-indentation' + '-I' in 'etags'. + +'ignore-init-file' + '-f' in Oleo. + +'ignore-interrupts' + '-i' in 'tee'. + +'ignore-matching-lines' + '-I' in 'diff'. + +'ignore-space-change' + '-b' in 'diff'. + +'ignore-zeros' + '-i' in 'tar'. + +'include' + '-i' in 'etags'; '-I' in 'm4'. + +'include-dir' + '-I' in 'make'. + +'incremental' + '-G' in 'tar'. + +'info' + '-i', '-l', and '-m' in Finger. + +'init-file' + In some programs, specify the name of the file to read as the + user's init file. + +'initial' + '-i' in 'expand'. + +'initial-tab' + '-T' in 'diff'. + +'inode' + '-i' in 'ls'. + +'interactive' + '-i' in 'cp', 'ln', 'mv', 'rm'; '-e' in 'm4'; '-p' in 'xargs'; '-w' + in 'tar'. + +'intermix-type' + '-p' in 'shar'. + +'iso-8601' + Used in 'date' + +'jobs' + '-j' in 'make'. + +'just-print' + '-n' in 'make'. + +'keep-going' + '-k' in 'make'. + +'keep-files' + '-k' in 'csplit'. + +'kilobytes' + '-k' in 'du' and 'ls'. + +'language' + '-l' in 'etags'. + +'less-mode' + '-l' in 'wdiff'. + +'level-for-gzip' + '-g' in 'shar'. + +'line-bytes' + '-C' in 'split'. + +'lines' + Used in 'split', 'head', and 'tail'. + +'link' + '-l' in 'cpio'. + +'lint' +'lint-old' + Used in 'gawk'. + +'list' + '-t' in 'cpio'; '-l' in 'recode'. + +'list' + '-t' in 'tar'. + +'literal' + '-N' in 'ls'. + +'load-average' + '-l' in 'make'. + +'login' + Used in 'su'. + +'machine' + Used in 'uname'. + +'macro-name' + '-M' in 'ptx'. + +'mail' + '-m' in 'hello' and 'uname'. + +'make-directories' + '-d' in 'cpio'. + +'makefile' + '-f' in 'make'. + +'mapped' + Used in GDB. + +'max-args' + '-n' in 'xargs'. + +'max-chars' + '-n' in 'xargs'. + +'max-lines' + '-l' in 'xargs'. + +'max-load' + '-l' in 'make'. + +'max-procs' + '-P' in 'xargs'. + +'mesg' + '-T' in 'who'. + +'message' + '-T' in 'who'. + +'minimal' + '-d' in 'diff'. + +'mixed-uuencode' + '-M' in 'shar'. + +'mode' + '-m' in 'install', 'mkdir', and 'mkfifo'. + +'modification-time' + '-m' in 'tar'. + +'multi-volume' + '-M' in 'tar'. + +'name-prefix' + '-a' in Bison. + +'nesting-limit' + '-L' in 'm4'. + +'net-headers' + '-a' in 'shar'. + +'new-file' + '-W' in 'make'. + +'no-builtin-rules' + '-r' in 'make'. + +'no-character-count' + '-w' in 'shar'. + +'no-check-existing' + '-x' in 'shar'. + +'no-common' + '-3' in 'wdiff'. + +'no-create' + '-c' in 'touch'. + +'no-defines' + '-D' in 'etags'. + +'no-deleted' + '-1' in 'wdiff'. + +'no-dereference' + '-d' in 'cp'. + +'no-inserted' + '-2' in 'wdiff'. + +'no-keep-going' + '-S' in 'make'. + +'no-lines' + '-l' in Bison. + +'no-piping' + '-P' in 'shar'. + +'no-prof' + '-e' in 'gprof'. + +'no-regex' + '-R' in 'etags'. + +'no-sort' + '-p' in 'nm'. + +'no-splash' + Don't print a startup splash screen. + +'no-split' + Used in 'makeinfo'. + +'no-static' + '-a' in 'gprof'. + +'no-time' + '-E' in 'gprof'. + +'no-timestamp' + '-m' in 'shar'. + +'no-validate' + Used in 'makeinfo'. + +'no-wait' + Used in 'emacsclient'. + +'no-warn' + Used in various programs to inhibit warnings. + +'node' + '-n' in 'info'. + +'nodename' + '-n' in 'uname'. + +'nonmatching' + '-f' in 'cpio'. + +'nstuff' + '-n' in 'objdump'. + +'null' + '-0' in 'xargs'. + +'number' + '-n' in 'cat'. + +'number-nonblank' + '-b' in 'cat'. + +'numeric-sort' + '-n' in 'nm'. + +'numeric-uid-gid' + '-n' in 'cpio' and 'ls'. + +'nx' + Used in GDB. + +'old-archive' + '-o' in 'tar'. + +'old-file' + '-o' in 'make'. + +'one-file-system' + '-l' in 'tar', 'cp', and 'du'. + +'only-file' + '-o' in 'ptx'. + +'only-prof' + '-f' in 'gprof'. + +'only-time' + '-F' in 'gprof'. + +'options' + '-o' in 'getopt', 'fdlist', 'fdmount', 'fdmountd', and 'fdumount'. + +'output' + In various programs, specify the output file name. + +'output-prefix' + '-o' in 'shar'. + +'override' + '-o' in 'rm'. + +'overwrite' + '-c' in 'unshar'. + +'owner' + '-o' in 'install'. + +'paginate' + '-l' in 'diff'. + +'paragraph-indent' + Used in 'makeinfo'. + +'parents' + '-p' in 'mkdir' and 'rmdir'. + +'pass-all' + '-p' in 'ul'. + +'pass-through' + '-p' in 'cpio'. + +'port' + '-P' in 'finger'. + +'portability' + '-c' in 'cpio' and 'tar'. + +'posix' + Used in 'gawk'. + +'prefix-builtins' + '-P' in 'm4'. + +'prefix' + '-f' in 'csplit'. + +'preserve' + Used in 'tar' and 'cp'. + +'preserve-environment' + '-p' in 'su'. + +'preserve-modification-time' + '-m' in 'cpio'. + +'preserve-order' + '-s' in 'tar'. + +'preserve-permissions' + '-p' in 'tar'. + +'print' + '-l' in 'diff'. + +'print-chars' + '-L' in 'cmp'. + +'print-data-base' + '-p' in 'make'. + +'print-directory' + '-w' in 'make'. + +'print-file-name' + '-o' in 'nm'. + +'print-symdefs' + '-s' in 'nm'. + +'printer' + '-p' in 'wdiff'. + +'prompt' + '-p' in 'ed'. + +'proxy' + Specify an HTTP proxy. + +'query-user' + '-X' in 'shar'. + +'question' + '-q' in 'make'. + +'quiet' + Used in many programs to inhibit the usual output. Every program + accepting '--quiet' should accept '--silent' as a synonym. + +'quiet-unshar' + '-Q' in 'shar' + +'quote-name' + '-Q' in 'ls'. + +'rcs' + '-n' in 'diff'. + +'re-interval' + Used in 'gawk'. + +'read-full-blocks' + '-B' in 'tar'. + +'readnow' + Used in GDB. + +'recon' + '-n' in 'make'. + +'record-number' + '-R' in 'tar'. + +'recursive' + Used in 'chgrp', 'chown', 'cp', 'ls', 'diff', and 'rm'. + +'reference' + '-r' in 'touch'. + +'references' + '-r' in 'ptx'. + +'regex' + '-r' in 'tac' and 'etags'. + +'release' + '-r' in 'uname'. + +'reload-state' + '-R' in 'm4'. + +'relocation' + '-r' in 'objdump'. + +'rename' + '-r' in 'cpio'. + +'replace' + '-i' in 'xargs'. + +'report-identical-files' + '-s' in 'diff'. + +'reset-access-time' + '-a' in 'cpio'. + +'reverse' + '-r' in 'ls' and 'nm'. + +'reversed-ed' + '-f' in 'diff'. + +'right-side-defs' + '-R' in 'ptx'. + +'same-order' + '-s' in 'tar'. + +'same-permissions' + '-p' in 'tar'. + +'save' + '-g' in 'stty'. + +'se' + Used in GDB. + +'sentence-regexp' + '-S' in 'ptx'. + +'separate-dirs' + '-S' in 'du'. + +'separator' + '-s' in 'tac'. + +'sequence' + Used by 'recode' to chose files or pipes for sequencing passes. + +'shell' + '-s' in 'su'. + +'show-all' + '-A' in 'cat'. + +'show-c-function' + '-p' in 'diff'. + +'show-ends' + '-E' in 'cat'. + +'show-function-line' + '-F' in 'diff'. + +'show-tabs' + '-T' in 'cat'. + +'silent' + Used in many programs to inhibit the usual output. Every program + accepting '--silent' should accept '--quiet' as a synonym. + +'size' + '-s' in 'ls'. + +'socket' + Specify a file descriptor for a network server to use for its + socket, instead of opening and binding a new socket. This provides + a way to run, in a non-privileged process, a server that normally + needs a reserved port number. + +'sort' + Used in 'ls'. + +'source' + '-W source' in 'gawk'. + +'sparse' + '-S' in 'tar'. + +'speed-large-files' + '-H' in 'diff'. + +'split-at' + '-E' in 'unshar'. + +'split-size-limit' + '-L' in 'shar'. + +'squeeze-blank' + '-s' in 'cat'. + +'start-delete' + '-w' in 'wdiff'. + +'start-insert' + '-y' in 'wdiff'. + +'starting-file' + Used in 'tar' and 'diff' to specify which file within a directory + to start processing with. + +'statistics' + '-s' in 'wdiff'. + +'stdin-file-list' + '-S' in 'shar'. + +'stop' + '-S' in 'make'. + +'strict' + '-s' in 'recode'. + +'strip' + '-s' in 'install'. + +'strip-all' + '-s' in 'strip'. + +'strip-debug' + '-S' in 'strip'. + +'submitter' + '-s' in 'shar'. + +'suffix' + '-S' in 'cp', 'ln', 'mv'. + +'suffix-format' + '-b' in 'csplit'. + +'sum' + '-s' in 'gprof'. + +'summarize' + '-s' in 'du'. + +'symbolic' + '-s' in 'ln'. + +'symbols' + Used in GDB and 'objdump'. + +'synclines' + '-s' in 'm4'. + +'sysname' + '-s' in 'uname'. + +'tabs' + '-t' in 'expand' and 'unexpand'. + +'tabsize' + '-T' in 'ls'. + +'terminal' + '-T' in 'tput' and 'ul'. '-t' in 'wdiff'. + +'text' + '-a' in 'diff'. + +'text-files' + '-T' in 'shar'. + +'time' + Used in 'ls' and 'touch'. + +'timeout' + Specify how long to wait before giving up on some operation. + +'to-stdout' + '-O' in 'tar'. + +'total' + '-c' in 'du'. + +'touch' + '-t' in 'make', 'ranlib', and 'recode'. + +'trace' + '-t' in 'm4'. + +'traditional' + '-t' in 'hello'; '-W traditional' in 'gawk'; '-G' in 'ed', 'm4', + and 'ptx'. + +'tty' + Used in GDB. + +'typedefs' + '-t' in 'ctags'. + +'typedefs-and-c++' + '-T' in 'ctags'. + +'typeset-mode' + '-t' in 'ptx'. + +'uncompress' + '-z' in 'tar'. + +'unconditional' + '-u' in 'cpio'. + +'undefine' + '-U' in 'm4'. + +'undefined-only' + '-u' in 'nm'. + +'update' + '-u' in 'cp', 'ctags', 'mv', 'tar'. + +'usage' + Used in 'gawk'; same as '--help'. + +'uuencode' + '-B' in 'shar'. + +'vanilla-operation' + '-V' in 'shar'. + +'verbose' + Print more information about progress. Many programs support this. + +'verify' + '-W' in 'tar'. + +'version' + Print the version number. + +'version-control' + '-V' in 'cp', 'ln', 'mv'. + +'vgrind' + '-v' in 'ctags'. + +'volume' + '-V' in 'tar'. + +'what-if' + '-W' in 'make'. + +'whole-size-limit' + '-l' in 'shar'. + +'width' + '-w' in 'ls' and 'ptx'. + +'word-regexp' + '-W' in 'ptx'. + +'writable' + '-T' in 'who'. + +'zeros' + '-z' in 'gprof'. + + +File: standards.info, Node: OID Allocations, Next: Memory Usage, Prev: Option Table, Up: Program Behavior + +4.9 OID Allocations +=================== + +The OID (object identifier) 1.3.6.1.4.1.11591 has been assigned to the +GNU Project (thanks to Werner Koch). These are used for SNMP, LDAP, +X.509 certificates, and so on. The web site + has a (voluntary) listing of many +OID assignments. + + If you need a new slot for your GNU package, write +. Here is a list of arcs currently assigned: + + + 1.3.6.1.4.1.11591 GNU + + 1.3.6.1.4.1.11591.1 GNU Radius + + 1.3.6.1.4.1.11591.2 GnuPG + 1.3.6.1.4.1.11591.2.1 notation + 1.3.6.1.4.1.11591.2.1.1 pkaAddress + + 1.3.6.1.4.1.11591.3 GNU Radar + + 1.3.6.1.4.1.11591.4 GNU GSS + + 1.3.6.1.4.1.11591.5 GNU Mailutils + + 1.3.6.1.4.1.11591.6 GNU Shishi + + 1.3.6.1.4.1.11591.7 GNU Radio + + 1.3.6.1.4.1.11591.12 digestAlgorithm + 1.3.6.1.4.1.11591.12.2 TIGER/192 + 1.3.6.1.4.1.11591.13 encryptionAlgorithm + 1.3.6.1.4.1.11591.13.2 Serpent + 1.3.6.1.4.1.11591.13.2.1 Serpent-128-ECB + 1.3.6.1.4.1.11591.13.2.2 Serpent-128-CBC + 1.3.6.1.4.1.11591.13.2.3 Serpent-128-OFB + 1.3.6.1.4.1.11591.13.2.4 Serpent-128-CFB + 1.3.6.1.4.1.11591.13.2.21 Serpent-192-ECB + 1.3.6.1.4.1.11591.13.2.22 Serpent-192-CBC + 1.3.6.1.4.1.11591.13.2.23 Serpent-192-OFB + 1.3.6.1.4.1.11591.13.2.24 Serpent-192-CFB + 1.3.6.1.4.1.11591.13.2.41 Serpent-256-ECB + 1.3.6.1.4.1.11591.13.2.42 Serpent-256-CBC + 1.3.6.1.4.1.11591.13.2.43 Serpent-256-OFB + 1.3.6.1.4.1.11591.13.2.44 Serpent-256-CFB + 1.3.6.1.4.1.11591.14 CRC algorithms + 1.3.6.1.4.1.11591.14.1 CRC 32 + + +File: standards.info, Node: Memory Usage, Next: File Usage, Prev: OID Allocations, Up: Program Behavior + +4.10 Memory Usage +================= + +If a program typically uses just a few meg of memory, don't bother +making any effort to reduce memory usage. For example, if it is +impractical for other reasons to operate on files more than a few meg +long, it is reasonable to read entire input files into memory to operate +on them. + + However, for programs such as 'cat' or 'tail', that can usefully +operate on very large files, it is important to avoid using a technique +that would artificially limit the size of files it can handle. If a +program works by lines and could be applied to arbitrary user-supplied +input files, it should keep only a line in memory, because this is not +very hard and users will want to be able to operate on input files that +are bigger than will fit in memory all at once. + + If your program creates complicated data structures, just make them +in memory and give a fatal error if 'malloc' returns zero. + + +File: standards.info, Node: File Usage, Prev: Memory Usage, Up: Program Behavior + +4.11 File Usage +=============== + +Programs should be prepared to operate when '/usr' and '/etc' are +read-only file systems. Thus, if the program manages log files, lock +files, backup files, score files, or any other files which are modified +for internal purposes, these files should not be stored in '/usr' or +'/etc'. + + There are two exceptions. '/etc' is used to store system +configuration information; it is reasonable for a program to modify +files in '/etc' when its job is to update the system configuration. +Also, if the user explicitly asks to modify one file in a directory, it +is reasonable for the program to store other files in the same +directory. + + +File: standards.info, Node: Writing C, Next: Documentation, Prev: Program Behavior, Up: Top + +5 Making The Best Use of C +************************** + +This chapter provides advice on how best to use the C language when +writing GNU software. + +* Menu: + +* Formatting:: Formatting your source code. +* Comments:: Commenting your work. +* Syntactic Conventions:: Clean use of C constructs. +* Names:: Naming variables, functions, and files. +* System Portability:: Portability among different operating systems. +* CPU Portability:: Supporting the range of CPU types. +* System Functions:: Portability and "standard" library functions. +* Internationalization:: Techniques for internationalization. +* Character Set:: Use ASCII by default. +* Quote Characters:: Use '...' in the C locale. +* Mmap:: How you can safely use 'mmap'. + + +File: standards.info, Node: Formatting, Next: Comments, Up: Writing C + +5.1 Formatting Your Source Code +=============================== + +It is important to put the open-brace that starts the body of a C +function in column one, so that they will start a defun. Several tools +look for open-braces in column one to find the beginnings of C +functions. These tools will not work on code not formatted that way. + + Avoid putting open-brace, open-parenthesis or open-bracket in column +one when they are inside a function, so that they won't start a defun. +The open-brace that starts a 'struct' body can go in column one if you +find it useful to treat that definition as a defun. + + It is also important for function definitions to start the name of +the function in column one. This helps people to search for function +definitions, and may also help certain tools recognize them. Thus, +using Standard C syntax, the format is this: + + static char * + concat (char *s1, char *s2) + { + ... + } + +or, if you want to use traditional C syntax, format the definition like +this: + + static char * + concat (s1, s2) /* Name starts in column one here */ + char *s1, *s2; + { /* Open brace in column one here */ + ... + } + + In Standard C, if the arguments don't fit nicely on one line, split +it like this: + + int + lots_of_args (int an_integer, long a_long, short a_short, + double a_double, float a_float) + ... + + The rest of this section gives our recommendations for other aspects +of C formatting style, which is also the default style of the 'indent' +program in version 1.2 and newer. It corresponds to the options + + -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2 + -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob + + We don't think of these recommendations as requirements, because it +causes no problems for users if two different programs have different +formatting styles. + + But whatever style you use, please use it consistently, since a +mixture of styles within one program tends to look ugly. If you are +contributing changes to an existing program, please follow the style of +that program. + + For the body of the function, our recommended style looks like this: + + if (x < foo (y, z)) + haha = bar[4] + 5; + else + { + while (z) + { + haha += foo (z, z); + z--; + } + return ++x + bar (); + } + + We find it easier to read a program when it has spaces before the +open-parentheses and after the commas. Especially after the commas. + + When you split an expression into multiple lines, split it before an +operator, not after one. Here is the right way: + + if (foo_this_is_long && bar > win (x, y, z) + && remaining_condition) + + Try to avoid having two operators of different precedence at the same +level of indentation. For example, don't write this: + + mode = (inmode[j] == VOIDmode + || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) + ? outmode[j] : inmode[j]); + + Instead, use extra parentheses so that the indentation shows the +nesting: + + mode = ((inmode[j] == VOIDmode + || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) + ? outmode[j] : inmode[j]); + + Insert extra parentheses so that Emacs will indent the code properly. +For example, the following indentation looks nice if you do it by hand, + + v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000; + +but Emacs would alter it. Adding a set of parentheses produces +something that looks equally nice, and which Emacs will preserve: + + v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000); + + Format do-while statements like this: + + do + { + a = foo (a); + } + while (a > 0); + + Please use formfeed characters (control-L) to divide the program into +pages at logical places (but not within a function). It does not matter +just how long the pages are, since they do not have to fit on a printed +page. The formfeeds should appear alone on lines by themselves. + + +File: standards.info, Node: Comments, Next: Syntactic Conventions, Prev: Formatting, Up: Writing C + +5.2 Commenting Your Work +======================== + +Every program should start with a comment saying briefly what it is for. +Example: 'fmt - filter for simple filling of text'. This comment should +be at the top of the source file containing the 'main' function of the +program. + + Also, please write a brief comment at the start of each source file, +with the file name and a line or two about the overall purpose of the +file. + + Please write the comments in a GNU program in English, because +English is the one language that nearly all programmers in all countries +can read. If you do not write English well, please write comments in +English as well as you can, then ask other people to help rewrite them. +If you can't write comments in English, please find someone to work with +you and translate your comments into English. + + Please put a comment on each function saying what the function does, +what sorts of arguments it gets, and what the possible values of +arguments mean and are used for. It is not necessary to duplicate in +words the meaning of the C argument declarations, if a C type is being +used in its customary fashion. If there is anything nonstandard about +its use (such as an argument of type 'char *' which is really the +address of the second character of a string, not the first), or any +possible values that would not work the way one would expect (such as, +that strings containing newlines are not guaranteed to work), be sure to +say so. + + Also explain the significance of the return value, if there is one. + + Please put two spaces after the end of a sentence in your comments, +so that the Emacs sentence commands will work. Also, please write +complete sentences and capitalize the first word. If a lower-case +identifier comes at the beginning of a sentence, don't capitalize it! +Changing the spelling makes it a different identifier. If you don't +like starting a sentence with a lower case letter, write the sentence +differently (e.g., "The identifier lower-case is ..."). + + The comment on a function is much clearer if you use the argument +names to speak about the argument values. The variable name itself +should be lower case, but write it in upper case when you are speaking +about the value rather than the variable itself. Thus, "the inode +number NODE_NUM" rather than "an inode". + + There is usually no purpose in restating the name of the function in +the comment before it, because the reader can see that for himself. +There might be an exception when the comment is so long that the +function itself would be off the bottom of the screen. + + There should be a comment on each static variable as well, like this: + + /* Nonzero means truncate lines in the display; + zero means continue them. */ + int truncate_lines; + + Every '#endif' should have a comment, except in the case of short +conditionals (just a few lines) that are not nested. The comment should +state the condition of the conditional that is ending, _including its +sense_. '#else' should have a comment describing the condition _and +sense_ of the code that follows. For example: + + #ifdef foo + ... + #else /* not foo */ + ... + #endif /* not foo */ + #ifdef foo + ... + #endif /* foo */ + +but, by contrast, write the comments this way for a '#ifndef': + + #ifndef foo + ... + #else /* foo */ + ... + #endif /* foo */ + #ifndef foo + ... + #endif /* not foo */ + + +File: standards.info, Node: Syntactic Conventions, Next: Names, Prev: Comments, Up: Writing C + +5.3 Clean Use of C Constructs +============================= + +Please explicitly declare the types of all objects. For example, you +should explicitly declare all arguments to functions, and you should +declare functions to return 'int' rather than omitting the 'int'. + + Some programmers like to use the GCC '-Wall' option, and change the +code whenever it issues a warning. If you want to do this, then do. +Other programmers prefer not to use '-Wall', because it gives warnings +for valid and legitimate code which they do not want to change. If you +want to do this, then do. The compiler should be your servant, not your +master. + + Declarations of external functions and functions to appear later in +the source file should all go in one place near the beginning of the +file (somewhere before the first function definition in the file), or +else should go in a header file. Don't put 'extern' declarations inside +functions. + + It used to be common practice to use the same local variables (with +names like 'tem') over and over for different values within one +function. Instead of doing this, it is better to declare a separate +local variable for each distinct purpose, and give it a name which is +meaningful. This not only makes programs easier to understand, it also +facilitates optimization by good compilers. You can also move the +declaration of each local variable into the smallest scope that includes +all its uses. This makes the program even cleaner. + + Don't use local variables or parameters that shadow global +identifiers. + + Don't declare multiple variables in one declaration that spans lines. +Start a new declaration on each line, instead. For example, instead of +this: + + int foo, + bar; + +write either this: + + int foo, bar; + +or this: + + int foo; + int bar; + +(If they are global variables, each should have a comment preceding it +anyway.) + + When you have an 'if'-'else' statement nested in another 'if' +statement, always put braces around the 'if'-'else'. Thus, never write +like this: + + if (foo) + if (bar) + win (); + else + lose (); + +always like this: + + if (foo) + { + if (bar) + win (); + else + lose (); + } + + If you have an 'if' statement nested inside of an 'else' statement, +either write 'else if' on one line, like this, + + if (foo) + ... + else if (bar) + ... + +with its 'then'-part indented like the preceding 'then'-part, or write +the nested 'if' within braces like this: + + if (foo) + ... + else + { + if (bar) + ... + } + + Don't declare both a structure tag and variables or typedefs in the +same declaration. Instead, declare the structure tag separately and +then use it to declare the variables or typedefs. + + Try to avoid assignments inside 'if'-conditions (assignments inside +'while'-conditions are ok). For example, don't write this: + + if ((foo = (char *) malloc (sizeof *foo)) == 0) + fatal ("virtual memory exhausted"); + +instead, write this: + + foo = (char *) malloc (sizeof *foo); + if (foo == 0) + fatal ("virtual memory exhausted"); + + Don't make the program ugly to placate 'lint'. Please don't insert +any casts to 'void'. Zero without a cast is perfectly fine as a null +pointer constant, except when calling a varargs function. + + +File: standards.info, Node: Names, Next: System Portability, Prev: Syntactic Conventions, Up: Writing C + +5.4 Naming Variables, Functions, and Files +========================================== + +The names of global variables and functions in a program serve as +comments of a sort. So don't choose terse names--instead, look for +names that give useful information about the meaning of the variable or +function. In a GNU program, names should be English, like other +comments. + + Local variable names can be shorter, because they are used only +within one context, where (presumably) comments explain their purpose. + + Try to limit your use of abbreviations in symbol names. It is ok to +make a few abbreviations, explain what they mean, and then use them +frequently, but don't use lots of obscure abbreviations. + + Please use underscores to separate words in a name, so that the Emacs +word commands can be useful within them. Stick to lower case; reserve +upper case for macros and 'enum' constants, and for name-prefixes that +follow a uniform convention. + + For example, you should use names like 'ignore_space_change_flag'; +don't use names like 'iCantReadThis'. + + Variables that indicate whether command-line options have been +specified should be named after the meaning of the option, not after the +option-letter. A comment should state both the exact meaning of the +option and its letter. For example, + + /* Ignore changes in horizontal whitespace (-b). */ + int ignore_space_change_flag; + + When you want to define names with constant integer values, use +'enum' rather than '#define'. GDB knows about enumeration constants. + + You might want to make sure that none of the file names would +conflict if the files were loaded onto an MS-DOS file system which +shortens the names. You can use the program 'doschk' to test for this. + + Some GNU programs were designed to limit themselves to file names of +14 characters or less, to avoid file name conflicts if they are read +into older System V systems. Please preserve this feature in the +existing GNU programs that have it, but there is no need to do this in +new GNU programs. 'doschk' also reports file names longer than 14 +characters. + + +File: standards.info, Node: System Portability, Next: CPU Portability, Prev: Names, Up: Writing C + +5.5 Portability between System Types +==================================== + +In the Unix world, "portability" refers to porting to different Unix +versions. For a GNU program, this kind of portability is desirable, but +not paramount. + + The primary purpose of GNU software is to run on top of the GNU +kernel, compiled with the GNU C compiler, on various types of CPU. So +the kinds of portability that are absolutely necessary are quite +limited. But it is important to support Linux-based GNU systems, since +they are the form of GNU that is popular. + + Beyond that, it is good to support the other free operating systems +(*BSD), and it is nice to support other Unix-like systems if you want +to. Supporting a variety of Unix-like systems is desirable, although +not paramount. It is usually not too hard, so you may as well do it. +But you don't have to consider it an obligation, if it does turn out to +be hard. + + The easiest way to achieve portability to most Unix-like systems is +to use Autoconf. It's unlikely that your program needs to know more +information about the host platform than Autoconf can provide, simply +because most of the programs that need such knowledge have already been +written. + + Avoid using the format of semi-internal data bases (e.g., +directories) when there is a higher-level alternative ('readdir'). + + As for systems that are not like Unix, such as MSDOS, Windows, VMS, +MVS, and older Macintosh systems, supporting them is often a lot of +work. When that is the case, it is better to spend your time adding +features that will be useful on GNU and GNU/Linux, rather than on +supporting other incompatible systems. + + If you do support Windows, please do not abbreviate it as "win". In +hacker terminology, calling something a "win" is a form of praise. +You're free to praise Microsoft Windows on your own if you want, but +please don't do this in GNU packages. Instead of abbreviating "Windows" +to "win", you can write it in full or abbreviate it to "woe" or "w". In +GNU Emacs, for instance, we use 'w32' in file names of Windows-specific +files, but the macro for Windows conditionals is called 'WINDOWSNT'. + + It is a good idea to define the "feature test macro" '_GNU_SOURCE' +when compiling your C files. When you compile on GNU or GNU/Linux, this +will enable the declarations of GNU library extension functions, and +that will usually give you a compiler error message if you define the +same function names in some other way in your program. (You don't have +to actually _use_ these functions, if you prefer to make the program +more portable to other systems.) + + But whether or not you use these GNU extensions, you should avoid +using their names for any other meanings. Doing so would make it hard +to move your code into other GNU programs. + + +File: standards.info, Node: CPU Portability, Next: System Functions, Prev: System Portability, Up: Writing C + +5.6 Portability between CPUs +============================ + +Even GNU systems will differ because of differences among CPU types--for +example, difference in byte ordering and alignment requirements. It is +absolutely essential to handle these differences. However, don't make +any effort to cater to the possibility that an 'int' will be less than +32 bits. We don't support 16-bit machines in GNU. + + Similarly, don't make any effort to cater to the possibility that +'long' will be smaller than predefined types like 'size_t'. For +example, the following code is ok: + + printf ("size = %lu\n", (unsigned long) sizeof array); + printf ("diff = %ld\n", (long) (pointer2 - pointer1)); + + 1989 Standard C requires this to work, and we know of only one +counterexample: 64-bit programs on Microsoft Windows. We will leave it +to those who want to port GNU programs to that environment to figure out +how to do it. + + Predefined file-size types like 'off_t' are an exception: they are +longer than 'long' on many platforms, so code like the above won't work +with them. One way to print an 'off_t' value portably is to print its +digits yourself, one by one. + + Don't assume that the address of an 'int' object is also the address +of its least-significant byte. This is false on big-endian machines. +Thus, don't make the following mistake: + + int c; + ... + while ((c = getchar ()) != EOF) + write (file_descriptor, &c, 1); + +Instead, use 'unsigned char' as follows. (The 'unsigned' is for +portability to unusual systems where 'char' is signed and where there is +integer overflow checking.) + + int c; + while ((c = getchar ()) != EOF) + { + unsigned char u = c; + write (file_descriptor, &u, 1); + } + + It used to be ok to not worry about the difference between pointers +and integers when passing arguments to functions. However, on most +modern 64-bit machines pointers are wider than 'int'. Conversely, +integer types like 'long long int' and 'off_t' are wider than pointers +on most modern 32-bit machines. Hence it's often better nowadays to use +prototypes to define functions whose argument types are not trivial. + + In particular, if functions accept varying argument counts or types +they should be declared using prototypes containing '...' and defined +using 'stdarg.h'. For an example of this, please see the Gnulib +(http://www.gnu.org/software/gnulib/) error module, which declares and +defines the following function: + + /* Print a message with `fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ + + void error (int status, int errnum, const char *format, ...); + + A simple way to use the Gnulib error module is to obtain the two +source files 'error.c' and 'error.h' from the Gnulib library source code +repository at . +Here's a sample use: + + #include "error.h" + #include + #include + + char *program_name = "myprogram"; + + FILE * + xfopen (char const *name) + { + FILE *fp = fopen (name, "r"); + if (! fp) + error (1, errno, "cannot read %s", name); + return fp; + } + + Avoid casting pointers to integers if you can. Such casts greatly +reduce portability, and in most programs they are easy to avoid. In the +cases where casting pointers to integers is essential--such as, a Lisp +interpreter which stores type information as well as an address in one +word--you'll have to make explicit provisions to handle different word +sizes. You will also need to make provision for systems in which the +normal range of addresses you can get from 'malloc' starts far away from +zero. + + +File: standards.info, Node: System Functions, Next: Internationalization, Prev: CPU Portability, Up: Writing C + +5.7 Calling System Functions +============================ + +C implementations differ substantially. Standard C reduces but does not +eliminate the incompatibilities; meanwhile, many GNU packages still +support pre-standard compilers because this is not hard to do. This +chapter gives recommendations for how to use the more-or-less standard C +library functions to avoid unnecessary loss of portability. + + * Don't use the return value of 'sprintf'. It returns the number of + characters written on some systems, but not on all systems. + + * Be aware that 'vfprintf' is not always available. + + * 'main' should be declared to return type 'int'. It should + terminate either by calling 'exit' or by returning the integer + status code; make sure it cannot ever return an undefined value. + + * Don't declare system functions explicitly. + + Almost any declaration for a system function is wrong on some + system. To minimize conflicts, leave it to the system header files + to declare system functions. If the headers don't declare a + function, let it remain undeclared. + + While it may seem unclean to use a function without declaring it, + in practice this works fine for most system library functions on + the systems where this really happens; thus, the disadvantage is + only theoretical. By contrast, actual declarations have frequently + caused actual conflicts. + + * If you must declare a system function, don't specify the argument + types. Use an old-style declaration, not a Standard C prototype. + The more you specify about the function, the more likely a + conflict. + + * In particular, don't unconditionally declare 'malloc' or 'realloc'. + + Most GNU programs use those functions just once, in functions + conventionally named 'xmalloc' and 'xrealloc'. These functions + call 'malloc' and 'realloc', respectively, and check the results. + + Because 'xmalloc' and 'xrealloc' are defined in your program, you + can declare them in other files without any risk of type conflict. + + On most systems, 'int' is the same length as a pointer; thus, the + calls to 'malloc' and 'realloc' work fine. For the few exceptional + systems (mostly 64-bit machines), you can use *conditionalized* + declarations of 'malloc' and 'realloc'--or put these declarations + in configuration files specific to those systems. + + * The string functions require special treatment. Some Unix systems + have a header file 'string.h'; others have 'strings.h'. Neither + file name is portable. There are two things you can do: use + Autoconf to figure out which file to include, or don't include + either file. + + * If you don't include either strings file, you can't get + declarations for the string functions from the header file in the + usual way. + + That causes less of a problem than you might think. The newer + standard string functions should be avoided anyway because many + systems still don't support them. The string functions you can use + are these: + + strcpy strncpy strcat strncat + strlen strcmp strncmp + strchr strrchr + + The copy and concatenate functions work fine without a declaration + as long as you don't use their values. Using their values without + a declaration fails on systems where the width of a pointer differs + from the width of 'int', and perhaps in other cases. It is trivial + to avoid using their values, so do that. + + The compare functions and 'strlen' work fine without a declaration + on most systems, possibly all the ones that GNU software runs on. + You may find it necessary to declare them *conditionally* on a few + systems. + + The search functions must be declared to return 'char *'. Luckily, + there is no variation in the data type they return. But there is + variation in their names. Some systems give these functions the + names 'index' and 'rindex'; other systems use the names 'strchr' + and 'strrchr'. Some systems support both pairs of names, but + neither pair works on all systems. + + You should pick a single pair of names and use it throughout your + program. (Nowadays, it is better to choose 'strchr' and 'strrchr' + for new programs, since those are the standard names.) Declare + both of those names as functions returning 'char *'. On systems + which don't support those names, define them as macros in terms of + the other pair. For example, here is what to put at the beginning + of your file (or in a header) if you want to use the names 'strchr' + and 'strrchr' throughout: + + #ifndef HAVE_STRCHR + #define strchr index + #endif + #ifndef HAVE_STRRCHR + #define strrchr rindex + #endif + + char *strchr (); + char *strrchr (); + + Here we assume that 'HAVE_STRCHR' and 'HAVE_STRRCHR' are macros +defined in systems where the corresponding functions exist. One way to +get them properly defined is to use Autoconf. + + +File: standards.info, Node: Internationalization, Next: Character Set, Prev: System Functions, Up: Writing C + +5.8 Internationalization +======================== + +GNU has a library called GNU gettext that makes it easy to translate the +messages in a program into various languages. You should use this +library in every program. Use English for the messages as they appear +in the program, and let gettext provide the way to translate them into +other languages. + + Using GNU gettext involves putting a call to the 'gettext' macro +around each string that might need translation--like this: + + printf (gettext ("Processing file `%s'...")); + +This permits GNU gettext to replace the string '"Processing file +`%s'..."' with a translated version. + + Once a program uses gettext, please make a point of writing calls to +'gettext' when you add new strings that call for translation. + + Using GNU gettext in a package involves specifying a "text domain +name" for the package. The text domain name is used to separate the +translations for this package from the translations for other packages. +Normally, the text domain name should be the same as the name of the +package--for example, 'coreutils' for the GNU core utilities. + + To enable gettext to work well, avoid writing code that makes +assumptions about the structure of words or sentences. When you want +the precise text of a sentence to vary depending on the data, use two or +more alternative string constants each containing a complete sentences, +rather than inserting conditionalized words or phrases into a single +sentence framework. + + Here is an example of what not to do: + + printf ("%s is full", capacity > 5000000 ? "disk" : "floppy disk"); + + If you apply gettext to all strings, like this, + + printf (gettext ("%s is full"), + capacity > 5000000 ? gettext ("disk") : gettext ("floppy disk")); + +the translator will hardly know that "disk" and "floppy disk" are meant +to be substituted in the other string. Worse, in some languages (like +French) the construction will not work: the translation of the word +"full" depends on the gender of the first part of the sentence; it +happens to be not the same for "disk" as for "floppy disk". + + Complete sentences can be translated without problems: + + printf (capacity > 5000000 ? gettext ("disk is full") + : gettext ("floppy disk is full")); + + A similar problem appears at the level of sentence structure with +this code: + + printf ("# Implicit rule search has%s been done.\n", + f->tried_implicit ? "" : " not"); + +Adding 'gettext' calls to this code cannot give correct results for all +languages, because negation in some languages requires adding words at +more than one place in the sentence. By contrast, adding 'gettext' +calls does the job straightforwardly if the code starts out like this: + + printf (f->tried_implicit + ? "# Implicit rule search has been done.\n", + : "# Implicit rule search has not been done.\n"); + + Another example is this one: + + printf ("%d file%s processed", nfiles, + nfiles != 1 ? "s" : ""); + +The problem with this example is that it assumes that plurals are made +by adding 's'. If you apply gettext to the format string, like this, + + printf (gettext ("%d file%s processed"), nfiles, + nfiles != 1 ? "s" : ""); + +the message can use different words, but it will still be forced to use +'s' for the plural. Here is a better way, with gettext being applied to +the two strings independently: + + printf ((nfiles != 1 ? gettext ("%d files processed") + : gettext ("%d file processed")), + nfiles); + +But this still doesn't work for languages like Polish, which has three +plural forms: one for nfiles == 1, one for nfiles == 2, 3, 4, 22, 23, +24, ... and one for the rest. The GNU 'ngettext' function solves this +problem: + + printf (ngettext ("%d files processed", "%d file processed", nfiles), + nfiles); + + +File: standards.info, Node: Character Set, Next: Quote Characters, Prev: Internationalization, Up: Writing C + +5.9 Character Set +================= + +Sticking to the ASCII character set (plain text, 7-bit characters) is +preferred in GNU source code comments, text documents, and other +contexts, unless there is good reason to do something else because of +the application domain. For example, if source code deals with the +French Revolutionary calendar, it is OK if its literal strings contain +accented characters in month names like "Flore'al". Also, it is OK to +use non-ASCII characters to represent proper names of contributors in +change logs (*note Change Logs::). + + If you need to use non-ASCII characters, you should normally stick +with one encoding, as one cannot in general mix encodings reliably. + + +File: standards.info, Node: Quote Characters, Next: Mmap, Prev: Character Set, Up: Writing C + +5.10 Quote Characters +===================== + +In the C locale, GNU programs should stick to plain ASCII for quotation +characters in messages to users: preferably 0x60 ('`') for left quotes +and 0x27 (''') for right quotes. It is ok, but not required, to use +locale-specific quotes in other locales. + + The Gnulib (http://www.gnu.org/software/gnulib/) 'quote' and +'quotearg' modules provide a reasonably straightforward way to support +locale-specific quote characters, as well as taking care of other +issues, such as quoting a filename that itself contains a quote +character. See the Gnulib documentation for usage details. + + In any case, the documentation for your program should clearly +specify how it does quoting, if different than the preferred method of +'`' and '''. This is especially important if the output of your program +is ever likely to be parsed by another program. + + Quotation characters are a difficult area in the computing world at +this time: there are no true left or right quote characters in Latin1; +the '`' character we use was standardized there as a grave accent. +Moreover, Latin1 is still not universally usable. + + Unicode contains the unambiguous quote characters required, and its +common encoding UTF-8 is upward compatible with Latin1. However, +Unicode and UTF-8 are not universally well-supported, either. + + This may change over the next few years, and then we will revisit +this. + + +File: standards.info, Node: Mmap, Prev: Quote Characters, Up: Writing C + +5.11 Mmap +========= + +Don't assume that 'mmap' either works on all files or fails for all +files. It may work on some files and fail on others. + + The proper way to use 'mmap' is to try it on the specific file for +which you want to use it--and if 'mmap' doesn't work, fall back on doing +the job in another way using 'read' and 'write'. + + The reason this precaution is needed is that the GNU kernel (the +HURD) provides a user-extensible file system, in which there can be many +different kinds of "ordinary files." Many of them support 'mmap', but +some do not. It is important to make programs handle all these kinds of +files. + + +File: standards.info, Node: Documentation, Next: Managing Releases, Prev: Writing C, Up: Top + +6 Documenting Programs +********************** + +A GNU program should ideally come with full free documentation, adequate +for both reference and tutorial purposes. If the package can be +programmed or extended, the documentation should cover programming or +extending it, as well as just using it. + +* Menu: + +* GNU Manuals:: Writing proper manuals. +* Doc Strings and Manuals:: Compiling doc strings doesn't make a manual. +* Manual Structure Details:: Specific structure conventions. +* License for Manuals:: Writing the distribution terms for a manual. +* Manual Credits:: Giving credit to documentation contributors. +* Printed Manuals:: Mentioning the printed manual. +* NEWS File:: NEWS files supplement manuals. +* Change Logs:: Recording changes. +* Man Pages:: Man pages are secondary. +* Reading other Manuals:: How far you can go in learning + from other manuals. + + +File: standards.info, Node: GNU Manuals, Next: Doc Strings and Manuals, Up: Documentation + +6.1 GNU Manuals +=============== + +The preferred document format for the GNU system is the Texinfo +formatting language. Every GNU package should (ideally) have +documentation in Texinfo both for reference and for learners. Texinfo +makes it possible to produce a good quality formatted book, using TeX, +and to generate an Info file. It is also possible to generate HTML +output from Texinfo source. See the Texinfo manual, either the +hardcopy, or the on-line version available through 'info' or the Emacs +Info subsystem ('C-h i'). + + Nowadays some other formats such as Docbook and Sgmltexi can be +converted automatically into Texinfo. It is ok to produce the Texinfo +documentation by conversion this way, as long as it gives good results. + + Make sure your manual is clear to a reader who knows nothing about +the topic and reads it straight through. This means covering basic +topics at the beginning, and advanced topics only later. This also +means defining every specialized term when it is first used. + + Programmers tend to carry over the structure of the program as the +structure for its documentation. But this structure is not necessarily +good for explaining how to use the program; it may be irrelevant and +confusing for a user. + + Instead, the right way to structure documentation is according to the +concepts and questions that a user will have in mind when reading it. +This principle applies at every level, from the lowest (ordering +sentences in a paragraph) to the highest (ordering of chapter topics +within the manual). Sometimes this structure of ideas matches the +structure of the implementation of the software being documented--but +often they are different. An important part of learning to write good +documentation is to learn to notice when you have unthinkingly +structured the documentation like the implementation, stop yourself, and +look for better alternatives. + + For example, each program in the GNU system probably ought to be +documented in one manual; but this does not mean each program should +have its own manual. That would be following the structure of the +implementation, rather than the structure that helps the user +understand. + + Instead, each manual should cover a coherent _topic_. For example, +instead of a manual for 'diff' and a manual for 'diff3', we have one +manual for "comparison of files" which covers both of those programs, as +well as 'cmp'. By documenting these programs together, we can make the +whole subject clearer. + + The manual which discusses a program should certainly document all of +the program's command-line options and all of its commands. It should +give examples of their use. But don't organize the manual as a list of +features. Instead, organize it logically, by subtopics. Address the +questions that a user will ask when thinking about the job that the +program does. Don't just tell the reader what each feature can do--say +what jobs it is good for, and show how to use it for those jobs. +Explain what is recommended usage, and what kinds of usage users should +avoid. + + In general, a GNU manual should serve both as tutorial and reference. +It should be set up for convenient access to each topic through Info, +and for reading straight through (appendixes aside). A GNU manual +should give a good introduction to a beginner reading through from the +start, and should also provide all the details that hackers want. The +Bison manual is a good example of this--please take a look at it to see +what we mean. + + That is not as hard as it first sounds. Arrange each chapter as a +logical breakdown of its topic, but order the sections, and write their +text, so that reading the chapter straight through makes sense. Do +likewise when structuring the book into chapters, and when structuring a +section into paragraphs. The watchword is, _at each point, address the +most fundamental and important issue raised by the preceding text._ + + If necessary, add extra chapters at the beginning of the manual which +are purely tutorial and cover the basics of the subject. These provide +the framework for a beginner to understand the rest of the manual. The +Bison manual provides a good example of how to do this. + + To serve as a reference, a manual should have an Index that list all +the functions, variables, options, and important concepts that are part +of the program. One combined Index should do for a short manual, but +sometimes for a complex package it is better to use multiple indices. +The Texinfo manual includes advice on preparing good index entries, see +*note Making Index Entries: (texinfo)Index Entries, and see *note +Defining the Entries of an Index: (texinfo)Indexing Commands. + + Don't use Unix man pages as a model for how to write GNU +documentation; most of them are terse, badly structured, and give +inadequate explanation of the underlying concepts. (There are, of +course, some exceptions.) Also, Unix man pages use a particular format +which is different from what we use in GNU manuals. + + Please include an email address in the manual for where to report +bugs _in the text of the manual_. + + Please do not use the term "pathname" that is used in Unix +documentation; use "file name" (two words) instead. We use the term +"path" only for search paths, which are lists of directory names. + + Please do not use the term "illegal" to refer to erroneous input to a +computer program. Please use "invalid" for this, and reserve the term +"illegal" for activities prohibited by law. + + Please do not write '()' after a function name just to indicate it is +a function. 'foo ()' is not a function, it is a function call with no +arguments. + + +File: standards.info, Node: Doc Strings and Manuals, Next: Manual Structure Details, Prev: GNU Manuals, Up: Documentation + +6.2 Doc Strings and Manuals +=========================== + +Some programming systems, such as Emacs, provide a documentation string +for each function, command or variable. You may be tempted to write a +reference manual by compiling the documentation strings and writing a +little additional text to go around them--but you must not do it. That +approach is a fundamental mistake. The text of well-written +documentation strings will be entirely wrong for a manual. + + A documentation string needs to stand alone--when it appears on the +screen, there will be no other text to introduce or explain it. +Meanwhile, it can be rather informal in style. + + The text describing a function or variable in a manual must not stand +alone; it appears in the context of a section or subsection. Other text +at the beginning of the section should explain some of the concepts, and +should often make some general points that apply to several functions or +variables. The previous descriptions of functions and variables in the +section will also have given information about the topic. A description +written to stand alone would repeat some of that information; this +redundancy looks bad. Meanwhile, the informality that is acceptable in +a documentation string is totally unacceptable in a manual. + + The only good way to use documentation strings in writing a good +manual is to use them as a source of information for writing good text. + + +File: standards.info, Node: Manual Structure Details, Next: License for Manuals, Prev: Doc Strings and Manuals, Up: Documentation + +6.3 Manual Structure Details +============================ + +The title page of the manual should state the version of the programs or +packages documented in the manual. The Top node of the manual should +also contain this information. If the manual is changing more +frequently than or independent of the program, also state a version +number for the manual in both of these places. + + Each program documented in the manual should have a node named +'PROGRAM Invocation' or 'Invoking PROGRAM'. This node (together with +its subnodes, if any) should describe the program's command line +arguments and how to run it (the sort of information people would look +for in a man page). Start with an '@example' containing a template for +all the options and arguments that the program uses. + + Alternatively, put a menu item in some menu whose item name fits one +of the above patterns. This identifies the node which that item points +to as the node for this purpose, regardless of the node's actual name. + + The '--usage' feature of the Info reader looks for such a node or +menu item in order to find the relevant text, so it is essential for +every Texinfo file to have one. + + If one manual describes several programs, it should have such a node +for each program described in the manual. + + +File: standards.info, Node: License for Manuals, Next: Manual Credits, Prev: Manual Structure Details, Up: Documentation + +6.4 License for Manuals +======================= + +Please use the GNU Free Documentation License for all GNU manuals that +are more than a few pages long. Likewise for a collection of short +documents--you only need one copy of the GNU FDL for the whole +collection. For a single short document, you can use a very permissive +non-copyleft license, to avoid taking up space with a long license. + + See for more explanation +of how to employ the GFDL. + + Note that it is not obligatory to include a copy of the GNU GPL or +GNU LGPL in a manual whose license is neither the GPL nor the LGPL. It +can be a good idea to include the program's license in a large manual; +in a short manual, whose size would be increased considerably by +including the program's license, it is probably better not to include +it. + + +File: standards.info, Node: Manual Credits, Next: Printed Manuals, Prev: License for Manuals, Up: Documentation + +6.5 Manual Credits +================== + +Please credit the principal human writers of the manual as the authors, +on the title page of the manual. If a company sponsored the work, thank +the company in a suitable place in the manual, but do not cite the +company as an author. + + +File: standards.info, Node: Printed Manuals, Next: NEWS File, Prev: Manual Credits, Up: Documentation + +6.6 Printed Manuals +=================== + +The FSF publishes some GNU manuals in printed form. To encourage sales +of these manuals, the on-line versions of the manual should mention at +the very start that the printed manual is available and should point at +information for getting it--for instance, with a link to the page +. This should not be included in +the printed manual, though, because there it is redundant. + + It is also useful to explain in the on-line forms of the manual how +the user can print out the manual from the sources. + + +File: standards.info, Node: NEWS File, Next: Change Logs, Prev: Printed Manuals, Up: Documentation + +6.7 The NEWS File +================= + +In addition to its manual, the package should have a file named 'NEWS' +which contains a list of user-visible changes worth mentioning. In each +new release, add items to the front of the file and identify the version +they pertain to. Don't discard old items; leave them in the file after +the newer items. This way, a user upgrading from any previous version +can see what is new. + + If the 'NEWS' file gets very long, move some of the older items into +a file named 'ONEWS' and put a note at the end referring the user to +that file. + + +File: standards.info, Node: Change Logs, Next: Man Pages, Prev: NEWS File, Up: Documentation + +6.8 Change Logs +=============== + +Keep a change log to describe all the changes made to program source +files. The purpose of this is so that people investigating bugs in the +future will know about the changes that might have introduced the bug. +Often a new bug can be found by looking at what was recently changed. +More importantly, change logs can help you eliminate conceptual +inconsistencies between different parts of a program, by giving you a +history of how the conflicting concepts arose and who they came from. + +* Menu: + +* Change Log Concepts:: +* Style of Change Logs:: +* Simple Changes:: +* Conditional Changes:: +* Indicating the Part Changed:: + + +File: standards.info, Node: Change Log Concepts, Next: Style of Change Logs, Up: Change Logs + +6.8.1 Change Log Concepts +------------------------- + +You can think of the change log as a conceptual "undo list" which +explains how earlier versions were different from the current version. +People can see the current version; they don't need the change log to +tell them what is in it. What they want from a change log is a clear +explanation of how the earlier version differed. + + The change log file is normally called 'ChangeLog' and covers an +entire directory. Each directory can have its own change log, or a +directory can use the change log of its parent directory--it's up to +you. + + Another alternative is to record change log information with a +version control system such as RCS or CVS. This can be converted +automatically to a 'ChangeLog' file using 'rcs2log'; in Emacs, the +command 'C-x v a' ('vc-update-change-log') does the job. + + There's no need to describe the full purpose of the changes or how +they work together. However, sometimes it is useful to write one line +to describe the overall purpose of a change or a batch of changes. If +you think that a change calls for explanation, you're probably right. +Please do explain it--but please put the full explanation in comments in +the code, where people will see it whenever they see the code. For +example, "New function" is enough for the change log when you add a +function, because there should be a comment before the function +definition to explain what it does. + + In the past, we recommended not mentioning changes in non-software +files (manuals, help files, etc.) in change logs. However, we've been +advised that it is a good idea to include them, for the sake of +copyright records. + + The easiest way to add an entry to 'ChangeLog' is with the Emacs +command 'M-x add-change-log-entry'. An entry should have an asterisk, +the name of the changed file, and then in parentheses the name of the +changed functions, variables or whatever, followed by a colon. Then +describe the changes you made to that function or variable. + + +File: standards.info, Node: Style of Change Logs, Next: Simple Changes, Prev: Change Log Concepts, Up: Change Logs + +6.8.2 Style of Change Logs +-------------------------- + +Here are some simple examples of change log entries, starting with the +header line that says who made the change and when it was installed, +followed by descriptions of specific changes. (These examples are drawn +from Emacs and GCC.) + + 1998-08-17 Richard Stallman + + * register.el (insert-register): Return nil. + (jump-to-register): Likewise. + + * sort.el (sort-subr): Return nil. + + * tex-mode.el (tex-bibtex-file, tex-file, tex-region): + Restart the tex shell if process is gone or stopped. + (tex-shell-running): New function. + + * expr.c (store_one_arg): Round size up for move_block_to_reg. + (expand_call): Round up when emitting USE insns. + * stmt.c (assign_parms): Round size up for move_block_from_reg. + + It's important to name the changed function or variable in full. +Don't abbreviate function or variable names, and don't combine them. +Subsequent maintainers will often search for a function name to find all +the change log entries that pertain to it; if you abbreviate the name, +they won't find it when they search. + + For example, some people are tempted to abbreviate groups of function +names by writing '* register.el ({insert,jump-to}-register)'; this is +not a good idea, since searching for 'jump-to-register' or +'insert-register' would not find that entry. + + Separate unrelated change log entries with blank lines. When two +entries represent parts of the same change, so that they work together, +then don't put blank lines between them. Then you can omit the file +name and the asterisk when successive entries are in the same file. + + Break long lists of function names by closing continued lines with +')', rather than ',', and opening the continuation with '(' as in this +example: + + * keyboard.c (menu_bar_items, tool_bar_items) + (Fexecute_extended_command): Deal with `keymap' property. + + When you install someone else's changes, put the contributor's name +in the change log entry rather than in the text of the entry. In other +words, write this: + + 2002-07-14 John Doe + + * sewing.c: Make it sew. + +rather than this: + + 2002-07-14 Usual Maintainer + + * sewing.c: Make it sew. Patch by jdoe@gnu.org. + + As for the date, that should be the date you applied the change. + + +File: standards.info, Node: Simple Changes, Next: Conditional Changes, Prev: Style of Change Logs, Up: Change Logs + +6.8.3 Simple Changes +-------------------- + +Certain simple kinds of changes don't need much detail in the change +log. + + When you change the calling sequence of a function in a simple +fashion, and you change all the callers of the function to use the new +calling sequence, there is no need to make individual entries for all +the callers that you changed. Just write in the entry for the function +being called, "All callers changed"--like this: + + * keyboard.c (Fcommand_execute): New arg SPECIAL. + All callers changed. + + When you change just comments or doc strings, it is enough to write +an entry for the file, without mentioning the functions. Just "Doc +fixes" is enough for the change log. + + There's no technical need to make change log entries for +documentation files. This is because documentation is not susceptible +to bugs that are hard to fix. Documentation does not consist of parts +that must interact in a precisely engineered fashion. To correct an +error, you need not know the history of the erroneous passage; it is +enough to compare what the documentation says with the way the program +actually works. + + However, you should keep change logs for documentation files when the +project gets copyright assignments from its contributors, so as to make +the records of authorship more accurate. + + +File: standards.info, Node: Conditional Changes, Next: Indicating the Part Changed, Prev: Simple Changes, Up: Change Logs + +6.8.4 Conditional Changes +------------------------- + +C programs often contain compile-time '#if' conditionals. Many changes +are conditional; sometimes you add a new definition which is entirely +contained in a conditional. It is very useful to indicate in the change +log the conditions for which the change applies. + + Our convention for indicating conditional changes is to use square +brackets around the name of the condition. + + Here is a simple example, describing a change which is conditional +but does not have a function or entity name associated with it: + + * xterm.c [SOLARIS2]: Include string.h. + + Here is an entry describing a new definition which is entirely +conditional. This new definition for the macro 'FRAME_WINDOW_P' is used +only when 'HAVE_X_WINDOWS' is defined: + + * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined. + + Here is an entry for a change within the function 'init_display', +whose definition as a whole is unconditional, but the changes themselves +are contained in a '#ifdef HAVE_LIBNCURSES' conditional: + + * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent. + + Here is an entry for a change that takes affect only when a certain +macro is _not_ defined: + + (gethostname) [!HAVE_SOCKETS]: Replace with winsock version. + + +File: standards.info, Node: Indicating the Part Changed, Prev: Conditional Changes, Up: Change Logs + +6.8.5 Indicating the Part Changed +--------------------------------- + +Indicate the part of a function which changed by using angle brackets +enclosing an indication of what the changed part does. Here is an entry +for a change in the part of the function 'sh-while-getopts' that deals +with 'sh' commands: + + * progmodes/sh-script.el (sh-while-getopts) : Handle case that + user-specified option string is empty. + + +File: standards.info, Node: Man Pages, Next: Reading other Manuals, Prev: Change Logs, Up: Documentation + +6.9 Man Pages +============= + +In the GNU project, man pages are secondary. It is not necessary or +expected for every GNU program to have a man page, but some of them do. +It's your choice whether to include a man page in your program. + + When you make this decision, consider that supporting a man page +requires continual effort each time the program is changed. The time +you spend on the man page is time taken away from more useful work. + + For a simple program which changes little, updating the man page may +be a small job. Then there is little reason not to include a man page, +if you have one. + + For a large program that changes a great deal, updating a man page +may be a substantial burden. If a user offers to donate a man page, you +may find this gift costly to accept. It may be better to refuse the man +page unless the same person agrees to take full responsibility for +maintaining it--so that you can wash your hands of it entirely. If this +volunteer later ceases to do the job, then don't feel obliged to pick it +up yourself; it may be better to withdraw the man page from the +distribution until someone else agrees to update it. + + When a program changes only a little, you may feel that the +discrepancies are small enough that the man page remains useful without +updating. If so, put a prominent note near the beginning of the man +page explaining that you don't maintain it and that the Texinfo manual +is more authoritative. The note should say how to access the Texinfo +documentation. + + Be sure that man pages include a copyright statement and free +license. The simple all-permissive license is appropriate for simple +man pages (*note (maintain)License Notices for Other Files::). + + For long man pages, with enough explanation and documentation that +they can be considered true manuals, use the GFDL (*note License for +Manuals::). + + Finally, the GNU help2man program +() is one way to automate +generation of a man page, in this case from '--help' output. This is +sufficient in many cases. + + +File: standards.info, Node: Reading other Manuals, Prev: Man Pages, Up: Documentation + +6.10 Reading other Manuals +========================== + +There may be non-free books or documentation files that describe the +program you are documenting. + + It is ok to use these documents for reference, just as the author of +a new algebra textbook can read other books on algebra. A large portion +of any non-fiction book consists of facts, in this case facts about how +a certain program works, and these facts are necessarily the same for +everyone who writes about the subject. But be careful not to copy your +outline structure, wording, tables or examples from preexisting non-free +documentation. Copying from free documentation may be ok; please check +with the FSF about the individual case. + + +File: standards.info, Node: Managing Releases, Next: References, Prev: Documentation, Up: Top + +7 The Release Process +********************* + +Making a release is more than just bundling up your source files in a +tar file and putting it up for FTP. You should set up your software so +that it can be configured to run on a variety of systems. Your Makefile +should conform to the GNU standards described below, and your directory +layout should also conform to the standards discussed below. Doing so +makes it easy to include your package into the larger framework of all +GNU software. + +* Menu: + +* Configuration:: How configuration of GNU packages should work. +* Makefile Conventions:: Makefile conventions. +* Releases:: Making releases + + +File: standards.info, Node: Configuration, Next: Makefile Conventions, Up: Managing Releases + +7.1 How Configuration Should Work +================================= + +Each GNU distribution should come with a shell script named 'configure'. +This script is given arguments which describe the kind of machine and +system you want to compile the program for. The 'configure' script must +record the configuration options so that they affect compilation. + + The description here is the specification of the interface for the +'configure' script in GNU packages. Many packages implement it using +GNU Autoconf (*note Introduction: (autoconf)Top.) and/or GNU Automake +(*note Introduction: (automake)Top.), but you do not have to use these +tools. You can implement it any way you like; for instance, by making +'configure' be a wrapper around a completely different configuration +system. + + Another way for the 'configure' script to operate is to make a link +from a standard name such as 'config.h' to the proper configuration file +for the chosen system. If you use this technique, the distribution +should _not_ contain a file named 'config.h'. This is so that people +won't be able to build the program without configuring it first. + + Another thing that 'configure' can do is to edit the Makefile. If +you do this, the distribution should _not_ contain a file named +'Makefile'. Instead, it should include a file 'Makefile.in' which +contains the input used for editing. Once again, this is so that people +won't be able to build the program without configuring it first. + + If 'configure' does write the 'Makefile', then 'Makefile' should have +a target named 'Makefile' which causes 'configure' to be rerun, setting +up the same configuration that was set up last time. The files that +'configure' reads should be listed as dependencies of 'Makefile'. + + All the files which are output from the 'configure' script should +have comments at the beginning explaining that they were generated +automatically using 'configure'. This is so that users won't think of +trying to edit them by hand. + + The 'configure' script should write a file named 'config.status' +which describes which configuration options were specified when the +program was last configured. This file should be a shell script which, +if run, will recreate the same configuration. + + The 'configure' script should accept an option of the form +'--srcdir=DIRNAME' to specify the directory where sources are found (if +it is not the current directory). This makes it possible to build the +program in a separate directory, so that the actual source directory is +not modified. + + If the user does not specify '--srcdir', then 'configure' should +check both '.' and '..' to see if it can find the sources. If it finds +the sources in one of these places, it should use them from there. +Otherwise, it should report that it cannot find the sources, and should +exit with nonzero status. + + Usually the easy way to support '--srcdir' is by editing a definition +of 'VPATH' into the Makefile. Some rules may need to refer explicitly +to the specified source directory. To make this possible, 'configure' +can add to the Makefile a variable named 'srcdir' whose value is +precisely the specified directory. + + In addition, the 'configure' script should take options corresponding +to most of the standard directory variables (*note Directory +Variables::). Here is the list: + + --prefix --exec-prefix --bindir --sbindir --libexecdir --sysconfdir + --sharedstatedir --localstatedir --libdir --includedir --oldincludedir + --datarootdir --datadir --infodir --localedir --mandir --docdir + --htmldir --dvidir --pdfdir --psdir + + The 'configure' script should also take an argument which specifies +the type of system to build the program for. This argument should look +like this: + + CPU-COMPANY-SYSTEM + + For example, an Athlon-based GNU/Linux system might be +'i686-pc-linux-gnu'. + + The 'configure' script needs to be able to decode all plausible +alternatives for how to describe a machine. Thus, 'athlon-pc-gnu/linux' +would be a valid alias. There is a shell script called 'config.sub' +(http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD) +that you can use as a subroutine to validate system types and +canonicalize aliases. + + The 'configure' script should also take the option +'--build=BUILDTYPE', which should be equivalent to a plain BUILDTYPE +argument. For example, 'configure --build=i686-pc-linux-gnu' is +equivalent to 'configure i686-pc-linux-gnu'. When the build type is not +specified by an option or argument, the 'configure' script should +normally guess it using the shell script 'config.guess' +(http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD). + + Other options are permitted to specify in more detail the software or +hardware present on the machine, to include or exclude optional parts of +the package, or to adjust the name of some tools or arguments to them: + +'--enable-FEATURE[=PARAMETER]' + Configure the package to build and install an optional user-level + facility called FEATURE. This allows users to choose which + optional features to include. Giving an optional PARAMETER of 'no' + should omit FEATURE, if it is built by default. + + No '--enable' option should *ever* cause one feature to replace + another. No '--enable' option should ever substitute one useful + behavior for another useful behavior. The only proper use for + '--enable' is for questions of whether to build part of the program + or exclude it. + +'--with-PACKAGE' + The package PACKAGE will be installed, so configure this package to + work with PACKAGE. + + Possible values of PACKAGE include 'gnu-as' (or 'gas'), 'gnu-ld', + 'gnu-libc', 'gdb', 'x', and 'x-toolkit'. + + Do not use a '--with' option to specify the file name to use to + find certain files. That is outside the scope of what '--with' + options are for. + +'VARIABLE=VALUE' + Set the value of the variable VARIABLE to VALUE. This is used to + override the default values of commands or arguments in the build + process. For example, the user could issue 'configure CFLAGS=-g + CXXFLAGS=-g' to build with debugging information and without the + default optimization. + + Specifying variables as arguments to 'configure', like this: + ./configure CC=gcc + is preferable to setting them in environment variables: + CC=gcc ./configure + as it helps to recreate the same configuration later with + 'config.status'. However, both methods should be supported. + + All 'configure' scripts should accept all of the "detail" options and +the variable settings, whether or not they make any difference to the +particular package at hand. In particular, they should accept any +option that starts with '--with-' or '--enable-'. This is so users will +be able to configure an entire GNU source tree at once with a single set +of options. + + You will note that the categories '--with-' and '--enable-' are +narrow: they *do not* provide a place for any sort of option you might +think of. That is deliberate. We want to limit the possible +configuration options in GNU software. We do not want GNU programs to +have idiosyncratic configuration options. + + Packages that perform part of the compilation process may support +cross-compilation. In such a case, the host and target machines for the +program may be different. + + The 'configure' script should normally treat the specified type of +system as both the host and the target, thus producing a program which +works for the same type of machine that it runs on. + + To compile a program to run on a host type that differs from the +build type, use the configure option '--host=HOSTTYPE', where HOSTTYPE +uses the same syntax as BUILDTYPE. The host type normally defaults to +the build type. + + To configure a cross-compiler, cross-assembler, or what have you, you +should specify a target different from the host, using the configure +option '--target=TARGETTYPE'. The syntax for TARGETTYPE is the same as +for the host type. So the command would look like this: + + ./configure --host=HOSTTYPE --target=TARGETTYPE + + The target type normally defaults to the host type. Programs for +which cross-operation is not meaningful need not accept the '--target' +option, because configuring an entire operating system for +cross-operation is not a meaningful operation. + + Some programs have ways of configuring themselves automatically. If +your program is set up to do this, your 'configure' script can simply +ignore most of its arguments. + + +File: standards.info, Node: Makefile Conventions, Next: Releases, Prev: Configuration, Up: Managing Releases + +7.2 Makefile Conventions +======================== + +This node describes conventions for writing the Makefiles for GNU +programs. Using Automake will help you write a Makefile that follows +these conventions. + +* Menu: + +* Makefile Basics:: General conventions for Makefiles. +* Utilities in Makefiles:: Utilities to be used in Makefiles. +* Command Variables:: Variables for specifying commands. +* DESTDIR:: Supporting staged installs. +* Directory Variables:: Variables for installation directories. +* Standard Targets:: Standard targets for users. +* Install Command Categories:: Three categories of commands in the 'install' + rule: normal, pre-install and post-install. + + +File: standards.info, Node: Makefile Basics, Next: Utilities in Makefiles, Up: Makefile Conventions + +7.2.1 General Conventions for Makefiles +--------------------------------------- + +Every Makefile should contain this line: + + SHELL = /bin/sh + +to avoid trouble on systems where the 'SHELL' variable might be +inherited from the environment. (This is never a problem with GNU +'make'.) + + Different 'make' programs have incompatible suffix lists and implicit +rules, and this sometimes creates confusion or misbehavior. So it is a +good idea to set the suffix list explicitly using only the suffixes you +need in the particular Makefile, like this: + + .SUFFIXES: + .SUFFIXES: .c .o + +The first line clears out the suffix list, the second introduces all +suffixes which may be subject to implicit rules in this Makefile. + + Don't assume that '.' is in the path for command execution. When you +need to run programs that are a part of your package during the make, +please make sure that it uses './' if the program is built as part of +the make or '$(srcdir)/' if the file is an unchanging part of the source +code. Without one of these prefixes, the current search path is used. + + The distinction between './' (the "build directory") and '$(srcdir)/' +(the "source directory") is important because users can build in a +separate directory using the '--srcdir' option to 'configure'. A rule +of the form: + + foo.1 : foo.man sedscript + sed -e sedscript foo.man > foo.1 + +will fail when the build directory is not the source directory, because +'foo.man' and 'sedscript' are in the source directory. + + When using GNU 'make', relying on 'VPATH' to find the source file +will work in the case where there is a single dependency file, since the +'make' automatic variable '$<' will represent the source file wherever +it is. (Many versions of 'make' set '$<' only in implicit rules.) A +Makefile target like + + foo.o : bar.c + $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o + +should instead be written as + + foo.o : bar.c + $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@ + +in order to allow 'VPATH' to work correctly. When the target has +multiple dependencies, using an explicit '$(srcdir)' is the easiest way +to make the rule work well. For example, the target above for 'foo.1' +is best written as: + + foo.1 : foo.man sedscript + sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@ + + GNU distributions usually contain some files which are not source +files--for example, Info files, and the output from Autoconf, Automake, +Bison or Flex. Since these files normally appear in the source +directory, they should always appear in the source directory, not in the +build directory. So Makefile rules to update them should put the +updated files in the source directory. + + However, if a file does not appear in the distribution, then the +Makefile should not put it in the source directory, because building a +program in ordinary circumstances should not modify the source directory +in any way. + + Try to make the build and installation targets, at least (and all +their subtargets) work correctly with a parallel 'make'. + + +File: standards.info, Node: Utilities in Makefiles, Next: Command Variables, Prev: Makefile Basics, Up: Makefile Conventions + +7.2.2 Utilities in Makefiles +---------------------------- + +Write the Makefile commands (and any shell scripts, such as 'configure') +to run in 'sh', not in 'csh'. Don't use any special features of 'ksh' +or 'bash'. + + The 'configure' script and the Makefile rules for building and +installation should not use any utilities directly except these: + + cat cmp cp diff echo egrep expr false grep install-info + ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true + + The compression program 'gzip' can be used in the 'dist' rule. + + Stick to the generally supported options for these programs. For +example, don't use 'mkdir -p', convenient as it may be, because most +systems don't support it. + + It is a good idea to avoid creating symbolic links in makefiles, +since a few systems don't support them. + + The Makefile rules for building and installation can also use +compilers and related programs, but should do so via 'make' variables so +that the user can substitute alternatives. Here are some of the +programs we mean: + + ar bison cc flex install ld ldconfig lex + make makeinfo ranlib texi2dvi yacc + + Use the following 'make' variables to run those programs: + + $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) + $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) + + When you use 'ranlib' or 'ldconfig', you should make sure nothing bad +happens if the system does not have the program in question. Arrange to +ignore an error from that command, and print a message before the +command to tell the user that failure of this command does not mean a +problem. (The Autoconf 'AC_PROG_RANLIB' macro can help with this.) + + If you use symbolic links, you should implement a fallback for +systems that don't have symbolic links. + + Additional utilities that can be used via Make variables are: + + chgrp chmod chown mknod + + It is ok to use other utilities in Makefile portions (or scripts) +intended only for particular systems where you know those utilities +exist. + + +File: standards.info, Node: Command Variables, Next: DESTDIR, Prev: Utilities in Makefiles, Up: Makefile Conventions + +7.2.3 Variables for Specifying Commands +--------------------------------------- + +Makefiles should provide variables for overriding certain commands, +options, and so on. + + In particular, you should run most utility programs via variables. +Thus, if you use Bison, have a variable named 'BISON' whose default +value is set with 'BISON = bison', and refer to it with '$(BISON)' +whenever you need to use Bison. + + File management utilities such as 'ln', 'rm', 'mv', and so on, need +not be referred to through variables in this way, since users don't need +to replace them with other programs. + + Each program-name variable should come with an options variable that +is used to supply options to the program. Append 'FLAGS' to the +program-name variable name to get the options variable name--for +example, 'BISONFLAGS'. (The names 'CFLAGS' for the C compiler, 'YFLAGS' +for yacc, and 'LFLAGS' for lex, are exceptions to this rule, but we keep +them because they are standard.) Use 'CPPFLAGS' in any compilation +command that runs the preprocessor, and use 'LDFLAGS' in any compilation +command that does linking as well as in any direct use of 'ld'. + + If there are C compiler options that _must_ be used for proper +compilation of certain files, do not include them in 'CFLAGS'. Users +expect to be able to specify 'CFLAGS' freely themselves. Instead, +arrange to pass the necessary options to the C compiler independently of +'CFLAGS', by writing them explicitly in the compilation commands or by +defining an implicit rule, like this: + + CFLAGS = -g + ALL_CFLAGS = -I. $(CFLAGS) + .c.o: + $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< + + Do include the '-g' option in 'CFLAGS', because that is not +_required_ for proper compilation. You can consider it a default that +is only recommended. If the package is set up so that it is compiled +with GCC by default, then you might as well include '-O' in the default +value of 'CFLAGS' as well. + + Put 'CFLAGS' last in the compilation command, after other variables +containing compiler options, so the user can use 'CFLAGS' to override +the others. + + 'CFLAGS' should be used in every invocation of the C compiler, both +those which do compilation and those which do linking. + + Every Makefile should define the variable 'INSTALL', which is the +basic command for installing a file into the system. + + Every Makefile should also define the variables 'INSTALL_PROGRAM' and +'INSTALL_DATA'. (The default for 'INSTALL_PROGRAM' should be +'$(INSTALL)'; the default for 'INSTALL_DATA' should be '${INSTALL} -m +644'.) Then it should use those variables as the commands for actual +installation, for executables and non-executables respectively. Minimal +use of these variables is as follows: + + $(INSTALL_PROGRAM) foo $(bindir)/foo + $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a + + However, it is preferable to support a 'DESTDIR' prefix on the target +files, as explained in the next section. + +Always use a file name, not a directory name, as the second argument of +the installation commands. Use a separate command for each file to be +installed. + + +File: standards.info, Node: DESTDIR, Next: Directory Variables, Prev: Command Variables, Up: Makefile Conventions + +7.2.4 'DESTDIR': support for staged installs +-------------------------------------------- + +'DESTDIR' is a variable prepended to each installed target file, like +this: + + $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo + $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a + + The 'DESTDIR' variable is specified by the user on the 'make' command +line. For example: + + make DESTDIR=/tmp/stage install + +'DESTDIR' should be supported only in the 'install*' and 'uninstall*' +targets, as those are the only targets where it is useful. + + If your installation step would normally install '/usr/local/bin/foo' +and '/usr/local/lib/libfoo.a', then an installation invoked as in the +example above would install '/tmp/stage/usr/local/bin/foo' and +'/tmp/stage/usr/local/lib/libfoo.a' instead. + + Prepending the variable 'DESTDIR' to each target in this way provides +for "staged installs", where the installed files are not placed directly +into their expected location but are instead copied into a temporary +location ('DESTDIR'). However, installed files maintain their relative +directory structure and any embedded file names will not be modified. + + You should not set the value of 'DESTDIR' in your 'Makefile' at all; +then the files are installed into their expected locations by default. +Also, specifying 'DESTDIR' should not change the operation of the +software in any way, so its value should not be included in any file +contents. + + 'DESTDIR' support is commonly used in package creation. It is also +helpful to users who want to understand what a given package will +install where, and to allow users who don't normally have permissions to +install into protected areas to build and install before gaining those +permissions. Finally, it can be useful with tools such as 'stow', where +code is installed in one place but made to appear to be installed +somewhere else using symbolic links or special mount operations. So, we +strongly recommend GNU packages support 'DESTDIR', though it is not an +absolute requirement. + + +File: standards.info, Node: Directory Variables, Next: Standard Targets, Prev: DESTDIR, Up: Makefile Conventions + +7.2.5 Variables for Installation Directories +-------------------------------------------- + +Installation directories should always be named by variables, so it is +easy to install in a nonstandard place. The standard names for these +variables and the values they should have in GNU packages are described +below. They are based on a standard file system layout; variants of it +are used in GNU/Linux and other modern operating systems. + + Installers are expected to override these values when calling 'make' +(e.g., 'make prefix=/usr install' or 'configure' (e.g., 'configure +--prefix=/usr'). GNU packages should not try to guess which value +should be appropriate for these variables on the system they are being +installed onto: use the default settings specified here so that all GNU +packages behave identically, allowing the installer to achieve any +desired layout. + + These first two variables set the root for the installation. All the +other installation directories should be subdirectories of one of these +two, and nothing should be directly installed into these two +directories. + +'prefix' + A prefix used in constructing the default values of the variables + listed below. The default value of 'prefix' should be + '/usr/local'. When building the complete GNU system, the prefix + will be empty and '/usr' will be a symbolic link to '/'. (If you + are using Autoconf, write it as '@prefix@'.) + + Running 'make install' with a different value of 'prefix' from the + one used to build the program should _not_ recompile the program. + +'exec_prefix' + A prefix used in constructing the default values of some of the + variables listed below. The default value of 'exec_prefix' should + be '$(prefix)'. (If you are using Autoconf, write it as + '@exec_prefix@'.) + + Generally, '$(exec_prefix)' is used for directories that contain + machine-specific files (such as executables and subroutine + libraries), while '$(prefix)' is used directly for other + directories. + + Running 'make install' with a different value of 'exec_prefix' from + the one used to build the program should _not_ recompile the + program. + + Executable programs are installed in one of the following +directories. + +'bindir' + The directory for installing executable programs that users can + run. This should normally be '/usr/local/bin', but write it as + '$(exec_prefix)/bin'. (If you are using Autoconf, write it as + '@bindir@'.) + +'sbindir' + The directory for installing executable programs that can be run + from the shell, but are only generally useful to system + administrators. This should normally be '/usr/local/sbin', but + write it as '$(exec_prefix)/sbin'. (If you are using Autoconf, + write it as '@sbindir@'.) + +'libexecdir' + The directory for installing executable programs to be run by other + programs rather than by users. This directory should normally be + '/usr/local/libexec', but write it as '$(exec_prefix)/libexec'. + (If you are using Autoconf, write it as '@libexecdir@'.) + + The definition of 'libexecdir' is the same for all packages, so you + should install your data in a subdirectory thereof. Most packages + install their data under '$(libexecdir)/PACKAGE-NAME/', possibly + within additional subdirectories thereof, such as + '$(libexecdir)/PACKAGE-NAME/MACHINE/VERSION'. + + Data files used by the program during its execution are divided into +categories in two ways. + + * Some files are normally modified by programs; others are never + normally modified (though users may edit some of these). + + * Some files are architecture-independent and can be shared by all + machines at a site; some are architecture-dependent and can be + shared only by machines of the same kind and operating system; + others may never be shared between two machines. + + This makes for six different possibilities. However, we want to +discourage the use of architecture-dependent files, aside from object +files and libraries. It is much cleaner to make other data files +architecture-independent, and it is generally not hard. + + Here are the variables Makefiles should use to specify directories to +put these various kinds of files in: + +'datarootdir' + The root of the directory tree for read-only + architecture-independent data files. This should normally be + '/usr/local/share', but write it as '$(prefix)/share'. (If you are + using Autoconf, write it as '@datarootdir@'.) 'datadir''s default + value is based on this variable; so are 'infodir', 'mandir', and + others. + +'datadir' + The directory for installing idiosyncratic read-only + architecture-independent data files for this program. This is + usually the same place as 'datarootdir', but we use the two + separate variables so that you can move these program-specific + files without altering the location for Info files, man pages, etc. + + This should normally be '/usr/local/share', but write it as + '$(datarootdir)'. (If you are using Autoconf, write it as + '@datadir@'.) + + The definition of 'datadir' is the same for all packages, so you + should install your data in a subdirectory thereof. Most packages + install their data under '$(datadir)/PACKAGE-NAME/'. + +'sysconfdir' + The directory for installing read-only data files that pertain to a + single machine-that is to say, files for configuring a host. + Mailer and network configuration files, '/etc/passwd', and so forth + belong here. All the files in this directory should be ordinary + ASCII text files. This directory should normally be + '/usr/local/etc', but write it as '$(prefix)/etc'. (If you are + using Autoconf, write it as '@sysconfdir@'.) + + Do not install executables here in this directory (they probably + belong in '$(libexecdir)' or '$(sbindir)'). Also do not install + files that are modified in the normal course of their use (programs + whose purpose is to change the configuration of the system + excluded). Those probably belong in '$(localstatedir)'. + +'sharedstatedir' + The directory for installing architecture-independent data files + which the programs modify while they run. This should normally be + '/usr/local/com', but write it as '$(prefix)/com'. (If you are + using Autoconf, write it as '@sharedstatedir@'.) + +'localstatedir' + The directory for installing data files which the programs modify + while they run, and that pertain to one specific machine. Users + should never need to modify files in this directory to configure + the package's operation; put such configuration information in + separate files that go in '$(datadir)' or '$(sysconfdir)'. + '$(localstatedir)' should normally be '/usr/local/var', but write + it as '$(prefix)/var'. (If you are using Autoconf, write it as + '@localstatedir@'.) + + These variables specify the directory for installing certain specific +types of files, if your program has them. Every GNU package should have +Info files, so every program needs 'infodir', but not all need 'libdir' +or 'lispdir'. + +'includedir' + The directory for installing header files to be included by user + programs with the C '#include' preprocessor directive. This should + normally be '/usr/local/include', but write it as + '$(prefix)/include'. (If you are using Autoconf, write it as + '@includedir@'.) + + Most compilers other than GCC do not look for header files in + directory '/usr/local/include'. So installing the header files + this way is only useful with GCC. Sometimes this is not a problem + because some libraries are only really intended to work with GCC. + But some libraries are intended to work with other compilers. They + should install their header files in two places, one specified by + 'includedir' and one specified by 'oldincludedir'. + +'oldincludedir' + The directory for installing '#include' header files for use with + compilers other than GCC. This should normally be '/usr/include'. + (If you are using Autoconf, you can write it as '@oldincludedir@'.) + + The Makefile commands should check whether the value of + 'oldincludedir' is empty. If it is, they should not try to use it; + they should cancel the second installation of the header files. + + A package should not replace an existing header in this directory + unless the header came from the same package. Thus, if your Foo + package provides a header file 'foo.h', then it should install the + header file in the 'oldincludedir' directory if either (1) there is + no 'foo.h' there or (2) the 'foo.h' that exists came from the Foo + package. + + To tell whether 'foo.h' came from the Foo package, put a magic + string in the file--part of a comment--and 'grep' for that string. + +'docdir' + The directory for installing documentation files (other than Info) + for this package. By default, it should be + '/usr/local/share/doc/YOURPKG', but it should be written as + '$(datarootdir)/doc/YOURPKG'. (If you are using Autoconf, write it + as '@docdir@'.) The YOURPKG subdirectory, which may include a + version number, prevents collisions among files with common names, + such as 'README'. + +'infodir' + The directory for installing the Info files for this package. By + default, it should be '/usr/local/share/info', but it should be + written as '$(datarootdir)/info'. (If you are using Autoconf, + write it as '@infodir@'.) 'infodir' is separate from 'docdir' for + compatibility with existing practice. + +'htmldir' +'dvidir' +'pdfdir' +'psdir' + Directories for installing documentation files in the particular + format. They should all be set to '$(docdir)' by default. (If you + are using Autoconf, write them as '@htmldir@', '@dvidir@', etc.) + Packages which supply several translations of their documentation + should install them in '$(htmldir)/'LL, '$(pdfdir)/'LL, etc. where + LL is a locale abbreviation such as 'en' or 'pt_BR'. + +'libdir' + The directory for object files and libraries of object code. Do + not install executables here, they probably ought to go in + '$(libexecdir)' instead. The value of 'libdir' should normally be + '/usr/local/lib', but write it as '$(exec_prefix)/lib'. (If you + are using Autoconf, write it as '@libdir@'.) + +'lispdir' + The directory for installing any Emacs Lisp files in this package. + By default, it should be '/usr/local/share/emacs/site-lisp', but it + should be written as '$(datarootdir)/emacs/site-lisp'. + + If you are using Autoconf, write the default as '@lispdir@'. In + order to make '@lispdir@' work, you need the following lines in + your 'configure.in' file: + + lispdir='${datarootdir}/emacs/site-lisp' + AC_SUBST(lispdir) + +'localedir' + The directory for installing locale-specific message catalogs for + this package. By default, it should be '/usr/local/share/locale', + but it should be written as '$(datarootdir)/locale'. (If you are + using Autoconf, write it as '@localedir@'.) This directory usually + has a subdirectory per locale. + + Unix-style man pages are installed in one of the following: + +'mandir' + The top-level directory for installing the man pages (if any) for + this package. It will normally be '/usr/local/share/man', but you + should write it as '$(datarootdir)/man'. (If you are using + Autoconf, write it as '@mandir@'.) + +'man1dir' + The directory for installing section 1 man pages. Write it as + '$(mandir)/man1'. +'man2dir' + The directory for installing section 2 man pages. Write it as + '$(mandir)/man2' +'...' + + *Don't make the primary documentation for any GNU software be a man + page. Write a manual in Texinfo instead. Man pages are just for + the sake of people running GNU software on Unix, which is a + secondary application only.* + +'manext' + The file name extension for the installed man page. This should + contain a period followed by the appropriate digit; it should + normally be '.1'. + +'man1ext' + The file name extension for installed section 1 man pages. +'man2ext' + The file name extension for installed section 2 man pages. +'...' + Use these names instead of 'manext' if the package needs to install + man pages in more than one section of the manual. + + And finally, you should set the following variable: + +'srcdir' + The directory for the sources being compiled. The value of this + variable is normally inserted by the 'configure' shell script. (If + you are using Autoconf, use 'srcdir = @srcdir@'.) + + For example: + + # Common prefix for installation directories. + # NOTE: This directory must exist when you start the install. + prefix = /usr/local + datarootdir = $(prefix)/share + datadir = $(datarootdir) + exec_prefix = $(prefix) + # Where to put the executable for the command `gcc'. + bindir = $(exec_prefix)/bin + # Where to put the directories used by the compiler. + libexecdir = $(exec_prefix)/libexec + # Where to put the Info files. + infodir = $(datarootdir)/info + + If your program installs a large number of files into one of the +standard user-specified directories, it might be useful to group them +into a subdirectory particular to that program. If you do this, you +should write the 'install' rule to create these subdirectories. + + Do not expect the user to include the subdirectory name in the value +of any of the variables listed above. The idea of having a uniform set +of variable names for installation directories is to enable the user to +specify the exact same values for several different GNU packages. In +order for this to be useful, all the packages must be designed so that +they will work sensibly when the user does so. + + At times, not all of these variables may be implemented in the +current release of Autoconf and/or Automake; but as of Autoconf 2.60, we +believe all of them are. When any are missing, the descriptions here +serve as specifications for what Autoconf will implement. As a +programmer, you can either use a development version of Autoconf or +avoid using these variables until a stable release is made which +supports them. + + +File: standards.info, Node: Standard Targets, Next: Install Command Categories, Prev: Directory Variables, Up: Makefile Conventions + +7.2.6 Standard Targets for Users +-------------------------------- + +All GNU programs should have the following targets in their Makefiles: + +'all' + Compile the entire program. This should be the default target. + This target need not rebuild any documentation files; Info files + should normally be included in the distribution, and DVI (and other + documentation format) files should be made only when explicitly + asked for. + + By default, the Make rules should compile and link with '-g', so + that executable programs have debugging symbols. Users who don't + mind being helpless can strip the executables later if they wish. + +'install' + Compile the program and copy the executables, libraries, and so on + to the file names where they should reside for actual use. If + there is a simple test to verify that a program is properly + installed, this target should run that test. + + Do not strip executables when installing them. Devil-may-care + users can use the 'install-strip' target to do that. + + If possible, write the 'install' target rule so that it does not + modify anything in the directory where the program was built, + provided 'make all' has just been done. This is convenient for + building the program under one user name and installing it under + another. + + The commands should create all the directories in which files are + to be installed, if they don't already exist. This includes the + directories specified as the values of the variables 'prefix' and + 'exec_prefix', as well as all subdirectories that are needed. One + way to do this is by means of an 'installdirs' target as described + below. + + Use '-' before any command for installing a man page, so that + 'make' will ignore any errors. This is in case there are systems + that don't have the Unix man page documentation system installed. + + The way to install Info files is to copy them into '$(infodir)' + with '$(INSTALL_DATA)' (*note Command Variables::), and then run + the 'install-info' program if it is present. 'install-info' is a + program that edits the Info 'dir' file to add or update the menu + entry for the given Info file; it is part of the Texinfo package. + Here is a sample rule to install an Info file: + + $(DESTDIR)$(infodir)/foo.info: foo.info + $(POST_INSTALL) + # There may be a newer info file in . than in srcdir. + -if test -f foo.info; then d=.; \ + else d=$(srcdir); fi; \ + $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@; \ + # Run install-info only if it exists. + # Use `if' instead of just prepending `-' to the + # line so we notice real errors from install-info. + # We use `$(SHELL) -c' because some shells do not + # fail gracefully when there is an unknown command. + if $(SHELL) -c 'install-info --version' \ + >/dev/null 2>&1; then \ + install-info --dir-file=$(DESTDIR)$(infodir)/dir \ + $(DESTDIR)$(infodir)/foo.info; \ + else true; fi + + When writing the 'install' target, you must classify all the + commands into three categories: normal ones, "pre-installation" + commands and "post-installation" commands. *Note Install Command + Categories::. + +'install-html' +'install-dvi' +'install-pdf' +'install-ps' + These targets install documentation in formats other than Info; + they're intended to be called explicitly by the person installing + the package, if that format is desired. GNU prefers Info files, so + these must be installed by the 'install' target. + + When you have many documentation files to install, we recommend + that you avoid collisions and clutter by arranging for these + targets to install in subdirectories of the appropriate + installation directory, such as 'htmldir'. As one example, if your + package has multiple manuals, and you wish to install HTML + documentation with many files (such as the "split" mode output by + 'makeinfo --html'), you'll certainly want to use subdirectories, or + two nodes with the same name in different manuals will overwrite + each other. + + Please make these 'install-FORMAT' targets invoke the commands for + the FORMAT target, for example, by making FORMAT a dependency. + +'uninstall' + Delete all the installed files--the copies that the 'install' and + 'install-*' targets create. + + This rule should not modify the directories where compilation is + done, only the directories where files are installed. + + The uninstallation commands are divided into three categories, just + like the installation commands. *Note Install Command + Categories::. + +'install-strip' + Like 'install', but strip the executable files while installing + them. In simple cases, this target can use the 'install' target in + a simple way: + + install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ + install + + But if the package installs scripts as well as real executables, + the 'install-strip' target can't just refer to the 'install' + target; it has to strip the executables but not the scripts. + + 'install-strip' should not strip the executables in the build + directory which are being copied for installation. It should only + strip the copies that are installed. + + Normally we do not recommend stripping an executable unless you are + sure the program has no bugs. However, it can be reasonable to + install a stripped executable for actual execution while saving the + unstripped executable elsewhere in case there is a bug. + +'clean' + + Delete all files in the current directory that are normally created + by building the program. Also delete files in other directories if + they are created by this makefile. However, don't delete the files + that record the configuration. Also preserve files that could be + made by building, but normally aren't because the distribution + comes with them. There is no need to delete parent directories + that were created with 'mkdir -p', since they could have existed + anyway. + + Delete '.dvi' files here if they are not part of the distribution. + +'distclean' + Delete all files in the current directory (or created by this + makefile) that are created by configuring or building the program. + If you have unpacked the source and built the program without + creating any other files, 'make distclean' should leave only the + files that were in the distribution. However, there is no need to + delete parent directories that were created with 'mkdir -p', since + they could have existed anyway. + +'mostlyclean' + Like 'clean', but may refrain from deleting a few files that people + normally don't want to recompile. For example, the 'mostlyclean' + target for GCC does not delete 'libgcc.a', because recompiling it + is rarely necessary and takes a lot of time. + +'maintainer-clean' + Delete almost everything that can be reconstructed with this + Makefile. This typically includes everything deleted by + 'distclean', plus more: C source files produced by Bison, tags + tables, Info files, and so on. + + The reason we say "almost everything" is that running the command + 'make maintainer-clean' should not delete 'configure' even if + 'configure' can be remade using a rule in the Makefile. More + generally, 'make maintainer-clean' should not delete anything that + needs to exist in order to run 'configure' and then begin to build + the program. Also, there is no need to delete parent directories + that were created with 'mkdir -p', since they could have existed + anyway. These are the only exceptions; 'maintainer-clean' should + delete everything else that can be rebuilt. + + The 'maintainer-clean' target is intended to be used by a + maintainer of the package, not by ordinary users. You may need + special tools to reconstruct some of the files that 'make + maintainer-clean' deletes. Since these files are normally included + in the distribution, we don't take care to make them easy to + reconstruct. If you find you need to unpack the full distribution + again, don't blame us. + + To help make users aware of this, the commands for the special + 'maintainer-clean' target should start with these two: + + @echo 'This command is intended for maintainers to use; it' + @echo 'deletes files that may need special tools to rebuild.' + +'TAGS' + Update a tags table for this program. + +'info' + Generate any Info files needed. The best way to write the rules is + as follows: + + info: foo.info + + foo.info: foo.texi chap1.texi chap2.texi + $(MAKEINFO) $(srcdir)/foo.texi + + You must define the variable 'MAKEINFO' in the Makefile. It should + run the 'makeinfo' program, which is part of the Texinfo + distribution. + + Normally a GNU distribution comes with Info files, and that means + the Info files are present in the source directory. Therefore, the + Make rule for an info file should update it in the source + directory. When users build the package, ordinarily Make will not + update the Info files because they will already be up to date. + +'dvi' +'html' +'pdf' +'ps' + Generate documentation files in the given format. These targets + should always exist, but any or all can be a no-op if the given + output format cannot be generated. These targets should not be + dependencies of the 'all' target; the user must manually invoke + them. + + Here's an example rule for generating DVI files from Texinfo: + + dvi: foo.dvi + + foo.dvi: foo.texi chap1.texi chap2.texi + $(TEXI2DVI) $(srcdir)/foo.texi + + You must define the variable 'TEXI2DVI' in the Makefile. It should + run the program 'texi2dvi', which is part of the Texinfo + distribution.(1) Alternatively, write just the dependencies, and + allow GNU 'make' to provide the command. + + Here's another example, this one for generating HTML from Texinfo: + + html: foo.html + + foo.html: foo.texi chap1.texi chap2.texi + $(TEXI2HTML) $(srcdir)/foo.texi + + Again, you would define the variable 'TEXI2HTML' in the Makefile; + for example, it might run 'makeinfo --no-split --html' ('makeinfo' + is part of the Texinfo distribution). + +'dist' + Create a distribution tar file for this program. The tar file + should be set up so that the file names in the tar file start with + a subdirectory name which is the name of the package it is a + distribution for. This name can include the version number. + + For example, the distribution tar file of GCC version 1.40 unpacks + into a subdirectory named 'gcc-1.40'. + + The easiest way to do this is to create a subdirectory + appropriately named, use 'ln' or 'cp' to install the proper files + in it, and then 'tar' that subdirectory. + + Compress the tar file with 'gzip'. For example, the actual + distribution file for GCC version 1.40 is called 'gcc-1.40.tar.gz'. + + The 'dist' target should explicitly depend on all non-source files + that are in the distribution, to make sure they are up to date in + the distribution. *Note Making Releases: Releases. + +'check' + Perform self-tests (if any). The user must build the program + before running the tests, but need not install the program; you + should write the self-tests so that they work when the program is + built but not installed. + + The following targets are suggested as conventional names, for +programs in which they are useful. + +'installcheck' + Perform installation tests (if any). The user must build and + install the program before running the tests. You should not + assume that '$(bindir)' is in the search path. + +'installdirs' + It's useful to add a target named 'installdirs' to create the + directories where files are installed, and their parent + directories. There is a script called 'mkinstalldirs' which is + convenient for this; you can find it in the Texinfo package. You + can use a rule like this: + + # Make sure all installation directories (e.g. $(bindir)) + # actually exist by making them if necessary. + installdirs: mkinstalldirs + $(srcdir)/mkinstalldirs $(bindir) $(datadir) \ + $(libdir) $(infodir) \ + $(mandir) + + or, if you wish to support 'DESTDIR', + + # Make sure all installation directories (e.g. $(bindir)) + # actually exist by making them if necessary. + installdirs: mkinstalldirs + $(srcdir)/mkinstalldirs \ + $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \ + $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ + $(DESTDIR)$(mandir) + + This rule should not modify the directories where compilation is + done. It should do nothing but create installation directories. + + ---------- Footnotes ---------- + + (1) 'texi2dvi' uses TeX to do the real work of formatting. TeX is +not distributed with Texinfo. + + +File: standards.info, Node: Install Command Categories, Prev: Standard Targets, Up: Makefile Conventions + +7.2.7 Install Command Categories +-------------------------------- + +When writing the 'install' target, you must classify all the commands +into three categories: normal ones, "pre-installation" commands and +"post-installation" commands. + + Normal commands move files into their proper places, and set their +modes. They may not alter any files except the ones that come entirely +from the package they belong to. + + Pre-installation and post-installation commands may alter other +files; in particular, they can edit global configuration files or data +bases. + + Pre-installation commands are typically executed before the normal +commands, and post-installation commands are typically run after the +normal commands. + + The most common use for a post-installation command is to run +'install-info'. This cannot be done with a normal command, since it +alters a file (the Info directory) which does not come entirely and +solely from the package being installed. It is a post-installation +command because it needs to be done after the normal command which +installs the package's Info files. + + Most programs don't need any pre-installation commands, but we have +the feature just in case it is needed. + + To classify the commands in the 'install' rule into these three +categories, insert "category lines" among them. A category line +specifies the category for the commands that follow. + + A category line consists of a tab and a reference to a special Make +variable, plus an optional comment at the end. There are three +variables you can use, one for each category; the variable name +specifies the category. Category lines are no-ops in ordinary execution +because these three Make variables are normally undefined (and you +_should not_ define them in the makefile). + + Here are the three possible category lines, each with a comment that +explains what it means: + + $(PRE_INSTALL) # Pre-install commands follow. + $(POST_INSTALL) # Post-install commands follow. + $(NORMAL_INSTALL) # Normal commands follow. + + If you don't use a category line at the beginning of the 'install' +rule, all the commands are classified as normal until the first category +line. If you don't use any category lines, all the commands are +classified as normal. + + These are the category lines for 'uninstall': + + $(PRE_UNINSTALL) # Pre-uninstall commands follow. + $(POST_UNINSTALL) # Post-uninstall commands follow. + $(NORMAL_UNINSTALL) # Normal commands follow. + + Typically, a pre-uninstall command would be used for deleting entries +from the Info directory. + + If the 'install' or 'uninstall' target has any dependencies which act +as subroutines of installation, then you should start _each_ +dependency's commands with a category line, and start the main target's +commands with a category line also. This way, you can ensure that each +command is placed in the right category regardless of which of the +dependencies actually run. + + Pre-installation and post-installation commands should not run any +programs except for these: + + [ basename bash cat chgrp chmod chown cmp cp dd diff echo + egrep expand expr false fgrep find getopt grep gunzip gzip + hostname install install-info kill ldconfig ln ls md5sum + mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee + test touch true uname xargs yes + + The reason for distinguishing the commands in this way is for the +sake of making binary packages. Typically a binary package contains all +the executables and other files that need to be installed, and has its +own method of installing them--so it does not need to run the normal +installation commands. But installing the binary package does need to +execute the pre-installation and post-installation commands. + + Programs to build binary packages work by extracting the +pre-installation and post-installation commands. Here is one way of +extracting the pre-installation commands (the '-s' option to 'make' is +needed to silence messages about entering subdirectories): + + make -s -n install -o all \ + PRE_INSTALL=pre-install \ + POST_INSTALL=post-install \ + NORMAL_INSTALL=normal-install \ + | gawk -f pre-install.awk + +where the file 'pre-install.awk' could contain this: + + $0 ~ /^(normal-install|post-install)[ \t]*$/ {on = 0} + on {print $0} + $0 ~ /^pre-install[ \t]*$/ {on = 1} + + +File: standards.info, Node: Releases, Prev: Makefile Conventions, Up: Managing Releases + +7.3 Making Releases +=================== + +You should identify each release with a pair of version numbers, a major +version and a minor. We have no objection to using more than two +numbers, but it is very unlikely that you really need them. + + Package the distribution of 'Foo version 69.96' up in a gzipped tar +file with the name 'foo-69.96.tar.gz'. It should unpack into a +subdirectory named 'foo-69.96'. + + Building and installing the program should never modify any of the +files contained in the distribution. This means that all the files that +form part of the program in any way must be classified into "source +files" and "non-source files". Source files are written by humans and +never changed automatically; non-source files are produced from source +files by programs under the control of the Makefile. + + The distribution should contain a file named 'README' which gives the +name of the package, and a general description of what it does. It is +also good to explain the purpose of each of the first-level +subdirectories in the package, if there are any. The 'README' file +should either state the version number of the package, or refer to where +in the package it can be found. + + The 'README' file should refer to the file 'INSTALL', which should +contain an explanation of the installation procedure. + + The 'README' file should also refer to the file which contains the +copying conditions. The GNU GPL, if used, should be in a file called +'COPYING'. If the GNU LGPL is used, it should be in a file called +'COPYING.LESSER'. + + Naturally, all the source files must be in the distribution. It is +okay to include non-source files in the distribution, provided they are +up-to-date and machine-independent, so that building the distribution +normally will never modify them. We commonly include non-source files +produced by Bison, 'lex', TeX, and 'makeinfo'; this helps avoid +unnecessary dependencies between our distributions, so that users can +install whichever packages they want to install. + + Non-source files that might actually be modified by building and +installing the program should *never* be included in the distribution. +So if you do distribute non-source files, always make sure they are up +to date when you make a new distribution. + + Make sure that all the files in the distribution are world-readable, +and that directories are world-readable and world-searchable (octal mode +755). We used to recommend that all directories in the distribution +also be world-writable (octal mode 777), because ancient versions of +'tar' would otherwise not cope when extracting the archive as an +unprivileged user. That can easily lead to security issues when +creating the archive, however, so now we recommend against that. + + Don't include any symbolic links in the distribution itself. If the +tar file contains symbolic links, then people cannot even unpack it on +systems that don't support symbolic links. Also, don't use multiple +names for one file in different directories, because certain file +systems cannot handle this and that prevents unpacking the distribution. + + Try to make sure that all the file names will be unique on MS-DOS. A +name on MS-DOS consists of up to 8 characters, optionally followed by a +period and up to three characters. MS-DOS will truncate extra +characters both before and after the period. Thus, 'foobarhacker.c' and +'foobarhacker.o' are not ambiguous; they are truncated to 'foobarha.c' +and 'foobarha.o', which are distinct. + + Include in your distribution a copy of the 'texinfo.tex' you used to +test print any '*.texinfo' or '*.texi' files. + + Likewise, if your program uses small GNU software packages like +regex, getopt, obstack, or termcap, include them in the distribution +file. Leaving them out would make the distribution file a little +smaller at the expense of possible inconvenience to a user who doesn't +know what other files to get. + + +File: standards.info, Node: References, Next: GNU Free Documentation License, Prev: Managing Releases, Up: Top + +8 References to Non-Free Software and Documentation +*************************************************** + +A GNU program should not recommend, promote, or grant legitimacy to the +use of any non-free program. Proprietary software is a social and +ethical problem, and our aim is to put an end to that problem. We can't +stop some people from writing proprietary programs, or stop other people +from using them, but we can and should refuse to advertise them to new +potential customers, or to give the public the idea that their existence +is ethical. + + The GNU definition of free software is found on the GNU web site at +, and the definition of free +documentation is found at . +The terms "free" and "non-free", used in this document, refer to those +definitions. + + A list of important licenses and whether they qualify as free is in +. If it is not clear +whether a license qualifies as free, please ask the GNU Project by +writing to . We will answer, and if the license is +an important one, we will add it to the list. + + When a non-free program or system is well known, you can mention it +in passing--that is harmless, since users who might want to use it +probably already know about it. For instance, it is fine to explain how +to build your package on top of some widely used non-free operating +system, or how to use it together with some widely used non-free +program. + + However, you should give only the necessary information to help those +who already use the non-free program to use your program with it--don't +give, or refer to, any further information about the proprietary +program, and don't imply that the proprietary program enhances your +program, or that its existence is in any way a good thing. The goal +should be that people already using the proprietary program will get the +advice they need about how to use your free program with it, while +people who don't already use the proprietary program will not see +anything likely to lead them to take an interest in it. + + If a non-free program or system is obscure in your program's domain, +your program should not mention or support it at all, since doing so +would tend to popularize the non-free program more than it popularizes +your program. (You cannot hope to find many additional users for your +program among the users of Foobar, if the existence of Foobar is not +generally known among people who might want to use your program.) + + Sometimes a program is free software in itself but depends on a +non-free platform in order to run. For instance, many Java programs +depend on some non-free Java libraries. To recommend or promote such a +program is to promote the other programs it needs. This is why we are +careful about listing Java programs in the Free Software Directory: we +don't want to promote the non-free Java libraries. + + We hope this particular problem with Java will be gone by and by, as +we replace the remaining non-free standard Java libraries with free +software, but the general principle will remain the same: don't +recommend, promote or legitimize programs that depend on non-free +software to run. + + Some free programs strongly encourage the use of non-free software. +A typical example is 'mplayer'. It is free software in itself, and the +free code can handle some kinds of files. However, 'mplayer' recommends +use of non-free codecs for other kinds of files, and users that install +'mplayer' are very likely to install those codecs along with it. To +recommend 'mplayer' is, in effect, to promote use of the non-free +codecs. + + Thus, you should not recommend programs that strongly encourage the +use of non-free software. This is why we do not list 'mplayer' in the +Free Software Directory. + + A GNU package should not refer the user to any non-free documentation +for free software. Free documentation that can be included in free +operating systems is essential for completing the GNU system, or any +free operating system, so encouraging it is a priority; to recommend use +of documentation that we are not allowed to include undermines the +impetus for the community to produce documentation that we can include. +So GNU packages should never recommend non-free documentation. + + By contrast, it is ok to refer to journal articles and textbooks in +the comments of a program for explanation of how it functions, even +though they are non-free. This is because we don't include such things +in the GNU system even they are free--they are outside the scope of what +a software distribution needs to include. + + Referring to a web site that describes or recommends a non-free +program is promoting that program, so please do not make links (or +mention by name) web sites that contain such material. This policy is +relevant particularly for the web pages for a GNU package. + + Following links from nearly any web site can lead eventually to +non-free software; this is inherent in the nature of the web. So it +makes no sense to criticize a site for having such links. As long as +the site does not itself recommend a non-free program, there is no need +to consider the question of the sites that it links to for other +reasons. + + Thus, for example, you should not refer to AT&T's web site if that +recommends AT&T's non-free software packages; you should not refer to a +site that links to AT&T's site presenting it as a place to get some +non-free program, because that link recommends and legitimizes the +non-free program. However, that a site contains a link to AT&T's web +site for some other purpose (such as long-distance telephone service) is +not an objection against it. + + +File: standards.info, Node: GNU Free Documentation License, Next: Index, Prev: References, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + . + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + +File: standards.info, Node: Index, Prev: GNU Free Documentation License, Up: Top + +Index +***** + +[index] +* Menu: + +* '#endif', commenting: Comments. (line 60) +* '--help' output: --help. (line 6) +* '--version' output: --version. (line 6) +* '-Wall' compiler option: Syntactic Conventions. + (line 10) +* accepting contributions: Contributions. (line 6) +* address for bug reports: --help. (line 11) +* ANSI C standard: Standard C. (line 6) +* arbitrary limits on data: Semantics. (line 6) +* ASCII characters: Character Set. (line 6) +* autoconf: System Portability. (line 23) +* avoiding proprietary code: Reading Non-Free Code. + (line 6) +* behavior, dependent on program's name: User Interfaces. (line 6) +* binary packages: Install Command Categories. + (line 80) +* bindir: Directory Variables. (line 54) +* braces, in C source: Formatting. (line 6) +* bug reports: --help. (line 11) +* 'bug-standards@gnu.org' email address: Preface. (line 30) +* canonical name of a program: --version. (line 12) +* casting pointers to integers: CPU Portability. (line 88) +* CGI programs, standard options for: Command-Line Interfaces. + (line 31) +* change logs: Change Logs. (line 6) +* change logs, conditional changes: Conditional Changes. (line 6) +* change logs, style: Style of Change Logs. + (line 6) +* character set: Character Set. (line 6) +* command-line arguments, decoding: Semantics. (line 46) +* command-line interface: Command-Line Interfaces. + (line 6) +* commenting: Comments. (line 6) +* compatibility with C and POSIX standards: Compatibility. (line 6) +* compiler warnings: Syntactic Conventions. + (line 10) +* conditional changes, and change logs: Conditional Changes. (line 6) +* conditionals, comments for: Comments. (line 60) +* configure: Configuration. (line 6) +* control-L: Formatting. (line 118) +* conventions for makefiles: Makefile Conventions. + (line 6) +* CORBA: Graphical Interfaces. + (line 16) +* credits for manuals: Manual Credits. (line 6) +* D-bus: Graphical Interfaces. + (line 16) +* data types, and portability: CPU Portability. (line 6) +* declaration for system functions: System Functions. (line 21) +* DESTDIR: DESTDIR. (line 6) +* documentation: Documentation. (line 6) +* doschk: Names. (line 38) +* downloading this manual: Preface. (line 14) +* encodings: Character Set. (line 6) +* error messages: Semantics. (line 19) +* error messages, formatting: Errors. (line 6) +* exec_prefix: Directory Variables. (line 36) +* expressions, splitting: Formatting. (line 81) +* FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* file usage: File Usage. (line 6) +* file-name limitations: Names. (line 38) +* formatting error messages: Errors. (line 6) +* formatting source code: Formatting. (line 6) +* formfeed: Formatting. (line 118) +* function argument, declaring: Syntactic Conventions. + (line 6) +* function prototypes: Standard C. (line 17) +* getopt: Command-Line Interfaces. + (line 6) +* gettext: Internationalization. + (line 6) +* GNOME: Graphical Interfaces. + (line 16) +* GNOME and Guile: Source Language. (line 37) +* gnustandards project repository: Preface. (line 30) +* 'gnustandards-commit@gnu.org' mailing list: Preface. (line 24) +* graphical user interface: Graphical Interfaces. + (line 6) +* grave accent: Quote Characters. (line 6) +* GTK+: Graphical Interfaces. + (line 6) +* Guile: Source Language. (line 37) +* implicit 'int': Syntactic Conventions. + (line 6) +* impossible conditions: Semantics. (line 70) +* installations, staged: DESTDIR. (line 6) +* interface styles: Graphical Interfaces. + (line 6) +* internationalization: Internationalization. + (line 6) +* keyboard interface: Graphical Interfaces. + (line 16) +* LDAP: OID Allocations. (line 6) +* left quote: Quote Characters. (line 6) +* legal aspects: Legal Issues. (line 6) +* legal papers: Contributions. (line 6) +* libexecdir: Directory Variables. (line 67) +* libraries: Libraries. (line 6) +* library functions, and portability: System Functions. (line 6) +* library interface: Graphical Interfaces. + (line 16) +* license for manuals: License for Manuals. (line 6) +* lint: Syntactic Conventions. + (line 109) +* locale-specific quote characters: Quote Characters. (line 6) +* long option names: Option Table. (line 6) +* long-named options: Command-Line Interfaces. + (line 12) +* makefile, conventions for: Makefile Conventions. + (line 6) +* 'malloc' return value: Semantics. (line 25) +* man pages: Man Pages. (line 6) +* manual structure: Manual Structure Details. + (line 6) +* memory allocation failure: Semantics. (line 25) +* memory usage: Memory Usage. (line 6) +* message text, and internationalization: Internationalization. + (line 29) +* mmap: Mmap. (line 6) +* multiple variables in a line: Syntactic Conventions. + (line 35) +* names of variables, functions, and files: Names. (line 6) +* 'NEWS' file: NEWS File. (line 6) +* non-ASCII characters: Character Set. (line 6) +* non-POSIX systems, and portability: System Portability. (line 32) +* non-standard extensions: Using Extensions. (line 6) +* 'NUL' characters: Semantics. (line 11) +* OID allocations for GNU: OID Allocations. (line 6) +* open brace: Formatting. (line 6) +* optional features, configure-time: Configuration. (line 97) +* options for compatibility: Compatibility. (line 14) +* options, standard command-line: Command-Line Interfaces. + (line 31) +* output device and program's behavior: User Interfaces. (line 13) +* packaging: Releases. (line 6) +* PATH_INFO, specifying standard options as: Command-Line Interfaces. + (line 31) +* portability, and data types: CPU Portability. (line 6) +* portability, and library functions: System Functions. (line 6) +* portability, between system types: System Portability. (line 6) +* POSIX compatibility: Compatibility. (line 6) +* 'POSIXLY_CORRECT', environment variable: Compatibility. (line 21) +* post-installation commands: Install Command Categories. + (line 6) +* pre-installation commands: Install Command Categories. + (line 6) +* prefix: Directory Variables. (line 26) +* program configuration: Configuration. (line 6) +* program design: Design Advice. (line 6) +* program name and its behavior: User Interfaces. (line 6) +* program's canonical name: --version. (line 12) +* programming languages: Source Language. (line 6) +* proprietary programs: Reading Non-Free Code. + (line 6) +* quote characters: Quote Characters. (line 6) +* 'README' file: Releases. (line 21) +* references to non-free material: References. (line 6) +* releasing: Managing Releases. (line 6) +* Savannah repository for gnustandards: Preface. (line 30) +* sbindir: Directory Variables. (line 60) +* signal handling: Semantics. (line 59) +* SNMP: OID Allocations. (line 6) +* spaces before open-paren: Formatting. (line 75) +* staged installs: DESTDIR. (line 6) +* standard command-line options: Command-Line Interfaces. + (line 31) +* standards for makefiles: Makefile Conventions. + (line 6) +* string library functions: System Functions. (line 54) +* syntactic conventions: Syntactic Conventions. + (line 6) +* table of long options: Option Table. (line 6) +* temporary files: Semantics. (line 84) +* temporary variables: Syntactic Conventions. + (line 23) +* 'texinfo.tex', in a distribution: Releases. (line 70) +* 'TMPDIR' environment variable: Semantics. (line 84) +* trademarks: Trademarks. (line 6) +* user interface styles: Graphical Interfaces. + (line 6) +* where to obtain 'standards.texi': Preface. (line 14) +* X.509: OID Allocations. (line 6) + + + +Tag Table: +Node: Top808 +Node: Preface2083 +Node: Legal Issues4784 +Node: Reading Non-Free Code5254 +Node: Contributions6983 +Node: Trademarks9221 +Node: Design Advice10855 +Node: Source Language11447 +Node: Compatibility13566 +Node: Using Extensions15194 +Node: Standard C16771 +Node: Conditional Compilation19174 +Node: Program Behavior20572 +Node: Non-GNU Standards21688 +Node: Semantics23969 +Node: Libraries28689 +Node: Errors29934 +Node: User Interfaces32428 +Node: Graphical Interfaces34033 +Node: Command-Line Interfaces35216 +Node: --version37246 +Node: --help42965 +Node: Option Table43838 +Node: OID Allocations58793 +Node: Memory Usage60590 +Node: File Usage61626 +Node: Writing C62376 +Node: Formatting63346 +Node: Comments67635 +Node: Syntactic Conventions71186 +Node: Names74648 +Node: System Portability76860 +Node: CPU Portability79751 +Node: System Functions83653 +Node: Internationalization88845 +Node: Character Set92839 +Node: Quote Characters93652 +Node: Mmap95172 +Node: Documentation95880 +Node: GNU Manuals96986 +Node: Doc Strings and Manuals102724 +Node: Manual Structure Details104277 +Node: License for Manuals105695 +Node: Manual Credits106668 +Node: Printed Manuals107061 +Node: NEWS File107747 +Node: Change Logs108425 +Node: Change Log Concepts109179 +Node: Style of Change Logs111282 +Node: Simple Changes113782 +Node: Conditional Changes115224 +Node: Indicating the Part Changed116646 +Node: Man Pages117173 +Node: Reading other Manuals119347 +Node: Managing Releases120138 +Node: Configuration120918 +Node: Makefile Conventions129581 +Node: Makefile Basics130463 +Node: Utilities in Makefiles133637 +Node: Command Variables135783 +Node: DESTDIR139006 +Node: Directory Variables141155 +Node: Standard Targets155640 +Ref: Standard Targets-Footnote-1169156 +Node: Install Command Categories169257 +Node: Releases173790 +Node: References177794 +Node: GNU Free Documentation License183640 +Node: Index208788 + +End Tag Table diff --git a/libc/xtensa-lx106-elf/include/_ansi.h b/libc/xtensa-lx106-elf/include/_ansi.h index 6c7497e..5fb9907 100644 --- a/libc/xtensa-lx106-elf/include/_ansi.h +++ b/libc/xtensa-lx106-elf/include/_ansi.h @@ -1,6 +1,11 @@ /* Provide support for both ANSI and non-ANSI environments. */ -/* To get a strict ANSI C environment, define macro __STRICT_ANSI__. This will +/* Some ANSI environments are "broken" in the sense that __STDC__ cannot be + relied upon to have it's intended meaning. Therefore we must use our own + concoction: _HAVE_STDC. Always use _HAVE_STDC instead of __STDC__ in newlib + sources! + + To get a strict ANSI C environment, define macro __STRICT_ANSI__. This will "comment out" the non-ANSI parts of the ANSI header files (non-ANSI header files aren't affected). */ @@ -10,6 +15,14 @@ #include #include +/* First try to figure out whether we really are in an ANSI C environment. */ +/* FIXME: This probably needs some work. Perhaps sys/config.h can be + prevailed upon to give us a clue. */ + +#ifdef __STDC__ +#define _HAVE_STDC +#endif + /* ISO C++. */ #ifdef __cplusplus @@ -33,9 +46,54 @@ #define _NOTHROW #endif +#ifdef _HAVE_STDC +#define _PTR void * +#define _AND , +#define _NOARGS void +#define _CONST const +#define _VOLATILE volatile +#define _SIGNED signed +#define _DOTS , ... +#define _VOID void +#ifdef __CYGWIN__ +#define _EXFUN_NOTHROW(name, proto) __cdecl name proto _NOTHROW +#define _EXFUN(name, proto) __cdecl name proto +#define _EXPARM(name, proto) (* __cdecl name) proto +#define _EXFNPTR(name, proto) (__cdecl * name) proto +#else +#define _EXFUN_NOTHROW(name, proto) name proto _NOTHROW +#define _EXFUN(name, proto) name proto +#define _EXPARM(name, proto) (* name) proto +#define _EXFNPTR(name, proto) (* name) proto +#endif +#define _DEFUN(name, arglist, args) name(args) +#define _DEFUN_VOID(name) name(_NOARGS) +#define _CAST_VOID (void) #ifndef _LONG_DOUBLE #define _LONG_DOUBLE long double #endif +#ifndef _PARAMS +#define _PARAMS(paramlist) paramlist +#endif +#else +#define _PTR char * +#define _AND ; +#define _NOARGS +#define _CONST +#define _VOLATILE +#define _SIGNED +#define _DOTS +#define _VOID void +#define _EXFUN(name, proto) name() +#define _EXFUN_NOTHROW(name, proto) name() +#define _DEFUN(name, arglist, args) name arglist args; +#define _DEFUN_VOID(name) name() +#define _CAST_VOID +#define _LONG_DOUBLE double +#ifndef _PARAMS +#define _PARAMS(paramlist) () +#endif +#endif /* Support gcc's __attribute__ facility. */ diff --git a/libc/xtensa-lx106-elf/include/_newlib_version.h b/libc/xtensa-lx106-elf/include/_newlib_version.h deleted file mode 100644 index 5250a84..0000000 --- a/libc/xtensa-lx106-elf/include/_newlib_version.h +++ /dev/null @@ -1,12 +0,0 @@ -/* _newlib_version.h. Generated from _newlib_version.hin by configure. */ -/* Version macros for internal and downstream use. */ -#ifndef _NEWLIB_VERSION_H__ -#define _NEWLIB_VERSION_H__ 1 - -#define _NEWLIB_VERSION "3.0.0" -#define __NEWLIB__ 3 -#define __NEWLIB_MINOR__ 0 -#define __NEWLIB_PATCHLEVEL__ 0 - -#endif /* !_NEWLIB_VERSION_H__ */ - diff --git a/libc/xtensa-lx106-elf/include/alloca.h b/libc/xtensa-lx106-elf/include/alloca.h index 5d36318..2ea0fd9 100644 --- a/libc/xtensa-lx106-elf/include/alloca.h +++ b/libc/xtensa-lx106-elf/include/alloca.h @@ -15,7 +15,7 @@ #ifdef __GNUC__ #define alloca(size) __builtin_alloca(size) #else -void * alloca (size_t); +void * _EXFUN(alloca,(size_t)); #endif #endif diff --git a/libc/xtensa-lx106-elf/include/assert.h b/libc/xtensa-lx106-elf/include/assert.h index b9e5e9b..91bb040 100644 --- a/libc/xtensa-lx106-elf/include/assert.h +++ b/libc/xtensa-lx106-elf/include/assert.h @@ -36,10 +36,10 @@ extern "C" { # endif /* !__ASSERT_FUNC */ #endif /* !NDEBUG */ -void __assert (const char *, int, const char *) - _ATTRIBUTE ((__noreturn__)); -void __assert_func (const char *, int, const char *, const char *) - _ATTRIBUTE ((__noreturn__)); +void _EXFUN(__assert, (const char *, int, const char *) + _ATTRIBUTE ((__noreturn__))); +void _EXFUN(__assert_func, (const char *, int, const char *, const char *) + _ATTRIBUTE ((__noreturn__))); #if __STDC_VERSION__ >= 201112L && !defined __cplusplus # define static_assert _Static_assert diff --git a/libc/xtensa-lx106-elf/include/complex.h b/libc/xtensa-lx106-elf/include/complex.h index 0a3ea97..969b20e 100644 --- a/libc/xtensa-lx106-elf/include/complex.h +++ b/libc/xtensa-lx106-elf/include/complex.h @@ -24,12 +24,10 @@ float complex cacosf(float complex); /* 7.3.5.2 The casin functions */ double complex casin(double complex); float complex casinf(float complex); -long double complex casinl(long double complex); /* 7.3.5.1 The catan functions */ double complex catan(double complex); float complex catanf(float complex); -long double complex catanl(long double complex); /* 7.3.5.1 The ccos functions */ double complex ccos(double complex); @@ -76,7 +74,6 @@ float complex cexpf(float complex); /* 7.3.7.2 The clog functions */ double complex clog(double complex); float complex clogf(float complex); -long double complex clogl(long double complex); /* 7.3.8 Power and absolute-value functions */ /* 7.3.8.1 The cabs functions */ @@ -86,7 +83,6 @@ long double complex clogl(long double complex); float cabsf(float complex) __RENAME(__c99_cabsf); #endif */ -long double cabsl(long double complex) ; double cabs(double complex) ; float cabsf(float complex) ; @@ -97,56 +93,31 @@ float complex cpowf(float complex, float complex); /* 7.3.8.3 The csqrt functions */ double complex csqrt(double complex); float complex csqrtf(float complex); -long double complex csqrtl(long double complex); /* 7.3.9 Manipulation functions */ /* 7.3.9.1 The carg functions */ double carg(double complex); float cargf(float complex); -long double cargl(long double complex); /* 7.3.9.2 The cimag functions */ double cimag(double complex); float cimagf(float complex); -long double cimagl(long double complex); +/*long double cimagl(long double complex); */ /* 7.3.9.3 The conj functions */ double complex conj(double complex); float complex conjf(float complex); +/*long double complex conjl(long double complex); */ /* 7.3.9.4 The cproj functions */ double complex cproj(double complex); float complex cprojf(float complex); +/*long double complex cprojl(long double complex); */ /* 7.3.9.5 The creal functions */ double creal(double complex); float crealf(float complex); -long double creall(long double complex); - -#if __GNU_VISIBLE -double complex clog10(double complex); -float complex clog10f(float complex); -#endif - -#if defined(__CYGWIN__) -long double complex cacosl(long double complex); -long double complex ccosl(long double complex); -long double complex csinl(long double complex); -long double complex ctanl(long double complex); -long double complex cacoshl(long double complex); -long double complex casinhl(long double complex); -long double complex catanhl(long double complex); -long double complex ccoshl(long double complex); -long double complex csinhl(long double complex); -long double complex ctanhl(long double complex); -long double complex cexpl(long double complex); -long double complex cpowl(long double complex, long double complex); -long double complex conjl(long double complex); -long double complex cprojl(long double complex); -#if __GNU_VISIBLE -long double complex clog10l(long double complex); -#endif -#endif /* __CYGWIN__ */ +/*long double creall(long double complex); */ __END_DECLS diff --git a/libc/xtensa-lx106-elf/include/cpio.h b/libc/xtensa-lx106-elf/include/cpio.h deleted file mode 100644 index 99860b2..0000000 --- a/libc/xtensa-lx106-elf/include/cpio.h +++ /dev/null @@ -1,30 +0,0 @@ -/* POSIX.1 symbolic constants for c_mode field of cpio archive format */ - -#ifndef _CPIO_H -#define _CPIO_H - -#define C_IRUSR 0000400 /* Read by owner */ -#define C_IWUSR 0000200 /* Write by owner */ -#define C_IXUSR 0000100 /* Execute by owner */ -#define C_IRGRP 0000040 /* Read by group */ -#define C_IWGRP 0000020 /* Write by group */ -#define C_IXGRP 0000010 /* Execute by group */ -#define C_IROTH 0000004 /* Read by others */ -#define C_IWOTH 0000002 /* Write by others */ -#define C_IXOTH 0000001 /* Execute by others */ -#define C_ISUID 0004000 /* Set user ID */ -#define C_ISGID 0002000 /* Set group ID */ -#define C_ISVTX 0001000 /* On directories, restricted deletion flag */ - -#define C_ISDIR 0040000 /* Directory */ -#define C_ISFIFO 0010000 /* FIFO */ -#define C_ISREG 0100000 /* Regular file */ -#define C_ISBLK 0060000 /* Block special */ -#define C_ISCHR 0020000 /* Character special */ -#define C_ISCTG 0110000 /* Reserved */ -#define C_ISLNK 0120000 /* Symbolic link */ -#define C_ISSOCK 0140000 /* Socket */ - -#define MAGIC "070707" - -#endif /* _CPIO_H */ diff --git a/libc/xtensa-lx106-elf/include/ctype.h b/libc/xtensa-lx106-elf/include/ctype.h index f74b349..56ad5ab 100644 --- a/libc/xtensa-lx106-elf/include/ctype.h +++ b/libc/xtensa-lx106-elf/include/ctype.h @@ -2,61 +2,34 @@ #define _CTYPE_H_ #include "_ansi.h" -#include - -#if __POSIX_VISIBLE >= 200809 || __MISC_VISIBLE || defined (_COMPILING_NEWLIB) -#include -#endif _BEGIN_STD_C -int isalnum (int __c); -int isalpha (int __c); -int iscntrl (int __c); -int isdigit (int __c); -int isgraph (int __c); -int islower (int __c); -int isprint (int __c); -int ispunct (int __c); -int isspace (int __c); -int isupper (int __c); -int isxdigit (int __c); -int tolower (int __c); -int toupper (int __c); +int _EXFUN(isalnum, (int __c)); +int _EXFUN(isalpha, (int __c)); +int _EXFUN(iscntrl, (int __c)); +int _EXFUN(isdigit, (int __c)); +int _EXFUN(isgraph, (int __c)); +int _EXFUN(islower, (int __c)); +int _EXFUN(isprint, (int __c)); +int _EXFUN(ispunct, (int __c)); +int _EXFUN(isspace, (int __c)); +int _EXFUN(isupper, (int __c)); +int _EXFUN(isxdigit,(int __c)); +int _EXFUN(tolower, (int __c)); +int _EXFUN(toupper, (int __c)); -#if __ISO_C_VISIBLE >= 1999 -int isblank (int __c); +#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L +int _EXFUN(isblank, (int __c)); #endif -#if __MISC_VISIBLE || __XSI_VISIBLE -int isascii (int __c); -int toascii (int __c); +#ifndef __STRICT_ANSI__ +int _EXFUN(isascii, (int __c)); +int _EXFUN(toascii, (int __c)); #define _tolower(__c) ((unsigned char)(__c) - 'A' + 'a') #define _toupper(__c) ((unsigned char)(__c) - 'a' + 'A') #endif -#if __POSIX_VISIBLE >= 200809 -extern int isalnum_l (int __c, locale_t __l); -extern int isalpha_l (int __c, locale_t __l); -extern int isblank_l (int __c, locale_t __l); -extern int iscntrl_l (int __c, locale_t __l); -extern int isdigit_l (int __c, locale_t __l); -extern int isgraph_l (int __c, locale_t __l); -extern int islower_l (int __c, locale_t __l); -extern int isprint_l (int __c, locale_t __l); -extern int ispunct_l (int __c, locale_t __l); -extern int isspace_l (int __c, locale_t __l); -extern int isupper_l (int __c, locale_t __l); -extern int isxdigit_l(int __c, locale_t __l); -extern int tolower_l (int __c, locale_t __l); -extern int toupper_l (int __c, locale_t __l); -#endif - -#if __MISC_VISIBLE -extern int isascii_l (int __c, locale_t __l); -extern int toascii_l (int __c, locale_t __l); -#endif - #define _U 01 #define _L 02 #define _N 04 @@ -66,20 +39,22 @@ extern int toascii_l (int __c, locale_t __l); #define _X 0100 #define _B 0200 -const char *__locale_ctype_ptr (void); -# define __CTYPE_PTR (__locale_ctype_ptr ()) +#ifndef _MB_CAPABLE +_CONST +#endif +extern __IMPORT char *__ctype_ptr__; #ifndef __cplusplus /* These macros are intentionally written in a manner that will trigger a gcc -Wall warning if the user mistakenly passes a 'char' instead of an int containing an 'unsigned char'. Note that the sizeof will - always be 1, which is what we want for mapping EOF to __CTYPE_PTR[0]; + always be 1, which is what we want for mapping EOF to __ctype_ptr__[0]; the use of a raw index inside the sizeof triggers the gcc warning if __c was of type char, and sizeof masks side effects of the extra __c. - Meanwhile, the real index to __CTYPE_PTR+1 must be cast to int, + Meanwhile, the real index to __ctype_ptr__+1 must be cast to int, since isalpha(0x100000001LL) must equal isalpha(1), rather than being an out-of-bounds reference on a 64-bit machine. */ -#define __ctype_lookup(__c) ((__CTYPE_PTR+sizeof(""[__c]))[(int)(__c)]) +#define __ctype_lookup(__c) ((__ctype_ptr__+sizeof(""[__c]))[(int)(__c)]) #define isalpha(__c) (__ctype_lookup(__c)&(_U|_L)) #define isupper(__c) ((__ctype_lookup(__c)&(_U|_L))==_U) @@ -93,45 +68,13 @@ const char *__locale_ctype_ptr (void); #define isgraph(__c) (__ctype_lookup(__c)&(_P|_U|_L|_N)) #define iscntrl(__c) (__ctype_lookup(__c)&_C) -#if defined(__GNUC__) && __ISO_C_VISIBLE >= 1999 +#if defined(__GNUC__) && \ + (!defined(__STRICT_ANSI__) || __STDC_VERSION__ >= 199901L) #define isblank(__c) \ __extension__ ({ __typeof__ (__c) __x = (__c); \ (__ctype_lookup(__x)&_B) || (int) (__x) == '\t';}) #endif -#if __POSIX_VISIBLE >= 200809 -const char *__locale_ctype_ptr_l (locale_t); -#define __ctype_lookup_l(__c,__l) ((__locale_ctype_ptr_l(__l)+sizeof(""[__c]))[(int)(__c)]) - -#define isalpha_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L)) -#define isupper_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_U) -#define islower_l(__c,__l) ((__ctype_lookup_l(__c,__l)&(_U|_L))==_L) -#define isdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&_N) -#define isxdigit_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_X|_N)) -#define isspace_l(__c,__l) (__ctype_lookup_l(__c,__l)&_S) -#define ispunct_l(__c,__l) (__ctype_lookup_l(__c,__l)&_P) -#define isalnum_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_U|_L|_N)) -#define isprint_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N|_B)) -#define isgraph_l(__c,__l) (__ctype_lookup_l(__c,__l)&(_P|_U|_L|_N)) -#define iscntrl_l(__c,__l) (__ctype_lookup_l(__c,__l)&_C) - -#if defined(__GNUC__) -#define isblank_l(__c, __l) \ - __extension__ ({ __typeof__ (__c) __x = (__c); \ - (__ctype_lookup_l(__x,__l)&_B) || (int) (__x) == '\t';}) -#endif - -#endif /* __POSIX_VISIBLE >= 200809 */ - -#if __MISC_VISIBLE || __XSI_VISIBLE -#define isascii(__c) ((unsigned)(__c)<=0177) -#define toascii(__c) ((__c)&0177) -#endif - -#if __MISC_VISIBLE -#define isascii_l(__c,__l) ((__l),(unsigned)(__c)<=0177) -#define toascii_l(__c,__l) ((__l),(__c)&0177) -#endif /* Non-gcc versions will get the library versions, and will be slightly slower. These macros are not NLS-aware so they are @@ -149,20 +92,21 @@ const char *__locale_ctype_ptr_l (locale_t); function. */ # define toupper(__c) \ __extension__ ({ __typeof__ (__c) __x = (__c); \ - (void) __CTYPE_PTR[__x]; (toupper) (__x);}) + (void) __ctype_ptr__[__x]; (toupper) (__x);}) # define tolower(__c) \ __extension__ ({ __typeof__ (__c) __x = (__c); \ - (void) __CTYPE_PTR[__x]; (tolower) (__x);}) + (void) __ctype_ptr__[__x]; (tolower) (__x);}) # endif /* _MB_EXTENDED_CHARSETS* */ # endif /* __GNUC__ */ - -#if __POSIX_VISIBLE >= 200809 -#endif /* __POSIX_VISIBLE >= 200809 */ - #endif /* !__cplusplus */ +#ifndef __STRICT_ANSI__ +#define isascii(__c) ((unsigned)(__c)<=0177) +#define toascii(__c) ((__c)&0177) +#endif + /* For C++ backward-compatibility only. */ -extern __IMPORT const char _ctype_[]; +extern __IMPORT _CONST char _ctype_[]; _END_STD_C diff --git a/libc/xtensa-lx106-elf/include/devctl.h b/libc/xtensa-lx106-elf/include/devctl.h deleted file mode 100644 index f6055fb..0000000 --- a/libc/xtensa-lx106-elf/include/devctl.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2016 Joel Sherrill . All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - */ - -#ifndef _POSIX_DEVCTL_h_ -#define _POSIX_DEVCTL_h_ - -/* - * The posix_devctl() method is defined by POSIX 1003.26-2003. Aside - * from the single method, it adds the following requirements: - * - * + define _POSIX_26_VERSION to 200312L - * + add _SC_POSIX_26_VERSION in . Return _POSIX_26_VERSION - * + application must define _POSIX_26_C_SOURCE to use posix_devctl(). - * + posix_devctl() is prototyped in - */ - -#ifdef _POSIX_26_C_SOURCE -#include - -int posix_devctl( - int fd, - int dcmd, - void *__restrict dev_data_ptr, - size_t nbyte, - int *__restrict dev_info_ptr -); -#endif - -#endif diff --git a/libc/xtensa-lx106-elf/include/dirent.h b/libc/xtensa-lx106-elf/include/dirent.h index 6135b9f..6fefc03 100644 --- a/libc/xtensa-lx106-elf/include/dirent.h +++ b/libc/xtensa-lx106-elf/include/dirent.h @@ -3,10 +3,9 @@ #ifdef __cplusplus extern "C" { #endif -#include #include -#if !defined(MAXNAMLEN) && __BSD_VISIBLE +#if !defined(MAXNAMLEN) && !defined(_POSIX_SOURCE) #define MAXNAMLEN 1024 #endif diff --git a/libc/xtensa-lx106-elf/include/elf.h b/libc/xtensa-lx106-elf/include/elf.h deleted file mode 100644 index 79d3b97..0000000 --- a/libc/xtensa-lx106-elf/include/elf.h +++ /dev/null @@ -1,3147 +0,0 @@ -/* -From musl include/elf.h - -Copyright © 2005-2014 Rich Felker, et al. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef _ELF_H -#define _ELF_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -typedef uint16_t Elf32_Half; -typedef uint16_t Elf64_Half; - -typedef uint32_t Elf32_Word; -typedef int32_t Elf32_Sword; -typedef uint32_t Elf64_Word; -typedef int32_t Elf64_Sword; - -typedef uint64_t Elf32_Xword; -typedef int64_t Elf32_Sxword; -typedef uint64_t Elf64_Xword; -typedef int64_t Elf64_Sxword; - -typedef uint32_t Elf32_Addr; -typedef uint64_t Elf64_Addr; - -typedef uint32_t Elf32_Off; -typedef uint64_t Elf64_Off; - -typedef uint16_t Elf32_Section; -typedef uint16_t Elf64_Section; - -typedef Elf32_Half Elf32_Versym; -typedef Elf64_Half Elf64_Versym; - -#define EI_NIDENT (16) - -typedef struct { - unsigned char e_ident[EI_NIDENT]; - Elf32_Half e_type; - Elf32_Half e_machine; - Elf32_Word e_version; - Elf32_Addr e_entry; - Elf32_Off e_phoff; - Elf32_Off e_shoff; - Elf32_Word e_flags; - Elf32_Half e_ehsize; - Elf32_Half e_phentsize; - Elf32_Half e_phnum; - Elf32_Half e_shentsize; - Elf32_Half e_shnum; - Elf32_Half e_shstrndx; -} Elf32_Ehdr; - -typedef struct { - unsigned char e_ident[EI_NIDENT]; - Elf64_Half e_type; - Elf64_Half e_machine; - Elf64_Word e_version; - Elf64_Addr e_entry; - Elf64_Off e_phoff; - Elf64_Off e_shoff; - Elf64_Word e_flags; - Elf64_Half e_ehsize; - Elf64_Half e_phentsize; - Elf64_Half e_phnum; - Elf64_Half e_shentsize; - Elf64_Half e_shnum; - Elf64_Half e_shstrndx; -} Elf64_Ehdr; - -#define EI_MAG0 0 -#define ELFMAG0 0x7f - -#define EI_MAG1 1 -#define ELFMAG1 'E' - -#define EI_MAG2 2 -#define ELFMAG2 'L' - -#define EI_MAG3 3 -#define ELFMAG3 'F' - - -#define ELFMAG "\177ELF" -#define SELFMAG 4 - -#define EI_CLASS 4 -#define ELFCLASSNONE 0 -#define ELFCLASS32 1 -#define ELFCLASS64 2 -#define ELFCLASSNUM 3 - -#define EI_DATA 5 -#define ELFDATANONE 0 -#define ELFDATA2LSB 1 -#define ELFDATA2MSB 2 -#define ELFDATANUM 3 - -#define EI_VERSION 6 - - -#define EI_OSABI 7 -#define ELFOSABI_NONE 0 -#define ELFOSABI_SYSV 0 -#define ELFOSABI_HPUX 1 -#define ELFOSABI_NETBSD 2 -#define ELFOSABI_LINUX 3 -#define ELFOSABI_GNU 3 -#define ELFOSABI_SOLARIS 6 -#define ELFOSABI_AIX 7 -#define ELFOSABI_IRIX 8 -#define ELFOSABI_FREEBSD 9 -#define ELFOSABI_TRU64 10 -#define ELFOSABI_MODESTO 11 -#define ELFOSABI_OPENBSD 12 -#define ELFOSABI_ARM 97 -#define ELFOSABI_STANDALONE 255 - -#define EI_ABIVERSION 8 - -#define EI_PAD 9 - - - -#define ET_NONE 0 -#define ET_REL 1 -#define ET_EXEC 2 -#define ET_DYN 3 -#define ET_CORE 4 -#define ET_NUM 5 -#define ET_LOOS 0xfe00 -#define ET_HIOS 0xfeff -#define ET_LOPROC 0xff00 -#define ET_HIPROC 0xffff - - - -#define EM_NONE 0 -#define EM_M32 1 -#define EM_SPARC 2 -#define EM_386 3 -#define EM_68K 4 -#define EM_88K 5 -#define EM_860 7 -#define EM_MIPS 8 -#define EM_S370 9 -#define EM_MIPS_RS3_LE 10 - -#define EM_PARISC 15 -#define EM_VPP500 17 -#define EM_SPARC32PLUS 18 -#define EM_960 19 -#define EM_PPC 20 -#define EM_PPC64 21 -#define EM_S390 22 - -#define EM_V800 36 -#define EM_FR20 37 -#define EM_RH32 38 -#define EM_RCE 39 -#define EM_ARM 40 -#define EM_FAKE_ALPHA 41 -#define EM_SH 42 -#define EM_SPARCV9 43 -#define EM_TRICORE 44 -#define EM_ARC 45 -#define EM_H8_300 46 -#define EM_H8_300H 47 -#define EM_H8S 48 -#define EM_H8_500 49 -#define EM_IA_64 50 -#define EM_MIPS_X 51 -#define EM_COLDFIRE 52 -#define EM_68HC12 53 -#define EM_MMA 54 -#define EM_PCP 55 -#define EM_NCPU 56 -#define EM_NDR1 57 -#define EM_STARCORE 58 -#define EM_ME16 59 -#define EM_ST100 60 -#define EM_TINYJ 61 -#define EM_X86_64 62 -#define EM_PDSP 63 - -#define EM_FX66 66 -#define EM_ST9PLUS 67 -#define EM_ST7 68 -#define EM_68HC16 69 -#define EM_68HC11 70 -#define EM_68HC08 71 -#define EM_68HC05 72 -#define EM_SVX 73 -#define EM_ST19 74 -#define EM_VAX 75 -#define EM_CRIS 76 -#define EM_JAVELIN 77 -#define EM_FIREPATH 78 -#define EM_ZSP 79 -#define EM_MMIX 80 -#define EM_HUANY 81 -#define EM_PRISM 82 -#define EM_AVR 83 -#define EM_FR30 84 -#define EM_D10V 85 -#define EM_D30V 86 -#define EM_V850 87 -#define EM_M32R 88 -#define EM_MN10300 89 -#define EM_MN10200 90 -#define EM_PJ 91 -#define EM_OR1K 92 -#define EM_OPENRISC 92 -#define EM_ARC_A5 93 -#define EM_ARC_COMPACT 93 -#define EM_XTENSA 94 -#define EM_VIDEOCORE 95 -#define EM_TMM_GPP 96 -#define EM_NS32K 97 -#define EM_TPC 98 -#define EM_SNP1K 99 -#define EM_ST200 100 -#define EM_IP2K 101 -#define EM_MAX 102 -#define EM_CR 103 -#define EM_F2MC16 104 -#define EM_MSP430 105 -#define EM_BLACKFIN 106 -#define EM_SE_C33 107 -#define EM_SEP 108 -#define EM_ARCA 109 -#define EM_UNICORE 110 -#define EM_EXCESS 111 -#define EM_DXP 112 -#define EM_ALTERA_NIOS2 113 -#define EM_CRX 114 -#define EM_XGATE 115 -#define EM_C166 116 -#define EM_M16C 117 -#define EM_DSPIC30F 118 -#define EM_CE 119 -#define EM_M32C 120 -#define EM_TSK3000 131 -#define EM_RS08 132 -#define EM_SHARC 133 -#define EM_ECOG2 134 -#define EM_SCORE7 135 -#define EM_DSP24 136 -#define EM_VIDEOCORE3 137 -#define EM_LATTICEMICO32 138 -#define EM_SE_C17 139 -#define EM_TI_C6000 140 -#define EM_TI_C2000 141 -#define EM_TI_C5500 142 -#define EM_TI_ARP32 143 -#define EM_TI_PRU 144 -#define EM_MMDSP_PLUS 160 -#define EM_CYPRESS_M8C 161 -#define EM_R32C 162 -#define EM_TRIMEDIA 163 -#define EM_QDSP6 164 -#define EM_8051 165 -#define EM_STXP7X 166 -#define EM_NDS32 167 -#define EM_ECOG1X 168 -#define EM_MAXQ30 169 -#define EM_XIMO16 170 -#define EM_MANIK 171 -#define EM_CRAYNV2 172 -#define EM_RX 173 -#define EM_METAG 174 -#define EM_MCST_ELBRUS 175 -#define EM_ECOG16 176 -#define EM_CR16 177 -#define EM_ETPU 178 -#define EM_SLE9X 179 -#define EM_L10M 180 -#define EM_K10M 181 -#define EM_AARCH64 183 -#define EM_AVR32 185 -#define EM_STM8 186 -#define EM_TILE64 187 -#define EM_TILEPRO 188 -#define EM_MICROBLAZE 189 -#define EM_CUDA 190 -#define EM_TILEGX 191 -#define EM_CLOUDSHIELD 192 -#define EM_COREA_1ST 193 -#define EM_COREA_2ND 194 -#define EM_ARC_COMPACT2 195 -#define EM_OPEN8 196 -#define EM_RL78 197 -#define EM_VIDEOCORE5 198 -#define EM_78KOR 199 -#define EM_56800EX 200 -#define EM_BA1 201 -#define EM_BA2 202 -#define EM_XCORE 203 -#define EM_MCHP_PIC 204 -#define EM_KM32 210 -#define EM_KMX32 211 -#define EM_EMX16 212 -#define EM_EMX8 213 -#define EM_KVARC 214 -#define EM_CDP 215 -#define EM_COGE 216 -#define EM_COOL 217 -#define EM_NORC 218 -#define EM_CSR_KALIMBA 219 -#define EM_Z80 220 -#define EM_VISIUM 221 -#define EM_FT32 222 -#define EM_MOXIE 223 -#define EM_AMDGPU 224 -#define EM_RISCV 243 -#define EM_BPF 247 -#define EM_NUM 248 - -#define EM_ALPHA 0x9026 - -#define EV_NONE 0 -#define EV_CURRENT 1 -#define EV_NUM 2 - -typedef struct { - Elf32_Word sh_name; - Elf32_Word sh_type; - Elf32_Word sh_flags; - Elf32_Addr sh_addr; - Elf32_Off sh_offset; - Elf32_Word sh_size; - Elf32_Word sh_link; - Elf32_Word sh_info; - Elf32_Word sh_addralign; - Elf32_Word sh_entsize; -} Elf32_Shdr; - -typedef struct { - Elf64_Word sh_name; - Elf64_Word sh_type; - Elf64_Xword sh_flags; - Elf64_Addr sh_addr; - Elf64_Off sh_offset; - Elf64_Xword sh_size; - Elf64_Word sh_link; - Elf64_Word sh_info; - Elf64_Xword sh_addralign; - Elf64_Xword sh_entsize; -} Elf64_Shdr; - - - -#define SHN_UNDEF 0 -#define SHN_LORESERVE 0xff00 -#define SHN_LOPROC 0xff00 -#define SHN_BEFORE 0xff00 - -#define SHN_AFTER 0xff01 - -#define SHN_HIPROC 0xff1f -#define SHN_LOOS 0xff20 -#define SHN_HIOS 0xff3f -#define SHN_ABS 0xfff1 -#define SHN_COMMON 0xfff2 -#define SHN_XINDEX 0xffff -#define SHN_HIRESERVE 0xffff - - - -#define SHT_NULL 0 -#define SHT_PROGBITS 1 -#define SHT_SYMTAB 2 -#define SHT_STRTAB 3 -#define SHT_RELA 4 -#define SHT_HASH 5 -#define SHT_DYNAMIC 6 -#define SHT_NOTE 7 -#define SHT_NOBITS 8 -#define SHT_REL 9 -#define SHT_SHLIB 10 -#define SHT_DYNSYM 11 -#define SHT_INIT_ARRAY 14 -#define SHT_FINI_ARRAY 15 -#define SHT_PREINIT_ARRAY 16 -#define SHT_GROUP 17 -#define SHT_SYMTAB_SHNDX 18 -#define SHT_NUM 19 -#define SHT_LOOS 0x60000000 -#define SHT_GNU_ATTRIBUTES 0x6ffffff5 -#define SHT_GNU_HASH 0x6ffffff6 -#define SHT_GNU_LIBLIST 0x6ffffff7 -#define SHT_CHECKSUM 0x6ffffff8 -#define SHT_LOSUNW 0x6ffffffa -#define SHT_SUNW_move 0x6ffffffa -#define SHT_SUNW_COMDAT 0x6ffffffb -#define SHT_SUNW_syminfo 0x6ffffffc -#define SHT_GNU_verdef 0x6ffffffd -#define SHT_GNU_verneed 0x6ffffffe -#define SHT_GNU_versym 0x6fffffff -#define SHT_HISUNW 0x6fffffff -#define SHT_HIOS 0x6fffffff -#define SHT_LOPROC 0x70000000 -#define SHT_HIPROC 0x7fffffff -#define SHT_LOUSER 0x80000000 -#define SHT_HIUSER 0x8fffffff - -#define SHF_WRITE (1 << 0) -#define SHF_ALLOC (1 << 1) -#define SHF_EXECINSTR (1 << 2) -#define SHF_MERGE (1 << 4) -#define SHF_STRINGS (1 << 5) -#define SHF_INFO_LINK (1 << 6) -#define SHF_LINK_ORDER (1 << 7) -#define SHF_OS_NONCONFORMING (1 << 8) - -#define SHF_GROUP (1 << 9) -#define SHF_TLS (1 << 10) -#define SHF_COMPRESSED (1 << 11) -#define SHF_MASKOS 0x0ff00000 -#define SHF_MASKPROC 0xf0000000 -#define SHF_ORDERED (1 << 30) -#define SHF_EXCLUDE (1U << 31) - -typedef struct { - Elf32_Word ch_type; - Elf32_Word ch_size; - Elf32_Word ch_addralign; -} Elf32_Chdr; - -typedef struct { - Elf64_Word ch_type; - Elf64_Word ch_reserved; - Elf64_Xword ch_size; - Elf64_Xword ch_addralign; -} Elf64_Chdr; - -#define ELFCOMPRESS_ZLIB 1 -#define ELFCOMPRESS_LOOS 0x60000000 -#define ELFCOMPRESS_HIOS 0x6fffffff -#define ELFCOMPRESS_LOPROC 0x70000000 -#define ELFCOMPRESS_HIPROC 0x7fffffff - - -#define GRP_COMDAT 0x1 - -typedef struct { - Elf32_Word st_name; - Elf32_Addr st_value; - Elf32_Word st_size; - unsigned char st_info; - unsigned char st_other; - Elf32_Section st_shndx; -} Elf32_Sym; - -typedef struct { - Elf64_Word st_name; - unsigned char st_info; - unsigned char st_other; - Elf64_Section st_shndx; - Elf64_Addr st_value; - Elf64_Xword st_size; -} Elf64_Sym; - -typedef struct { - Elf32_Half si_boundto; - Elf32_Half si_flags; -} Elf32_Syminfo; - -typedef struct { - Elf64_Half si_boundto; - Elf64_Half si_flags; -} Elf64_Syminfo; - -#define SYMINFO_BT_SELF 0xffff -#define SYMINFO_BT_PARENT 0xfffe -#define SYMINFO_BT_LOWRESERVE 0xff00 - -#define SYMINFO_FLG_DIRECT 0x0001 -#define SYMINFO_FLG_PASSTHRU 0x0002 -#define SYMINFO_FLG_COPY 0x0004 -#define SYMINFO_FLG_LAZYLOAD 0x0008 - -#define SYMINFO_NONE 0 -#define SYMINFO_CURRENT 1 -#define SYMINFO_NUM 2 - -#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4) -#define ELF32_ST_TYPE(val) ((val) & 0xf) -#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) - -#define ELF64_ST_BIND(val) ELF32_ST_BIND (val) -#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val) -#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type)) - -#define STB_LOCAL 0 -#define STB_GLOBAL 1 -#define STB_WEAK 2 -#define STB_NUM 3 -#define STB_LOOS 10 -#define STB_GNU_UNIQUE 10 -#define STB_HIOS 12 -#define STB_LOPROC 13 -#define STB_HIPROC 15 - -#define STT_NOTYPE 0 -#define STT_OBJECT 1 -#define STT_FUNC 2 -#define STT_SECTION 3 -#define STT_FILE 4 -#define STT_COMMON 5 -#define STT_TLS 6 -#define STT_NUM 7 -#define STT_LOOS 10 -#define STT_GNU_IFUNC 10 -#define STT_HIOS 12 -#define STT_LOPROC 13 -#define STT_HIPROC 15 - -#define STN_UNDEF 0 - -#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) -#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) - -#define STV_DEFAULT 0 -#define STV_INTERNAL 1 -#define STV_HIDDEN 2 -#define STV_PROTECTED 3 - - - - -typedef struct { - Elf32_Addr r_offset; - Elf32_Word r_info; -} Elf32_Rel; - -typedef struct { - Elf64_Addr r_offset; - Elf64_Xword r_info; -} Elf64_Rel; - - - -typedef struct { - Elf32_Addr r_offset; - Elf32_Word r_info; - Elf32_Sword r_addend; -} Elf32_Rela; - -typedef struct { - Elf64_Addr r_offset; - Elf64_Xword r_info; - Elf64_Sxword r_addend; -} Elf64_Rela; - - - -#define ELF32_R_SYM(val) ((val) >> 8) -#define ELF32_R_TYPE(val) ((val) & 0xff) -#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) - -#define ELF64_R_SYM(i) ((i) >> 32) -#define ELF64_R_TYPE(i) ((i) & 0xffffffff) -#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) - - - -typedef struct { - Elf32_Word p_type; - Elf32_Off p_offset; - Elf32_Addr p_vaddr; - Elf32_Addr p_paddr; - Elf32_Word p_filesz; - Elf32_Word p_memsz; - Elf32_Word p_flags; - Elf32_Word p_align; -} Elf32_Phdr; - -typedef struct { - Elf64_Word p_type; - Elf64_Word p_flags; - Elf64_Off p_offset; - Elf64_Addr p_vaddr; - Elf64_Addr p_paddr; - Elf64_Xword p_filesz; - Elf64_Xword p_memsz; - Elf64_Xword p_align; -} Elf64_Phdr; - - - -#define PT_NULL 0 -#define PT_LOAD 1 -#define PT_DYNAMIC 2 -#define PT_INTERP 3 -#define PT_NOTE 4 -#define PT_SHLIB 5 -#define PT_PHDR 6 -#define PT_TLS 7 -#define PT_NUM 8 -#define PT_LOOS 0x60000000 -#define PT_GNU_EH_FRAME 0x6474e550 -#define PT_GNU_STACK 0x6474e551 -#define PT_GNU_RELRO 0x6474e552 -#define PT_LOSUNW 0x6ffffffa -#define PT_SUNWBSS 0x6ffffffa -#define PT_SUNWSTACK 0x6ffffffb -#define PT_HISUNW 0x6fffffff -#define PT_HIOS 0x6fffffff -#define PT_LOPROC 0x70000000 -#define PT_HIPROC 0x7fffffff - - -#define PN_XNUM 0xffff - - -#define PF_X (1 << 0) -#define PF_W (1 << 1) -#define PF_R (1 << 2) -#define PF_MASKOS 0x0ff00000 -#define PF_MASKPROC 0xf0000000 - - - -#define NT_PRSTATUS 1 -#define NT_FPREGSET 2 -#define NT_PRPSINFO 3 -#define NT_PRXREG 4 -#define NT_TASKSTRUCT 4 -#define NT_PLATFORM 5 -#define NT_AUXV 6 -#define NT_GWINDOWS 7 -#define NT_ASRS 8 -#define NT_PSTATUS 10 -#define NT_PSINFO 13 -#define NT_PRCRED 14 -#define NT_UTSNAME 15 -#define NT_LWPSTATUS 16 -#define NT_LWPSINFO 17 -#define NT_PRFPXREG 20 -#define NT_SIGINFO 0x53494749 -#define NT_FILE 0x46494c45 -#define NT_PRXFPREG 0x46e62b7f -#define NT_PPC_VMX 0x100 -#define NT_PPC_SPE 0x101 -#define NT_PPC_VSX 0x102 -#define NT_386_TLS 0x200 -#define NT_386_IOPERM 0x201 -#define NT_X86_XSTATE 0x202 -#define NT_S390_HIGH_GPRS 0x300 -#define NT_S390_TIMER 0x301 -#define NT_S390_TODCMP 0x302 -#define NT_S390_TODPREG 0x303 -#define NT_S390_CTRS 0x304 -#define NT_S390_PREFIX 0x305 -#define NT_S390_LAST_BREAK 0x306 -#define NT_S390_SYSTEM_CALL 0x307 -#define NT_S390_TDB 0x308 -#define NT_ARM_VFP 0x400 -#define NT_ARM_TLS 0x401 -#define NT_ARM_HW_BREAK 0x402 -#define NT_ARM_HW_WATCH 0x403 -#define NT_ARM_SYSTEM_CALL 0x404 -#define NT_ARM_SVE 0x405 -#define NT_METAG_CBUF 0x500 -#define NT_METAG_RPIPE 0x501 -#define NT_METAG_TLS 0x502 -#define NT_VERSION 1 - - - - -typedef struct { - Elf32_Sword d_tag; - union { - Elf32_Word d_val; - Elf32_Addr d_ptr; - } d_un; -} Elf32_Dyn; - -typedef struct { - Elf64_Sxword d_tag; - union { - Elf64_Xword d_val; - Elf64_Addr d_ptr; - } d_un; -} Elf64_Dyn; - - - -#define DT_NULL 0 -#define DT_NEEDED 1 -#define DT_PLTRELSZ 2 -#define DT_PLTGOT 3 -#define DT_HASH 4 -#define DT_STRTAB 5 -#define DT_SYMTAB 6 -#define DT_RELA 7 -#define DT_RELASZ 8 -#define DT_RELAENT 9 -#define DT_STRSZ 10 -#define DT_SYMENT 11 -#define DT_INIT 12 -#define DT_FINI 13 -#define DT_SONAME 14 -#define DT_RPATH 15 -#define DT_SYMBOLIC 16 -#define DT_REL 17 -#define DT_RELSZ 18 -#define DT_RELENT 19 -#define DT_PLTREL 20 -#define DT_DEBUG 21 -#define DT_TEXTREL 22 -#define DT_JMPREL 23 -#define DT_BIND_NOW 24 -#define DT_INIT_ARRAY 25 -#define DT_FINI_ARRAY 26 -#define DT_INIT_ARRAYSZ 27 -#define DT_FINI_ARRAYSZ 28 -#define DT_RUNPATH 29 -#define DT_FLAGS 30 -#define DT_ENCODING 32 -#define DT_PREINIT_ARRAY 32 -#define DT_PREINIT_ARRAYSZ 33 -#define DT_NUM 34 -#define DT_LOOS 0x6000000d -#define DT_HIOS 0x6ffff000 -#define DT_LOPROC 0x70000000 -#define DT_HIPROC 0x7fffffff -#define DT_PROCNUM DT_MIPS_NUM - -#define DT_VALRNGLO 0x6ffffd00 -#define DT_GNU_PRELINKED 0x6ffffdf5 -#define DT_GNU_CONFLICTSZ 0x6ffffdf6 -#define DT_GNU_LIBLISTSZ 0x6ffffdf7 -#define DT_CHECKSUM 0x6ffffdf8 -#define DT_PLTPADSZ 0x6ffffdf9 -#define DT_MOVEENT 0x6ffffdfa -#define DT_MOVESZ 0x6ffffdfb -#define DT_FEATURE_1 0x6ffffdfc -#define DT_POSFLAG_1 0x6ffffdfd - -#define DT_SYMINSZ 0x6ffffdfe -#define DT_SYMINENT 0x6ffffdff -#define DT_VALRNGHI 0x6ffffdff -#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) -#define DT_VALNUM 12 - -#define DT_ADDRRNGLO 0x6ffffe00 -#define DT_GNU_HASH 0x6ffffef5 -#define DT_TLSDESC_PLT 0x6ffffef6 -#define DT_TLSDESC_GOT 0x6ffffef7 -#define DT_GNU_CONFLICT 0x6ffffef8 -#define DT_GNU_LIBLIST 0x6ffffef9 -#define DT_CONFIG 0x6ffffefa -#define DT_DEPAUDIT 0x6ffffefb -#define DT_AUDIT 0x6ffffefc -#define DT_PLTPAD 0x6ffffefd -#define DT_MOVETAB 0x6ffffefe -#define DT_SYMINFO 0x6ffffeff -#define DT_ADDRRNGHI 0x6ffffeff -#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) -#define DT_ADDRNUM 11 - - - -#define DT_VERSYM 0x6ffffff0 - -#define DT_RELACOUNT 0x6ffffff9 -#define DT_RELCOUNT 0x6ffffffa - - -#define DT_FLAGS_1 0x6ffffffb -#define DT_VERDEF 0x6ffffffc - -#define DT_VERDEFNUM 0x6ffffffd -#define DT_VERNEED 0x6ffffffe - -#define DT_VERNEEDNUM 0x6fffffff -#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) -#define DT_VERSIONTAGNUM 16 - - - -#define DT_AUXILIARY 0x7ffffffd -#define DT_FILTER 0x7fffffff -#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) -#define DT_EXTRANUM 3 - - -#define DF_ORIGIN 0x00000001 -#define DF_SYMBOLIC 0x00000002 -#define DF_TEXTREL 0x00000004 -#define DF_BIND_NOW 0x00000008 -#define DF_STATIC_TLS 0x00000010 - - - -#define DF_1_NOW 0x00000001 -#define DF_1_GLOBAL 0x00000002 -#define DF_1_GROUP 0x00000004 -#define DF_1_NODELETE 0x00000008 -#define DF_1_LOADFLTR 0x00000010 -#define DF_1_INITFIRST 0x00000020 -#define DF_1_NOOPEN 0x00000040 -#define DF_1_ORIGIN 0x00000080 -#define DF_1_DIRECT 0x00000100 -#define DF_1_TRANS 0x00000200 -#define DF_1_INTERPOSE 0x00000400 -#define DF_1_NODEFLIB 0x00000800 -#define DF_1_NODUMP 0x00001000 -#define DF_1_CONFALT 0x00002000 -#define DF_1_ENDFILTEE 0x00004000 -#define DF_1_DISPRELDNE 0x00008000 -#define DF_1_DISPRELPND 0x00010000 -#define DF_1_NODIRECT 0x00020000 -#define DF_1_IGNMULDEF 0x00040000 -#define DF_1_NOKSYMS 0x00080000 -#define DF_1_NOHDR 0x00100000 -#define DF_1_EDITED 0x00200000 -#define DF_1_NORELOC 0x00400000 -#define DF_1_SYMINTPOSE 0x00800000 -#define DF_1_GLOBAUDIT 0x01000000 -#define DF_1_SINGLETON 0x02000000 - -#define DTF_1_PARINIT 0x00000001 -#define DTF_1_CONFEXP 0x00000002 - - -#define DF_P1_LAZYLOAD 0x00000001 -#define DF_P1_GROUPPERM 0x00000002 - - - - -typedef struct { - Elf32_Half vd_version; - Elf32_Half vd_flags; - Elf32_Half vd_ndx; - Elf32_Half vd_cnt; - Elf32_Word vd_hash; - Elf32_Word vd_aux; - Elf32_Word vd_next; -} Elf32_Verdef; - -typedef struct { - Elf64_Half vd_version; - Elf64_Half vd_flags; - Elf64_Half vd_ndx; - Elf64_Half vd_cnt; - Elf64_Word vd_hash; - Elf64_Word vd_aux; - Elf64_Word vd_next; -} Elf64_Verdef; - - - -#define VER_DEF_NONE 0 -#define VER_DEF_CURRENT 1 -#define VER_DEF_NUM 2 - - -#define VER_FLG_BASE 0x1 -#define VER_FLG_WEAK 0x2 - - -#define VER_NDX_LOCAL 0 -#define VER_NDX_GLOBAL 1 -#define VER_NDX_LORESERVE 0xff00 -#define VER_NDX_ELIMINATE 0xff01 - - - -typedef struct { - Elf32_Word vda_name; - Elf32_Word vda_next; -} Elf32_Verdaux; - -typedef struct { - Elf64_Word vda_name; - Elf64_Word vda_next; -} Elf64_Verdaux; - - - - -typedef struct { - Elf32_Half vn_version; - Elf32_Half vn_cnt; - Elf32_Word vn_file; - Elf32_Word vn_aux; - Elf32_Word vn_next; -} Elf32_Verneed; - -typedef struct { - Elf64_Half vn_version; - Elf64_Half vn_cnt; - Elf64_Word vn_file; - Elf64_Word vn_aux; - Elf64_Word vn_next; -} Elf64_Verneed; - - - -#define VER_NEED_NONE 0 -#define VER_NEED_CURRENT 1 -#define VER_NEED_NUM 2 - - - -typedef struct { - Elf32_Word vna_hash; - Elf32_Half vna_flags; - Elf32_Half vna_other; - Elf32_Word vna_name; - Elf32_Word vna_next; -} Elf32_Vernaux; - -typedef struct { - Elf64_Word vna_hash; - Elf64_Half vna_flags; - Elf64_Half vna_other; - Elf64_Word vna_name; - Elf64_Word vna_next; -} Elf64_Vernaux; - - - -#define VER_FLG_WEAK 0x2 - - - -typedef struct { - uint32_t a_type; - union { - uint32_t a_val; - } a_un; -} Elf32_auxv_t; - -typedef struct { - uint64_t a_type; - union { - uint64_t a_val; - } a_un; -} Elf64_auxv_t; - - - -#define AT_NULL 0 -#define AT_IGNORE 1 -#define AT_EXECFD 2 -#define AT_PHDR 3 -#define AT_PHENT 4 -#define AT_PHNUM 5 -#define AT_PAGESZ 6 -#define AT_BASE 7 -#define AT_FLAGS 8 -#define AT_ENTRY 9 -#define AT_NOTELF 10 -#define AT_UID 11 -#define AT_EUID 12 -#define AT_GID 13 -#define AT_EGID 14 -#define AT_CLKTCK 17 - - -#define AT_PLATFORM 15 -#define AT_HWCAP 16 - - - - -#define AT_FPUCW 18 - - -#define AT_DCACHEBSIZE 19 -#define AT_ICACHEBSIZE 20 -#define AT_UCACHEBSIZE 21 - - - -#define AT_IGNOREPPC 22 - -#define AT_SECURE 23 - -#define AT_BASE_PLATFORM 24 - -#define AT_RANDOM 25 - -#define AT_HWCAP2 26 - -#define AT_EXECFN 31 - - - -#define AT_SYSINFO 32 -#define AT_SYSINFO_EHDR 33 - - - -#define AT_L1I_CACHESHAPE 34 -#define AT_L1D_CACHESHAPE 35 -#define AT_L2_CACHESHAPE 36 -#define AT_L3_CACHESHAPE 37 - - - - -typedef struct { - Elf32_Word n_namesz; - Elf32_Word n_descsz; - Elf32_Word n_type; -} Elf32_Nhdr; - -typedef struct { - Elf64_Word n_namesz; - Elf64_Word n_descsz; - Elf64_Word n_type; -} Elf64_Nhdr; - - - - -#define ELF_NOTE_SOLARIS "SUNW Solaris" - - -#define ELF_NOTE_GNU "GNU" - - - - - -#define ELF_NOTE_PAGESIZE_HINT 1 - - -#define NT_GNU_ABI_TAG 1 -#define ELF_NOTE_ABI NT_GNU_ABI_TAG - - - -#define ELF_NOTE_OS_LINUX 0 -#define ELF_NOTE_OS_GNU 1 -#define ELF_NOTE_OS_SOLARIS2 2 -#define ELF_NOTE_OS_FREEBSD 3 - -#define NT_GNU_BUILD_ID 3 -#define NT_GNU_GOLD_VERSION 4 - - - -typedef struct { - Elf32_Xword m_value; - Elf32_Word m_info; - Elf32_Word m_poffset; - Elf32_Half m_repeat; - Elf32_Half m_stride; -} Elf32_Move; - -typedef struct { - Elf64_Xword m_value; - Elf64_Xword m_info; - Elf64_Xword m_poffset; - Elf64_Half m_repeat; - Elf64_Half m_stride; -} Elf64_Move; - - -#define ELF32_M_SYM(info) ((info) >> 8) -#define ELF32_M_SIZE(info) ((unsigned char) (info)) -#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) - -#define ELF64_M_SYM(info) ELF32_M_SYM (info) -#define ELF64_M_SIZE(info) ELF32_M_SIZE (info) -#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) - -#define EF_CPU32 0x00810000 - -#define R_68K_NONE 0 -#define R_68K_32 1 -#define R_68K_16 2 -#define R_68K_8 3 -#define R_68K_PC32 4 -#define R_68K_PC16 5 -#define R_68K_PC8 6 -#define R_68K_GOT32 7 -#define R_68K_GOT16 8 -#define R_68K_GOT8 9 -#define R_68K_GOT32O 10 -#define R_68K_GOT16O 11 -#define R_68K_GOT8O 12 -#define R_68K_PLT32 13 -#define R_68K_PLT16 14 -#define R_68K_PLT8 15 -#define R_68K_PLT32O 16 -#define R_68K_PLT16O 17 -#define R_68K_PLT8O 18 -#define R_68K_COPY 19 -#define R_68K_GLOB_DAT 20 -#define R_68K_JMP_SLOT 21 -#define R_68K_RELATIVE 22 -#define R_68K_NUM 23 - -#define R_386_NONE 0 -#define R_386_32 1 -#define R_386_PC32 2 -#define R_386_GOT32 3 -#define R_386_PLT32 4 -#define R_386_COPY 5 -#define R_386_GLOB_DAT 6 -#define R_386_JMP_SLOT 7 -#define R_386_RELATIVE 8 -#define R_386_GOTOFF 9 -#define R_386_GOTPC 10 -#define R_386_32PLT 11 -#define R_386_TLS_TPOFF 14 -#define R_386_TLS_IE 15 -#define R_386_TLS_GOTIE 16 -#define R_386_TLS_LE 17 -#define R_386_TLS_GD 18 -#define R_386_TLS_LDM 19 -#define R_386_16 20 -#define R_386_PC16 21 -#define R_386_8 22 -#define R_386_PC8 23 -#define R_386_TLS_GD_32 24 -#define R_386_TLS_GD_PUSH 25 -#define R_386_TLS_GD_CALL 26 -#define R_386_TLS_GD_POP 27 -#define R_386_TLS_LDM_32 28 -#define R_386_TLS_LDM_PUSH 29 -#define R_386_TLS_LDM_CALL 30 -#define R_386_TLS_LDM_POP 31 -#define R_386_TLS_LDO_32 32 -#define R_386_TLS_IE_32 33 -#define R_386_TLS_LE_32 34 -#define R_386_TLS_DTPMOD32 35 -#define R_386_TLS_DTPOFF32 36 -#define R_386_TLS_TPOFF32 37 -#define R_386_SIZE32 38 -#define R_386_TLS_GOTDESC 39 -#define R_386_TLS_DESC_CALL 40 -#define R_386_TLS_DESC 41 -#define R_386_IRELATIVE 42 -#define R_386_GOT32X 43 -#define R_386_NUM 44 - - - - - -#define STT_SPARC_REGISTER 13 - - - -#define EF_SPARCV9_MM 3 -#define EF_SPARCV9_TSO 0 -#define EF_SPARCV9_PSO 1 -#define EF_SPARCV9_RMO 2 -#define EF_SPARC_LEDATA 0x800000 -#define EF_SPARC_EXT_MASK 0xFFFF00 -#define EF_SPARC_32PLUS 0x000100 -#define EF_SPARC_SUN_US1 0x000200 -#define EF_SPARC_HAL_R1 0x000400 -#define EF_SPARC_SUN_US3 0x000800 - - - -#define R_SPARC_NONE 0 -#define R_SPARC_8 1 -#define R_SPARC_16 2 -#define R_SPARC_32 3 -#define R_SPARC_DISP8 4 -#define R_SPARC_DISP16 5 -#define R_SPARC_DISP32 6 -#define R_SPARC_WDISP30 7 -#define R_SPARC_WDISP22 8 -#define R_SPARC_HI22 9 -#define R_SPARC_22 10 -#define R_SPARC_13 11 -#define R_SPARC_LO10 12 -#define R_SPARC_GOT10 13 -#define R_SPARC_GOT13 14 -#define R_SPARC_GOT22 15 -#define R_SPARC_PC10 16 -#define R_SPARC_PC22 17 -#define R_SPARC_WPLT30 18 -#define R_SPARC_COPY 19 -#define R_SPARC_GLOB_DAT 20 -#define R_SPARC_JMP_SLOT 21 -#define R_SPARC_RELATIVE 22 -#define R_SPARC_UA32 23 - - - -#define R_SPARC_PLT32 24 -#define R_SPARC_HIPLT22 25 -#define R_SPARC_LOPLT10 26 -#define R_SPARC_PCPLT32 27 -#define R_SPARC_PCPLT22 28 -#define R_SPARC_PCPLT10 29 -#define R_SPARC_10 30 -#define R_SPARC_11 31 -#define R_SPARC_64 32 -#define R_SPARC_OLO10 33 -#define R_SPARC_HH22 34 -#define R_SPARC_HM10 35 -#define R_SPARC_LM22 36 -#define R_SPARC_PC_HH22 37 -#define R_SPARC_PC_HM10 38 -#define R_SPARC_PC_LM22 39 -#define R_SPARC_WDISP16 40 -#define R_SPARC_WDISP19 41 -#define R_SPARC_GLOB_JMP 42 -#define R_SPARC_7 43 -#define R_SPARC_5 44 -#define R_SPARC_6 45 -#define R_SPARC_DISP64 46 -#define R_SPARC_PLT64 47 -#define R_SPARC_HIX22 48 -#define R_SPARC_LOX10 49 -#define R_SPARC_H44 50 -#define R_SPARC_M44 51 -#define R_SPARC_L44 52 -#define R_SPARC_REGISTER 53 -#define R_SPARC_UA64 54 -#define R_SPARC_UA16 55 -#define R_SPARC_TLS_GD_HI22 56 -#define R_SPARC_TLS_GD_LO10 57 -#define R_SPARC_TLS_GD_ADD 58 -#define R_SPARC_TLS_GD_CALL 59 -#define R_SPARC_TLS_LDM_HI22 60 -#define R_SPARC_TLS_LDM_LO10 61 -#define R_SPARC_TLS_LDM_ADD 62 -#define R_SPARC_TLS_LDM_CALL 63 -#define R_SPARC_TLS_LDO_HIX22 64 -#define R_SPARC_TLS_LDO_LOX10 65 -#define R_SPARC_TLS_LDO_ADD 66 -#define R_SPARC_TLS_IE_HI22 67 -#define R_SPARC_TLS_IE_LO10 68 -#define R_SPARC_TLS_IE_LD 69 -#define R_SPARC_TLS_IE_LDX 70 -#define R_SPARC_TLS_IE_ADD 71 -#define R_SPARC_TLS_LE_HIX22 72 -#define R_SPARC_TLS_LE_LOX10 73 -#define R_SPARC_TLS_DTPMOD32 74 -#define R_SPARC_TLS_DTPMOD64 75 -#define R_SPARC_TLS_DTPOFF32 76 -#define R_SPARC_TLS_DTPOFF64 77 -#define R_SPARC_TLS_TPOFF32 78 -#define R_SPARC_TLS_TPOFF64 79 -#define R_SPARC_GOTDATA_HIX22 80 -#define R_SPARC_GOTDATA_LOX10 81 -#define R_SPARC_GOTDATA_OP_HIX22 82 -#define R_SPARC_GOTDATA_OP_LOX10 83 -#define R_SPARC_GOTDATA_OP 84 -#define R_SPARC_H34 85 -#define R_SPARC_SIZE32 86 -#define R_SPARC_SIZE64 87 -#define R_SPARC_GNU_VTINHERIT 250 -#define R_SPARC_GNU_VTENTRY 251 -#define R_SPARC_REV32 252 - -#define R_SPARC_NUM 253 - - - -#define DT_SPARC_REGISTER 0x70000001 -#define DT_SPARC_NUM 2 - - -#define EF_MIPS_NOREORDER 1 -#define EF_MIPS_PIC 2 -#define EF_MIPS_CPIC 4 -#define EF_MIPS_XGOT 8 -#define EF_MIPS_64BIT_WHIRL 16 -#define EF_MIPS_ABI2 32 -#define EF_MIPS_ABI_ON32 64 -#define EF_MIPS_FP64 512 -#define EF_MIPS_NAN2008 1024 -#define EF_MIPS_ARCH 0xf0000000 - - - -#define EF_MIPS_ARCH_1 0x00000000 -#define EF_MIPS_ARCH_2 0x10000000 -#define EF_MIPS_ARCH_3 0x20000000 -#define EF_MIPS_ARCH_4 0x30000000 -#define EF_MIPS_ARCH_5 0x40000000 -#define EF_MIPS_ARCH_32 0x50000000 -#define EF_MIPS_ARCH_64 0x60000000 -#define EF_MIPS_ARCH_32R2 0x70000000 -#define EF_MIPS_ARCH_64R2 0x80000000 - - -#define E_MIPS_ARCH_1 0x00000000 -#define E_MIPS_ARCH_2 0x10000000 -#define E_MIPS_ARCH_3 0x20000000 -#define E_MIPS_ARCH_4 0x30000000 -#define E_MIPS_ARCH_5 0x40000000 -#define E_MIPS_ARCH_32 0x50000000 -#define E_MIPS_ARCH_64 0x60000000 - - - -#define SHN_MIPS_ACOMMON 0xff00 -#define SHN_MIPS_TEXT 0xff01 -#define SHN_MIPS_DATA 0xff02 -#define SHN_MIPS_SCOMMON 0xff03 -#define SHN_MIPS_SUNDEFINED 0xff04 - - - -#define SHT_MIPS_LIBLIST 0x70000000 -#define SHT_MIPS_MSYM 0x70000001 -#define SHT_MIPS_CONFLICT 0x70000002 -#define SHT_MIPS_GPTAB 0x70000003 -#define SHT_MIPS_UCODE 0x70000004 -#define SHT_MIPS_DEBUG 0x70000005 -#define SHT_MIPS_REGINFO 0x70000006 -#define SHT_MIPS_PACKAGE 0x70000007 -#define SHT_MIPS_PACKSYM 0x70000008 -#define SHT_MIPS_RELD 0x70000009 -#define SHT_MIPS_IFACE 0x7000000b -#define SHT_MIPS_CONTENT 0x7000000c -#define SHT_MIPS_OPTIONS 0x7000000d -#define SHT_MIPS_SHDR 0x70000010 -#define SHT_MIPS_FDESC 0x70000011 -#define SHT_MIPS_EXTSYM 0x70000012 -#define SHT_MIPS_DENSE 0x70000013 -#define SHT_MIPS_PDESC 0x70000014 -#define SHT_MIPS_LOCSYM 0x70000015 -#define SHT_MIPS_AUXSYM 0x70000016 -#define SHT_MIPS_OPTSYM 0x70000017 -#define SHT_MIPS_LOCSTR 0x70000018 -#define SHT_MIPS_LINE 0x70000019 -#define SHT_MIPS_RFDESC 0x7000001a -#define SHT_MIPS_DELTASYM 0x7000001b -#define SHT_MIPS_DELTAINST 0x7000001c -#define SHT_MIPS_DELTACLASS 0x7000001d -#define SHT_MIPS_DWARF 0x7000001e -#define SHT_MIPS_DELTADECL 0x7000001f -#define SHT_MIPS_SYMBOL_LIB 0x70000020 -#define SHT_MIPS_EVENTS 0x70000021 -#define SHT_MIPS_TRANSLATE 0x70000022 -#define SHT_MIPS_PIXIE 0x70000023 -#define SHT_MIPS_XLATE 0x70000024 -#define SHT_MIPS_XLATE_DEBUG 0x70000025 -#define SHT_MIPS_WHIRL 0x70000026 -#define SHT_MIPS_EH_REGION 0x70000027 -#define SHT_MIPS_XLATE_OLD 0x70000028 -#define SHT_MIPS_PDR_EXCEPTION 0x70000029 - - - -#define SHF_MIPS_GPREL 0x10000000 -#define SHF_MIPS_MERGE 0x20000000 -#define SHF_MIPS_ADDR 0x40000000 -#define SHF_MIPS_STRINGS 0x80000000 -#define SHF_MIPS_NOSTRIP 0x08000000 -#define SHF_MIPS_LOCAL 0x04000000 -#define SHF_MIPS_NAMES 0x02000000 -#define SHF_MIPS_NODUPE 0x01000000 - - - - - -#define STO_MIPS_DEFAULT 0x0 -#define STO_MIPS_INTERNAL 0x1 -#define STO_MIPS_HIDDEN 0x2 -#define STO_MIPS_PROTECTED 0x3 -#define STO_MIPS_PLT 0x8 -#define STO_MIPS_SC_ALIGN_UNUSED 0xff - - -#define STB_MIPS_SPLIT_COMMON 13 - - - -typedef union { - struct { - Elf32_Word gt_current_g_value; - Elf32_Word gt_unused; - } gt_header; - struct { - Elf32_Word gt_g_value; - Elf32_Word gt_bytes; - } gt_entry; -} Elf32_gptab; - - - -typedef struct { - Elf32_Word ri_gprmask; - Elf32_Word ri_cprmask[4]; - Elf32_Sword ri_gp_value; -} Elf32_RegInfo; - - - -typedef struct { - unsigned char kind; - - unsigned char size; - Elf32_Section section; - - Elf32_Word info; -} Elf_Options; - - - -#define ODK_NULL 0 -#define ODK_REGINFO 1 -#define ODK_EXCEPTIONS 2 -#define ODK_PAD 3 -#define ODK_HWPATCH 4 -#define ODK_FILL 5 -#define ODK_TAGS 6 -#define ODK_HWAND 7 -#define ODK_HWOR 8 - - - -#define OEX_FPU_MIN 0x1f -#define OEX_FPU_MAX 0x1f00 -#define OEX_PAGE0 0x10000 -#define OEX_SMM 0x20000 -#define OEX_FPDBUG 0x40000 -#define OEX_PRECISEFP OEX_FPDBUG -#define OEX_DISMISS 0x80000 - -#define OEX_FPU_INVAL 0x10 -#define OEX_FPU_DIV0 0x08 -#define OEX_FPU_OFLO 0x04 -#define OEX_FPU_UFLO 0x02 -#define OEX_FPU_INEX 0x01 - - - -#define OHW_R4KEOP 0x1 -#define OHW_R8KPFETCH 0x2 -#define OHW_R5KEOP 0x4 -#define OHW_R5KCVTL 0x8 - -#define OPAD_PREFIX 0x1 -#define OPAD_POSTFIX 0x2 -#define OPAD_SYMBOL 0x4 - - - -typedef struct { - Elf32_Word hwp_flags1; - Elf32_Word hwp_flags2; -} Elf_Options_Hw; - - - -#define OHWA0_R4KEOP_CHECKED 0x00000001 -#define OHWA1_R4KEOP_CLEAN 0x00000002 - - - -#define R_MIPS_NONE 0 -#define R_MIPS_16 1 -#define R_MIPS_32 2 -#define R_MIPS_REL32 3 -#define R_MIPS_26 4 -#define R_MIPS_HI16 5 -#define R_MIPS_LO16 6 -#define R_MIPS_GPREL16 7 -#define R_MIPS_LITERAL 8 -#define R_MIPS_GOT16 9 -#define R_MIPS_PC16 10 -#define R_MIPS_CALL16 11 -#define R_MIPS_GPREL32 12 - -#define R_MIPS_SHIFT5 16 -#define R_MIPS_SHIFT6 17 -#define R_MIPS_64 18 -#define R_MIPS_GOT_DISP 19 -#define R_MIPS_GOT_PAGE 20 -#define R_MIPS_GOT_OFST 21 -#define R_MIPS_GOT_HI16 22 -#define R_MIPS_GOT_LO16 23 -#define R_MIPS_SUB 24 -#define R_MIPS_INSERT_A 25 -#define R_MIPS_INSERT_B 26 -#define R_MIPS_DELETE 27 -#define R_MIPS_HIGHER 28 -#define R_MIPS_HIGHEST 29 -#define R_MIPS_CALL_HI16 30 -#define R_MIPS_CALL_LO16 31 -#define R_MIPS_SCN_DISP 32 -#define R_MIPS_REL16 33 -#define R_MIPS_ADD_IMMEDIATE 34 -#define R_MIPS_PJUMP 35 -#define R_MIPS_RELGOT 36 -#define R_MIPS_JALR 37 -#define R_MIPS_TLS_DTPMOD32 38 -#define R_MIPS_TLS_DTPREL32 39 -#define R_MIPS_TLS_DTPMOD64 40 -#define R_MIPS_TLS_DTPREL64 41 -#define R_MIPS_TLS_GD 42 -#define R_MIPS_TLS_LDM 43 -#define R_MIPS_TLS_DTPREL_HI16 44 -#define R_MIPS_TLS_DTPREL_LO16 45 -#define R_MIPS_TLS_GOTTPREL 46 -#define R_MIPS_TLS_TPREL32 47 -#define R_MIPS_TLS_TPREL64 48 -#define R_MIPS_TLS_TPREL_HI16 49 -#define R_MIPS_TLS_TPREL_LO16 50 -#define R_MIPS_GLOB_DAT 51 -#define R_MIPS_COPY 126 -#define R_MIPS_JUMP_SLOT 127 - -#define R_MIPS_NUM 128 - - - -#define PT_MIPS_REGINFO 0x70000000 -#define PT_MIPS_RTPROC 0x70000001 -#define PT_MIPS_OPTIONS 0x70000002 -#define PT_MIPS_ABIFLAGS 0x70000003 - - - -#define PF_MIPS_LOCAL 0x10000000 - - - -#define DT_MIPS_RLD_VERSION 0x70000001 -#define DT_MIPS_TIME_STAMP 0x70000002 -#define DT_MIPS_ICHECKSUM 0x70000003 -#define DT_MIPS_IVERSION 0x70000004 -#define DT_MIPS_FLAGS 0x70000005 -#define DT_MIPS_BASE_ADDRESS 0x70000006 -#define DT_MIPS_MSYM 0x70000007 -#define DT_MIPS_CONFLICT 0x70000008 -#define DT_MIPS_LIBLIST 0x70000009 -#define DT_MIPS_LOCAL_GOTNO 0x7000000a -#define DT_MIPS_CONFLICTNO 0x7000000b -#define DT_MIPS_LIBLISTNO 0x70000010 -#define DT_MIPS_SYMTABNO 0x70000011 -#define DT_MIPS_UNREFEXTNO 0x70000012 -#define DT_MIPS_GOTSYM 0x70000013 -#define DT_MIPS_HIPAGENO 0x70000014 -#define DT_MIPS_RLD_MAP 0x70000016 -#define DT_MIPS_DELTA_CLASS 0x70000017 -#define DT_MIPS_DELTA_CLASS_NO 0x70000018 - -#define DT_MIPS_DELTA_INSTANCE 0x70000019 -#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a - -#define DT_MIPS_DELTA_RELOC 0x7000001b -#define DT_MIPS_DELTA_RELOC_NO 0x7000001c - -#define DT_MIPS_DELTA_SYM 0x7000001d - -#define DT_MIPS_DELTA_SYM_NO 0x7000001e - -#define DT_MIPS_DELTA_CLASSSYM 0x70000020 - -#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 - -#define DT_MIPS_CXX_FLAGS 0x70000022 -#define DT_MIPS_PIXIE_INIT 0x70000023 -#define DT_MIPS_SYMBOL_LIB 0x70000024 -#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 -#define DT_MIPS_LOCAL_GOTIDX 0x70000026 -#define DT_MIPS_HIDDEN_GOTIDX 0x70000027 -#define DT_MIPS_PROTECTED_GOTIDX 0x70000028 -#define DT_MIPS_OPTIONS 0x70000029 -#define DT_MIPS_INTERFACE 0x7000002a -#define DT_MIPS_DYNSTR_ALIGN 0x7000002b -#define DT_MIPS_INTERFACE_SIZE 0x7000002c -#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d - -#define DT_MIPS_PERF_SUFFIX 0x7000002e - -#define DT_MIPS_COMPACT_SIZE 0x7000002f -#define DT_MIPS_GP_VALUE 0x70000030 -#define DT_MIPS_AUX_DYNAMIC 0x70000031 - -#define DT_MIPS_PLTGOT 0x70000032 - -#define DT_MIPS_RWPLT 0x70000034 -#define DT_MIPS_RLD_MAP_REL 0x70000035 -#define DT_MIPS_NUM 0x36 - - - -#define RHF_NONE 0 -#define RHF_QUICKSTART (1 << 0) -#define RHF_NOTPOT (1 << 1) -#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) -#define RHF_NO_MOVE (1 << 3) -#define RHF_SGI_ONLY (1 << 4) -#define RHF_GUARANTEE_INIT (1 << 5) -#define RHF_DELTA_C_PLUS_PLUS (1 << 6) -#define RHF_GUARANTEE_START_INIT (1 << 7) -#define RHF_PIXIE (1 << 8) -#define RHF_DEFAULT_DELAY_LOAD (1 << 9) -#define RHF_REQUICKSTART (1 << 10) -#define RHF_REQUICKSTARTED (1 << 11) -#define RHF_CORD (1 << 12) -#define RHF_NO_UNRES_UNDEF (1 << 13) -#define RHF_RLD_ORDER_SAFE (1 << 14) - - - -typedef struct { - Elf32_Word l_name; - Elf32_Word l_time_stamp; - Elf32_Word l_checksum; - Elf32_Word l_version; - Elf32_Word l_flags; -} Elf32_Lib; - -typedef struct { - Elf64_Word l_name; - Elf64_Word l_time_stamp; - Elf64_Word l_checksum; - Elf64_Word l_version; - Elf64_Word l_flags; -} Elf64_Lib; - - - - -#define LL_NONE 0 -#define LL_EXACT_MATCH (1 << 0) -#define LL_IGNORE_INT_VER (1 << 1) -#define LL_REQUIRE_MINOR (1 << 2) -#define LL_EXPORTS (1 << 3) -#define LL_DELAY_LOAD (1 << 4) -#define LL_DELTA (1 << 5) - - - -typedef Elf32_Addr Elf32_Conflict; - -typedef struct { - Elf32_Half version; - unsigned char isa_level; - unsigned char isa_rev; - unsigned char gpr_size; - unsigned char cpr1_size; - unsigned char cpr2_size; - unsigned char fp_abi; - Elf32_Word isa_ext; - Elf32_Word ases; - Elf32_Word flags1; - Elf32_Word flags2; -} Elf_MIPS_ABIFlags_v0; - -#define MIPS_AFL_REG_NONE 0x00 -#define MIPS_AFL_REG_32 0x01 -#define MIPS_AFL_REG_64 0x02 -#define MIPS_AFL_REG_128 0x03 - -#define MIPS_AFL_ASE_DSP 0x00000001 -#define MIPS_AFL_ASE_DSPR2 0x00000002 -#define MIPS_AFL_ASE_EVA 0x00000004 -#define MIPS_AFL_ASE_MCU 0x00000008 -#define MIPS_AFL_ASE_MDMX 0x00000010 -#define MIPS_AFL_ASE_MIPS3D 0x00000020 -#define MIPS_AFL_ASE_MT 0x00000040 -#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 -#define MIPS_AFL_ASE_VIRT 0x00000100 -#define MIPS_AFL_ASE_MSA 0x00000200 -#define MIPS_AFL_ASE_MIPS16 0x00000400 -#define MIPS_AFL_ASE_MICROMIPS 0x00000800 -#define MIPS_AFL_ASE_XPA 0x00001000 -#define MIPS_AFL_ASE_MASK 0x00001fff - -#define MIPS_AFL_EXT_XLR 1 -#define MIPS_AFL_EXT_OCTEON2 2 -#define MIPS_AFL_EXT_OCTEONP 3 -#define MIPS_AFL_EXT_LOONGSON_3A 4 -#define MIPS_AFL_EXT_OCTEON 5 -#define MIPS_AFL_EXT_5900 6 -#define MIPS_AFL_EXT_4650 7 -#define MIPS_AFL_EXT_4010 8 -#define MIPS_AFL_EXT_4100 9 -#define MIPS_AFL_EXT_3900 10 -#define MIPS_AFL_EXT_10000 11 -#define MIPS_AFL_EXT_SB1 12 -#define MIPS_AFL_EXT_4111 13 -#define MIPS_AFL_EXT_4120 14 -#define MIPS_AFL_EXT_5400 15 -#define MIPS_AFL_EXT_5500 16 -#define MIPS_AFL_EXT_LOONGSON_2E 17 -#define MIPS_AFL_EXT_LOONGSON_2F 18 - -#define MIPS_AFL_FLAGS1_ODDSPREG 1 - -enum -{ - Val_GNU_MIPS_ABI_FP_ANY = 0, - Val_GNU_MIPS_ABI_FP_DOUBLE = 1, - Val_GNU_MIPS_ABI_FP_SINGLE = 2, - Val_GNU_MIPS_ABI_FP_SOFT = 3, - Val_GNU_MIPS_ABI_FP_OLD_64 = 4, - Val_GNU_MIPS_ABI_FP_XX = 5, - Val_GNU_MIPS_ABI_FP_64 = 6, - Val_GNU_MIPS_ABI_FP_64A = 7, - Val_GNU_MIPS_ABI_FP_MAX = 7 -}; - - - - -#define EF_PARISC_TRAPNIL 0x00010000 -#define EF_PARISC_EXT 0x00020000 -#define EF_PARISC_LSB 0x00040000 -#define EF_PARISC_WIDE 0x00080000 -#define EF_PARISC_NO_KABP 0x00100000 - -#define EF_PARISC_LAZYSWAP 0x00400000 -#define EF_PARISC_ARCH 0x0000ffff - - - -#define EFA_PARISC_1_0 0x020b -#define EFA_PARISC_1_1 0x0210 -#define EFA_PARISC_2_0 0x0214 - - - -#define SHN_PARISC_ANSI_COMMON 0xff00 - -#define SHN_PARISC_HUGE_COMMON 0xff01 - - - -#define SHT_PARISC_EXT 0x70000000 -#define SHT_PARISC_UNWIND 0x70000001 -#define SHT_PARISC_DOC 0x70000002 - - - -#define SHF_PARISC_SHORT 0x20000000 -#define SHF_PARISC_HUGE 0x40000000 -#define SHF_PARISC_SBP 0x80000000 - - - -#define STT_PARISC_MILLICODE 13 - -#define STT_HP_OPAQUE (STT_LOOS + 0x1) -#define STT_HP_STUB (STT_LOOS + 0x2) - - - -#define R_PARISC_NONE 0 -#define R_PARISC_DIR32 1 -#define R_PARISC_DIR21L 2 -#define R_PARISC_DIR17R 3 -#define R_PARISC_DIR17F 4 -#define R_PARISC_DIR14R 6 -#define R_PARISC_PCREL32 9 -#define R_PARISC_PCREL21L 10 -#define R_PARISC_PCREL17R 11 -#define R_PARISC_PCREL17F 12 -#define R_PARISC_PCREL14R 14 -#define R_PARISC_DPREL21L 18 -#define R_PARISC_DPREL14R 22 -#define R_PARISC_GPREL21L 26 -#define R_PARISC_GPREL14R 30 -#define R_PARISC_LTOFF21L 34 -#define R_PARISC_LTOFF14R 38 -#define R_PARISC_SECREL32 41 -#define R_PARISC_SEGBASE 48 -#define R_PARISC_SEGREL32 49 -#define R_PARISC_PLTOFF21L 50 -#define R_PARISC_PLTOFF14R 54 -#define R_PARISC_LTOFF_FPTR32 57 -#define R_PARISC_LTOFF_FPTR21L 58 -#define R_PARISC_LTOFF_FPTR14R 62 -#define R_PARISC_FPTR64 64 -#define R_PARISC_PLABEL32 65 -#define R_PARISC_PLABEL21L 66 -#define R_PARISC_PLABEL14R 70 -#define R_PARISC_PCREL64 72 -#define R_PARISC_PCREL22F 74 -#define R_PARISC_PCREL14WR 75 -#define R_PARISC_PCREL14DR 76 -#define R_PARISC_PCREL16F 77 -#define R_PARISC_PCREL16WF 78 -#define R_PARISC_PCREL16DF 79 -#define R_PARISC_DIR64 80 -#define R_PARISC_DIR14WR 83 -#define R_PARISC_DIR14DR 84 -#define R_PARISC_DIR16F 85 -#define R_PARISC_DIR16WF 86 -#define R_PARISC_DIR16DF 87 -#define R_PARISC_GPREL64 88 -#define R_PARISC_GPREL14WR 91 -#define R_PARISC_GPREL14DR 92 -#define R_PARISC_GPREL16F 93 -#define R_PARISC_GPREL16WF 94 -#define R_PARISC_GPREL16DF 95 -#define R_PARISC_LTOFF64 96 -#define R_PARISC_LTOFF14WR 99 -#define R_PARISC_LTOFF14DR 100 -#define R_PARISC_LTOFF16F 101 -#define R_PARISC_LTOFF16WF 102 -#define R_PARISC_LTOFF16DF 103 -#define R_PARISC_SECREL64 104 -#define R_PARISC_SEGREL64 112 -#define R_PARISC_PLTOFF14WR 115 -#define R_PARISC_PLTOFF14DR 116 -#define R_PARISC_PLTOFF16F 117 -#define R_PARISC_PLTOFF16WF 118 -#define R_PARISC_PLTOFF16DF 119 -#define R_PARISC_LTOFF_FPTR64 120 -#define R_PARISC_LTOFF_FPTR14WR 123 -#define R_PARISC_LTOFF_FPTR14DR 124 -#define R_PARISC_LTOFF_FPTR16F 125 -#define R_PARISC_LTOFF_FPTR16WF 126 -#define R_PARISC_LTOFF_FPTR16DF 127 -#define R_PARISC_LORESERVE 128 -#define R_PARISC_COPY 128 -#define R_PARISC_IPLT 129 -#define R_PARISC_EPLT 130 -#define R_PARISC_TPREL32 153 -#define R_PARISC_TPREL21L 154 -#define R_PARISC_TPREL14R 158 -#define R_PARISC_LTOFF_TP21L 162 -#define R_PARISC_LTOFF_TP14R 166 -#define R_PARISC_LTOFF_TP14F 167 -#define R_PARISC_TPREL64 216 -#define R_PARISC_TPREL14WR 219 -#define R_PARISC_TPREL14DR 220 -#define R_PARISC_TPREL16F 221 -#define R_PARISC_TPREL16WF 222 -#define R_PARISC_TPREL16DF 223 -#define R_PARISC_LTOFF_TP64 224 -#define R_PARISC_LTOFF_TP14WR 227 -#define R_PARISC_LTOFF_TP14DR 228 -#define R_PARISC_LTOFF_TP16F 229 -#define R_PARISC_LTOFF_TP16WF 230 -#define R_PARISC_LTOFF_TP16DF 231 -#define R_PARISC_GNU_VTENTRY 232 -#define R_PARISC_GNU_VTINHERIT 233 -#define R_PARISC_TLS_GD21L 234 -#define R_PARISC_TLS_GD14R 235 -#define R_PARISC_TLS_GDCALL 236 -#define R_PARISC_TLS_LDM21L 237 -#define R_PARISC_TLS_LDM14R 238 -#define R_PARISC_TLS_LDMCALL 239 -#define R_PARISC_TLS_LDO21L 240 -#define R_PARISC_TLS_LDO14R 241 -#define R_PARISC_TLS_DTPMOD32 242 -#define R_PARISC_TLS_DTPMOD64 243 -#define R_PARISC_TLS_DTPOFF32 244 -#define R_PARISC_TLS_DTPOFF64 245 -#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L -#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R -#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L -#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R -#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 -#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 -#define R_PARISC_HIRESERVE 255 - - - -#define PT_HP_TLS (PT_LOOS + 0x0) -#define PT_HP_CORE_NONE (PT_LOOS + 0x1) -#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) -#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) -#define PT_HP_CORE_COMM (PT_LOOS + 0x4) -#define PT_HP_CORE_PROC (PT_LOOS + 0x5) -#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) -#define PT_HP_CORE_STACK (PT_LOOS + 0x7) -#define PT_HP_CORE_SHM (PT_LOOS + 0x8) -#define PT_HP_CORE_MMF (PT_LOOS + 0x9) -#define PT_HP_PARALLEL (PT_LOOS + 0x10) -#define PT_HP_FASTBIND (PT_LOOS + 0x11) -#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) -#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) -#define PT_HP_STACK (PT_LOOS + 0x14) - -#define PT_PARISC_ARCHEXT 0x70000000 -#define PT_PARISC_UNWIND 0x70000001 - - - -#define PF_PARISC_SBP 0x08000000 - -#define PF_HP_PAGE_SIZE 0x00100000 -#define PF_HP_FAR_SHARED 0x00200000 -#define PF_HP_NEAR_SHARED 0x00400000 -#define PF_HP_CODE 0x01000000 -#define PF_HP_MODIFY 0x02000000 -#define PF_HP_LAZYSWAP 0x04000000 -#define PF_HP_SBP 0x08000000 - - - - - - -#define EF_ALPHA_32BIT 1 -#define EF_ALPHA_CANRELAX 2 - - - - -#define SHT_ALPHA_DEBUG 0x70000001 -#define SHT_ALPHA_REGINFO 0x70000002 - - - -#define SHF_ALPHA_GPREL 0x10000000 - - -#define STO_ALPHA_NOPV 0x80 -#define STO_ALPHA_STD_GPLOAD 0x88 - - - -#define R_ALPHA_NONE 0 -#define R_ALPHA_REFLONG 1 -#define R_ALPHA_REFQUAD 2 -#define R_ALPHA_GPREL32 3 -#define R_ALPHA_LITERAL 4 -#define R_ALPHA_LITUSE 5 -#define R_ALPHA_GPDISP 6 -#define R_ALPHA_BRADDR 7 -#define R_ALPHA_HINT 8 -#define R_ALPHA_SREL16 9 -#define R_ALPHA_SREL32 10 -#define R_ALPHA_SREL64 11 -#define R_ALPHA_GPRELHIGH 17 -#define R_ALPHA_GPRELLOW 18 -#define R_ALPHA_GPREL16 19 -#define R_ALPHA_COPY 24 -#define R_ALPHA_GLOB_DAT 25 -#define R_ALPHA_JMP_SLOT 26 -#define R_ALPHA_RELATIVE 27 -#define R_ALPHA_TLS_GD_HI 28 -#define R_ALPHA_TLSGD 29 -#define R_ALPHA_TLS_LDM 30 -#define R_ALPHA_DTPMOD64 31 -#define R_ALPHA_GOTDTPREL 32 -#define R_ALPHA_DTPREL64 33 -#define R_ALPHA_DTPRELHI 34 -#define R_ALPHA_DTPRELLO 35 -#define R_ALPHA_DTPREL16 36 -#define R_ALPHA_GOTTPREL 37 -#define R_ALPHA_TPREL64 38 -#define R_ALPHA_TPRELHI 39 -#define R_ALPHA_TPRELLO 40 -#define R_ALPHA_TPREL16 41 - -#define R_ALPHA_NUM 46 - - -#define LITUSE_ALPHA_ADDR 0 -#define LITUSE_ALPHA_BASE 1 -#define LITUSE_ALPHA_BYTOFF 2 -#define LITUSE_ALPHA_JSR 3 -#define LITUSE_ALPHA_TLS_GD 4 -#define LITUSE_ALPHA_TLS_LDM 5 - - -#define DT_ALPHA_PLTRO (DT_LOPROC + 0) -#define DT_ALPHA_NUM 1 - - - - -#define EF_PPC_EMB 0x80000000 - - -#define EF_PPC_RELOCATABLE 0x00010000 -#define EF_PPC_RELOCATABLE_LIB 0x00008000 - - - -#define R_PPC_NONE 0 -#define R_PPC_ADDR32 1 -#define R_PPC_ADDR24 2 -#define R_PPC_ADDR16 3 -#define R_PPC_ADDR16_LO 4 -#define R_PPC_ADDR16_HI 5 -#define R_PPC_ADDR16_HA 6 -#define R_PPC_ADDR14 7 -#define R_PPC_ADDR14_BRTAKEN 8 -#define R_PPC_ADDR14_BRNTAKEN 9 -#define R_PPC_REL24 10 -#define R_PPC_REL14 11 -#define R_PPC_REL14_BRTAKEN 12 -#define R_PPC_REL14_BRNTAKEN 13 -#define R_PPC_GOT16 14 -#define R_PPC_GOT16_LO 15 -#define R_PPC_GOT16_HI 16 -#define R_PPC_GOT16_HA 17 -#define R_PPC_PLTREL24 18 -#define R_PPC_COPY 19 -#define R_PPC_GLOB_DAT 20 -#define R_PPC_JMP_SLOT 21 -#define R_PPC_RELATIVE 22 -#define R_PPC_LOCAL24PC 23 -#define R_PPC_UADDR32 24 -#define R_PPC_UADDR16 25 -#define R_PPC_REL32 26 -#define R_PPC_PLT32 27 -#define R_PPC_PLTREL32 28 -#define R_PPC_PLT16_LO 29 -#define R_PPC_PLT16_HI 30 -#define R_PPC_PLT16_HA 31 -#define R_PPC_SDAREL16 32 -#define R_PPC_SECTOFF 33 -#define R_PPC_SECTOFF_LO 34 -#define R_PPC_SECTOFF_HI 35 -#define R_PPC_SECTOFF_HA 36 - - -#define R_PPC_TLS 67 -#define R_PPC_DTPMOD32 68 -#define R_PPC_TPREL16 69 -#define R_PPC_TPREL16_LO 70 -#define R_PPC_TPREL16_HI 71 -#define R_PPC_TPREL16_HA 72 -#define R_PPC_TPREL32 73 -#define R_PPC_DTPREL16 74 -#define R_PPC_DTPREL16_LO 75 -#define R_PPC_DTPREL16_HI 76 -#define R_PPC_DTPREL16_HA 77 -#define R_PPC_DTPREL32 78 -#define R_PPC_GOT_TLSGD16 79 -#define R_PPC_GOT_TLSGD16_LO 80 -#define R_PPC_GOT_TLSGD16_HI 81 -#define R_PPC_GOT_TLSGD16_HA 82 -#define R_PPC_GOT_TLSLD16 83 -#define R_PPC_GOT_TLSLD16_LO 84 -#define R_PPC_GOT_TLSLD16_HI 85 -#define R_PPC_GOT_TLSLD16_HA 86 -#define R_PPC_GOT_TPREL16 87 -#define R_PPC_GOT_TPREL16_LO 88 -#define R_PPC_GOT_TPREL16_HI 89 -#define R_PPC_GOT_TPREL16_HA 90 -#define R_PPC_GOT_DTPREL16 91 -#define R_PPC_GOT_DTPREL16_LO 92 -#define R_PPC_GOT_DTPREL16_HI 93 -#define R_PPC_GOT_DTPREL16_HA 94 -#define R_PPC_TLSGD 95 -#define R_PPC_TLSLD 96 - - -#define R_PPC_EMB_NADDR32 101 -#define R_PPC_EMB_NADDR16 102 -#define R_PPC_EMB_NADDR16_LO 103 -#define R_PPC_EMB_NADDR16_HI 104 -#define R_PPC_EMB_NADDR16_HA 105 -#define R_PPC_EMB_SDAI16 106 -#define R_PPC_EMB_SDA2I16 107 -#define R_PPC_EMB_SDA2REL 108 -#define R_PPC_EMB_SDA21 109 -#define R_PPC_EMB_MRKREF 110 -#define R_PPC_EMB_RELSEC16 111 -#define R_PPC_EMB_RELST_LO 112 -#define R_PPC_EMB_RELST_HI 113 -#define R_PPC_EMB_RELST_HA 114 -#define R_PPC_EMB_BIT_FLD 115 -#define R_PPC_EMB_RELSDA 116 - - -#define R_PPC_DIAB_SDA21_LO 180 -#define R_PPC_DIAB_SDA21_HI 181 -#define R_PPC_DIAB_SDA21_HA 182 -#define R_PPC_DIAB_RELSDA_LO 183 -#define R_PPC_DIAB_RELSDA_HI 184 -#define R_PPC_DIAB_RELSDA_HA 185 - - -#define R_PPC_IRELATIVE 248 - - -#define R_PPC_REL16 249 -#define R_PPC_REL16_LO 250 -#define R_PPC_REL16_HI 251 -#define R_PPC_REL16_HA 252 - - - -#define R_PPC_TOC16 255 - - -#define DT_PPC_GOT (DT_LOPROC + 0) -#define DT_PPC_OPT (DT_LOPROC + 1) -#define DT_PPC_NUM 2 - -#define PPC_OPT_TLS 1 - - -#define R_PPC64_NONE R_PPC_NONE -#define R_PPC64_ADDR32 R_PPC_ADDR32 -#define R_PPC64_ADDR24 R_PPC_ADDR24 -#define R_PPC64_ADDR16 R_PPC_ADDR16 -#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO -#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI -#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA -#define R_PPC64_ADDR14 R_PPC_ADDR14 -#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN -#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN -#define R_PPC64_REL24 R_PPC_REL24 -#define R_PPC64_REL14 R_PPC_REL14 -#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN -#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN -#define R_PPC64_GOT16 R_PPC_GOT16 -#define R_PPC64_GOT16_LO R_PPC_GOT16_LO -#define R_PPC64_GOT16_HI R_PPC_GOT16_HI -#define R_PPC64_GOT16_HA R_PPC_GOT16_HA - -#define R_PPC64_COPY R_PPC_COPY -#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT -#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT -#define R_PPC64_RELATIVE R_PPC_RELATIVE - -#define R_PPC64_UADDR32 R_PPC_UADDR32 -#define R_PPC64_UADDR16 R_PPC_UADDR16 -#define R_PPC64_REL32 R_PPC_REL32 -#define R_PPC64_PLT32 R_PPC_PLT32 -#define R_PPC64_PLTREL32 R_PPC_PLTREL32 -#define R_PPC64_PLT16_LO R_PPC_PLT16_LO -#define R_PPC64_PLT16_HI R_PPC_PLT16_HI -#define R_PPC64_PLT16_HA R_PPC_PLT16_HA - -#define R_PPC64_SECTOFF R_PPC_SECTOFF -#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO -#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI -#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA -#define R_PPC64_ADDR30 37 -#define R_PPC64_ADDR64 38 -#define R_PPC64_ADDR16_HIGHER 39 -#define R_PPC64_ADDR16_HIGHERA 40 -#define R_PPC64_ADDR16_HIGHEST 41 -#define R_PPC64_ADDR16_HIGHESTA 42 -#define R_PPC64_UADDR64 43 -#define R_PPC64_REL64 44 -#define R_PPC64_PLT64 45 -#define R_PPC64_PLTREL64 46 -#define R_PPC64_TOC16 47 -#define R_PPC64_TOC16_LO 48 -#define R_PPC64_TOC16_HI 49 -#define R_PPC64_TOC16_HA 50 -#define R_PPC64_TOC 51 -#define R_PPC64_PLTGOT16 52 -#define R_PPC64_PLTGOT16_LO 53 -#define R_PPC64_PLTGOT16_HI 54 -#define R_PPC64_PLTGOT16_HA 55 - -#define R_PPC64_ADDR16_DS 56 -#define R_PPC64_ADDR16_LO_DS 57 -#define R_PPC64_GOT16_DS 58 -#define R_PPC64_GOT16_LO_DS 59 -#define R_PPC64_PLT16_LO_DS 60 -#define R_PPC64_SECTOFF_DS 61 -#define R_PPC64_SECTOFF_LO_DS 62 -#define R_PPC64_TOC16_DS 63 -#define R_PPC64_TOC16_LO_DS 64 -#define R_PPC64_PLTGOT16_DS 65 -#define R_PPC64_PLTGOT16_LO_DS 66 - - -#define R_PPC64_TLS 67 -#define R_PPC64_DTPMOD64 68 -#define R_PPC64_TPREL16 69 -#define R_PPC64_TPREL16_LO 70 -#define R_PPC64_TPREL16_HI 71 -#define R_PPC64_TPREL16_HA 72 -#define R_PPC64_TPREL64 73 -#define R_PPC64_DTPREL16 74 -#define R_PPC64_DTPREL16_LO 75 -#define R_PPC64_DTPREL16_HI 76 -#define R_PPC64_DTPREL16_HA 77 -#define R_PPC64_DTPREL64 78 -#define R_PPC64_GOT_TLSGD16 79 -#define R_PPC64_GOT_TLSGD16_LO 80 -#define R_PPC64_GOT_TLSGD16_HI 81 -#define R_PPC64_GOT_TLSGD16_HA 82 -#define R_PPC64_GOT_TLSLD16 83 -#define R_PPC64_GOT_TLSLD16_LO 84 -#define R_PPC64_GOT_TLSLD16_HI 85 -#define R_PPC64_GOT_TLSLD16_HA 86 -#define R_PPC64_GOT_TPREL16_DS 87 -#define R_PPC64_GOT_TPREL16_LO_DS 88 -#define R_PPC64_GOT_TPREL16_HI 89 -#define R_PPC64_GOT_TPREL16_HA 90 -#define R_PPC64_GOT_DTPREL16_DS 91 -#define R_PPC64_GOT_DTPREL16_LO_DS 92 -#define R_PPC64_GOT_DTPREL16_HI 93 -#define R_PPC64_GOT_DTPREL16_HA 94 -#define R_PPC64_TPREL16_DS 95 -#define R_PPC64_TPREL16_LO_DS 96 -#define R_PPC64_TPREL16_HIGHER 97 -#define R_PPC64_TPREL16_HIGHERA 98 -#define R_PPC64_TPREL16_HIGHEST 99 -#define R_PPC64_TPREL16_HIGHESTA 100 -#define R_PPC64_DTPREL16_DS 101 -#define R_PPC64_DTPREL16_LO_DS 102 -#define R_PPC64_DTPREL16_HIGHER 103 -#define R_PPC64_DTPREL16_HIGHERA 104 -#define R_PPC64_DTPREL16_HIGHEST 105 -#define R_PPC64_DTPREL16_HIGHESTA 106 -#define R_PPC64_TLSGD 107 -#define R_PPC64_TLSLD 108 -#define R_PPC64_TOCSAVE 109 -#define R_PPC64_ADDR16_HIGH 110 -#define R_PPC64_ADDR16_HIGHA 111 -#define R_PPC64_TPREL16_HIGH 112 -#define R_PPC64_TPREL16_HIGHA 113 -#define R_PPC64_DTPREL16_HIGH 114 -#define R_PPC64_DTPREL16_HIGHA 115 - - -#define R_PPC64_JMP_IREL 247 -#define R_PPC64_IRELATIVE 248 -#define R_PPC64_REL16 249 -#define R_PPC64_REL16_LO 250 -#define R_PPC64_REL16_HI 251 -#define R_PPC64_REL16_HA 252 - -#define EF_PPC64_ABI 3 - -#define DT_PPC64_GLINK (DT_LOPROC + 0) -#define DT_PPC64_OPD (DT_LOPROC + 1) -#define DT_PPC64_OPDSZ (DT_LOPROC + 2) -#define DT_PPC64_OPT (DT_LOPROC + 3) -#define DT_PPC64_NUM 4 - -#define PPC64_OPT_TLS 1 -#define PPC64_OPT_MULTI_TOC 2 - -#define STO_PPC64_LOCAL_BIT 5 -#define STO_PPC64_LOCAL_MASK 0xe0 -#define PPC64_LOCAL_ENTRY_OFFSET(x) (1 << (((x)&0xe0)>>5) & 0xfc) - - -#define EF_ARM_RELEXEC 0x01 -#define EF_ARM_HASENTRY 0x02 -#define EF_ARM_INTERWORK 0x04 -#define EF_ARM_APCS_26 0x08 -#define EF_ARM_APCS_FLOAT 0x10 -#define EF_ARM_PIC 0x20 -#define EF_ARM_ALIGN8 0x40 -#define EF_ARM_NEW_ABI 0x80 -#define EF_ARM_OLD_ABI 0x100 -#define EF_ARM_SOFT_FLOAT 0x200 -#define EF_ARM_VFP_FLOAT 0x400 -#define EF_ARM_MAVERICK_FLOAT 0x800 - -#define EF_ARM_ABI_FLOAT_SOFT 0x200 -#define EF_ARM_ABI_FLOAT_HARD 0x400 - - -#define EF_ARM_SYMSARESORTED 0x04 -#define EF_ARM_DYNSYMSUSESEGIDX 0x08 -#define EF_ARM_MAPSYMSFIRST 0x10 -#define EF_ARM_EABIMASK 0XFF000000 - - -#define EF_ARM_BE8 0x00800000 -#define EF_ARM_LE8 0x00400000 - -#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) -#define EF_ARM_EABI_UNKNOWN 0x00000000 -#define EF_ARM_EABI_VER1 0x01000000 -#define EF_ARM_EABI_VER2 0x02000000 -#define EF_ARM_EABI_VER3 0x03000000 -#define EF_ARM_EABI_VER4 0x04000000 -#define EF_ARM_EABI_VER5 0x05000000 - - -#define STT_ARM_TFUNC STT_LOPROC -#define STT_ARM_16BIT STT_HIPROC - - -#define SHF_ARM_ENTRYSECT 0x10000000 -#define SHF_ARM_COMDEF 0x80000000 - - - -#define PF_ARM_SB 0x10000000 - -#define PF_ARM_PI 0x20000000 -#define PF_ARM_ABS 0x40000000 - - -#define PT_ARM_EXIDX (PT_LOPROC + 1) - - -#define SHT_ARM_EXIDX (SHT_LOPROC + 1) -#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) -#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) - -#define R_AARCH64_NONE 0 -#define R_AARCH64_P32_ABS32 1 -#define R_AARCH64_P32_COPY 180 -#define R_AARCH64_P32_GLOB_DAT 181 -#define R_AARCH64_P32_JUMP_SLOT 182 -#define R_AARCH64_P32_RELATIVE 183 -#define R_AARCH64_P32_TLS_DTPMOD 184 -#define R_AARCH64_P32_TLS_DTPREL 185 -#define R_AARCH64_P32_TLS_TPREL 186 -#define R_AARCH64_P32_TLSDESC 187 -#define R_AARCH64_P32_IRELATIVE 188 -#define R_AARCH64_ABS64 257 -#define R_AARCH64_ABS32 258 -#define R_AARCH64_ABS16 259 -#define R_AARCH64_PREL64 260 -#define R_AARCH64_PREL32 261 -#define R_AARCH64_PREL16 262 -#define R_AARCH64_MOVW_UABS_G0 263 -#define R_AARCH64_MOVW_UABS_G0_NC 264 -#define R_AARCH64_MOVW_UABS_G1 265 -#define R_AARCH64_MOVW_UABS_G1_NC 266 -#define R_AARCH64_MOVW_UABS_G2 267 -#define R_AARCH64_MOVW_UABS_G2_NC 268 -#define R_AARCH64_MOVW_UABS_G3 269 -#define R_AARCH64_MOVW_SABS_G0 270 -#define R_AARCH64_MOVW_SABS_G1 271 -#define R_AARCH64_MOVW_SABS_G2 272 -#define R_AARCH64_LD_PREL_LO19 273 -#define R_AARCH64_ADR_PREL_LO21 274 -#define R_AARCH64_ADR_PREL_PG_HI21 275 -#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 -#define R_AARCH64_ADD_ABS_LO12_NC 277 -#define R_AARCH64_LDST8_ABS_LO12_NC 278 -#define R_AARCH64_TSTBR14 279 -#define R_AARCH64_CONDBR19 280 -#define R_AARCH64_JUMP26 282 -#define R_AARCH64_CALL26 283 -#define R_AARCH64_LDST16_ABS_LO12_NC 284 -#define R_AARCH64_LDST32_ABS_LO12_NC 285 -#define R_AARCH64_LDST64_ABS_LO12_NC 286 -#define R_AARCH64_MOVW_PREL_G0 287 -#define R_AARCH64_MOVW_PREL_G0_NC 288 -#define R_AARCH64_MOVW_PREL_G1 289 -#define R_AARCH64_MOVW_PREL_G1_NC 290 -#define R_AARCH64_MOVW_PREL_G2 291 -#define R_AARCH64_MOVW_PREL_G2_NC 292 -#define R_AARCH64_MOVW_PREL_G3 293 -#define R_AARCH64_LDST128_ABS_LO12_NC 299 -#define R_AARCH64_MOVW_GOTOFF_G0 300 -#define R_AARCH64_MOVW_GOTOFF_G0_NC 301 -#define R_AARCH64_MOVW_GOTOFF_G1 302 -#define R_AARCH64_MOVW_GOTOFF_G1_NC 303 -#define R_AARCH64_MOVW_GOTOFF_G2 304 -#define R_AARCH64_MOVW_GOTOFF_G2_NC 305 -#define R_AARCH64_MOVW_GOTOFF_G3 306 -#define R_AARCH64_GOTREL64 307 -#define R_AARCH64_GOTREL32 308 -#define R_AARCH64_GOT_LD_PREL19 309 -#define R_AARCH64_LD64_GOTOFF_LO15 310 -#define R_AARCH64_ADR_GOT_PAGE 311 -#define R_AARCH64_LD64_GOT_LO12_NC 312 -#define R_AARCH64_LD64_GOTPAGE_LO15 313 -#define R_AARCH64_TLSGD_ADR_PREL21 512 -#define R_AARCH64_TLSGD_ADR_PAGE21 513 -#define R_AARCH64_TLSGD_ADD_LO12_NC 514 -#define R_AARCH64_TLSGD_MOVW_G1 515 -#define R_AARCH64_TLSGD_MOVW_G0_NC 516 -#define R_AARCH64_TLSLD_ADR_PREL21 517 -#define R_AARCH64_TLSLD_ADR_PAGE21 518 -#define R_AARCH64_TLSLD_ADD_LO12_NC 519 -#define R_AARCH64_TLSLD_MOVW_G1 520 -#define R_AARCH64_TLSLD_MOVW_G0_NC 521 -#define R_AARCH64_TLSLD_LD_PREL19 522 -#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 -#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 -#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 -#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 -#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 -#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 -#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 -#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 -#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 -#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 -#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 -#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 -#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 -#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 -#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 -#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 -#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 -#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 -#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 -#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 -#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 -#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 -#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 -#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 -#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 -#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 -#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 -#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 -#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 -#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 -#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 -#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 -#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 -#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 -#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 -#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 -#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 -#define R_AARCH64_TLSDESC_LD_PREL19 560 -#define R_AARCH64_TLSDESC_ADR_PREL21 561 -#define R_AARCH64_TLSDESC_ADR_PAGE21 562 -#define R_AARCH64_TLSDESC_LD64_LO12 563 -#define R_AARCH64_TLSDESC_ADD_LO12 564 -#define R_AARCH64_TLSDESC_OFF_G1 565 -#define R_AARCH64_TLSDESC_OFF_G0_NC 566 -#define R_AARCH64_TLSDESC_LDR 567 -#define R_AARCH64_TLSDESC_ADD 568 -#define R_AARCH64_TLSDESC_CALL 569 -#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 -#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 -#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 -#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 -#define R_AARCH64_COPY 1024 -#define R_AARCH64_GLOB_DAT 1025 -#define R_AARCH64_JUMP_SLOT 1026 -#define R_AARCH64_RELATIVE 1027 -#define R_AARCH64_TLS_DTPMOD 1028 -#define R_AARCH64_TLS_DTPMOD64 1028 -#define R_AARCH64_TLS_DTPREL 1029 -#define R_AARCH64_TLS_DTPREL64 1029 -#define R_AARCH64_TLS_TPREL 1030 -#define R_AARCH64_TLS_TPREL64 1030 -#define R_AARCH64_TLSDESC 1031 - - -#define R_ARM_NONE 0 -#define R_ARM_PC24 1 -#define R_ARM_ABS32 2 -#define R_ARM_REL32 3 -#define R_ARM_PC13 4 -#define R_ARM_ABS16 5 -#define R_ARM_ABS12 6 -#define R_ARM_THM_ABS5 7 -#define R_ARM_ABS8 8 -#define R_ARM_SBREL32 9 -#define R_ARM_THM_PC22 10 -#define R_ARM_THM_PC8 11 -#define R_ARM_AMP_VCALL9 12 -#define R_ARM_TLS_DESC 13 -#define R_ARM_THM_SWI8 14 -#define R_ARM_XPC25 15 -#define R_ARM_THM_XPC22 16 -#define R_ARM_TLS_DTPMOD32 17 -#define R_ARM_TLS_DTPOFF32 18 -#define R_ARM_TLS_TPOFF32 19 -#define R_ARM_COPY 20 -#define R_ARM_GLOB_DAT 21 -#define R_ARM_JUMP_SLOT 22 -#define R_ARM_RELATIVE 23 -#define R_ARM_GOTOFF 24 -#define R_ARM_GOTPC 25 -#define R_ARM_GOT32 26 -#define R_ARM_PLT32 27 -#define R_ARM_CALL 28 -#define R_ARM_JUMP24 29 -#define R_ARM_THM_JUMP24 30 -#define R_ARM_BASE_ABS 31 -#define R_ARM_ALU_PCREL_7_0 32 -#define R_ARM_ALU_PCREL_15_8 33 -#define R_ARM_ALU_PCREL_23_15 34 -#define R_ARM_LDR_SBREL_11_0 35 -#define R_ARM_ALU_SBREL_19_12 36 -#define R_ARM_ALU_SBREL_27_20 37 -#define R_ARM_TARGET1 38 -#define R_ARM_SBREL31 39 -#define R_ARM_V4BX 40 -#define R_ARM_TARGET2 41 -#define R_ARM_PREL31 42 -#define R_ARM_MOVW_ABS_NC 43 -#define R_ARM_MOVT_ABS 44 -#define R_ARM_MOVW_PREL_NC 45 -#define R_ARM_MOVT_PREL 46 -#define R_ARM_THM_MOVW_ABS_NC 47 -#define R_ARM_THM_MOVT_ABS 48 -#define R_ARM_THM_MOVW_PREL_NC 49 -#define R_ARM_THM_MOVT_PREL 50 -#define R_ARM_THM_JUMP19 51 -#define R_ARM_THM_JUMP6 52 -#define R_ARM_THM_ALU_PREL_11_0 53 -#define R_ARM_THM_PC12 54 -#define R_ARM_ABS32_NOI 55 -#define R_ARM_REL32_NOI 56 -#define R_ARM_ALU_PC_G0_NC 57 -#define R_ARM_ALU_PC_G0 58 -#define R_ARM_ALU_PC_G1_NC 59 -#define R_ARM_ALU_PC_G1 60 -#define R_ARM_ALU_PC_G2 61 -#define R_ARM_LDR_PC_G1 62 -#define R_ARM_LDR_PC_G2 63 -#define R_ARM_LDRS_PC_G0 64 -#define R_ARM_LDRS_PC_G1 65 -#define R_ARM_LDRS_PC_G2 66 -#define R_ARM_LDC_PC_G0 67 -#define R_ARM_LDC_PC_G1 68 -#define R_ARM_LDC_PC_G2 69 -#define R_ARM_ALU_SB_G0_NC 70 -#define R_ARM_ALU_SB_G0 71 -#define R_ARM_ALU_SB_G1_NC 72 -#define R_ARM_ALU_SB_G1 73 -#define R_ARM_ALU_SB_G2 74 -#define R_ARM_LDR_SB_G0 75 -#define R_ARM_LDR_SB_G1 76 -#define R_ARM_LDR_SB_G2 77 -#define R_ARM_LDRS_SB_G0 78 -#define R_ARM_LDRS_SB_G1 79 -#define R_ARM_LDRS_SB_G2 80 -#define R_ARM_LDC_SB_G0 81 -#define R_ARM_LDC_SB_G1 82 -#define R_ARM_LDC_SB_G2 83 -#define R_ARM_MOVW_BREL_NC 84 -#define R_ARM_MOVT_BREL 85 -#define R_ARM_MOVW_BREL 86 -#define R_ARM_THM_MOVW_BREL_NC 87 -#define R_ARM_THM_MOVT_BREL 88 -#define R_ARM_THM_MOVW_BREL 89 -#define R_ARM_TLS_GOTDESC 90 -#define R_ARM_TLS_CALL 91 -#define R_ARM_TLS_DESCSEQ 92 -#define R_ARM_THM_TLS_CALL 93 -#define R_ARM_PLT32_ABS 94 -#define R_ARM_GOT_ABS 95 -#define R_ARM_GOT_PREL 96 -#define R_ARM_GOT_BREL12 97 -#define R_ARM_GOTOFF12 98 -#define R_ARM_GOTRELAX 99 -#define R_ARM_GNU_VTENTRY 100 -#define R_ARM_GNU_VTINHERIT 101 -#define R_ARM_THM_PC11 102 -#define R_ARM_THM_PC9 103 -#define R_ARM_TLS_GD32 104 - -#define R_ARM_TLS_LDM32 105 - -#define R_ARM_TLS_LDO32 106 - -#define R_ARM_TLS_IE32 107 - -#define R_ARM_TLS_LE32 108 -#define R_ARM_TLS_LDO12 109 -#define R_ARM_TLS_LE12 110 -#define R_ARM_TLS_IE12GP 111 -#define R_ARM_ME_TOO 128 -#define R_ARM_THM_TLS_DESCSEQ 129 -#define R_ARM_THM_TLS_DESCSEQ16 129 -#define R_ARM_THM_TLS_DESCSEQ32 130 -#define R_ARM_THM_GOT_BREL12 131 -#define R_ARM_IRELATIVE 160 -#define R_ARM_RXPC25 249 -#define R_ARM_RSBREL32 250 -#define R_ARM_THM_RPC22 251 -#define R_ARM_RREL32 252 -#define R_ARM_RABS22 253 -#define R_ARM_RPC24 254 -#define R_ARM_RBASE 255 - -#define R_ARM_NUM 256 - - - - -#define EF_IA_64_MASKOS 0x0000000f -#define EF_IA_64_ABI64 0x00000010 -#define EF_IA_64_ARCH 0xff000000 - - -#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) -#define PT_IA_64_UNWIND (PT_LOPROC + 1) -#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) -#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) -#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) - - -#define PF_IA_64_NORECOV 0x80000000 - - -#define SHT_IA_64_EXT (SHT_LOPROC + 0) -#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) - - -#define SHF_IA_64_SHORT 0x10000000 -#define SHF_IA_64_NORECOV 0x20000000 - - -#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) -#define DT_IA_64_NUM 1 - - -#define R_IA64_NONE 0x00 -#define R_IA64_IMM14 0x21 -#define R_IA64_IMM22 0x22 -#define R_IA64_IMM64 0x23 -#define R_IA64_DIR32MSB 0x24 -#define R_IA64_DIR32LSB 0x25 -#define R_IA64_DIR64MSB 0x26 -#define R_IA64_DIR64LSB 0x27 -#define R_IA64_GPREL22 0x2a -#define R_IA64_GPREL64I 0x2b -#define R_IA64_GPREL32MSB 0x2c -#define R_IA64_GPREL32LSB 0x2d -#define R_IA64_GPREL64MSB 0x2e -#define R_IA64_GPREL64LSB 0x2f -#define R_IA64_LTOFF22 0x32 -#define R_IA64_LTOFF64I 0x33 -#define R_IA64_PLTOFF22 0x3a -#define R_IA64_PLTOFF64I 0x3b -#define R_IA64_PLTOFF64MSB 0x3e -#define R_IA64_PLTOFF64LSB 0x3f -#define R_IA64_FPTR64I 0x43 -#define R_IA64_FPTR32MSB 0x44 -#define R_IA64_FPTR32LSB 0x45 -#define R_IA64_FPTR64MSB 0x46 -#define R_IA64_FPTR64LSB 0x47 -#define R_IA64_PCREL60B 0x48 -#define R_IA64_PCREL21B 0x49 -#define R_IA64_PCREL21M 0x4a -#define R_IA64_PCREL21F 0x4b -#define R_IA64_PCREL32MSB 0x4c -#define R_IA64_PCREL32LSB 0x4d -#define R_IA64_PCREL64MSB 0x4e -#define R_IA64_PCREL64LSB 0x4f -#define R_IA64_LTOFF_FPTR22 0x52 -#define R_IA64_LTOFF_FPTR64I 0x53 -#define R_IA64_LTOFF_FPTR32MSB 0x54 -#define R_IA64_LTOFF_FPTR32LSB 0x55 -#define R_IA64_LTOFF_FPTR64MSB 0x56 -#define R_IA64_LTOFF_FPTR64LSB 0x57 -#define R_IA64_SEGREL32MSB 0x5c -#define R_IA64_SEGREL32LSB 0x5d -#define R_IA64_SEGREL64MSB 0x5e -#define R_IA64_SEGREL64LSB 0x5f -#define R_IA64_SECREL32MSB 0x64 -#define R_IA64_SECREL32LSB 0x65 -#define R_IA64_SECREL64MSB 0x66 -#define R_IA64_SECREL64LSB 0x67 -#define R_IA64_REL32MSB 0x6c -#define R_IA64_REL32LSB 0x6d -#define R_IA64_REL64MSB 0x6e -#define R_IA64_REL64LSB 0x6f -#define R_IA64_LTV32MSB 0x74 -#define R_IA64_LTV32LSB 0x75 -#define R_IA64_LTV64MSB 0x76 -#define R_IA64_LTV64LSB 0x77 -#define R_IA64_PCREL21BI 0x79 -#define R_IA64_PCREL22 0x7a -#define R_IA64_PCREL64I 0x7b -#define R_IA64_IPLTMSB 0x80 -#define R_IA64_IPLTLSB 0x81 -#define R_IA64_COPY 0x84 -#define R_IA64_SUB 0x85 -#define R_IA64_LTOFF22X 0x86 -#define R_IA64_LDXMOV 0x87 -#define R_IA64_TPREL14 0x91 -#define R_IA64_TPREL22 0x92 -#define R_IA64_TPREL64I 0x93 -#define R_IA64_TPREL64MSB 0x96 -#define R_IA64_TPREL64LSB 0x97 -#define R_IA64_LTOFF_TPREL22 0x9a -#define R_IA64_DTPMOD64MSB 0xa6 -#define R_IA64_DTPMOD64LSB 0xa7 -#define R_IA64_LTOFF_DTPMOD22 0xaa -#define R_IA64_DTPREL14 0xb1 -#define R_IA64_DTPREL22 0xb2 -#define R_IA64_DTPREL64I 0xb3 -#define R_IA64_DTPREL32MSB 0xb4 -#define R_IA64_DTPREL32LSB 0xb5 -#define R_IA64_DTPREL64MSB 0xb6 -#define R_IA64_DTPREL64LSB 0xb7 -#define R_IA64_LTOFF_DTPREL22 0xba - - -#define EF_SH_MACH_MASK 0x1f -#define EF_SH_UNKNOWN 0x0 -#define EF_SH1 0x1 -#define EF_SH2 0x2 -#define EF_SH3 0x3 -#define EF_SH_DSP 0x4 -#define EF_SH3_DSP 0x5 -#define EF_SH4AL_DSP 0x6 -#define EF_SH3E 0x8 -#define EF_SH4 0x9 -#define EF_SH2E 0xb -#define EF_SH4A 0xc -#define EF_SH2A 0xd -#define EF_SH4_NOFPU 0x10 -#define EF_SH4A_NOFPU 0x11 -#define EF_SH4_NOMMU_NOFPU 0x12 -#define EF_SH2A_NOFPU 0x13 -#define EF_SH3_NOMMU 0x14 -#define EF_SH2A_SH4_NOFPU 0x15 -#define EF_SH2A_SH3_NOFPU 0x16 -#define EF_SH2A_SH4 0x17 -#define EF_SH2A_SH3E 0x18 - -#define R_SH_NONE 0 -#define R_SH_DIR32 1 -#define R_SH_REL32 2 -#define R_SH_DIR8WPN 3 -#define R_SH_IND12W 4 -#define R_SH_DIR8WPL 5 -#define R_SH_DIR8WPZ 6 -#define R_SH_DIR8BP 7 -#define R_SH_DIR8W 8 -#define R_SH_DIR8L 9 -#define R_SH_SWITCH16 25 -#define R_SH_SWITCH32 26 -#define R_SH_USES 27 -#define R_SH_COUNT 28 -#define R_SH_ALIGN 29 -#define R_SH_CODE 30 -#define R_SH_DATA 31 -#define R_SH_LABEL 32 -#define R_SH_SWITCH8 33 -#define R_SH_GNU_VTINHERIT 34 -#define R_SH_GNU_VTENTRY 35 -#define R_SH_TLS_GD_32 144 -#define R_SH_TLS_LD_32 145 -#define R_SH_TLS_LDO_32 146 -#define R_SH_TLS_IE_32 147 -#define R_SH_TLS_LE_32 148 -#define R_SH_TLS_DTPMOD32 149 -#define R_SH_TLS_DTPOFF32 150 -#define R_SH_TLS_TPOFF32 151 -#define R_SH_GOT32 160 -#define R_SH_PLT32 161 -#define R_SH_COPY 162 -#define R_SH_GLOB_DAT 163 -#define R_SH_JMP_SLOT 164 -#define R_SH_RELATIVE 165 -#define R_SH_GOTOFF 166 -#define R_SH_GOTPC 167 -#define R_SH_GOT20 201 -#define R_SH_GOTOFF20 202 -#define R_SH_GOTFUNCDESC 203 -#define R_SH_GOTFUNCDEST20 204 -#define R_SH_GOTOFFFUNCDESC 205 -#define R_SH_GOTOFFFUNCDEST20 206 -#define R_SH_FUNCDESC 207 -#define R_SH_FUNCDESC_VALUE 208 - -#define R_SH_NUM 256 - - - -#define R_390_NONE 0 -#define R_390_8 1 -#define R_390_12 2 -#define R_390_16 3 -#define R_390_32 4 -#define R_390_PC32 5 -#define R_390_GOT12 6 -#define R_390_GOT32 7 -#define R_390_PLT32 8 -#define R_390_COPY 9 -#define R_390_GLOB_DAT 10 -#define R_390_JMP_SLOT 11 -#define R_390_RELATIVE 12 -#define R_390_GOTOFF32 13 -#define R_390_GOTPC 14 -#define R_390_GOT16 15 -#define R_390_PC16 16 -#define R_390_PC16DBL 17 -#define R_390_PLT16DBL 18 -#define R_390_PC32DBL 19 -#define R_390_PLT32DBL 20 -#define R_390_GOTPCDBL 21 -#define R_390_64 22 -#define R_390_PC64 23 -#define R_390_GOT64 24 -#define R_390_PLT64 25 -#define R_390_GOTENT 26 -#define R_390_GOTOFF16 27 -#define R_390_GOTOFF64 28 -#define R_390_GOTPLT12 29 -#define R_390_GOTPLT16 30 -#define R_390_GOTPLT32 31 -#define R_390_GOTPLT64 32 -#define R_390_GOTPLTENT 33 -#define R_390_PLTOFF16 34 -#define R_390_PLTOFF32 35 -#define R_390_PLTOFF64 36 -#define R_390_TLS_LOAD 37 -#define R_390_TLS_GDCALL 38 - -#define R_390_TLS_LDCALL 39 - -#define R_390_TLS_GD32 40 - -#define R_390_TLS_GD64 41 - -#define R_390_TLS_GOTIE12 42 - -#define R_390_TLS_GOTIE32 43 - -#define R_390_TLS_GOTIE64 44 - -#define R_390_TLS_LDM32 45 - -#define R_390_TLS_LDM64 46 - -#define R_390_TLS_IE32 47 - -#define R_390_TLS_IE64 48 - -#define R_390_TLS_IEENT 49 - -#define R_390_TLS_LE32 50 - -#define R_390_TLS_LE64 51 - -#define R_390_TLS_LDO32 52 - -#define R_390_TLS_LDO64 53 - -#define R_390_TLS_DTPMOD 54 -#define R_390_TLS_DTPOFF 55 -#define R_390_TLS_TPOFF 56 - -#define R_390_20 57 -#define R_390_GOT20 58 -#define R_390_GOTPLT20 59 -#define R_390_TLS_GOTIE20 60 - - -#define R_390_NUM 61 - - - -#define R_CRIS_NONE 0 -#define R_CRIS_8 1 -#define R_CRIS_16 2 -#define R_CRIS_32 3 -#define R_CRIS_8_PCREL 4 -#define R_CRIS_16_PCREL 5 -#define R_CRIS_32_PCREL 6 -#define R_CRIS_GNU_VTINHERIT 7 -#define R_CRIS_GNU_VTENTRY 8 -#define R_CRIS_COPY 9 -#define R_CRIS_GLOB_DAT 10 -#define R_CRIS_JUMP_SLOT 11 -#define R_CRIS_RELATIVE 12 -#define R_CRIS_16_GOT 13 -#define R_CRIS_32_GOT 14 -#define R_CRIS_16_GOTPLT 15 -#define R_CRIS_32_GOTPLT 16 -#define R_CRIS_32_GOTREL 17 -#define R_CRIS_32_PLT_GOTREL 18 -#define R_CRIS_32_PLT_PCREL 19 - -#define R_CRIS_NUM 20 - - - -#define R_X86_64_NONE 0 -#define R_X86_64_64 1 -#define R_X86_64_PC32 2 -#define R_X86_64_GOT32 3 -#define R_X86_64_PLT32 4 -#define R_X86_64_COPY 5 -#define R_X86_64_GLOB_DAT 6 -#define R_X86_64_JUMP_SLOT 7 -#define R_X86_64_RELATIVE 8 -#define R_X86_64_GOTPCREL 9 - -#define R_X86_64_32 10 -#define R_X86_64_32S 11 -#define R_X86_64_16 12 -#define R_X86_64_PC16 13 -#define R_X86_64_8 14 -#define R_X86_64_PC8 15 -#define R_X86_64_DTPMOD64 16 -#define R_X86_64_DTPOFF64 17 -#define R_X86_64_TPOFF64 18 -#define R_X86_64_TLSGD 19 - -#define R_X86_64_TLSLD 20 - -#define R_X86_64_DTPOFF32 21 -#define R_X86_64_GOTTPOFF 22 - -#define R_X86_64_TPOFF32 23 -#define R_X86_64_PC64 24 -#define R_X86_64_GOTOFF64 25 -#define R_X86_64_GOTPC32 26 -#define R_X86_64_GOT64 27 -#define R_X86_64_GOTPCREL64 28 -#define R_X86_64_GOTPC64 29 -#define R_X86_64_GOTPLT64 30 -#define R_X86_64_PLTOFF64 31 -#define R_X86_64_SIZE32 32 -#define R_X86_64_SIZE64 33 - -#define R_X86_64_GOTPC32_TLSDESC 34 -#define R_X86_64_TLSDESC_CALL 35 - -#define R_X86_64_TLSDESC 36 -#define R_X86_64_IRELATIVE 37 -#define R_X86_64_RELATIVE64 38 -#define R_X86_64_GOTPCRELX 41 -#define R_X86_64_REX_GOTPCRELX 42 -#define R_X86_64_NUM 43 - - - -#define R_MN10300_NONE 0 -#define R_MN10300_32 1 -#define R_MN10300_16 2 -#define R_MN10300_8 3 -#define R_MN10300_PCREL32 4 -#define R_MN10300_PCREL16 5 -#define R_MN10300_PCREL8 6 -#define R_MN10300_GNU_VTINHERIT 7 -#define R_MN10300_GNU_VTENTRY 8 -#define R_MN10300_24 9 -#define R_MN10300_GOTPC32 10 -#define R_MN10300_GOTPC16 11 -#define R_MN10300_GOTOFF32 12 -#define R_MN10300_GOTOFF24 13 -#define R_MN10300_GOTOFF16 14 -#define R_MN10300_PLT32 15 -#define R_MN10300_PLT16 16 -#define R_MN10300_GOT32 17 -#define R_MN10300_GOT24 18 -#define R_MN10300_GOT16 19 -#define R_MN10300_COPY 20 -#define R_MN10300_GLOB_DAT 21 -#define R_MN10300_JMP_SLOT 22 -#define R_MN10300_RELATIVE 23 - -#define R_MN10300_NUM 24 - - - -#define R_M32R_NONE 0 -#define R_M32R_16 1 -#define R_M32R_32 2 -#define R_M32R_24 3 -#define R_M32R_10_PCREL 4 -#define R_M32R_18_PCREL 5 -#define R_M32R_26_PCREL 6 -#define R_M32R_HI16_ULO 7 -#define R_M32R_HI16_SLO 8 -#define R_M32R_LO16 9 -#define R_M32R_SDA16 10 -#define R_M32R_GNU_VTINHERIT 11 -#define R_M32R_GNU_VTENTRY 12 - -#define R_M32R_16_RELA 33 -#define R_M32R_32_RELA 34 -#define R_M32R_24_RELA 35 -#define R_M32R_10_PCREL_RELA 36 -#define R_M32R_18_PCREL_RELA 37 -#define R_M32R_26_PCREL_RELA 38 -#define R_M32R_HI16_ULO_RELA 39 -#define R_M32R_HI16_SLO_RELA 40 -#define R_M32R_LO16_RELA 41 -#define R_M32R_SDA16_RELA 42 -#define R_M32R_RELA_GNU_VTINHERIT 43 -#define R_M32R_RELA_GNU_VTENTRY 44 -#define R_M32R_REL32 45 - -#define R_M32R_GOT24 48 -#define R_M32R_26_PLTREL 49 -#define R_M32R_COPY 50 -#define R_M32R_GLOB_DAT 51 -#define R_M32R_JMP_SLOT 52 -#define R_M32R_RELATIVE 53 -#define R_M32R_GOTOFF 54 -#define R_M32R_GOTPC24 55 -#define R_M32R_GOT16_HI_ULO 56 - -#define R_M32R_GOT16_HI_SLO 57 - -#define R_M32R_GOT16_LO 58 -#define R_M32R_GOTPC_HI_ULO 59 - -#define R_M32R_GOTPC_HI_SLO 60 - -#define R_M32R_GOTPC_LO 61 - -#define R_M32R_GOTOFF_HI_ULO 62 - -#define R_M32R_GOTOFF_HI_SLO 63 - -#define R_M32R_GOTOFF_LO 64 -#define R_M32R_NUM 256 - -#define R_MICROBLAZE_NONE 0 -#define R_MICROBLAZE_32 1 -#define R_MICROBLAZE_32_PCREL 2 -#define R_MICROBLAZE_64_PCREL 3 -#define R_MICROBLAZE_32_PCREL_LO 4 -#define R_MICROBLAZE_64 5 -#define R_MICROBLAZE_32_LO 6 -#define R_MICROBLAZE_SRO32 7 -#define R_MICROBLAZE_SRW32 8 -#define R_MICROBLAZE_64_NONE 9 -#define R_MICROBLAZE_32_SYM_OP_SYM 10 -#define R_MICROBLAZE_GNU_VTINHERIT 11 -#define R_MICROBLAZE_GNU_VTENTRY 12 -#define R_MICROBLAZE_GOTPC_64 13 -#define R_MICROBLAZE_GOT_64 14 -#define R_MICROBLAZE_PLT_64 15 -#define R_MICROBLAZE_REL 16 -#define R_MICROBLAZE_JUMP_SLOT 17 -#define R_MICROBLAZE_GLOB_DAT 18 -#define R_MICROBLAZE_GOTOFF_64 19 -#define R_MICROBLAZE_GOTOFF_32 20 -#define R_MICROBLAZE_COPY 21 -#define R_MICROBLAZE_TLS 22 -#define R_MICROBLAZE_TLSGD 23 -#define R_MICROBLAZE_TLSLD 24 -#define R_MICROBLAZE_TLSDTPMOD32 25 -#define R_MICROBLAZE_TLSDTPREL32 26 -#define R_MICROBLAZE_TLSDTPREL64 27 -#define R_MICROBLAZE_TLSGOTTPREL32 28 -#define R_MICROBLAZE_TLSTPREL32 29 - -#define DT_NIOS2_GP 0x70000002 - -#define R_NIOS2_NONE 0 -#define R_NIOS2_S16 1 -#define R_NIOS2_U16 2 -#define R_NIOS2_PCREL16 3 -#define R_NIOS2_CALL26 4 -#define R_NIOS2_IMM5 5 -#define R_NIOS2_CACHE_OPX 6 -#define R_NIOS2_IMM6 7 -#define R_NIOS2_IMM8 8 -#define R_NIOS2_HI16 9 -#define R_NIOS2_LO16 10 -#define R_NIOS2_HIADJ16 11 -#define R_NIOS2_BFD_RELOC_32 12 -#define R_NIOS2_BFD_RELOC_16 13 -#define R_NIOS2_BFD_RELOC_8 14 -#define R_NIOS2_GPREL 15 -#define R_NIOS2_GNU_VTINHERIT 16 -#define R_NIOS2_GNU_VTENTRY 17 -#define R_NIOS2_UJMP 18 -#define R_NIOS2_CJMP 19 -#define R_NIOS2_CALLR 20 -#define R_NIOS2_ALIGN 21 -#define R_NIOS2_GOT16 22 -#define R_NIOS2_CALL16 23 -#define R_NIOS2_GOTOFF_LO 24 -#define R_NIOS2_GOTOFF_HA 25 -#define R_NIOS2_PCREL_LO 26 -#define R_NIOS2_PCREL_HA 27 -#define R_NIOS2_TLS_GD16 28 -#define R_NIOS2_TLS_LDM16 29 -#define R_NIOS2_TLS_LDO16 30 -#define R_NIOS2_TLS_IE16 31 -#define R_NIOS2_TLS_LE16 32 -#define R_NIOS2_TLS_DTPMOD 33 -#define R_NIOS2_TLS_DTPREL 34 -#define R_NIOS2_TLS_TPREL 35 -#define R_NIOS2_COPY 36 -#define R_NIOS2_GLOB_DAT 37 -#define R_NIOS2_JUMP_SLOT 38 -#define R_NIOS2_RELATIVE 39 -#define R_NIOS2_GOTOFF 40 -#define R_NIOS2_CALL26_NOAT 41 -#define R_NIOS2_GOT_LO 42 -#define R_NIOS2_GOT_HA 43 -#define R_NIOS2_CALL_LO 44 -#define R_NIOS2_CALL_HA 45 - -#define R_OR1K_NONE 0 -#define R_OR1K_32 1 -#define R_OR1K_16 2 -#define R_OR1K_8 3 -#define R_OR1K_LO_16_IN_INSN 4 -#define R_OR1K_HI_16_IN_INSN 5 -#define R_OR1K_INSN_REL_26 6 -#define R_OR1K_GNU_VTENTRY 7 -#define R_OR1K_GNU_VTINHERIT 8 -#define R_OR1K_32_PCREL 9 -#define R_OR1K_16_PCREL 10 -#define R_OR1K_8_PCREL 11 -#define R_OR1K_GOTPC_HI16 12 -#define R_OR1K_GOTPC_LO16 13 -#define R_OR1K_GOT16 14 -#define R_OR1K_PLT26 15 -#define R_OR1K_GOTOFF_HI16 16 -#define R_OR1K_GOTOFF_LO16 17 -#define R_OR1K_COPY 18 -#define R_OR1K_GLOB_DAT 19 -#define R_OR1K_JMP_SLOT 20 -#define R_OR1K_RELATIVE 21 -#define R_OR1K_TLS_GD_HI16 22 -#define R_OR1K_TLS_GD_LO16 23 -#define R_OR1K_TLS_LDM_HI16 24 -#define R_OR1K_TLS_LDM_LO16 25 -#define R_OR1K_TLS_LDO_HI16 26 -#define R_OR1K_TLS_LDO_LO16 27 -#define R_OR1K_TLS_IE_HI16 28 -#define R_OR1K_TLS_IE_LO16 29 -#define R_OR1K_TLS_LE_HI16 30 -#define R_OR1K_TLS_LE_LO16 31 -#define R_OR1K_TLS_TPOFF 32 -#define R_OR1K_TLS_DTPOFF 33 -#define R_OR1K_TLS_DTPMOD 34 - -#define R_BPF_NONE 0 -#define R_BPF_MAP_FD 1 - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/libc/xtensa-lx106-elf/include/envlock.h b/libc/xtensa-lx106-elf/include/envlock.h index 799cf7f..9bb6a81 100644 --- a/libc/xtensa-lx106-elf/include/envlock.h +++ b/libc/xtensa-lx106-elf/include/envlock.h @@ -9,7 +9,7 @@ #define ENV_LOCK __env_lock(reent_ptr) #define ENV_UNLOCK __env_unlock(reent_ptr) -void __env_lock (struct _reent *reent); -void __env_unlock (struct _reent *reent); +void _EXFUN(__env_lock,(struct _reent *reent)); +void _EXFUN(__env_unlock,(struct _reent *reent)); #endif /* _INCLUDE_ENVLOCK_H_ */ diff --git a/libc/xtensa-lx106-elf/include/fnmatch.h b/libc/xtensa-lx106-elf/include/fnmatch.h index a94e923..06311fc 100644 --- a/libc/xtensa-lx106-elf/include/fnmatch.h +++ b/libc/xtensa-lx106-elf/include/fnmatch.h @@ -33,21 +33,21 @@ #ifndef _FNMATCH_H_ #define _FNMATCH_H_ -#include - #define FNM_NOMATCH 1 /* Match failed. */ #define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */ #define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */ #define FNM_PERIOD 0x04 /* Period must be matched by period. */ -#if __GNU_VISIBLE +#if defined(_GNU_SOURCE) || !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) #define FNM_LEADING_DIR 0x08 /* Ignore / after Imatch. */ #define FNM_CASEFOLD 0x10 /* Case insensitive search. */ #define FNM_IGNORECASE FNM_CASEFOLD #define FNM_FILE_NAME FNM_PATHNAME #endif +#include + __BEGIN_DECLS int fnmatch(const char *, const char *, int); __END_DECLS diff --git a/libc/xtensa-lx106-elf/include/getopt.h b/libc/xtensa-lx106-elf/include/getopt.h index 9bced42..e12d253 100644 --- a/libc/xtensa-lx106-elf/include/getopt.h +++ b/libc/xtensa-lx106-elf/include/getopt.h @@ -153,25 +153,31 @@ extern "C" extern int optopt; /* function prototypes */ - int getopt (int __argc, char *const __argv[], const char *__optstring); + int _EXFUN (getopt, + (int __argc, char *const __argv[], const char *__optstring)); - int getopt_long (int __argc, char *const __argv[], const char *__shortopts, - const struct option * __longopts, int *__longind); + int _EXFUN (getopt_long, + (int __argc, char *const __argv[], const char *__shortopts, + const struct option * __longopts, int *__longind)); - int getopt_long_only (int __argc, char *const __argv[], const char *__shortopts, - const struct option * __longopts, int *__longind); + int _EXFUN (getopt_long_only, + (int __argc, char *const __argv[], const char *__shortopts, + const struct option * __longopts, int *__longind)); #ifdef __need_getopt_newlib - int __getopt_r (int __argc, char *const __argv[], const char *__optstring, - struct getopt_data * __data); + int _EXFUN (__getopt_r, + (int __argc, char *const __argv[], const char *__optstring, + struct getopt_data * __data)); - int __getopt_long_r (int __argc, char *const __argv[], const char *__shortopts, + int _EXFUN (__getopt_long_r, + (int __argc, char *const __argv[], const char *__shortopts, const struct option * __longopts, int *__longind, - struct getopt_data * __data); + struct getopt_data * __data)); - int __getopt_long_only_r (int __argc, char *const __argv[], const char *__shortopts, + int _EXFUN (__getopt_long_only_r, + (int __argc, char *const __argv[], const char *__shortopts, const struct option * __longopts, int *__longind, - struct getopt_data * __data); + struct getopt_data * __data)); #endif /* __need_getopt_newlib */ #ifdef __cplusplus diff --git a/libc/xtensa-lx106-elf/include/grp.h b/libc/xtensa-lx106-elf/include/grp.h index 6a26564..c3a5a67 100644 --- a/libc/xtensa-lx106-elf/include/grp.h +++ b/libc/xtensa-lx106-elf/include/grp.h @@ -49,7 +49,7 @@ #include #endif -#if __BSD_VISIBLE +#if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) #define _PATH_GROUP "/etc/group" #endif @@ -67,20 +67,25 @@ extern "C" { #ifndef __INSIDE_CYGWIN__ struct group *getgrgid (gid_t); struct group *getgrnam (const char *); -#if __MISC_VISIBLE || __POSIX_VISIBLE int getgrnam_r (const char *, struct group *, char *, size_t, struct group **); int getgrgid_r (gid_t, struct group *, char *, size_t, struct group **); -#endif /* __MISC_VISIBLE || __POSIX_VISIBLE */ -#if __MISC_VISIBLE || __XSI_VISIBLE >= 4 +#ifndef _POSIX_SOURCE struct group *getgrent (void); void setgrent (void); void endgrent (void); -#endif /* __MISC_VISIBLE || __XSI_VISIBLE >= 4 */ -#if __BSD_VISIBLE +#ifndef __CYGWIN__ +void setgrfile (const char *); +#endif /* !__CYGWIN__ */ +#ifndef _XOPEN_SOURCE +#ifndef __CYGWIN__ +char *group_from_gid (gid_t, int); +int setgroupent (int); +#endif /* !__CYGWIN__ */ int initgroups (const char *, gid_t); -#endif /* __BSD_VISIBLE */ +#endif /* !_XOPEN_SOURCE */ +#endif /* !_POSIX_SOURCE */ #endif /* !__INSIDE_CYGWIN__ */ #ifdef __cplusplus diff --git a/libc/xtensa-lx106-elf/include/iconv.h b/libc/xtensa-lx106-elf/include/iconv.h index 37feb88..4c023e9 100644 --- a/libc/xtensa-lx106-elf/include/iconv.h +++ b/libc/xtensa-lx106-elf/include/iconv.h @@ -38,25 +38,25 @@ _BEGIN_STD_C #ifndef _REENT_ONLY iconv_t -iconv_open (const char *, const char *); +_EXFUN(iconv_open, (_CONST char *, _CONST char *)); size_t -iconv (iconv_t, char **__restrict, size_t *__restrict, - char **__restrict, size_t *__restrict); +_EXFUN(iconv, (iconv_t, char **__restrict, size_t *__restrict, + char **__restrict, size_t *__restrict)); int -iconv_close (iconv_t); +_EXFUN(iconv_close, (iconv_t)); #endif iconv_t -_iconv_open_r (struct _reent *, const char *, const char *); +_EXFUN(_iconv_open_r, (struct _reent *, _CONST char *, _CONST char *)); size_t -_iconv_r (struct _reent *, iconv_t, const char **, - size_t *, char **, size_t *); +_EXFUN(_iconv_r, (struct _reent *, iconv_t, _CONST char **, + size_t *, char **, size_t *)); int -_iconv_close_r (struct _reent *, iconv_t); +_EXFUN(_iconv_close_r, (struct _reent *, iconv_t)); _END_STD_C diff --git a/libc/xtensa-lx106-elf/include/ieeefp.h b/libc/xtensa-lx106-elf/include/ieeefp.h index 2d6421a..0b06fb7 100644 --- a/libc/xtensa-lx106-elf/include/ieeefp.h +++ b/libc/xtensa-lx106-elf/include/ieeefp.h @@ -4,12 +4,11 @@ #include "_ansi.h" #include -#include _BEGIN_STD_C /* FIXME FIXME FIXME: - Neither of __ieee_{float,double}_shape_type seem to be used anywhere + Neither of __ieee_{float,double}_shape_tape seem to be used anywhere except in libm/test. If that is the case, please delete these from here. If that is not the case, please insert documentation here describing why they're needed. */ @@ -47,7 +46,9 @@ typedef union long aslong[2]; } __ieee_double_shape_type; -#elif defined __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __IEEE_LITTLE_ENDIAN typedef union { @@ -91,7 +92,7 @@ typedef union } __ieee_double_shape_type; -#endif /* __IEEE_LITTLE_ENDIAN */ +#endif #ifdef __IEEE_BIG_ENDIAN @@ -117,7 +118,9 @@ typedef union } __ieee_float_shape_type; -#elif defined __IEEE_LITTLE_ENDIAN +#endif + +#ifdef __IEEE_LITTLE_ENDIAN typedef union { @@ -141,70 +144,10 @@ typedef union } __ieee_float_shape_type; -#endif /* __IEEE_LITTLE_ENDIAN */ - -#ifndef _LDBL_EQ_DBL - -#ifndef LDBL_MANT_DIG -#error "LDBL_MANT_DIG not defined - should be found in float.h" - -#elif LDBL_MANT_DIG == DBL_MANT_DIG -#error "double and long double are the same size but LDBL_EQ_DBL is not defined" - -#elif LDBL_MANT_DIG == 53 -/* This happens when doubles are 32-bits and long doubles are 64-bits. */ -#define EXT_EXPBITS 11 -#define EXT_FRACHBITS 20 -#define EXT_FRACLBITS 32 -#define __ieee_ext_field_type unsigned long - -#elif LDBL_MANT_DIG == 64 -#define EXT_EXPBITS 15 -#define EXT_FRACHBITS 32 -#define EXT_FRACLBITS 32 -#define __ieee_ext_field_type unsigned int - -#elif LDBL_MANT_DIG == 65 -#define EXT_EXPBITS 15 -#define EXT_FRACHBITS 32 -#define EXT_FRACLBITS 32 -#define __ieee_ext_field_type unsigned int - -#elif LDBL_MANT_DIG == 112 -#define EXT_EXPBITS 15 -#define EXT_FRACHBITS 48 -#define EXT_FRACLBITS 64 -#define __ieee_ext_field_type unsigned long long - -#elif LDBL_MANT_DIG == 113 -#define EXT_EXPBITS 15 -#define EXT_FRACHBITS 48 -#define EXT_FRACLBITS 64 -#define __ieee_ext_field_type unsigned long long - -#else -#error Unsupported value for LDBL_MANT_DIG #endif -#define EXT_EXP_INFNAN ((1 << EXT_EXPBITS) - 1) /* 32767 */ -#define EXT_EXP_BIAS ((1 << (EXT_EXPBITS - 1)) - 1) /* 16383 */ -#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS) -typedef struct ieee_ext -{ - __ieee_ext_field_type ext_fracl : EXT_FRACLBITS; - __ieee_ext_field_type ext_frach : EXT_FRACHBITS; - __ieee_ext_field_type ext_exp : EXT_EXPBITS; - __ieee_ext_field_type ext_sign : 1; -} ieee_ext; -typedef union ieee_ext_u -{ - long double extu_ld; - struct ieee_ext extu_ext; -} ieee_ext_u; - -#endif /* ! _LDBL_EQ_DBL */ /* FLOATING ROUNDING */ @@ -215,8 +158,8 @@ typedef int fp_rnd; #define FP_RP 2 /* Round up */ #define FP_RZ 3 /* Round to zero (trunate) */ -fp_rnd fpgetround (void); -fp_rnd fpsetround (fp_rnd); +fp_rnd _EXFUN(fpgetround,(void)); +fp_rnd _EXFUN(fpsetround, (fp_rnd)); /* EXCEPTIONS */ @@ -227,10 +170,10 @@ typedef int fp_except; #define FP_X_UFL 0x02 /* Underflow exception */ #define FP_X_IMP 0x01 /* imprecise exception */ -fp_except fpgetmask (void); -fp_except fpsetmask (fp_except); -fp_except fpgetsticky (void); -fp_except fpsetsticky (fp_except); +fp_except _EXFUN(fpgetmask,(void)); +fp_except _EXFUN(fpsetmask,(fp_except)); +fp_except _EXFUN(fpgetsticky,(void)); +fp_except _EXFUN(fpsetsticky, (fp_except)); /* INTEGER ROUNDING */ @@ -238,8 +181,21 @@ typedef int fp_rdi; #define FP_RDI_TOZ 0 /* Round to Zero */ #define FP_RDI_RD 1 /* Follow float mode */ -fp_rdi fpgetroundtoi (void); -fp_rdi fpsetroundtoi (fp_rdi); +fp_rdi _EXFUN(fpgetroundtoi,(void)); +fp_rdi _EXFUN(fpsetroundtoi,(fp_rdi)); + +#undef isnan +#undef isinf + +int _EXFUN(isnan, (double)); +int _EXFUN(isinf, (double)); +int _EXFUN(finite, (double)); + + + +int _EXFUN(isnanf, (float)); +int _EXFUN(isinff, (float)); +int _EXFUN(finitef, (float)); #define __IEEE_DBL_EXPBIAS 1023 #define __IEEE_FLT_EXPBIAS 127 @@ -257,17 +213,22 @@ fp_rdi fpsetroundtoi (fp_rdi); #define __IEEE_DBL_NAN_EXP 0x7ff #define __IEEE_FLT_NAN_EXP 0xff -#ifdef __ieeefp_isnanf +#ifndef __ieeefp_isnanf +#define __ieeefp_isnanf(x) (((*(long *)&(x) & 0x7f800000L)==0x7f800000L) && \ + ((*(long *)&(x) & 0x007fffffL)!=0000000000L)) +#endif #define isnanf(x) __ieeefp_isnanf(x) -#endif -#ifdef __ieeefp_isinff +#ifndef __ieeefp_isinff +#define __ieeefp_isinff(x) (((*(long *)&(x) & 0x7f800000L)==0x7f800000L) && \ + ((*(long *)&(x) & 0x007fffffL)==0000000000L)) +#endif #define isinff(x) __ieeefp_isinff(x) -#endif -#ifdef __ieeefp_finitef -#define finitef(x) __ieeefp_finitef(x) +#ifndef __ieeefp_finitef +#define __ieeefp_finitef(x) (((*(long *)&(x) & 0x7f800000L)!=0x7f800000L)) #endif +#define finitef(x) __ieeefp_finitef(x) #ifdef _DOUBLE_IS_32BITS #undef __IEEE_DBL_EXPBIAS diff --git a/libc/xtensa-lx106-elf/include/inttypes.h b/libc/xtensa-lx106-elf/include/inttypes.h index 694ba8f..39bf135 100644 --- a/libc/xtensa-lx106-elf/include/inttypes.h +++ b/libc/xtensa-lx106-elf/include/inttypes.h @@ -14,23 +14,15 @@ #define _INTTYPES_H #include -#include #include -#include "_ansi.h" #include #define __need_wchar_t #include -#if __BSD_VISIBLE -#include -#endif - #define __STRINGIFY(a) #a /* 8-bit types */ -#define __PRI8(x) __INT8 __STRINGIFY(x) -#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x) -#define __PRI8FAST(x) __FAST8 __STRINGIFY(x) +#define __PRI8(x) __STRINGIFY(x) /* NOTICE: scanning 8-bit types requires use of the hh specifier * which is only supported on newlib platforms that @@ -43,9 +35,7 @@ */ #if defined(_WANT_IO_C99_FORMATS) - #define __SCN8(x) __INT8 __STRINGIFY(x) - #define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x) - #define __SCN8FAST(x) __FAST8 __STRINGIFY(x) + #define __SCN8(x) __STRINGIFY(hh##x) #endif /* _WANT_IO_C99_FORMATS */ @@ -68,49 +58,45 @@ #endif /* _WANT_IO_C99_FORMATS */ -#define PRIdLEAST8 __PRI8LEAST(d) -#define PRIiLEAST8 __PRI8LEAST(i) -#define PRIoLEAST8 __PRI8LEAST(o) -#define PRIuLEAST8 __PRI8LEAST(u) -#define PRIxLEAST8 __PRI8LEAST(x) -#define PRIXLEAST8 __PRI8LEAST(X) +#define PRIdLEAST8 __PRI8(d) +#define PRIiLEAST8 __PRI8(i) +#define PRIoLEAST8 __PRI8(o) +#define PRIuLEAST8 __PRI8(u) +#define PRIxLEAST8 __PRI8(x) +#define PRIXLEAST8 __PRI8(X) /* Macros below are only enabled for a newlib built with C99 I/O format support. */ #if defined(_WANT_IO_C99_FORMATS) - #define SCNdLEAST8 __SCN8LEAST(d) - #define SCNiLEAST8 __SCN8LEAST(i) - #define SCNoLEAST8 __SCN8LEAST(o) - #define SCNuLEAST8 __SCN8LEAST(u) - #define SCNxLEAST8 __SCN8LEAST(x) + #define SCNdLEAST8 __SCN8(d) + #define SCNiLEAST8 __SCN8(i) + #define SCNoLEAST8 __SCN8(o) + #define SCNuLEAST8 __SCN8(u) + #define SCNxLEAST8 __SCN8(x) #endif /* _WANT_IO_C99_FORMATS */ -#define PRIdFAST8 __PRI8FAST(d) -#define PRIiFAST8 __PRI8FAST(i) -#define PRIoFAST8 __PRI8FAST(o) -#define PRIuFAST8 __PRI8FAST(u) -#define PRIxFAST8 __PRI8FAST(x) -#define PRIXFAST8 __PRI8FAST(X) +#define PRIdFAST8 __PRI8(d) +#define PRIiFAST8 __PRI8(i) +#define PRIoFAST8 __PRI8(o) +#define PRIuFAST8 __PRI8(u) +#define PRIxFAST8 __PRI8(x) +#define PRIXFAST8 __PRI8(X) /* Macros below are only enabled for a newlib built with C99 I/O format support. */ #if defined(_WANT_IO_C99_FORMATS) - #define SCNdFAST8 __SCN8FAST(d) - #define SCNiFAST8 __SCN8FAST(i) - #define SCNoFAST8 __SCN8FAST(o) - #define SCNuFAST8 __SCN8FAST(u) - #define SCNxFAST8 __SCN8FAST(x) + #define SCNdFAST8 __SCN8(d) + #define SCNiFAST8 __SCN8(i) + #define SCNoFAST8 __SCN8(o) + #define SCNuFAST8 __SCN8(u) + #define SCNxFAST8 __SCN8(x) #endif /* _WANT_IO_C99_FORMATS */ /* 16-bit types */ -#define __PRI16(x) __INT16 __STRINGIFY(x) -#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x) -#define __PRI16FAST(x) __FAST16 __STRINGIFY(x) -#define __SCN16(x) __INT16 __STRINGIFY(x) -#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x) -#define __SCN16FAST(x) __FAST16 __STRINGIFY(x) +#define __PRI16(x) __STRINGIFY(x) +#define __SCN16(x) __STRINGIFY(h##x) #define PRId16 __PRI16(d) @@ -127,40 +113,41 @@ #define SCNx16 __SCN16(x) -#define PRIdLEAST16 __PRI16LEAST(d) -#define PRIiLEAST16 __PRI16LEAST(i) -#define PRIoLEAST16 __PRI16LEAST(o) -#define PRIuLEAST16 __PRI16LEAST(u) -#define PRIxLEAST16 __PRI16LEAST(x) -#define PRIXLEAST16 __PRI16LEAST(X) +#define PRIdLEAST16 __PRI16(d) +#define PRIiLEAST16 __PRI16(i) +#define PRIoLEAST16 __PRI16(o) +#define PRIuLEAST16 __PRI16(u) +#define PRIxLEAST16 __PRI16(x) +#define PRIXLEAST16 __PRI16(X) -#define SCNdLEAST16 __SCN16LEAST(d) -#define SCNiLEAST16 __SCN16LEAST(i) -#define SCNoLEAST16 __SCN16LEAST(o) -#define SCNuLEAST16 __SCN16LEAST(u) -#define SCNxLEAST16 __SCN16LEAST(x) +#define SCNdLEAST16 __SCN16(d) +#define SCNiLEAST16 __SCN16(i) +#define SCNoLEAST16 __SCN16(o) +#define SCNuLEAST16 __SCN16(u) +#define SCNxLEAST16 __SCN16(x) -#define PRIdFAST16 __PRI16FAST(d) -#define PRIiFAST16 __PRI16FAST(i) -#define PRIoFAST16 __PRI16FAST(o) -#define PRIuFAST16 __PRI16FAST(u) -#define PRIxFAST16 __PRI16FAST(x) -#define PRIXFAST16 __PRI16FAST(X) +#define PRIdFAST16 __PRI16(d) +#define PRIiFAST16 __PRI16(i) +#define PRIoFAST16 __PRI16(o) +#define PRIuFAST16 __PRI16(u) +#define PRIxFAST16 __PRI16(x) +#define PRIXFAST16 __PRI16(X) -#define SCNdFAST16 __SCN16FAST(d) -#define SCNiFAST16 __SCN16FAST(i) -#define SCNoFAST16 __SCN16FAST(o) -#define SCNuFAST16 __SCN16FAST(u) -#define SCNxFAST16 __SCN16FAST(x) +#define SCNdFAST16 __SCN16(d) +#define SCNiFAST16 __SCN16(i) +#define SCNoFAST16 __SCN16(o) +#define SCNuFAST16 __SCN16(u) +#define SCNxFAST16 __SCN16(x) /* 32-bit types */ -#define __PRI32(x) __INT32 __STRINGIFY(x) -#define __SCN32(x) __INT32 __STRINGIFY(x) -#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x) -#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x) -#define __PRI32FAST(x) __FAST32 __STRINGIFY(x) -#define __SCN32FAST(x) __FAST32 __STRINGIFY(x) +#if __have_long32 +#define __PRI32(x) __STRINGIFY(l##x) +#define __SCN32(x) __STRINGIFY(l##x) +#else +#define __PRI32(x) __STRINGIFY(x) +#define __SCN32(x) __STRINGIFY(x) +#endif #define PRId32 __PRI32(d) #define PRIi32 __PRI32(i) @@ -176,44 +163,46 @@ #define SCNx32 __SCN32(x) -#define PRIdLEAST32 __PRI32LEAST(d) -#define PRIiLEAST32 __PRI32LEAST(i) -#define PRIoLEAST32 __PRI32LEAST(o) -#define PRIuLEAST32 __PRI32LEAST(u) -#define PRIxLEAST32 __PRI32LEAST(x) -#define PRIXLEAST32 __PRI32LEAST(X) +#define PRIdLEAST32 __PRI32(d) +#define PRIiLEAST32 __PRI32(i) +#define PRIoLEAST32 __PRI32(o) +#define PRIuLEAST32 __PRI32(u) +#define PRIxLEAST32 __PRI32(x) +#define PRIXLEAST32 __PRI32(X) -#define SCNdLEAST32 __SCN32LEAST(d) -#define SCNiLEAST32 __SCN32LEAST(i) -#define SCNoLEAST32 __SCN32LEAST(o) -#define SCNuLEAST32 __SCN32LEAST(u) -#define SCNxLEAST32 __SCN32LEAST(x) +#define SCNdLEAST32 __SCN32(d) +#define SCNiLEAST32 __SCN32(i) +#define SCNoLEAST32 __SCN32(o) +#define SCNuLEAST32 __SCN32(u) +#define SCNxLEAST32 __SCN32(x) -#define PRIdFAST32 __PRI32FAST(d) -#define PRIiFAST32 __PRI32FAST(i) -#define PRIoFAST32 __PRI32FAST(o) -#define PRIuFAST32 __PRI32FAST(u) -#define PRIxFAST32 __PRI32FAST(x) -#define PRIXFAST32 __PRI32FAST(X) +#define PRIdFAST32 __PRI32(d) +#define PRIiFAST32 __PRI32(i) +#define PRIoFAST32 __PRI32(o) +#define PRIuFAST32 __PRI32(u) +#define PRIxFAST32 __PRI32(x) +#define PRIXFAST32 __PRI32(X) -#define SCNdFAST32 __SCN32FAST(d) -#define SCNiFAST32 __SCN32FAST(i) -#define SCNoFAST32 __SCN32FAST(o) -#define SCNuFAST32 __SCN32FAST(u) -#define SCNxFAST32 __SCN32FAST(x) +#define SCNdFAST32 __SCN32(d) +#define SCNiFAST32 __SCN32(i) +#define SCNoFAST32 __SCN32(o) +#define SCNuFAST32 __SCN32(u) +#define SCNxFAST32 __SCN32(x) /* 64-bit types */ -#define __PRI64(x) __INT64 __STRINGIFY(x) -#define __SCN64(x) __INT64 __STRINGIFY(x) +#if __have_long64 +#define __PRI64(x) __STRINGIFY(l##x) +#define __SCN64(x) __STRINGIFY(l##x) +#elif __have_longlong64 +#define __PRI64(x) __STRINGIFY(ll##x) +#define __SCN64(x) __STRINGIFY(ll##x) +#else +#define __PRI64(x) __STRINGIFY(x) +#define __SCN64(x) __STRINGIFY(x) +#endif -#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x) -#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x) -#define __PRI64FAST(x) __FAST64 __STRINGIFY(x) -#define __SCN64FAST(x) __FAST64 __STRINGIFY(x) - -#if __int64_t_defined #define PRId64 __PRI64(d) #define PRIi64 __PRI64(i) #define PRIo64 __PRI64(o) @@ -226,36 +215,34 @@ #define SCNo64 __SCN64(o) #define SCNu64 __SCN64(u) #define SCNx64 __SCN64(x) -#endif -#if __int_least64_t_defined -#define PRIdLEAST64 __PRI64LEAST(d) -#define PRIiLEAST64 __PRI64LEAST(i) -#define PRIoLEAST64 __PRI64LEAST(o) -#define PRIuLEAST64 __PRI64LEAST(u) -#define PRIxLEAST64 __PRI64LEAST(x) -#define PRIXLEAST64 __PRI64LEAST(X) +#if __int64_t_defined +#define PRIdLEAST64 __PRI64(d) +#define PRIiLEAST64 __PRI64(i) +#define PRIoLEAST64 __PRI64(o) +#define PRIuLEAST64 __PRI64(u) +#define PRIxLEAST64 __PRI64(x) +#define PRIXLEAST64 __PRI64(X) -#define SCNdLEAST64 __SCN64LEAST(d) -#define SCNiLEAST64 __SCN64LEAST(i) -#define SCNoLEAST64 __SCN64LEAST(o) -#define SCNuLEAST64 __SCN64LEAST(u) -#define SCNxLEAST64 __SCN64LEAST(x) -#endif +#define SCNdLEAST64 __SCN64(d) +#define SCNiLEAST64 __SCN64(i) +#define SCNoLEAST64 __SCN64(o) +#define SCNuLEAST64 __SCN64(u) +#define SCNxLEAST64 __SCN64(x) -#if __int_fast64_t_defined -#define PRIdFAST64 __PRI64FAST(d) -#define PRIiFAST64 __PRI64FAST(i) -#define PRIoFAST64 __PRI64FAST(o) -#define PRIuFAST64 __PRI64FAST(u) -#define PRIxFAST64 __PRI64FAST(x) -#define PRIXFAST64 __PRI64FAST(X) -#define SCNdFAST64 __SCN64FAST(d) -#define SCNiFAST64 __SCN64FAST(i) -#define SCNoFAST64 __SCN64FAST(o) -#define SCNuFAST64 __SCN64FAST(u) -#define SCNxFAST64 __SCN64FAST(x) +#define PRIdFAST64 __PRI64(d) +#define PRIiFAST64 __PRI64(i) +#define PRIoFAST64 __PRI64(o) +#define PRIuFAST64 __PRI64(u) +#define PRIxFAST64 __PRI64(x) +#define PRIXFAST64 __PRI64(X) + +#define SCNdFAST64 __SCN64(d) +#define SCNiFAST64 __SCN64(i) +#define SCNoFAST64 __SCN64(o) +#define SCNuFAST64 __SCN64(u) +#define SCNxFAST64 __SCN64(x) #endif /* max-bit types */ @@ -284,10 +271,10 @@ #define SCNxMAX __SCNMAX(x) /* ptr types */ -#if defined (_INTPTR_EQ_LONGLONG) +#if defined(_UINTPTR_EQ_ULONGLONG) # define __PRIPTR(x) __STRINGIFY(ll##x) # define __SCNPTR(x) __STRINGIFY(ll##x) -#elif defined (_INTPTR_EQ_LONG) +#elif defined(_UINTPTR_EQ_ULONG) # define __PRIPTR(x) __STRINGIFY(l##x) # define __SCNPTR(x) __STRINGIFY(l##x) #else @@ -314,8 +301,6 @@ typedef struct { intmax_t rem; } imaxdiv_t; -struct _reent; - #ifdef __cplusplus extern "C" { #endif @@ -323,20 +308,9 @@ extern "C" { extern intmax_t imaxabs(intmax_t j); extern imaxdiv_t imaxdiv(intmax_t numer, intmax_t denomer); extern intmax_t strtoimax(const char *__restrict, char **__restrict, int); -extern intmax_t _strtoimax_r(struct _reent *, const char *__restrict, char **__restrict, int); extern uintmax_t strtoumax(const char *__restrict, char **__restrict, int); -extern uintmax_t _strtoumax_r(struct _reent *, const char *__restrict, char **__restrict, int); extern intmax_t wcstoimax(const wchar_t *__restrict, wchar_t **__restrict, int); -extern intmax_t _wcstoimax_r(struct _reent *, const wchar_t *__restrict, wchar_t **__restrict, int); extern uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int); -extern uintmax_t _wcstoumax_r(struct _reent *, const wchar_t *__restrict, wchar_t **__restrict, int); - -#if __BSD_VISIBLE -extern intmax_t strtoimax_l(const char *__restrict, char **_restrict, int, locale_t); -extern uintmax_t strtoumax_l(const char *__restrict, char **_restrict, int, locale_t); -extern intmax_t wcstoimax_l(const wchar_t *__restrict, wchar_t **_restrict, int, locale_t); -extern uintmax_t wcstoumax_l(const wchar_t *__restrict, wchar_t **_restrict, int, locale_t); -#endif #ifdef __cplusplus } diff --git a/libc/xtensa-lx106-elf/include/langinfo.h b/libc/xtensa-lx106-elf/include/langinfo.h index 458b925..9040ade 100644 --- a/libc/xtensa-lx106-elf/include/langinfo.h +++ b/libc/xtensa-lx106-elf/include/langinfo.h @@ -32,14 +32,8 @@ #include #include #include -#if __POSIX_VISIBLE >= 200809 -#include -#endif -#ifndef _NL_ITEM_DECLARED typedef int nl_item; -#define _NL_ITEM_DECLARED -#endif enum __nl_item { @@ -307,7 +301,7 @@ enum __nl_item _NL_COLLATE_CODESET, /* This MUST be the last entry since it's used to check for an array - index in nl_langinfo(). It also must not exceed _NL_LOCALE_NAME_BASE. */ + index in nl_langinfo(). */ _NL_LOCALE_EXTENDED_LAST_ENTRY #endif /* __HAVE_LOCALE_INFO_EXTENDED__ */ @@ -315,19 +309,8 @@ enum __nl_item }; -/* As an extension, nl_langinfo can retrive the name of a locale - category, with this mapping from setlocale() category (other than - LC_ALL) to nl_item. */ -#define _NL_LOCALE_NAME_BASE 100000 -#if __GNU_VISIBLE -#define NL_LOCALE_NAME(category) (_NL_LOCALE_NAME_BASE + (category)) -#endif - __BEGIN_DECLS -char *nl_langinfo (nl_item); -#if __POSIX_VISIBLE >= 200809 -char *nl_langinfo_l (nl_item, locale_t); -#endif +char *nl_langinfo(nl_item); __END_DECLS #endif /* !_LANGINFO_H_ */ diff --git a/libc/xtensa-lx106-elf/include/libgen.h b/libc/xtensa-lx106-elf/include/libgen.h index 414b5aa..abfab0e 100644 --- a/libc/xtensa-lx106-elf/include/libgen.h +++ b/libc/xtensa-lx106-elf/include/libgen.h @@ -6,28 +6,14 @@ #define _LIBGEN_H_ #include "_ansi.h" -#include #include #ifdef __cplusplus extern "C" { #endif -/* There are two common basename variants. If you do NOT #include - and you do - - #define _GNU_SOURCE - #include - - you get the GNU version. Otherwise you get the POSIX versionfor which you - should #include i for the function prototype. POSIX requires that - #undef basename will still let you invoke the underlying function. However, - this also implies that the POSIX version is used in this case. That's made - sure here. */ -#undef basename -#define basename __xpg_basename -char *basename (char *) __asm__(__ASMNAME("basename")); -char *dirname (char *); +char *_EXFUN(basename, (char *)); +char *_EXFUN(dirname, (char *)); #ifdef __cplusplus } diff --git a/libc/xtensa-lx106-elf/include/limits.h b/libc/xtensa-lx106-elf/include/limits.h index dd09c1c..190f1f7 100644 --- a/libc/xtensa-lx106-elf/include/limits.h +++ b/libc/xtensa-lx106-elf/include/limits.h @@ -2,7 +2,6 @@ # define _LIBC_LIMITS_H_ 1 #include -#include # ifdef _MB_LEN_MAX # define MB_LEN_MAX _MB_LEN_MAX @@ -97,7 +96,8 @@ # define __LONG_LONG_MAX__ 9223372036854775807LL # endif -# if __ISO_C_VISIBLE >= 1999 +# if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) /* Minimum and maximum values a `signed long long int' can hold. */ # undef LLONG_MIN # define LLONG_MIN (-LLONG_MAX-1) @@ -109,7 +109,7 @@ # define ULLONG_MAX (LLONG_MAX * 2ULL + 1) # endif -# if __GNU_VISIBLE +# if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__) /* Minimum and maximum values a `signed long long int' can hold. */ # undef LONG_LONG_MIN # define LONG_LONG_MIN (-LONG_LONG_MAX-1) diff --git a/libc/xtensa-lx106-elf/include/locale.h b/libc/xtensa-lx106-elf/include/locale.h index d11eb00..cbd658e 100644 --- a/libc/xtensa-lx106-elf/include/locale.h +++ b/libc/xtensa-lx106-elf/include/locale.h @@ -8,7 +8,6 @@ #define _LOCALE_H_ #include "_ansi.h" -#include #define __need_NULL #include @@ -21,22 +20,6 @@ #define LC_TIME 5 #define LC_MESSAGES 6 -#if __POSIX_VISIBLE >= 200809 || defined (_COMPILING_NEWLIB) - -#include - -#define LC_ALL_MASK (1 << LC_ALL) -#define LC_COLLATE_MASK (1 << LC_COLLATE) -#define LC_CTYPE_MASK (1 << LC_CTYPE) -#define LC_MONETARY_MASK (1 << LC_MONETARY) -#define LC_NUMERIC_MASK (1 << LC_NUMERIC) -#define LC_TIME_MASK (1 << LC_TIME) -#define LC_MESSAGES_MASK (1 << LC_MESSAGES) - -#define LC_GLOBAL_LOCALE ((struct __locale_t *) -1) - -#endif /* __POSIX_VISIBLE >= 200809 */ - _BEGIN_STD_C struct lconv @@ -67,29 +50,14 @@ struct lconv char int_p_sign_posn; }; -struct _reent; -char *_setlocale_r (struct _reent *, int, const char *); -struct lconv *_localeconv_r (struct _reent *); - -struct __locale_t *_newlocale_r (struct _reent *, int, const char *, - struct __locale_t *); -void _freelocale_r (struct _reent *, struct __locale_t *); -struct __locale_t *_duplocale_r (struct _reent *, struct __locale_t *); -struct __locale_t *_uselocale_r (struct _reent *, struct __locale_t *); - #ifndef _REENT_ONLY +char *_EXFUN(setlocale,(int category, const char *locale)); +struct lconv *_EXFUN(localeconv,(void)); +#endif -char *setlocale (int, const char *); -struct lconv *localeconv (void); - -#if __POSIX_VISIBLE >= 200809 -locale_t newlocale (int, const char *, locale_t); -void freelocale (locale_t); -locale_t duplocale (locale_t); -locale_t uselocale (locale_t); -#endif /* __POSIX_VISIBLE >= 200809 */ - -#endif /* _REENT_ONLY */ +struct _reent; +char *_EXFUN(_setlocale_r,(struct _reent *, int category, const char *locale)); +struct lconv *_EXFUN(_localeconv_r,(struct _reent *)); _END_STD_C diff --git a/libc/xtensa-lx106-elf/include/machine/_arc4random.h b/libc/xtensa-lx106-elf/include/machine/_arc4random.h deleted file mode 100644 index d7988a8..0000000 --- a/libc/xtensa-lx106-elf/include/machine/_arc4random.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2017 - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include - -__BEGIN_DECLS - -void _arc4random_getentropy_fail(void); - -#define _ARC4RANDOM_DATA - -#define _ARC4RANDOM_GETENTROPY_FAIL() _arc4random_getentropy_fail() - -#define _ARC4RANDOM_ALLOCATE(rsp, rsxp) \ - do { *rsp = malloc(sizeof(**rsp)); \ - *rsxp = malloc(sizeof(**rsxp)); } \ - while (0) - -__END_DECLS diff --git a/libc/xtensa-lx106-elf/include/machine/_default_types.h b/libc/xtensa-lx106-elf/include/machine/_default_types.h index 59552f5..03bdc52 100644 --- a/libc/xtensa-lx106-elf/include/machine/_default_types.h +++ b/libc/xtensa-lx106-elf/include/machine/_default_types.h @@ -46,9 +46,6 @@ typedef __int64_t __int_least64_t; typedef __uint64_t __uint_least64_t; #define ___int_least64_t_defined -typedef __int64_t __intmax_t; -typedef __uint64_t __uintmax_t; - typedef __INTPTR_TYPE__ __intptr_t; typedef __UINTPTR_TYPE__ __uintptr_t; diff --git a/libc/xtensa-lx106-elf/include/machine/_endian.h b/libc/xtensa-lx106-elf/include/machine/_endian.h deleted file mode 100644 index 92a14dc..0000000 --- a/libc/xtensa-lx106-elf/include/machine/_endian.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __MACHINE_ENDIAN_H__ -#error "must be included via " -#endif /* !__MACHINE_ENDIAN_H__ */ - -#include - -#ifdef __PPC__ -/* Get rid of GCC builtin defines on PowerPC */ -#ifdef _BIG_ENDIAN -#undef _BIG_ENDIAN -#endif -#ifdef _LITTLE_ENDIAN -#undef _LITTLE_ENDIAN -#endif -#endif /* __PPC__ */ - -#ifndef _LITTLE_ENDIAN -#define _LITTLE_ENDIAN 1234 -#endif - -#ifndef _BIG_ENDIAN -#define _BIG_ENDIAN 4321 -#endif - -#ifndef _PDP_ENDIAN -#define _PDP_ENDIAN 3412 -#endif - -#ifndef _BYTE_ORDER -#if defined(__IEEE_LITTLE_ENDIAN) || defined(__IEEE_BYTES_LITTLE_ENDIAN) -#define _BYTE_ORDER _LITTLE_ENDIAN -#else -#define _BYTE_ORDER _BIG_ENDIAN -#endif -#endif diff --git a/libc/xtensa-lx106-elf/include/machine/_time.h b/libc/xtensa-lx106-elf/include/machine/_time.h deleted file mode 100644 index 476760c..0000000 --- a/libc/xtensa-lx106-elf/include/machine/_time.h +++ /dev/null @@ -1,3 +0,0 @@ -#ifndef _SYS_TIME_H_ -#error "must be included via " -#endif /* !_SYS_TIME_H_ */ diff --git a/libc/xtensa-lx106-elf/include/machine/endian.h b/libc/xtensa-lx106-elf/include/machine/endian.h index 34a5726..07ebc8f 100644 --- a/libc/xtensa-lx106-elf/include/machine/endian.h +++ b/libc/xtensa-lx106-elf/include/machine/endian.h @@ -1,69 +1,20 @@ #ifndef __MACHINE_ENDIAN_H__ -#define __MACHINE_ENDIAN_H__ -#include -#include -#include +#include -#if _BYTE_ORDER == _LITTLE_ENDIAN -#define _QUAD_HIGHWORD 1 -#define _QUAD_LOWWORD 0 +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BYTE_ORDER +#if defined(__IEEE_LITTLE_ENDIAN) || defined(__IEEE_BYTES_LITTLE_ENDIAN) +#define BYTE_ORDER LITTLE_ENDIAN #else -#define _QUAD_HIGHWORD 0 -#define _QUAD_LOWWORD 1 +#define BYTE_ORDER BIG_ENDIAN #endif - -#if __BSD_VISIBLE -#define LITTLE_ENDIAN _LITTLE_ENDIAN -#define BIG_ENDIAN _BIG_ENDIAN -#define PDP_ENDIAN _PDP_ENDIAN -#define BYTE_ORDER _BYTE_ORDER #endif -#ifdef __GNUC__ -#define __bswap16(_x) __builtin_bswap16(_x) -#define __bswap32(_x) __builtin_bswap32(_x) -#define __bswap64(_x) __builtin_bswap64(_x) -#else /* __GNUC__ */ -static __inline __uint16_t -__bswap16(__uint16_t _x) -{ - - return ((__uint16_t)((_x >> 8) | ((_x << 8) & 0xff00))); -} - -static __inline __uint32_t -__bswap32(__uint32_t _x) -{ - - return ((__uint32_t)((_x >> 24) | ((_x >> 8) & 0xff00) | - ((_x << 8) & 0xff0000) | ((_x << 24) & 0xff000000))); -} - -static __inline __uint64_t -__bswap64(__uint64_t _x) -{ - - return ((__uint64_t)((_x >> 56) | ((_x >> 40) & 0xff00) | - ((_x >> 24) & 0xff0000) | ((_x >> 8) & 0xff000000) | - ((_x << 8) & ((__uint64_t)0xff << 32)) | - ((_x << 24) & ((__uint64_t)0xff << 40)) | - ((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56)))); -} -#endif /* !__GNUC__ */ - -#ifndef __machine_host_to_from_network_defined -#if _BYTE_ORDER == _LITTLE_ENDIAN -#define __htonl(_x) __bswap32(_x) -#define __htons(_x) __bswap16(_x) -#define __ntohl(_x) __bswap32(_x) -#define __ntohs(_x) __bswap16(_x) -#else -#define __htonl(_x) ((__uint32_t)(_x)) -#define __htons(_x) ((__uint16_t)(_x)) -#define __ntohl(_x) ((__uint32_t)(_x)) -#define __ntohs(_x) ((__uint16_t)(_x)) -#endif -#endif /* __machine_host_to_from_network_defined */ - #endif /* __MACHINE_ENDIAN_H__ */ diff --git a/libc/xtensa-lx106-elf/include/machine/fastmath.h b/libc/xtensa-lx106-elf/include/machine/fastmath.h index d13ab3b..b13befa 100644 --- a/libc/xtensa-lx106-elf/include/machine/fastmath.h +++ b/libc/xtensa-lx106-elf/include/machine/fastmath.h @@ -46,6 +46,7 @@ double EXFUN(fast_loge,(double)); #define log2(x) fast_log2(x) #define loge(x) fast_loge(x) +#ifdef _HAVE_STDC /* These functions are in assembler, they really do take floats. This can only be used with a real ANSI compiler */ @@ -93,6 +94,7 @@ float EXFUN(fast_logef,(float)); #define log10f(x) fast_log10f(x) #define log2f(x) fast_log2f(x) #define logef(x) fast_logef(x) +#endif /* Override the functions defined in math.h */ #endif /* __sysvnecv70_target */ diff --git a/libc/xtensa-lx106-elf/include/machine/ieeefp.h b/libc/xtensa-lx106-elf/include/machine/ieeefp.h index 4780b1b..f11dc05 100644 --- a/libc/xtensa-lx106-elf/include/machine/ieeefp.h +++ b/libc/xtensa-lx106-elf/include/machine/ieeefp.h @@ -48,23 +48,6 @@ This represents what type a float arg is passed as. It is used when the type is not promoted to double. - - __OBSOLETE_MATH_DEFAULT - - Default value for __OBSOLETE_MATH if that's not set by the user. - It should be set here based on predefined feature macros. - - __OBSOLETE_MATH - - If set to 1 then some new math code will be disabled and older libm - code will be used instead. This is necessary because the new math - code does not support all targets, it assumes that the toolchain has - ISO C99 support (hexfloat literals, standard fenv semantics), the - target has IEEE-754 conforming binary32 float and binary64 double - (not mixed endian) representation, standard SNaN representation, - double and single precision arithmetics has similar latency and it - has no legacy SVID matherr support, only POSIX errno and fenv - exception based error handling. */ #if (defined(__arm__) || defined(__thumb__)) && !defined(__MAVERICK__) @@ -78,9 +61,6 @@ # else # define __IEEE_BIG_ENDIAN # endif -# if __ARM_FP & 0x8 -# define __OBSOLETE_MATH_DEFAULT 0 -# endif #else # define __IEEE_BIG_ENDIAN # ifdef __ARMEL__ @@ -95,7 +75,6 @@ #else #define __IEEE_BIG_ENDIAN #endif -#define __OBSOLETE_MATH_DEFAULT 0 #endif #ifdef __epiphany__ @@ -191,10 +170,6 @@ #define __IEEE_LITTLE_ENDIAN #endif -#ifdef __riscv -#define __IEEE_LITTLE_ENDIAN -#endif - #ifdef __i960__ #define __IEEE_LITTLE_ENDIAN #endif @@ -308,10 +283,6 @@ #define __IEEE_BIG_ENDIAN #endif -#ifdef __FT32__ -#define __IEEE_LITTLE_ENDIAN -#endif - #ifdef __mcore__ #define __IEEE_BIG_ENDIAN #endif @@ -444,10 +415,6 @@ # endif #endif -#ifdef __VISIUM__ -#define __IEEE_BIG_ENDIAN -#endif - #if (defined(__XTENSA__)) # ifdef __XTENSA_EB__ # define __IEEE_BIG_ENDIAN @@ -456,14 +423,6 @@ # endif #endif -#ifndef __OBSOLETE_MATH_DEFAULT -/* Use old math code by default. */ -#define __OBSOLETE_MATH_DEFAULT 1 -#endif -#ifndef __OBSOLETE_MATH -#define __OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT -#endif - #ifndef __IEEE_BIG_ENDIAN #ifndef __IEEE_LITTLE_ENDIAN #error Endianess not declared!! diff --git a/libc/xtensa-lx106-elf/include/machine/setjmp.h b/libc/xtensa-lx106-elf/include/machine/setjmp.h index 5366c4f..9f9d9e4 100644 --- a/libc/xtensa-lx106-elf/include/machine/setjmp.h +++ b/libc/xtensa-lx106-elf/include/machine/setjmp.h @@ -92,9 +92,6 @@ _BEGIN_STD_C # define _JBLEN (13 * 4) # elif defined(__unix__) || defined(__rtems__) # define _JBLEN 9 -# elif defined(__iamcu__) -/* Intel MCU jmp_buf only covers callee-saved registers. */ -# define _JBLEN 6 # else # include "setjmp-dj.h" # endif @@ -253,10 +250,6 @@ _BEGIN_STD_C #define _JBLEN 10 #endif -#ifdef __FT32__ -#define _JBLEN 27 -#endif - #ifdef __iq2000__ #define _JBLEN 32 #endif @@ -265,10 +258,6 @@ _BEGIN_STD_C #define _JBLEN 16 #endif -#ifdef __arc__ -#define _JBLEN 25 /* r13-r30,blink,lp_count,lp_start,lp_end,mlo,mhi,status32 */ -#endif - #ifdef __MMIX__ /* Using a layout compatible with GCC's built-in. */ #define _JBLEN 5 @@ -325,10 +314,6 @@ _BEGIN_STD_C #define _JBLEN 18 #endif -#ifdef __ia64 -#define _JBLEN 64 -#endif - #ifdef __lm32__ #define _JBLEN 19 #endif @@ -380,22 +365,6 @@ _BEGIN_STD_C #define _JBLEN 0x44 #endif -#ifdef __VISIUM__ -/* All call-saved GP registers: r11-r19,r21,r22,r23. */ -#define _JBLEN 12 -#endif - -#ifdef __riscv -/* _JBTYPE using long long to make sure the alignment is align to 8 byte, - otherwise in rv32imafd, store/restore FPR may mis-align. */ -#define _JBTYPE long long -#ifdef __riscv_32e -#define _JBLEN ((4*sizeof(long))/sizeof(long)) -#else -#define _JBLEN ((14*sizeof(long) + 12*sizeof(double))/sizeof(long)) -#endif -#endif - #ifdef _JBLEN #ifdef _JBTYPE typedef _JBTYPE jmp_buf[_JBLEN]; @@ -406,7 +375,7 @@ typedef int jmp_buf[_JBLEN]; _END_STD_C -#if (defined(__CYGWIN__) || defined(__rtems__)) && __POSIX_VISIBLE +#if defined(__CYGWIN__) || defined(__rtems__) #include #ifdef __cplusplus @@ -434,13 +403,6 @@ typedef int sigjmp_buf[_JBLEN+1+(sizeof (sigset_t)/sizeof (int))]; #define __SIGMASK_FUNC sigprocmask #endif -#ifdef __CYGWIN__ -/* Per POSIX, siglongjmp has to be implemented as function. Cygwin - provides functions for both, siglongjmp and sigsetjmp since 2.2.0. */ -extern void siglongjmp (sigjmp_buf, int) __attribute__ ((__noreturn__)); -extern int sigsetjmp (sigjmp_buf, int); -#endif - #if defined(__GNUC__) #define sigsetjmp(env, savemask) \ @@ -478,8 +440,8 @@ extern int sigsetjmp (sigjmp_buf, int); are equivalent to sigsetjmp/siglongjmp when not saving the signal mask. New applications should use sigsetjmp/siglongjmp instead. */ #ifdef __CYGWIN__ -extern void _longjmp (jmp_buf, int) __attribute__ ((__noreturn__)); -extern int _setjmp (jmp_buf); +extern void _longjmp(jmp_buf, int); +extern int _setjmp(jmp_buf); #else #define _setjmp(env) sigsetjmp ((env), 0) #define _longjmp(env, val) siglongjmp ((env), (val)) @@ -488,4 +450,4 @@ extern int _setjmp (jmp_buf); #ifdef __cplusplus } #endif -#endif /* (__CYGWIN__ or __rtems__) and __POSIX_VISIBLE */ +#endif /* __CYGWIN__ or __rtems__ */ diff --git a/libc/xtensa-lx106-elf/include/machine/time.h b/libc/xtensa-lx106-elf/include/machine/time.h index c75edaf..06e2ccf 100644 --- a/libc/xtensa-lx106-elf/include/machine/time.h +++ b/libc/xtensa-lx106-elf/include/machine/time.h @@ -1,15 +1,19 @@ #ifndef _MACHTIME_H_ #define _MACHTIME_H_ -#if defined(__rtems__) || defined(__VISIUM__) || defined(__riscv) -#define _CLOCKS_PER_SEC_ 1000000 -#elif defined(__aarch64__) || defined(__arm__) || defined(__thumb__) +#if defined(__rtems__) +#define _CLOCKS_PER_SEC_ sysconf(_SC_CLK_TCK) +#else /* !__rtems__ */ +#if defined(__aarch64__) || defined(__arm__) || defined(__thumb__) #define _CLOCKS_PER_SEC_ 100 #endif +#endif /* !__rtems__ */ #ifdef __SPU__ -#include +#include int nanosleep (const struct timespec *, struct timespec *); #endif #endif /* _MACHTIME_H_ */ + + diff --git a/libc/xtensa-lx106-elf/include/machine/types.h b/libc/xtensa-lx106-elf/include/machine/types.h index a5a64e6..40a75fa 100644 --- a/libc/xtensa-lx106-elf/include/machine/types.h +++ b/libc/xtensa-lx106-elf/include/machine/types.h @@ -1,7 +1,30 @@ +#ifndef _MACHTYPES_H_ +#define _MACHTYPES_H_ + /* - * Newlib targets may provide an own version of this file in their machine - * directory to add custom user types for . + * The following section is RTEMS specific and is needed to more + * closely match the types defined in the BSD machine/types.h. + * This is needed to let the RTEMS/BSD TCP/IP stack compile. */ -#ifndef _SYS_TYPES_H -#error "must be included via " -#endif /* !_SYS_TYPES_H */ +#if defined(__rtems__) +#include +#endif + +#define _CLOCK_T_ unsigned long /* clock() */ +#define _TIME_T_ long /* time() */ +#define _CLOCKID_T_ unsigned long +#define _TIMER_T_ unsigned long + +#ifndef _HAVE_SYSTYPES +typedef long int __off_t; +typedef int __pid_t; +#ifdef __GNUC__ +__extension__ typedef long long int __loff_t; +#else +typedef long int __loff_t; +#endif +#endif + +#endif /* _MACHTYPES_H_ */ + + diff --git a/libc/xtensa-lx106-elf/include/malloc.h b/libc/xtensa-lx106-elf/include/malloc.h index a9dc5bc..41b5efd 100644 --- a/libc/xtensa-lx106-elf/include/malloc.h +++ b/libc/xtensa-lx106-elf/include/malloc.h @@ -34,117 +34,113 @@ struct mallinfo { /* The routines. */ -extern void *malloc (size_t); +extern _PTR malloc _PARAMS ((size_t)); #ifdef __CYGWIN__ #undef _malloc_r #define _malloc_r(r, s) malloc (s) #else -extern void *_malloc_r (struct _reent *, size_t); +extern _PTR _malloc_r _PARAMS ((struct _reent *, size_t)); #endif -extern void free (void *); +extern _VOID free _PARAMS ((_PTR)); #ifdef __CYGWIN__ #undef _free_r #define _free_r(r, p) free (p) #else -extern void _free_r (struct _reent *, void *); +extern _VOID _free_r _PARAMS ((struct _reent *, _PTR)); #endif -extern void *realloc (void *, size_t); +extern _PTR realloc _PARAMS ((_PTR, size_t)); #ifdef __CYGWIN__ #undef _realloc_r #define _realloc_r(r, p, s) realloc (p, s) #else -extern void *_realloc_r (struct _reent *, void *, size_t); +extern _PTR _realloc_r _PARAMS ((struct _reent *, _PTR, size_t)); #endif -extern void *calloc (size_t, size_t); +extern _PTR calloc _PARAMS ((size_t, size_t)); #ifdef __CYGWIN__ #undef _calloc_r #define _calloc_r(r, s1, s2) calloc (s1, s2); #else -extern void *_calloc_r (struct _reent *, size_t, size_t); +extern _PTR _calloc_r _PARAMS ((struct _reent *, size_t, size_t)); #endif -extern void *memalign (size_t, size_t); +extern _PTR memalign _PARAMS ((size_t, size_t)); #ifdef __CYGWIN__ #undef _memalign_r #define _memalign_r(r, s1, s2) memalign (s1, s2); #else -extern void *_memalign_r (struct _reent *, size_t, size_t); +extern _PTR _memalign_r _PARAMS ((struct _reent *, size_t, size_t)); #endif -extern struct mallinfo mallinfo (void); +extern struct mallinfo mallinfo _PARAMS ((void)); #ifdef __CYGWIN__ #undef _mallinfo_r #define _mallinfo_r(r) mallinfo () #else -extern struct mallinfo _mallinfo_r (struct _reent *); +extern struct mallinfo _mallinfo_r _PARAMS ((struct _reent *)); #endif -extern void malloc_stats (void); +extern void malloc_stats _PARAMS ((void)); #ifdef __CYGWIN__ #undef _malloc_stats_r #define _malloc_stats_r(r) malloc_stats () #else -extern void _malloc_stats_r (struct _reent *); +extern void _malloc_stats_r _PARAMS ((struct _reent *)); #endif -extern int mallopt (int, int); +extern int mallopt _PARAMS ((int, int)); #ifdef __CYGWIN__ #undef _mallopt_r #define _mallopt_r(i1, i2) mallopt (i1, i2) #else -extern int _mallopt_r (struct _reent *, int, int); +extern int _mallopt_r _PARAMS ((struct _reent *, int, int)); #endif -extern size_t malloc_usable_size (void *); +extern size_t malloc_usable_size _PARAMS ((_PTR)); #ifdef __CYGWIN__ #undef _malloc_usable_size_r #define _malloc_usable_size_r(r, p) malloc_usable_size (p) #else -extern size_t _malloc_usable_size_r (struct _reent *, void *); +extern size_t _malloc_usable_size_r _PARAMS ((struct _reent *, _PTR)); #endif /* These aren't too useful on an embedded system, but we define them anyhow. */ -extern void *valloc (size_t); +extern _PTR valloc _PARAMS ((size_t)); #ifdef __CYGWIN__ #undef _valloc_r #define _valloc_r(r, s) valloc (s) #else -extern void *_valloc_r (struct _reent *, size_t); +extern _PTR _valloc_r _PARAMS ((struct _reent *, size_t)); #endif -extern void *pvalloc (size_t); +extern _PTR pvalloc _PARAMS ((size_t)); #ifdef __CYGWIN__ #undef _pvalloc_r #define _pvalloc_r(r, s) pvalloc (s) #else -extern void *_pvalloc_r (struct _reent *, size_t); +extern _PTR _pvalloc_r _PARAMS ((struct _reent *, size_t)); #endif -extern int malloc_trim (size_t); +extern int malloc_trim _PARAMS ((size_t)); #ifdef __CYGWIN__ #undef _malloc_trim_r #define _malloc_trim_r(r, s) malloc_trim (s) #else -extern int _malloc_trim_r (struct _reent *, size_t); +extern int _malloc_trim_r _PARAMS ((struct _reent *, size_t)); #endif -extern void __malloc_lock(struct _reent *); - -extern void __malloc_unlock(struct _reent *); - /* A compatibility routine for an earlier version of the allocator. */ -extern void mstats (char *); +extern _VOID mstats _PARAMS ((char *)); #ifdef __CYGWIN__ #undef _mstats_r #define _mstats_r(r, p) mstats (p) #else -extern void _mstats_r (struct _reent *, char *); +extern _VOID _mstats_r _PARAMS ((struct _reent *, char *)); #endif /* SVID2/XPG mallopt options */ @@ -163,7 +159,7 @@ extern void _mstats_r (struct _reent *, char *); #ifndef __CYGWIN__ /* Some systems provide this, so do too for compatibility. */ -extern void cfree (void *); +extern void cfree _PARAMS ((_PTR)); #endif /* __CYGWIN__ */ #ifdef __cplusplus diff --git a/libc/xtensa-lx106-elf/include/math.h b/libc/xtensa-lx106-elf/include/math.h index 893a5d0..d16ce30 100644 --- a/libc/xtensa-lx106-elf/include/math.h +++ b/libc/xtensa-lx106-elf/include/math.h @@ -3,12 +3,34 @@ #define _MATH_H_ #include -#include #include #include "_ansi.h" _BEGIN_STD_C +/* __dmath, __fmath, and __ldmath are only here for backwards compatibility + * in case any code used them. They are no longer used by Newlib, itself, + * other than legacy. */ +union __dmath +{ + double d; + __ULong i[2]; +}; + +union __fmath +{ + float f; + __ULong i[1]; +}; + +#if defined(_HAVE_LONG_DOUBLE) +union __ldmath +{ + long double ld; + __ULong i[4]; +}; +#endif + /* Natural log of 2 */ #define _M_LN2 0.693147180559945309417 @@ -83,57 +105,40 @@ _BEGIN_STD_C /* Reentrant ANSI C functions. */ #ifndef __math_68881 -extern double atan (double); -extern double cos (double); -extern double sin (double); -extern double tan (double); -extern double tanh (double); -extern double frexp (double, int *); -extern double modf (double, double *); -extern double ceil (double); -extern double fabs (double); -extern double floor (double); +extern double atan _PARAMS((double)); +extern double cos _PARAMS((double)); +extern double sin _PARAMS((double)); +extern double tan _PARAMS((double)); +extern double tanh _PARAMS((double)); +extern double frexp _PARAMS((double, int *)); +extern double modf _PARAMS((double, double *)); +extern double ceil _PARAMS((double)); +extern double fabs _PARAMS((double)); +extern double floor _PARAMS((double)); #endif /* ! defined (__math_68881) */ /* Non reentrant ANSI C functions. */ #ifndef _REENT_ONLY #ifndef __math_68881 -extern double acos (double); -extern double asin (double); -extern double atan2 (double, double); -extern double cosh (double); -extern double sinh (double); -extern double exp (double); -extern double ldexp (double, int); -extern double log (double); -extern double log10 (double); -extern double pow (double, double); -extern double sqrt (double); -extern double fmod (double, double); +extern double acos _PARAMS((double)); +extern double asin _PARAMS((double)); +extern double atan2 _PARAMS((double, double)); +extern double cosh _PARAMS((double)); +extern double sinh _PARAMS((double)); +extern double exp _PARAMS((double)); +extern double ldexp _PARAMS((double, int)); +extern double log _PARAMS((double)); +extern double log10 _PARAMS((double)); +extern double pow _PARAMS((double, double)); +extern double sqrt _PARAMS((double)); +extern double fmod _PARAMS((double, double)); #endif /* ! defined (__math_68881) */ #endif /* ! defined (_REENT_ONLY) */ -#if __MISC_VISIBLE -extern int finite (double); -extern int finitef (float); -extern int finitel (long double); -extern int isinff (float); -extern int isnanf (float); -#ifdef __CYGWIN__ /* not implemented in newlib yet */ -extern int isinfl (long double); -extern int isnanl (long double); -#endif -#if !defined(__cplusplus) || __cplusplus < 201103L -extern int isinf (double); -#endif -#endif /* __MISC_VISIBLE */ -#if (__MISC_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 600)) \ - && (!defined(__cplusplus) || __cplusplus < 201103L) -extern int isnan (double); -#endif +#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) -#if __ISO_C_VISIBLE >= 1999 /* ISO C99 types and macros. */ /* FIXME: FLT_EVAL_METHOD should somehow be gotten from float.h (which is hard, @@ -175,10 +180,10 @@ extern int isnan (double); #define FP_NORMAL 4 #ifndef FP_ILOGB0 -# define FP_ILOGB0 (-__INT_MAX__) +# define FP_ILOGB0 (-INT_MAX) #endif #ifndef FP_ILOGBNAN -# define FP_ILOGBNAN __INT_MAX__ +# define FP_ILOGBNAN INT_MAX #endif #ifndef MATH_ERRNO @@ -200,70 +205,35 @@ extern int __fpclassifyd (double x); extern int __signbitf (float x); extern int __signbitd (double x); +#define fpclassify(__x) \ + ((sizeof(__x) == sizeof(float)) ? __fpclassifyf(__x) : \ + __fpclassifyd(__x)) + +#ifndef isfinite + #define isfinite(__y) \ + (__extension__ ({int __cy = fpclassify(__y); \ + __cy != FP_INFINITE && __cy != FP_NAN;})) +#endif + /* Note: isinf and isnan were once functions in newlib that took double * arguments. C99 specifies that these names are reserved for macros * supporting multiple floating point types. Thus, they are * now defined as macros. Implementations of the old functions * taking double arguments still exist for compatibility purposes - * (prototypes for them are earlier in this header). */ - -#if __GNUC_PREREQ (4, 4) - #define fpclassify(__x) (__builtin_fpclassify (FP_NAN, FP_INFINITE, \ - FP_NORMAL, FP_SUBNORMAL, \ - FP_ZERO, __x)) - #ifndef isfinite - #define isfinite(__x) (__builtin_isfinite (__x)) - #endif - #ifndef isinf - #define isinf(__x) (__builtin_isinf_sign (__x)) - #endif - #ifndef isnan - #define isnan(__x) (__builtin_isnan (__x)) - #endif - #define isnormal(__x) (__builtin_isnormal (__x)) -#else - #define fpclassify(__x) \ - ((sizeof(__x) == sizeof(float)) ? __fpclassifyf(__x) : \ - __fpclassifyd(__x)) - #ifndef isfinite - #define isfinite(__y) \ - (__extension__ ({int __cy = fpclassify(__y); \ - __cy != FP_INFINITE && __cy != FP_NAN;})) - #endif - #ifndef isinf - #define isinf(__x) (fpclassify(__x) == FP_INFINITE) - #endif - #ifndef isnan - #define isnan(__x) (fpclassify(__x) == FP_NAN) - #endif - #define isnormal(__x) (fpclassify(__x) == FP_NORMAL) + * (prototypes for them are in ). */ +#ifndef isinf + #define isinf(y) (fpclassify(y) == FP_INFINITE) #endif -#if __GNUC_PREREQ (4, 0) - #if defined(_HAVE_LONG_DOUBLE) - #define signbit(__x) \ - ((sizeof(__x) == sizeof(float)) ? __builtin_signbitf(__x) : \ - (sizeof(__x) == sizeof(double)) ? __builtin_signbit (__x) : \ - __builtin_signbitl(__x)) - #else - #define signbit(__x) \ - ((sizeof(__x) == sizeof(float)) ? __builtin_signbitf(__x) : \ - __builtin_signbit (__x)) - #endif -#else - #define signbit(__x) \ - ((sizeof(__x) == sizeof(float)) ? __signbitf(__x) : \ - __signbitd(__x)) +#ifndef isnan + #define isnan(y) (fpclassify(y) == FP_NAN) #endif -#if __GNUC_PREREQ (2, 97) -#define isgreater(__x,__y) (__builtin_isgreater (__x, __y)) -#define isgreaterequal(__x,__y) (__builtin_isgreaterequal (__x, __y)) -#define isless(__x,__y) (__builtin_isless (__x, __y)) -#define islessequal(__x,__y) (__builtin_islessequal (__x, __y)) -#define islessgreater(__x,__y) (__builtin_islessgreater (__x, __y)) -#define isunordered(__x,__y) (__builtin_isunordered (__x, __y)) -#else +#define isnormal(y) (fpclassify(y) == FP_NORMAL) +#define signbit(__x) \ + ((sizeof(__x) == sizeof(float)) ? __signbitf(__x) : \ + __signbitd(__x)) + #define isgreater(x,y) \ (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ !isunordered(__x,__y) && (__x > __y);})) @@ -283,292 +253,269 @@ extern int __signbitd (double x); #define isunordered(a,b) \ (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \ fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;})) -#endif /* Non ANSI double precision functions. */ -extern double infinity (void); -extern double nan (const char *); -extern double copysign (double, double); -extern double logb (double); -extern int ilogb (double); +extern double infinity _PARAMS((void)); +extern double nan _PARAMS((const char *)); +extern int finite _PARAMS((double)); +extern double copysign _PARAMS((double, double)); +extern double logb _PARAMS((double)); +extern int ilogb _PARAMS((double)); -extern double asinh (double); -extern double cbrt (double); -extern double nextafter (double, double); -extern double rint (double); -extern double scalbn (double, int); +extern double asinh _PARAMS((double)); +extern double cbrt _PARAMS((double)); +extern double nextafter _PARAMS((double, double)); +extern double rint _PARAMS((double)); +extern double scalbn _PARAMS((double, int)); -extern double exp2 (double); -extern double scalbln (double, long int); -extern double tgamma (double); -extern double nearbyint (double); -extern long int lrint (double); -extern long long int llrint (double); -extern double round (double); -extern long int lround (double); -extern long long int llround (double); -extern double trunc (double); -extern double remquo (double, double, int *); -extern double fdim (double, double); -extern double fmax (double, double); -extern double fmin (double, double); -extern double fma (double, double, double); +extern double exp2 _PARAMS((double)); +extern double scalbln _PARAMS((double, long int)); +extern double tgamma _PARAMS((double)); +extern double nearbyint _PARAMS((double)); +extern long int lrint _PARAMS((double)); +extern long long int llrint _PARAMS((double)); +extern double round _PARAMS((double)); +extern long int lround _PARAMS((double)); +extern long long int llround _PARAMS((double)); +extern double trunc _PARAMS((double)); +extern double remquo _PARAMS((double, double, int *)); +extern double fdim _PARAMS((double, double)); +extern double fmax _PARAMS((double, double)); +extern double fmin _PARAMS((double, double)); +extern double fma _PARAMS((double, double, double)); #ifndef __math_68881 -extern double log1p (double); -extern double expm1 (double); +extern double log1p _PARAMS((double)); +extern double expm1 _PARAMS((double)); #endif /* ! defined (__math_68881) */ #ifndef _REENT_ONLY -extern double acosh (double); -extern double atanh (double); -extern double remainder (double, double); -extern double gamma (double); -extern double lgamma (double); -extern double erf (double); -extern double erfc (double); -extern double log2 (double); +extern double acosh _PARAMS((double)); +extern double atanh _PARAMS((double)); +extern double remainder _PARAMS((double, double)); +extern double gamma _PARAMS((double)); +extern double lgamma _PARAMS((double)); +extern double erf _PARAMS((double)); +extern double erfc _PARAMS((double)); +extern double log2 _PARAMS((double)); #if !defined(__cplusplus) #define log2(x) (log (x) / _M_LN2) #endif #ifndef __math_68881 -extern double hypot (double, double); +extern double hypot _PARAMS((double, double)); #endif #endif /* ! defined (_REENT_ONLY) */ /* Single precision versions of ANSI functions. */ -extern float atanf (float); -extern float cosf (float); -extern float sinf (float); -extern float tanf (float); -extern float tanhf (float); -extern float frexpf (float, int *); -extern float modff (float, float *); -extern float ceilf (float); -extern float fabsf (float); -extern float floorf (float); +extern float atanf _PARAMS((float)); +extern float cosf _PARAMS((float)); +extern float sinf _PARAMS((float)); +extern float tanf _PARAMS((float)); +extern float tanhf _PARAMS((float)); +extern float frexpf _PARAMS((float, int *)); +extern float modff _PARAMS((float, float *)); +extern float ceilf _PARAMS((float)); +extern float fabsf _PARAMS((float)); +extern float floorf _PARAMS((float)); #ifndef _REENT_ONLY -extern float acosf (float); -extern float asinf (float); -extern float atan2f (float, float); -extern float coshf (float); -extern float sinhf (float); -extern float expf (float); -extern float ldexpf (float, int); -extern float logf (float); -extern float log10f (float); -extern float powf (float, float); -extern float sqrtf (float); -extern float fmodf (float, float); +extern float acosf _PARAMS((float)); +extern float asinf _PARAMS((float)); +extern float atan2f _PARAMS((float, float)); +extern float coshf _PARAMS((float)); +extern float sinhf _PARAMS((float)); +extern float expf _PARAMS((float)); +extern float ldexpf _PARAMS((float, int)); +extern float logf _PARAMS((float)); +extern float log10f _PARAMS((float)); +extern float powf _PARAMS((float, float)); +extern float sqrtf _PARAMS((float)); +extern float fmodf _PARAMS((float, float)); #endif /* ! defined (_REENT_ONLY) */ /* Other single precision functions. */ -extern float exp2f (float); -extern float scalblnf (float, long int); -extern float tgammaf (float); -extern float nearbyintf (float); -extern long int lrintf (float); -extern long long int llrintf (float); -extern float roundf (float); -extern long int lroundf (float); -extern long long int llroundf (float); -extern float truncf (float); -extern float remquof (float, float, int *); -extern float fdimf (float, float); -extern float fmaxf (float, float); -extern float fminf (float, float); -extern float fmaf (float, float, float); +extern float exp2f _PARAMS((float)); +extern float scalblnf _PARAMS((float, long int)); +extern float tgammaf _PARAMS((float)); +extern float nearbyintf _PARAMS((float)); +extern long int lrintf _PARAMS((float)); +extern long long int llrintf _PARAMS((float)); +extern float roundf _PARAMS((float)); +extern long int lroundf _PARAMS((float)); +extern long long int llroundf _PARAMS((float)); +extern float truncf _PARAMS((float)); +extern float remquof _PARAMS((float, float, int *)); +extern float fdimf _PARAMS((float, float)); +extern float fmaxf _PARAMS((float, float)); +extern float fminf _PARAMS((float, float)); +extern float fmaf _PARAMS((float, float, float)); -extern float infinityf (void); -extern float nanf (const char *); -extern float copysignf (float, float); -extern float logbf (float); -extern int ilogbf (float); +extern float infinityf _PARAMS((void)); +extern float nanf _PARAMS((const char *)); +extern int finitef _PARAMS((float)); +extern float copysignf _PARAMS((float, float)); +extern float logbf _PARAMS((float)); +extern int ilogbf _PARAMS((float)); -extern float asinhf (float); -extern float cbrtf (float); -extern float nextafterf (float, float); -extern float rintf (float); -extern float scalbnf (float, int); -extern float log1pf (float); -extern float expm1f (float); +extern float asinhf _PARAMS((float)); +extern float cbrtf _PARAMS((float)); +extern float nextafterf _PARAMS((float, float)); +extern float rintf _PARAMS((float)); +extern float scalbnf _PARAMS((float, int)); +extern float log1pf _PARAMS((float)); +extern float expm1f _PARAMS((float)); #ifndef _REENT_ONLY -extern float acoshf (float); -extern float atanhf (float); -extern float remainderf (float, float); -extern float gammaf (float); -extern float lgammaf (float); -extern float erff (float); -extern float erfcf (float); -extern float log2f (float); -extern float hypotf (float, float); +extern float acoshf _PARAMS((float)); +extern float atanhf _PARAMS((float)); +extern float remainderf _PARAMS((float, float)); +extern float gammaf _PARAMS((float)); +extern float lgammaf _PARAMS((float)); +extern float erff _PARAMS((float)); +extern float erfcf _PARAMS((float)); +extern float log2f _PARAMS((float)); +extern float hypotf _PARAMS((float, float)); #endif /* ! defined (_REENT_ONLY) */ -/* Newlib doesn't fully support long double math functions so far. - On platforms where long double equals double the long double functions - simply call the double functions. On Cygwin the long double functions - are implemented independently from newlib to be able to use optimized - assembler functions despite using the Microsoft x86_64 ABI. */ -#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__) +/* On platforms where long double equals double. */ +#ifdef _LDBL_EQ_DBL /* Reentrant ANSI C functions. */ #ifndef __math_68881 -extern long double atanl (long double); -extern long double cosl (long double); -extern long double sinl (long double); -extern long double tanl (long double); -extern long double tanhl (long double); -extern long double frexpl (long double, int *); -extern long double modfl (long double, long double *); -extern long double ceill (long double); -extern long double fabsl (long double); -extern long double floorl (long double); -extern long double log1pl (long double); -extern long double expm1l (long double); +extern long double atanl _PARAMS((long double)); +extern long double cosl _PARAMS((long double)); +extern long double sinl _PARAMS((long double)); +extern long double tanl _PARAMS((long double)); +extern long double tanhl _PARAMS((long double)); +extern long double frexpl _PARAMS((long double, int *)); +extern long double modfl _PARAMS((long double, long double *)); +extern long double ceill _PARAMS((long double)); +extern long double fabsl _PARAMS((long double)); +extern long double floorl _PARAMS((long double)); +extern long double log1pl _PARAMS((long double)); +extern long double expm1l _PARAMS((long double)); #endif /* ! defined (__math_68881) */ /* Non reentrant ANSI C functions. */ #ifndef _REENT_ONLY #ifndef __math_68881 -extern long double acosl (long double); -extern long double asinl (long double); -extern long double atan2l (long double, long double); -extern long double coshl (long double); -extern long double sinhl (long double); -extern long double expl (long double); -extern long double ldexpl (long double, int); -extern long double logl (long double); -extern long double log10l (long double); -extern long double powl (long double, long double); -extern long double sqrtl (long double); -extern long double fmodl (long double, long double); -extern long double hypotl (long double, long double); +extern long double acosl _PARAMS((long double)); +extern long double asinl _PARAMS((long double)); +extern long double atan2l _PARAMS((long double, long double)); +extern long double coshl _PARAMS((long double)); +extern long double sinhl _PARAMS((long double)); +extern long double expl _PARAMS((long double)); +extern long double ldexpl _PARAMS((long double, int)); +extern long double logl _PARAMS((long double)); +extern long double log10l _PARAMS((long double)); +extern long double powl _PARAMS((long double, long double)); +extern long double sqrtl _PARAMS((long double)); +extern long double fmodl _PARAMS((long double, long double)); +extern long double hypotl _PARAMS((long double, long double)); #endif /* ! defined (__math_68881) */ #endif /* ! defined (_REENT_ONLY) */ -extern long double copysignl (long double, long double); -extern long double nanl (const char *); -extern int ilogbl (long double); -extern long double asinhl (long double); -extern long double cbrtl (long double); -extern long double nextafterl (long double, long double); -extern float nexttowardf (float, long double); -extern double nexttoward (double, long double); -extern long double nexttowardl (long double, long double); -extern long double logbl (long double); -extern long double log2l (long double); -extern long double rintl (long double); -extern long double scalbnl (long double, int); -extern long double exp2l (long double); -extern long double scalblnl (long double, long); -extern long double tgammal (long double); -extern long double nearbyintl (long double); -extern long int lrintl (long double); -extern long long int llrintl (long double); -extern long double roundl (long double); -extern long lroundl (long double); -extern long long int llroundl (long double); -extern long double truncl (long double); -extern long double remquol (long double, long double, int *); -extern long double fdiml (long double, long double); -extern long double fmaxl (long double, long double); -extern long double fminl (long double, long double); -extern long double fmal (long double, long double, long double); +extern long double copysignl _PARAMS((long double, long double)); +extern long double nanl _PARAMS((const char *)); +extern int ilogbl _PARAMS((long double)); +extern long double asinhl _PARAMS((long double)); +extern long double cbrtl _PARAMS((long double)); +extern long double nextafterl _PARAMS((long double, long double)); +extern float nexttowardf _PARAMS((float, long double)); +extern double nexttoward _PARAMS((double, long double)); +extern long double nexttowardl _PARAMS((long double, long double)); +extern long double logbl _PARAMS((long double)); +extern long double log2l _PARAMS((long double)); +extern long double rintl _PARAMS((long double)); +extern long double scalbnl _PARAMS((long double, int)); +extern long double exp2l _PARAMS((long double)); +extern long double scalblnl _PARAMS((long double, long)); +extern long double tgammal _PARAMS((long double)); +extern long double nearbyintl _PARAMS((long double)); +extern long int lrintl _PARAMS((long double)); +extern long long int llrintl _PARAMS((long double)); +extern long double roundl _PARAMS((long double)); +extern long lroundl _PARAMS((long double)); +extern long long int llroundl _PARAMS((long double)); +extern long double truncl _PARAMS((long double)); +extern long double remquol _PARAMS((long double, long double, int *)); +extern long double fdiml _PARAMS((long double, long double)); +extern long double fmaxl _PARAMS((long double, long double)); +extern long double fminl _PARAMS((long double, long double)); +extern long double fmal _PARAMS((long double, long double, long double)); #ifndef _REENT_ONLY -extern long double acoshl (long double); -extern long double atanhl (long double); -extern long double remainderl (long double, long double); -extern long double lgammal (long double); -extern long double erfl (long double); -extern long double erfcl (long double); +extern long double acoshl _PARAMS((long double)); +extern long double atanhl _PARAMS((long double)); +extern long double remainderl _PARAMS((long double, long double)); +extern long double lgammal _PARAMS((long double)); +extern long double erfl _PARAMS((long double)); +extern long double erfcl _PARAMS((long double)); #endif /* ! defined (_REENT_ONLY) */ -#else /* !_LDBL_EQ_DBL && !__CYGWIN__ */ -extern long double hypotl (long double, long double); -extern long double sqrtl (long double); +#else /* !_LDBL_EQ_DBL */ #ifdef __i386__ /* Other long double precision functions. */ -extern _LONG_DOUBLE rintl (_LONG_DOUBLE); -extern long int lrintl (_LONG_DOUBLE); -extern long long int llrintl (_LONG_DOUBLE); +extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); +extern long int lrintl _PARAMS((_LONG_DOUBLE)); +extern long long int llrintl _PARAMS((_LONG_DOUBLE)); #endif /* __i386__ */ -#endif /* !_LDBL_EQ_DBL && !__CYGWIN__ */ +#endif /* !_LDBL_EQ_DBL */ -#endif /* __ISO_C_VISIBLE >= 1999 */ +#endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) */ -#if __MISC_VISIBLE -extern double drem (double, double); -extern float dremf (float, float); -#ifdef __CYGWIN__ -extern float dreml (long double, long double); -#endif /* __CYGWIN__ */ -extern double gamma_r (double, int *); -extern double lgamma_r (double, int *); -extern float gammaf_r (float, int *); -extern float lgammaf_r (float, int *); -#endif +#if !defined (__STRICT_ANSI__) || defined(__cplusplus) -#if __MISC_VISIBLE || __XSI_VISIBLE -extern double y0 (double); -extern double y1 (double); -extern double yn (int, double); -extern double j0 (double); -extern double j1 (double); -extern double jn (int, double); -#endif +extern double drem _PARAMS((double, double)); +extern void sincos _PARAMS((double, double *, double *)); +extern double gamma_r _PARAMS((double, int *)); +extern double lgamma_r _PARAMS((double, int *)); -#if __MISC_VISIBLE || __XSI_VISIBLE >= 600 -extern float y0f (float); -extern float y1f (float); -extern float ynf (int, float); -extern float j0f (float); -extern float j1f (float); -extern float jnf (int, float); -#endif +extern double y0 _PARAMS((double)); +extern double y1 _PARAMS((double)); +extern double yn _PARAMS((int, double)); +extern double j0 _PARAMS((double)); +extern double j1 _PARAMS((double)); +extern double jn _PARAMS((int, double)); + +extern float dremf _PARAMS((float, float)); +extern void sincosf _PARAMS((float, float *, float *)); +extern float gammaf_r _PARAMS((float, int *)); +extern float lgammaf_r _PARAMS((float, int *)); + +extern float y0f _PARAMS((float)); +extern float y1f _PARAMS((float)); +extern float ynf _PARAMS((int, float)); +extern float j0f _PARAMS((float)); +extern float j1f _PARAMS((float)); +extern float jnf _PARAMS((int, float)); /* GNU extensions */ -#if __GNU_VISIBLE -extern void sincos (double, double *, double *); -extern void sincosf (float, float *, float *); -#ifdef __CYGWIN__ -extern void sincosl (long double, long double *, long double *); -#endif /* __CYGWIN__ */ # ifndef exp10 -extern double exp10 (double); +extern double exp10 _PARAMS((double)); # endif # ifndef pow10 -extern double pow10 (double); +extern double pow10 _PARAMS((double)); # endif # ifndef exp10f -extern float exp10f (float); +extern float exp10f _PARAMS((float)); # endif # ifndef pow10f -extern float pow10f (float); +extern float pow10f _PARAMS((float)); # endif -#ifdef __CYGWIN__ -# ifndef exp10l -extern float exp10l (float); -# endif -# ifndef pow10l -extern float pow10l (float); -# endif -#endif /* __CYGWIN__ */ -#endif /* __GNU_VISIBLE */ -#if __MISC_VISIBLE || __XSI_VISIBLE +#endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) */ + +#ifndef __STRICT_ANSI__ + /* The gamma functions use a global variable, signgam. */ #ifndef _REENT_ONLY #define signgam (*__signgam()) -extern int *__signgam (void); +extern int *__signgam _PARAMS((void)); #endif /* ! defined (_REENT_ONLY) */ #define __signgam_r(ptr) _REENT_SIGNGAM(ptr) -#endif /* __MISC_VISIBLE || __XSI_VISIBLE */ -#if __SVID_VISIBLE /* The exception structure passed to the matherr routine. */ /* We have a problem when using C++ since `exception' is a reserved name in C++. */ @@ -587,9 +534,9 @@ struct exception }; #ifdef __cplusplus -extern int matherr (struct __exception *e); +extern int matherr _PARAMS((struct __exception *e)); #else -extern int matherr (struct exception *e); +extern int matherr _PARAMS((struct exception *e)); #endif /* Values for the type field of struct exception. */ @@ -601,11 +548,11 @@ extern int matherr (struct exception *e); #define TLOSS 5 #define PLOSS 6 -#endif /* __SVID_VISIBLE */ +#endif /* ! defined (__STRICT_ANSI__) */ /* Useful constants. */ -#if __BSD_VISIBLE || __XSI_VISIBLE +#if !defined(__STRICT_ANSI__) || ((_XOPEN_SOURCE - 0) >= 500) #define MAXFLOAT 3.40282347e+38F @@ -625,7 +572,7 @@ extern int matherr (struct exception *e); #endif -#if __BSD_VISIBLE +#ifndef __STRICT_ANSI__ #define M_TWOPI (M_PI * 2.0) #define M_3PI_4 2.3561944901923448370E0 @@ -657,7 +604,7 @@ extern __IMPORT _LIB_VERSION_TYPE _LIB_VERSION; #define _XOPEN_ __fdlibm_xopen #define _POSIX_ __fdlibm_posix -#endif /* __BSD_VISIBLE */ +#endif /* ! defined (__STRICT_ANSI__) */ _END_STD_C diff --git a/libc/xtensa-lx106-elf/include/memory.h b/libc/xtensa-lx106-elf/include/memory.h deleted file mode 100644 index f4a14fc..0000000 --- a/libc/xtensa-lx106-elf/include/memory.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _MEMORY_H -#define _MEMORY_H -#include -#endif /* !_MEMORY_H */ diff --git a/libc/xtensa-lx106-elf/include/newlib.h b/libc/xtensa-lx106-elf/include/newlib.h index b947cbf..e9bf566 100644 --- a/libc/xtensa-lx106-elf/include/newlib.h +++ b/libc/xtensa-lx106-elf/include/newlib.h @@ -11,7 +11,7 @@ /* #undef _ELIX_LEVEL */ /* Newlib version */ -#include <_newlib_version.h> +#define _NEWLIB_VERSION "2.2.0" /* C99 formats support (such as %a, %zu, ...) in IO functions like * printf/scanf enabled */ @@ -62,6 +62,12 @@ /* True if long double supported and it is equal to double. */ #define _LDBL_EQ_DBL 1 +/* Define if uintptr_t is unsigned long on this architecture */ +/* #undef _UINTPTR_EQ_ULONG */ + +/* Define if uintptr_t is unsigned long long on this architecture */ +/* #undef _UINTPTR_EQ_ULONGLONG */ + /* Define if ivo supported in streamio. */ #define _FVWRITE_IN_STREAMIO 1 @@ -80,20 +86,9 @@ /* Define if declare atexit data as global. */ /* #undef _REENT_GLOBAL_ATEXIT */ -/* Define to move the stdio stream FILE objects out of struct _reent and make - them global. The stdio stream pointers of struct _reent are initialized to - point to the global stdio FILE stream objects. */ -#define _WANT_REENT_GLOBAL_STDIO_STREAMS 1 - /* Define if small footprint nano-formatted-IO implementation used. */ #define _NANO_FORMATTED_IO 1 -/* Define if using retargetable functions for default lock routines. */ -/* #undef _RETARGETABLE_LOCKING */ - -/* Define to use type long for time_t. */ -/* #undef _WANT_USE_LONG_TIME_T */ - /* * Iconv encodings enabled ("to" direction) */ diff --git a/libc/xtensa-lx106-elf/include/pthread.h b/libc/xtensa-lx106-elf/include/pthread.h index 3dee1c9..db1f9c1 100644 --- a/libc/xtensa-lx106-elf/include/pthread.h +++ b/libc/xtensa-lx106-elf/include/pthread.h @@ -1,7 +1,8 @@ -/* - * Written by Joel Sherrill . +/* pthread.h * - * COPYRIGHT (c) 1989-2013, 2015. + * Written by Joel Sherrill . + * + * COPYRIGHT (c) 1989-2013. * On-Line Applications Research Corporation (OAR). * * Permission to use, copy, modify, and distribute this software for any @@ -13,6 +14,8 @@ * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + * $Id$ */ #ifndef __PTHREAD_h @@ -28,7 +31,7 @@ extern "C" { #include #include -#include +#include #include struct _pthread_cleanup_context { @@ -39,148 +42,139 @@ struct _pthread_cleanup_context { }; /* Register Fork Handlers */ -int pthread_atfork (void (*prepare)(void), void (*parent)(void), - void (*child)(void)); +int _EXFUN(pthread_atfork,(void (*prepare)(void), void (*parent)(void), + void (*child)(void))); /* Mutex Initialization Attributes, P1003.1c/Draft 10, p. 81 */ -int pthread_mutexattr_init (pthread_mutexattr_t *__attr); -int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr); -int pthread_mutexattr_getpshared (const pthread_mutexattr_t *__attr, - int *__pshared); -int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, - int __pshared); +int _EXFUN(pthread_mutexattr_init, (pthread_mutexattr_t *__attr)); +int _EXFUN(pthread_mutexattr_destroy, (pthread_mutexattr_t *__attr)); +int _EXFUN(pthread_mutexattr_getpshared, + (_CONST pthread_mutexattr_t *__attr, int *__pshared)); +int _EXFUN(pthread_mutexattr_setpshared, + (pthread_mutexattr_t *__attr, int __pshared)); #if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) /* Single UNIX Specification 2 Mutex Attributes types */ -int pthread_mutexattr_gettype (const pthread_mutexattr_t *__attr, int *__kind); -int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind); +int _EXFUN(pthread_mutexattr_gettype, + (_CONST pthread_mutexattr_t *__attr, int *__kind)); +int _EXFUN(pthread_mutexattr_settype, + (pthread_mutexattr_t *__attr, int __kind)); #endif /* Initializing and Destroying a Mutex, P1003.1c/Draft 10, p. 87 */ -int pthread_mutex_init (pthread_mutex_t *__mutex, - const pthread_mutexattr_t *__attr); -int pthread_mutex_destroy (pthread_mutex_t *__mutex); +int _EXFUN(pthread_mutex_init, + (pthread_mutex_t *__mutex, _CONST pthread_mutexattr_t *__attr)); +int _EXFUN(pthread_mutex_destroy, (pthread_mutex_t *__mutex)); /* This is used to statically initialize a pthread_mutex_t. Example: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; */ -#define PTHREAD_MUTEX_INITIALIZER _PTHREAD_MUTEX_INITIALIZER +#define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF) /* Locking and Unlocking a Mutex, P1003.1c/Draft 10, p. 93 NOTE: P1003.4b/D8 adds pthread_mutex_timedlock(), p. 29 */ -int pthread_mutex_lock (pthread_mutex_t *__mutex); -int pthread_mutex_trylock (pthread_mutex_t *__mutex); -int pthread_mutex_unlock (pthread_mutex_t *__mutex); +int _EXFUN(pthread_mutex_lock, (pthread_mutex_t *__mutex)); +int _EXFUN(pthread_mutex_trylock, (pthread_mutex_t *__mutex)); +int _EXFUN(pthread_mutex_unlock, (pthread_mutex_t *__mutex)); #if defined(_POSIX_TIMEOUTS) -int pthread_mutex_timedlock (pthread_mutex_t *__mutex, - const struct timespec *__timeout); +int _EXFUN(pthread_mutex_timedlock, + (pthread_mutex_t *__mutex, _CONST struct timespec *__timeout)); #endif /* _POSIX_TIMEOUTS */ /* Condition Variable Initialization Attributes, P1003.1c/Draft 10, p. 96 */ -int pthread_condattr_init (pthread_condattr_t *__attr); -int pthread_condattr_destroy (pthread_condattr_t *__attr); - -int pthread_condattr_getclock (const pthread_condattr_t *__restrict __attr, - clockid_t *__restrict __clock_id); -int pthread_condattr_setclock (pthread_condattr_t *__attr, - clockid_t __clock_id); - -int pthread_condattr_getpshared (const pthread_condattr_t *__attr, - int *__pshared); -int pthread_condattr_setpshared (pthread_condattr_t *__attr, int __pshared); +int _EXFUN(pthread_condattr_init, (pthread_condattr_t *__attr)); +int _EXFUN(pthread_condattr_destroy, (pthread_condattr_t *__attr)); +int _EXFUN(pthread_condattr_getpshared, + (_CONST pthread_condattr_t *__attr, int *__pshared)); +int _EXFUN(pthread_condattr_setpshared, + (pthread_condattr_t *__attr, int __pshared)); /* Initializing and Destroying a Condition Variable, P1003.1c/Draft 10, p. 87 */ -int pthread_cond_init (pthread_cond_t *__cond, - const pthread_condattr_t *__attr); -int pthread_cond_destroy (pthread_cond_t *__mutex); +int _EXFUN(pthread_cond_init, + (pthread_cond_t *__cond, _CONST pthread_condattr_t *__attr)); +int _EXFUN(pthread_cond_destroy, (pthread_cond_t *__mutex)); /* This is used to statically initialize a pthread_cond_t. Example: pthread_cond_t cond = PTHREAD_COND_INITIALIZER; */ -#define PTHREAD_COND_INITIALIZER _PTHREAD_COND_INITIALIZER +#define PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF) /* Broadcasting and Signaling a Condition, P1003.1c/Draft 10, p. 101 */ -int pthread_cond_signal (pthread_cond_t *__cond); -int pthread_cond_broadcast (pthread_cond_t *__cond); +int _EXFUN(pthread_cond_signal, (pthread_cond_t *__cond)); +int _EXFUN(pthread_cond_broadcast, (pthread_cond_t *__cond)); /* Waiting on a Condition, P1003.1c/Draft 10, p. 105 */ -int pthread_cond_wait (pthread_cond_t *__cond, pthread_mutex_t *__mutex); +int _EXFUN(pthread_cond_wait, + (pthread_cond_t *__cond, pthread_mutex_t *__mutex)); -int pthread_cond_timedwait (pthread_cond_t *__cond, - pthread_mutex_t *__mutex, - const struct timespec *__abstime); +int _EXFUN(pthread_cond_timedwait, + (pthread_cond_t *__cond, pthread_mutex_t *__mutex, + _CONST struct timespec *__abstime)); #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) /* Thread Creation Scheduling Attributes, P1003.1c/Draft 10, p. 120 */ -int pthread_attr_setscope (pthread_attr_t *__attr, int __contentionscope); -int pthread_attr_getscope (const pthread_attr_t *__attr, - int *__contentionscope); -int pthread_attr_setinheritsched (pthread_attr_t *__attr, - int __inheritsched); -int pthread_attr_getinheritsched (const pthread_attr_t *__attr, - int *__inheritsched); -int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy); -int pthread_attr_getschedpolicy (const pthread_attr_t *__attr, - int *__policy); +int _EXFUN(pthread_attr_setscope, + (pthread_attr_t *__attr, int __contentionscope)); +int _EXFUN(pthread_attr_getscope, + (_CONST pthread_attr_t *__attr, int *__contentionscope)); +int _EXFUN(pthread_attr_setinheritsched, + (pthread_attr_t *__attr, int __inheritsched)); +int _EXFUN(pthread_attr_getinheritsched, + (_CONST pthread_attr_t *__attr, int *__inheritsched)); +int _EXFUN(pthread_attr_setschedpolicy, + (pthread_attr_t *__attr, int __policy)); +int _EXFUN(pthread_attr_getschedpolicy, + (_CONST pthread_attr_t *__attr, int *__policy)); #endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */ -int pthread_attr_setschedparam (pthread_attr_t *__attr, - const struct sched_param *__param); -int pthread_attr_getschedparam (const pthread_attr_t *__attr, - struct sched_param *__param); +int _EXFUN(pthread_attr_setschedparam, + (pthread_attr_t *__attr, _CONST struct sched_param *__param)); +int _EXFUN(pthread_attr_getschedparam, + (_CONST pthread_attr_t *__attr, struct sched_param *__param)); #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) /* Dynamic Thread Scheduling Parameters Access, P1003.1c/Draft 10, p. 124 */ -int pthread_getschedparam (pthread_t __pthread, int *__policy, - struct sched_param *__param); -int pthread_setschedparam (pthread_t __pthread, int __policy, - struct sched_param *__param); - -/* Set Scheduling Priority of a Thread */ -int pthread_setschedprio (pthread_t thread, int prio); +int _EXFUN(pthread_getschedparam, + (pthread_t __pthread, int *__policy, struct sched_param *__param)); +int _EXFUN(pthread_setschedparam, + (pthread_t __pthread, int __policy, struct sched_param *__param)); #endif /* defined(_POSIX_THREAD_PRIORITY_SCHEDULING) */ -#if __GNU_VISIBLE -int pthread_getname_np(pthread_t, char *, size_t) __nonnull((2)); - -int pthread_setname_np(pthread_t, const char *) __nonnull((2)); -#endif - #if defined(_POSIX_THREAD_PRIO_INHERIT) || defined(_POSIX_THREAD_PRIO_PROTECT) /* Mutex Initialization Scheduling Attributes, P1003.1c/Draft 10, p. 128 */ -int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, - int __protocol); -int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *__attr, - int *__protocol); -int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, - int __prioceiling); -int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *__attr, - int *__prioceiling); +int _EXFUN(pthread_mutexattr_setprotocol, + (pthread_mutexattr_t *__attr, int __protocol)); +int _EXFUN(pthread_mutexattr_getprotocol, + (_CONST pthread_mutexattr_t *__attr, int *__protocol)); +int _EXFUN(pthread_mutexattr_setprioceiling, + (pthread_mutexattr_t *__attr, int __prioceiling)); +int _EXFUN(pthread_mutexattr_getprioceiling, + (_CONST pthread_mutexattr_t *__attr, int *__prioceiling)); #endif /* _POSIX_THREAD_PRIO_INHERIT || _POSIX_THREAD_PRIO_PROTECT */ @@ -188,90 +182,86 @@ int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *__attr, /* Change the Priority Ceiling of a Mutex, P1003.1c/Draft 10, p. 131 */ -int pthread_mutex_setprioceiling (pthread_mutex_t *__mutex, - int __prioceiling, int *__old_ceiling); -int pthread_mutex_getprioceiling (pthread_mutex_t *__mutex, - int *__prioceiling); +int _EXFUN(pthread_mutex_setprioceiling, + (pthread_mutex_t *__mutex, int __prioceiling, int *__old_ceiling)); +int _EXFUN(pthread_mutex_getprioceiling, + (pthread_mutex_t *__mutex, int *__prioceiling)); #endif /* _POSIX_THREAD_PRIO_PROTECT */ /* Thread Creation Attributes, P1003.1c/Draft 10, p, 140 */ -int pthread_attr_init (pthread_attr_t *__attr); -int pthread_attr_destroy (pthread_attr_t *__attr); -int pthread_attr_setstack (pthread_attr_t *attr, - void *__stackaddr, size_t __stacksize); -int pthread_attr_getstack (const pthread_attr_t *attr, - void **__stackaddr, size_t *__stacksize); -int pthread_attr_getstacksize (const pthread_attr_t *__attr, - size_t *__stacksize); -int pthread_attr_setstacksize (pthread_attr_t *__attr, size_t __stacksize); -int pthread_attr_getstackaddr (const pthread_attr_t *__attr, - void **__stackaddr); -int pthread_attr_setstackaddr (pthread_attr_t *__attr, void *__stackaddr); -int pthread_attr_getdetachstate (const pthread_attr_t *__attr, - int *__detachstate); -int pthread_attr_setdetachstate (pthread_attr_t *__attr, int __detachstate); -int pthread_attr_getguardsize (const pthread_attr_t *__attr, - size_t *__guardsize); -int pthread_attr_setguardsize (pthread_attr_t *__attr, size_t __guardsize); +int _EXFUN(pthread_attr_init, (pthread_attr_t *__attr)); +int _EXFUN(pthread_attr_destroy, (pthread_attr_t *__attr)); +int _EXFUN(pthread_attr_setstack, (pthread_attr_t *attr, + void *__stackaddr, size_t __stacksize)); +int _EXFUN(pthread_attr_getstack, (_CONST pthread_attr_t *attr, + void **__stackaddr, size_t *__stacksize)); +int _EXFUN(pthread_attr_getstacksize, + (_CONST pthread_attr_t *__attr, size_t *__stacksize)); +int _EXFUN(pthread_attr_setstacksize, + (pthread_attr_t *__attr, size_t __stacksize)); +int _EXFUN(pthread_attr_getstackaddr, + (_CONST pthread_attr_t *__attr, void **__stackaddr)); +int _EXFUN(pthread_attr_setstackaddr, + (pthread_attr_t *__attr, void *__stackaddr)); +int _EXFUN(pthread_attr_getdetachstate, + (_CONST pthread_attr_t *__attr, int *__detachstate)); +int _EXFUN(pthread_attr_setdetachstate, + (pthread_attr_t *__attr, int __detachstate)); +int _EXFUN(pthread_attr_getguardsize, + (_CONST pthread_attr_t *__attr, size_t *__guardsize)); +int _EXFUN(pthread_attr_setguardsize, + (pthread_attr_t *__attr, size_t __guardsize)); /* POSIX thread APIs beyond the POSIX standard but provided * in GNU/Linux. They may be provided by other OSes for * compatibility. */ -#if __GNU_VISIBLE +#if defined(__GNU_VISIBLE) #if defined(__rtems__) -int pthread_attr_setaffinity_np (pthread_attr_t *__attr, - size_t __cpusetsize, - const cpu_set_t *__cpuset); -int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, - size_t __cpusetsize, cpu_set_t *__cpuset); +int _EXFUN(pthread_attr_setaffinity_np, + (pthread_attr_t *__attr, size_t __cpusetsize, + const cpu_set_t *__cpuset)); +int _EXFUN(pthread_attr_getaffinity_np, + (const pthread_attr_t *__attr, size_t __cpusetsize, + cpu_set_t *__cpuset)); -int pthread_setaffinity_np (pthread_t __id, size_t __cpusetsize, - const cpu_set_t *__cpuset); -int pthread_getaffinity_np (const pthread_t __id, size_t __cpusetsize, - cpu_set_t *__cpuset); +int _EXFUN(pthread_setaffinity_np, + (pthread_t __id, size_t __cpusetsize, const cpu_set_t *__cpuset)); +int _EXFUN(pthread_getaffinity_np, + (const pthread_t __id, size_t __cpusetsize, cpu_set_t *__cpuset)); -int pthread_getattr_np (pthread_t __id, pthread_attr_t *__attr); +int _EXFUN(pthread_getattr_np, + (pthread_t __id, pthread_attr_t *__attr)); #endif /* defined(__rtems__) */ -#endif /* __GNU_VISIBLE */ +#endif /* defined(__GNU_VISIBLE) */ /* Thread Creation, P1003.1c/Draft 10, p. 144 */ -int pthread_create (pthread_t *__pthread, const pthread_attr_t *__attr, - void *(*__start_routine)(void *), void *__arg); +int _EXFUN(pthread_create, + (pthread_t *__pthread, _CONST pthread_attr_t *__attr, + void *(*__start_routine)( void * ), void *__arg)); /* Wait for Thread Termination, P1003.1c/Draft 10, p. 147 */ -int pthread_join (pthread_t __pthread, void **__value_ptr); +int _EXFUN(pthread_join, (pthread_t __pthread, void **__value_ptr)); /* Detaching a Thread, P1003.1c/Draft 10, p. 149 */ -int pthread_detach (pthread_t __pthread); +int _EXFUN(pthread_detach, (pthread_t __pthread)); /* Thread Termination, p1003.1c/Draft 10, p. 150 */ -void pthread_exit (void *__value_ptr) __dead2; +void _EXFUN(pthread_exit, (void *__value_ptr)); /* Get Calling Thread's ID, p1003.1c/Draft 10, p. XXX */ -pthread_t pthread_self (void); +pthread_t _EXFUN(pthread_self, (void)); /* Compare Thread IDs, p1003.1c/Draft 10, p. 153 */ -int pthread_equal (pthread_t __t1, pthread_t __t2); - -/* Retrieve ID of a Thread's CPU Time Clock */ -int pthread_getcpuclockid (pthread_t thread, clockid_t *clock_id); - -/* Get/Set Current Thread's Concurrency Level */ -int pthread_setconcurrency (int new_level); -int pthread_getconcurrency (void); - -#if __BSD_VISIBLE || __GNU_VISIBLE -void pthread_yield (void); -#endif +int _EXFUN(pthread_equal, (pthread_t __t1, pthread_t __t2)); /* Dynamic Package Initialization */ @@ -281,24 +271,25 @@ void pthread_yield (void); NOTE: This is named inconsistently -- it should be INITIALIZER. */ -#define PTHREAD_ONCE_INIT _PTHREAD_ONCE_INIT +#define PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */ -int pthread_once (pthread_once_t *__once_control, - void (*__init_routine)(void)); +int _EXFUN(pthread_once, + (pthread_once_t *__once_control, void (*__init_routine)(void))); /* Thread-Specific Data Key Create, P1003.1c/Draft 10, p. 163 */ -int pthread_key_create (pthread_key_t *__key, - void (*__destructor)(void *)); +int _EXFUN(pthread_key_create, + (pthread_key_t *__key, void (*__destructor)( void * ))); /* Thread-Specific Data Management, P1003.1c/Draft 10, p. 165 */ -int pthread_setspecific (pthread_key_t __key, const void *__value); -void * pthread_getspecific (pthread_key_t __key); +int _EXFUN(pthread_setspecific, + (pthread_key_t __key, _CONST void *__value)); +void * _EXFUN(pthread_getspecific, (pthread_key_t __key)); /* Thread-Specific Data Key Deletion, P1003.1c/Draft 10, p. 167 */ -int pthread_key_delete (pthread_key_t __key); +int _EXFUN(pthread_key_delete, (pthread_key_t __key)); /* Execution of a Thread, P1003.1c/Draft 10, p. 181 */ @@ -310,21 +301,23 @@ int pthread_key_delete (pthread_key_t __key); #define PTHREAD_CANCELED ((void *) -1) -int pthread_cancel (pthread_t __pthread); +int _EXFUN(pthread_cancel, (pthread_t __pthread)); /* Setting Cancelability State, P1003.1c/Draft 10, p. 183 */ -int pthread_setcancelstate (int __state, int *__oldstate); -int pthread_setcanceltype (int __type, int *__oldtype); -void pthread_testcancel (void); +int _EXFUN(pthread_setcancelstate, (int __state, int *__oldstate)); +int _EXFUN(pthread_setcanceltype, (int __type, int *__oldtype)); +void _EXFUN(pthread_testcancel, (void)); /* Establishing Cancellation Handlers, P1003.1c/Draft 10, p. 184 */ -void _pthread_cleanup_push (struct _pthread_cleanup_context *_context, - void (*_routine)(void *), void *_arg); +void _EXFUN(_pthread_cleanup_push, + (struct _pthread_cleanup_context *_context, + void (*_routine)(void *), void *_arg)); -void _pthread_cleanup_pop (struct _pthread_cleanup_context *_context, - int _execute); +void _EXFUN(_pthread_cleanup_pop, + (struct _pthread_cleanup_context *_context, + int _execute)); /* It is intentional to open and close the scope in two different macros */ #define pthread_cleanup_push(_routine, _arg) \ @@ -336,12 +329,14 @@ void _pthread_cleanup_pop (struct _pthread_cleanup_context *_context, _pthread_cleanup_pop(&_pthread_clup_ctx, (_execute)); \ } while (0) -#if __GNU_VISIBLE -void _pthread_cleanup_push_defer (struct _pthread_cleanup_context *_context, - void (*_routine)(void *), void *_arg); +#if defined(_GNU_SOURCE) +void _EXFUN(_pthread_cleanup_push_defer, + (struct _pthread_cleanup_context *_context, + void (*_routine)(void *), void *_arg)); -void _pthread_cleanup_pop_restore (struct _pthread_cleanup_context *_context, - int _execute); +void _EXFUN(_pthread_cleanup_pop_restore, + (struct _pthread_cleanup_context *_context, + int _execute)); /* It is intentional to open and close the scope in two different macros */ #define pthread_cleanup_push_defer_np(_routine, _arg) \ @@ -352,13 +347,14 @@ void _pthread_cleanup_pop_restore (struct _pthread_cleanup_context *_context, #define pthread_cleanup_pop_restore_np(_execute) \ _pthread_cleanup_pop_restore(&_pthread_clup_ctx, (_execute)); \ } while (0) -#endif /* __GNU_VISIBLE */ +#endif /* defined(_GNU_SOURCE) */ #if defined(_POSIX_THREAD_CPUTIME) /* Accessing a Thread CPU-time Clock, P1003.4b/D8, p. 58 */ -int pthread_getcpuclockid (pthread_t __pthread_id, clockid_t *__clock_id); +int _EXFUN(pthread_getcpuclockid, + (pthread_t __pthread_id, clockid_t *__clock_id)); #endif /* defined(_POSIX_THREAD_CPUTIME) */ @@ -367,30 +363,31 @@ int pthread_getcpuclockid (pthread_t __pthread_id, clockid_t *__clock_id); #if defined(_POSIX_BARRIERS) -int pthread_barrierattr_init (pthread_barrierattr_t *__attr); -int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr); -int pthread_barrierattr_getpshared (const pthread_barrierattr_t *__attr, - int *__pshared); -int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, - int __pshared); +int _EXFUN(pthread_barrierattr_init, (pthread_barrierattr_t *__attr)); +int _EXFUN(pthread_barrierattr_destroy, (pthread_barrierattr_t *__attr)); +int _EXFUN(pthread_barrierattr_getpshared, + (_CONST pthread_barrierattr_t *__attr, int *__pshared)); +int _EXFUN(pthread_barrierattr_setpshared, + (pthread_barrierattr_t *__attr, int __pshared)); #define PTHREAD_BARRIER_SERIAL_THREAD -1 -int pthread_barrier_init (pthread_barrier_t *__barrier, - const pthread_barrierattr_t *__attr, - unsigned __count); -int pthread_barrier_destroy (pthread_barrier_t *__barrier); -int pthread_barrier_wait (pthread_barrier_t *__barrier); +int _EXFUN(pthread_barrier_init, + (pthread_barrier_t *__barrier, + _CONST pthread_barrierattr_t *__attr, unsigned __count)); +int _EXFUN(pthread_barrier_destroy, (pthread_barrier_t *__barrier)); +int _EXFUN(pthread_barrier_wait,(pthread_barrier_t *__barrier)); #endif /* defined(_POSIX_BARRIERS) */ #if defined(_POSIX_SPIN_LOCKS) -int pthread_spin_init (pthread_spinlock_t *__spinlock, int __pshared); -int pthread_spin_destroy (pthread_spinlock_t *__spinlock); -int pthread_spin_lock (pthread_spinlock_t *__spinlock); -int pthread_spin_trylock (pthread_spinlock_t *__spinlock); -int pthread_spin_unlock (pthread_spinlock_t *__spinlock); +int _EXFUN(pthread_spin_init, + (pthread_spinlock_t *__spinlock, int __pshared)); +int _EXFUN(pthread_spin_destroy, (pthread_spinlock_t *__spinlock)); +int _EXFUN(pthread_spin_lock, (pthread_spinlock_t *__spinlock)); +int _EXFUN(pthread_spin_trylock, (pthread_spinlock_t *__spinlock)); +int _EXFUN(pthread_spin_unlock, (pthread_spinlock_t *__spinlock)); #endif /* defined(_POSIX_SPIN_LOCKS) */ @@ -401,27 +398,27 @@ int pthread_spin_unlock (pthread_spinlock_t *__spinlock); pthread_mutex_t mutex = PTHREAD_RWLOCK_INITIALIZER; */ -#define PTHREAD_RWLOCK_INITIALIZER _PTHREAD_RWLOCK_INITIALIZER +#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) 0xFFFFFFFF) -int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr); -int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr); -int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *__attr, - int *__pshared); -int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, - int __pshared); +int _EXFUN(pthread_rwlockattr_init, (pthread_rwlockattr_t *__attr)); +int _EXFUN(pthread_rwlockattr_destroy, (pthread_rwlockattr_t *__attr)); +int _EXFUN(pthread_rwlockattr_getpshared, + (_CONST pthread_rwlockattr_t *__attr, int *__pshared)); +int _EXFUN(pthread_rwlockattr_setpshared, + (pthread_rwlockattr_t *__attr, int __pshared)); -int pthread_rwlock_init (pthread_rwlock_t *__rwlock, - const pthread_rwlockattr_t *__attr); -int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock); -int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock); -int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock); -int pthread_rwlock_timedrdlock (pthread_rwlock_t *__rwlock, - const struct timespec *__abstime); -int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock); -int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock); -int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock); -int pthread_rwlock_timedwrlock (pthread_rwlock_t *__rwlock, - const struct timespec *__abstime); +int _EXFUN(pthread_rwlock_init, + (pthread_rwlock_t *__rwlock, _CONST pthread_rwlockattr_t *__attr)); +int _EXFUN(pthread_rwlock_destroy, (pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_rdlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_tryrdlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_timedrdlock, + (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime)); +int _EXFUN(pthread_rwlock_unlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_wrlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_trywrlock,(pthread_rwlock_t *__rwlock)); +int _EXFUN(pthread_rwlock_timedwrlock, + (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime)); #endif /* defined(_POSIX_READER_WRITER_LOCKS) */ diff --git a/libc/xtensa-lx106-elf/include/pwd.h b/libc/xtensa-lx106-elf/include/pwd.h index f37d289..3dea4ee 100644 --- a/libc/xtensa-lx106-elf/include/pwd.h +++ b/libc/xtensa-lx106-elf/include/pwd.h @@ -63,14 +63,14 @@ struct passwd { struct passwd *getpwuid (uid_t); struct passwd *getpwnam (const char *); -#if __MISC_VISIBLE || __POSIX_VISIBLE +#if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500 int getpwnam_r (const char *, struct passwd *, char *, size_t , struct passwd **); int getpwuid_r (uid_t, struct passwd *, char *, size_t, struct passwd **); #endif -#if __MISC_VISIBLE || __XSI_VISIBLE >= 4 +#if __XSI_VISIBLE >= 500 struct passwd *getpwent (void); void setpwent (void); void endpwent (void); diff --git a/libc/xtensa-lx106-elf/include/reent.h b/libc/xtensa-lx106-elf/include/reent.h index 2b01fbe..861be71 100644 --- a/libc/xtensa-lx106-elf/include/reent.h +++ b/libc/xtensa-lx106-elf/include/reent.h @@ -92,6 +92,7 @@ extern "C" { #include #include +#include #define __need_size_t #define __need_ptrdiff_t @@ -136,29 +137,29 @@ struct timezone; #else /* Reentrant versions of system calls. */ -extern int _close_r (struct _reent *, int); -extern int _execve_r (struct _reent *, const char *, char *const *, char *const *); -extern int _fcntl_r (struct _reent *, int, int, int); -extern int _fork_r (struct _reent *); -extern int _fstat_r (struct _reent *, int, struct stat *); -extern int _getpid_r (struct _reent *); -extern int _isatty_r (struct _reent *, int); -extern int _kill_r (struct _reent *, int, int); -extern int _link_r (struct _reent *, const char *, const char *); -extern _off_t _lseek_r (struct _reent *, int, _off_t, int); -extern int _mkdir_r (struct _reent *, const char *, int); -extern int _open_r (struct _reent *, const char *, int, int); -extern _ssize_t _read_r (struct _reent *, int, void *, size_t); -extern int _rename_r (struct _reent *, const char *, const char *); -extern void *_sbrk_r (struct _reent *, ptrdiff_t); -extern int _stat_r (struct _reent *, const char *, struct stat *); -extern _CLOCK_T_ _times_r (struct _reent *, struct tms *); -extern int _unlink_r (struct _reent *, const char *); -extern int _wait_r (struct _reent *, int *); -extern _ssize_t _write_r (struct _reent *, int, const void *, size_t); +extern int _close_r _PARAMS ((struct _reent *, int)); +extern int _execve_r _PARAMS ((struct _reent *, const char *, char *const *, char *const *)); +extern int _fcntl_r _PARAMS ((struct _reent *, int, int, int)); +extern int _fork_r _PARAMS ((struct _reent *)); +extern int _fstat_r _PARAMS ((struct _reent *, int, struct stat *)); +extern int _getpid_r _PARAMS ((struct _reent *)); +extern int _isatty_r _PARAMS ((struct _reent *, int)); +extern int _kill_r _PARAMS ((struct _reent *, int, int)); +extern int _link_r _PARAMS ((struct _reent *, const char *, const char *)); +extern _off_t _lseek_r _PARAMS ((struct _reent *, int, _off_t, int)); +extern int _mkdir_r _PARAMS ((struct _reent *, const char *, int)); +extern int _open_r _PARAMS ((struct _reent *, const char *, int, int)); +extern _ssize_t _read_r _PARAMS ((struct _reent *, int, void *, size_t)); +extern int _rename_r _PARAMS ((struct _reent *, const char *, const char *)); +extern void *_sbrk_r _PARAMS ((struct _reent *, ptrdiff_t)); +extern int _stat_r _PARAMS ((struct _reent *, const char *, struct stat *)); +extern _CLOCK_T_ _times_r _PARAMS ((struct _reent *, struct tms *)); +extern int _unlink_r _PARAMS ((struct _reent *, const char *)); +extern int _wait_r _PARAMS ((struct _reent *, int *)); +extern _ssize_t _write_r _PARAMS ((struct _reent *, int, const void *, size_t)); /* This one is not guaranteed to be available on all targets. */ -extern int _gettimeofday_r (struct _reent *, struct timeval *__tp, void *__tzp); +extern int _gettimeofday_r _PARAMS ((struct _reent *, struct timeval *__tp, void *__tzp)); #ifdef __LARGE64_FILES @@ -168,10 +169,10 @@ extern int _gettimeofday_r (struct _reent *, struct timeval *__tp, void *__tzp); #endif struct stat64; -extern _off64_t _lseek64_r (struct _reent *, int, _off64_t, int); -extern int _fstat64_r (struct _reent *, int, struct stat64 *); -extern int _open64_r (struct _reent *, const char *, int, int); -extern int _stat64_r (struct _reent *, const char *, struct stat64 *); +extern _off64_t _lseek64_r _PARAMS ((struct _reent *, int, _off64_t, int)); +extern int _fstat64_r _PARAMS ((struct _reent *, int, struct stat64 *)); +extern int _open64_r _PARAMS ((struct _reent *, const char *, int, int)); +extern int _stat64_r _PARAMS ((struct _reent *, const char *, struct stat64 *)); /* Don't pollute namespace if not building newlib. */ #if defined (__CYGWIN__) && !defined (_COMPILING_NEWLIB) diff --git a/libc/xtensa-lx106-elf/include/setjmp.h b/libc/xtensa-lx106-elf/include/setjmp.h index a2830b2..3d815d9 100644 --- a/libc/xtensa-lx106-elf/include/setjmp.h +++ b/libc/xtensa-lx106-elf/include/setjmp.h @@ -12,12 +12,14 @@ _BEGIN_STD_C #ifdef __GNUC__ -void longjmp (jmp_buf __jmpb, int __retval) +void _EXFUN(longjmp,(jmp_buf __jmpb, int __retval)) __attribute__ ((__noreturn__)); #else -void longjmp (jmp_buf __jmpb, int __retval); +void _EXFUN(longjmp,(jmp_buf __jmpb, int __retval)); #endif -int setjmp (jmp_buf __jmpb); +int _EXFUN(setjmp,(jmp_buf __jmpb)); +#define setjmp(env) setjmp(env) + _END_STD_C diff --git a/libc/xtensa-lx106-elf/include/signal.h b/libc/xtensa-lx106-elf/include/signal.h index 23a9863..8c50a2e 100644 --- a/libc/xtensa-lx106-elf/include/signal.h +++ b/libc/xtensa-lx106-elf/include/signal.h @@ -2,18 +2,15 @@ #define _SIGNAL_H_ #include "_ansi.h" -#include #include _BEGIN_STD_C typedef int sig_atomic_t; /* Atomic entity type (ANSI) */ -#if __BSD_VISIBLE +#ifndef _POSIX_SOURCE typedef _sig_func_ptr sig_t; /* BSD naming */ -#endif -#if __GNU_VISIBLE typedef _sig_func_ptr sighandler_t; /* glibc naming */ -#endif +#endif /* !_POSIX_SOURCE */ #define SIG_DFL ((_sig_func_ptr)0) /* Default action */ #define SIG_IGN ((_sig_func_ptr)1) /* Ignore action */ @@ -21,13 +18,13 @@ typedef _sig_func_ptr sighandler_t; /* glibc naming */ struct _reent; -_sig_func_ptr _signal_r (struct _reent *, int, _sig_func_ptr); -int _raise_r (struct _reent *, int); +_sig_func_ptr _EXFUN(_signal_r, (struct _reent *, int, _sig_func_ptr)); +int _EXFUN(_raise_r, (struct _reent *, int)); #ifndef _REENT_ONLY -_sig_func_ptr signal (int, _sig_func_ptr); -int raise (int); -void psignal (int, const char *); +_sig_func_ptr _EXFUN(signal, (int, _sig_func_ptr)); +int _EXFUN(raise, (int)); +void _EXFUN(psignal, (int, const char *)); #endif _END_STD_C diff --git a/libc/xtensa-lx106-elf/include/spawn.h b/libc/xtensa-lx106-elf/include/spawn.h index d172177..5a6692f 100644 --- a/libc/xtensa-lx106-elf/include/spawn.h +++ b/libc/xtensa-lx106-elf/include/spawn.h @@ -53,52 +53,67 @@ _BEGIN_STD_C * XXX both arrays should be __restrict, but this does not work when GCC * is invoked with -std=c99. */ -int posix_spawn (pid_t * __restrict, const char * __restrict, +int _EXFUN(posix_spawn, (pid_t * __restrict, const char * __restrict, const posix_spawn_file_actions_t *, const posix_spawnattr_t * __restrict, - char * const [], char * const []); -int posix_spawnp (pid_t * __restrict, const char * __restrict, + char * const [], char * const []) +); +int _EXFUN(posix_spawnp, (pid_t * __restrict, const char * __restrict, const posix_spawn_file_actions_t *, const posix_spawnattr_t * __restrict, - char * const [], char * const []); + char * const [], char * const []) +); /* * File descriptor actions */ -int posix_spawn_file_actions_init (posix_spawn_file_actions_t *); -int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *); +int _EXFUN(posix_spawn_file_actions_init, (posix_spawn_file_actions_t *)); +int _EXFUN(posix_spawn_file_actions_destroy, (posix_spawn_file_actions_t *)); -int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t * __restrict, - int, const char * __restrict, int, mode_t); -int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *, int, int); -int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *, int); +int _EXFUN(posix_spawn_file_actions_addopen, + (posix_spawn_file_actions_t * __restrict, int, const char * __restrict, int, mode_t) +); +int _EXFUN(posix_spawn_file_actions_adddup2, + (posix_spawn_file_actions_t *, int, int) +); +int _EXFUN(posix_spawn_file_actions_addclose, + (posix_spawn_file_actions_t *, int) +); /* * Spawn attributes */ -int posix_spawnattr_init (posix_spawnattr_t *); -int posix_spawnattr_destroy (posix_spawnattr_t *); +int _EXFUN(posix_spawnattr_init, (posix_spawnattr_t *)); +int _EXFUN(posix_spawnattr_destroy, (posix_spawnattr_t *)); -int posix_spawnattr_getflags (const posix_spawnattr_t * __restrict, - short * __restrict); -int posix_spawnattr_getpgroup (const posix_spawnattr_t * __restrict, - pid_t * __restrict); -int posix_spawnattr_getschedparam (const posix_spawnattr_t * __restrict, - struct sched_param * __restrict); -int posix_spawnattr_getschedpolicy (const posix_spawnattr_t * __restrict, - int * __restrict); -int posix_spawnattr_getsigdefault (const posix_spawnattr_t * __restrict, - sigset_t * __restrict); -int posix_spawnattr_getsigmask (const posix_spawnattr_t * __restrict, - sigset_t * __restrict); +int _EXFUN(posix_spawnattr_getflags, + (const posix_spawnattr_t * __restrict, short * __restrict) +); +int _EXFUN(posix_spawnattr_getpgroup, + (const posix_spawnattr_t * __restrict, pid_t * __restrict)); +int _EXFUN(posix_spawnattr_getschedparam, + (const posix_spawnattr_t * __restrict, struct sched_param * __restrict) +); +int _EXFUN(posix_spawnattr_getschedpolicy, + (const posix_spawnattr_t * __restrict, int * __restrict) +); +int _EXFUN(posix_spawnattr_getsigdefault, + (const posix_spawnattr_t * __restrict, sigset_t * __restrict) +); +int _EXFUN(posix_spawnattr_getsigmask, + (const posix_spawnattr_t * __restrict, sigset_t * __restrict) +); -int posix_spawnattr_setflags (posix_spawnattr_t *, short); -int posix_spawnattr_setpgroup (posix_spawnattr_t *, pid_t); -int posix_spawnattr_setschedparam (posix_spawnattr_t * __restrict, - const struct sched_param * __restrict); -int posix_spawnattr_setschedpolicy (posix_spawnattr_t *, int); -int posix_spawnattr_setsigdefault (posix_spawnattr_t * __restrict, - const sigset_t * __restrict); -int posix_spawnattr_setsigmask (posix_spawnattr_t * __restrict, - const sigset_t * __restrict); +int _EXFUN(posix_spawnattr_setflags, (posix_spawnattr_t *, short)); +int _EXFUN(posix_spawnattr_setpgroup, (posix_spawnattr_t *, pid_t)); +int _EXFUN(posix_spawnattr_setschedparam, + (posix_spawnattr_t * __restrict, const struct sched_param * __restrict) +); +int _EXFUN(posix_spawnattr_setschedpolicy, (posix_spawnattr_t *, int)); +int _EXFUN(posix_spawnattr_setsigdefault, + (posix_spawnattr_t * __restrict, const sigset_t * __restrict) +); +int _EXFUN(posix_spawnattr_setsigmask, + (posix_spawnattr_t * __restrict, const sigset_t * __restrict) +); _END_STD_C #endif /* !_SPAWN_H_ */ diff --git a/libc/xtensa-lx106-elf/include/stdint.h b/libc/xtensa-lx106-elf/include/stdint.h index 4abdacb..7386164 100644 --- a/libc/xtensa-lx106-elf/include/stdint.h +++ b/libc/xtensa-lx106-elf/include/stdint.h @@ -11,30 +11,53 @@ #include #include -#include #ifdef __cplusplus extern "C" { #endif +#ifdef ___int8_t_defined +typedef __int8_t int8_t ; +typedef __uint8_t uint8_t ; +#define __int8_t_defined 1 +#endif + #ifdef ___int_least8_t_defined typedef __int_least8_t int_least8_t; typedef __uint_least8_t uint_least8_t; #define __int_least8_t_defined 1 #endif +#ifdef ___int16_t_defined +typedef __int16_t int16_t ; +typedef __uint16_t uint16_t ; +#define __int16_t_defined 1 +#endif + #ifdef ___int_least16_t_defined typedef __int_least16_t int_least16_t; typedef __uint_least16_t uint_least16_t; #define __int_least16_t_defined 1 #endif +#ifdef ___int32_t_defined +typedef __int32_t int32_t ; +typedef __uint32_t uint32_t ; +#define __int32_t_defined 1 +#endif + #ifdef ___int_least32_t_defined typedef __int_least32_t int_least32_t; typedef __uint_least32_t uint_least32_t; #define __int_least32_t_defined 1 #endif +#ifdef ___int64_t_defined +typedef __int64_t int64_t ; +typedef __uint64_t uint64_t ; +#define __int64_t_defined 1 +#endif + #ifdef ___int_least64_t_defined typedef __int_least64_t int_least64_t; typedef __uint_least64_t uint_least64_t; @@ -124,15 +147,37 @@ typedef __uint_least64_t uint_least64_t; #endif #endif +/* Greatest-width integer types */ +/* Modern GCCs provide __INTMAX_TYPE__ */ +#if defined(__INTMAX_TYPE__) + typedef __INTMAX_TYPE__ intmax_t; +#elif __have_longlong64 + typedef signed long long intmax_t; +#else + typedef signed long intmax_t; +#endif + +/* Modern GCCs provide __UINTMAX_TYPE__ */ +#if defined(__UINTMAX_TYPE__) + typedef __UINTMAX_TYPE__ uintmax_t; +#elif __have_longlong64 + typedef unsigned long long uintmax_t; +#else + typedef unsigned long uintmax_t; +#endif + +typedef __intptr_t intptr_t; +typedef __uintptr_t uintptr_t; + #ifdef __INTPTR_TYPE__ #define INTPTR_MIN (-__INTPTR_MAX__ - 1) -#define INTPTR_MAX (__INTPTR_MAX__) -#define UINTPTR_MAX (__UINTPTR_MAX__) +#define INTPTR_MAX __INTPTR_MAX__ +#define UINTPTR_MAX __UINTPTR_MAX__ #elif defined(__PTRDIFF_TYPE__) #define INTPTR_MAX PTRDIFF_MAX #define INTPTR_MIN PTRDIFF_MIN #ifdef __UINTPTR_MAX__ -#define UINTPTR_MAX (__UINTPTR_MAX__) +#define UINTPTR_MAX __UINTPTR_MAX__ #else #define UINTPTR_MAX (2UL * PTRDIFF_MAX + 1) #endif @@ -141,7 +186,7 @@ typedef __uint_least64_t uint_least64_t; * Fallback to hardcoded values, * should be valid on cpu's with 32bit int/32bit void* */ -#define INTPTR_MAX (__STDINT_EXP(LONG_MAX)) +#define INTPTR_MAX __STDINT_EXP(LONG_MAX) #define INTPTR_MIN (-__STDINT_EXP(LONG_MAX) - 1) #define UINTPTR_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1) #endif @@ -150,77 +195,77 @@ typedef __uint_least64_t uint_least64_t; #ifdef __INT8_MAX__ #define INT8_MIN (-__INT8_MAX__ - 1) -#define INT8_MAX (__INT8_MAX__) -#define UINT8_MAX (__UINT8_MAX__) +#define INT8_MAX __INT8_MAX__ +#define UINT8_MAX __UINT8_MAX__ #elif defined(__int8_t_defined) -#define INT8_MIN (-128) -#define INT8_MAX (127) -#define UINT8_MAX (255) +#define INT8_MIN -128 +#define INT8_MAX 127 +#define UINT8_MAX 255 #endif #ifdef __INT_LEAST8_MAX__ #define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1) -#define INT_LEAST8_MAX (__INT_LEAST8_MAX__) -#define UINT_LEAST8_MAX (__UINT_LEAST8_MAX__) +#define INT_LEAST8_MAX __INT_LEAST8_MAX__ +#define UINT_LEAST8_MAX __UINT_LEAST8_MAX__ #elif defined(__int_least8_t_defined) -#define INT_LEAST8_MIN (-128) -#define INT_LEAST8_MAX (127) -#define UINT_LEAST8_MAX (255) +#define INT_LEAST8_MIN -128 +#define INT_LEAST8_MAX 127 +#define UINT_LEAST8_MAX 255 #else #error required type int_least8_t missing #endif #ifdef __INT16_MAX__ #define INT16_MIN (-__INT16_MAX__ - 1) -#define INT16_MAX (__INT16_MAX__) -#define UINT16_MAX (__UINT16_MAX__) +#define INT16_MAX __INT16_MAX__ +#define UINT16_MAX __UINT16_MAX__ #elif defined(__int16_t_defined) -#define INT16_MIN (-32768) -#define INT16_MAX (32767) -#define UINT16_MAX (65535) +#define INT16_MIN -32768 +#define INT16_MAX 32767 +#define UINT16_MAX 65535 #endif #ifdef __INT_LEAST16_MAX__ #define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1) -#define INT_LEAST16_MAX (__INT_LEAST16_MAX__) -#define UINT_LEAST16_MAX (__UINT_LEAST16_MAX__) +#define INT_LEAST16_MAX __INT_LEAST16_MAX__ +#define UINT_LEAST16_MAX __UINT_LEAST16_MAX__ #elif defined(__int_least16_t_defined) -#define INT_LEAST16_MIN (-32768) -#define INT_LEAST16_MAX (32767) -#define UINT_LEAST16_MAX (65535) +#define INT_LEAST16_MIN -32768 +#define INT_LEAST16_MAX 32767 +#define UINT_LEAST16_MAX 65535 #else #error required type int_least16_t missing #endif #ifdef __INT32_MAX__ #define INT32_MIN (-__INT32_MAX__ - 1) -#define INT32_MAX (__INT32_MAX__) -#define UINT32_MAX (__UINT32_MAX__) +#define INT32_MAX __INT32_MAX__ +#define UINT32_MAX __UINT32_MAX__ #elif defined(__int32_t_defined) -#if defined (_INT32_EQ_LONG) +#if __have_long32 #define INT32_MIN (-2147483647L-1) -#define INT32_MAX (2147483647L) -#define UINT32_MAX (4294967295UL) +#define INT32_MAX 2147483647L +#define UINT32_MAX 4294967295UL #else #define INT32_MIN (-2147483647-1) -#define INT32_MAX (2147483647) -#define UINT32_MAX (4294967295U) +#define INT32_MAX 2147483647 +#define UINT32_MAX 4294967295U #endif #endif #ifdef __INT_LEAST32_MAX__ #define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1) -#define INT_LEAST32_MAX (__INT_LEAST32_MAX__) -#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__) +#define INT_LEAST32_MAX __INT_LEAST32_MAX__ +#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__ #elif defined(__int_least32_t_defined) -#if defined (_INT32_EQ_LONG) +#if __have_long32 #define INT_LEAST32_MIN (-2147483647L-1) -#define INT_LEAST32_MAX (2147483647L) -#define UINT_LEAST32_MAX (4294967295UL) +#define INT_LEAST32_MAX 2147483647L +#define UINT_LEAST32_MAX 4294967295UL #else #define INT_LEAST32_MIN (-2147483647-1) -#define INT_LEAST32_MAX (2147483647) -#define UINT_LEAST32_MAX (4294967295U) +#define INT_LEAST32_MAX 2147483647 +#define UINT_LEAST32_MAX 4294967295U #endif #else #error required type int_least32_t missing @@ -228,44 +273,44 @@ typedef __uint_least64_t uint_least64_t; #ifdef __INT64_MAX__ #define INT64_MIN (-__INT64_MAX__ - 1) -#define INT64_MAX (__INT64_MAX__) -#define UINT64_MAX (__UINT64_MAX__) +#define INT64_MAX __INT64_MAX__ +#define UINT64_MAX __UINT64_MAX__ #elif defined(__int64_t_defined) #if __have_long64 #define INT64_MIN (-9223372036854775807L-1L) -#define INT64_MAX (9223372036854775807L) -#define UINT64_MAX (18446744073709551615U) +#define INT64_MAX 9223372036854775807L +#define UINT64_MAX 18446744073709551615U #elif __have_longlong64 #define INT64_MIN (-9223372036854775807LL-1LL) -#define INT64_MAX (9223372036854775807LL) -#define UINT64_MAX (18446744073709551615ULL) +#define INT64_MAX 9223372036854775807LL +#define UINT64_MAX 18446744073709551615ULL #endif #endif #ifdef __INT_LEAST64_MAX__ #define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1) -#define INT_LEAST64_MAX (__INT_LEAST64_MAX__) -#define UINT_LEAST64_MAX (__UINT_LEAST64_MAX__) +#define INT_LEAST64_MAX __INT_LEAST64_MAX__ +#define UINT_LEAST64_MAX __UINT_LEAST64_MAX__ #elif defined(__int_least64_t_defined) #if __have_long64 #define INT_LEAST64_MIN (-9223372036854775807L-1L) -#define INT_LEAST64_MAX (9223372036854775807L) -#define UINT_LEAST64_MAX (18446744073709551615U) +#define INT_LEAST64_MAX 9223372036854775807L +#define UINT_LEAST64_MAX 18446744073709551615U #elif __have_longlong64 #define INT_LEAST64_MIN (-9223372036854775807LL-1LL) -#define INT_LEAST64_MAX (9223372036854775807LL) -#define UINT_LEAST64_MAX (18446744073709551615ULL) +#define INT_LEAST64_MAX 9223372036854775807LL +#define UINT_LEAST64_MAX 18446744073709551615ULL #endif #endif #ifdef __INT_FAST8_MAX__ #define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1) -#define INT_FAST8_MAX (__INT_FAST8_MAX__) -#define UINT_FAST8_MAX (__UINT_FAST8_MAX__) +#define INT_FAST8_MAX __INT_FAST8_MAX__ +#define UINT_FAST8_MAX __UINT_FAST8_MAX__ #elif defined(__int_fast8_t_defined) #if __STDINT_EXP(INT_MAX) >= 0x7f #define INT_FAST8_MIN (-__STDINT_EXP(INT_MAX)-1) -#define INT_FAST8_MAX (__STDINT_EXP(INT_MAX)) +#define INT_FAST8_MAX __STDINT_EXP(INT_MAX) #define UINT_FAST8_MAX (__STDINT_EXP(INT_MAX)*2U+1U) #else #define INT_FAST8_MIN INT_LEAST8_MIN @@ -276,12 +321,12 @@ typedef __uint_least64_t uint_least64_t; #ifdef __INT_FAST16_MAX__ #define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1) -#define INT_FAST16_MAX (__INT_FAST16_MAX__) -#define UINT_FAST16_MAX (__UINT_FAST16_MAX__) +#define INT_FAST16_MAX __INT_FAST16_MAX__ +#define UINT_FAST16_MAX __UINT_FAST16_MAX__ #elif defined(__int_fast16_t_defined) #if __STDINT_EXP(INT_MAX) >= 0x7fff #define INT_FAST16_MIN (-__STDINT_EXP(INT_MAX)-1) -#define INT_FAST16_MAX (__STDINT_EXP(INT_MAX)) +#define INT_FAST16_MAX __STDINT_EXP(INT_MAX) #define UINT_FAST16_MAX (__STDINT_EXP(INT_MAX)*2U+1U) #else #define INT_FAST16_MIN INT_LEAST16_MIN @@ -292,12 +337,12 @@ typedef __uint_least64_t uint_least64_t; #ifdef __INT_FAST32_MAX__ #define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1) -#define INT_FAST32_MAX (__INT_FAST32_MAX__) -#define UINT_FAST32_MAX (__UINT_FAST32_MAX__) +#define INT_FAST32_MAX __INT_FAST32_MAX__ +#define UINT_FAST32_MAX __UINT_FAST32_MAX__ #elif defined(__int_fast32_t_defined) #if __STDINT_EXP(INT_MAX) >= 0x7fffffff #define INT_FAST32_MIN (-__STDINT_EXP(INT_MAX)-1) -#define INT_FAST32_MAX (__STDINT_EXP(INT_MAX)) +#define INT_FAST32_MAX __STDINT_EXP(INT_MAX) #define UINT_FAST32_MAX (__STDINT_EXP(INT_MAX)*2U+1U) #else #define INT_FAST32_MIN INT_LEAST32_MIN @@ -308,12 +353,12 @@ typedef __uint_least64_t uint_least64_t; #ifdef __INT_FAST64_MAX__ #define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1) -#define INT_FAST64_MAX (__INT_FAST64_MAX__) -#define UINT_FAST64_MAX (__UINT_FAST64_MAX__) +#define INT_FAST64_MAX __INT_FAST64_MAX__ +#define UINT_FAST64_MAX __UINT_FAST64_MAX__ #elif defined(__int_fast64_t_defined) #if __STDINT_EXP(INT_MAX) > 0x7fffffff #define INT_FAST64_MIN (-__STDINT_EXP(INT_MAX)-1) -#define INT_FAST64_MAX (__STDINT_EXP(INT_MAX)) +#define INT_FAST64_MAX __STDINT_EXP(INT_MAX) #define UINT_FAST64_MAX (__STDINT_EXP(INT_MAX)*2U+1U) #else #define INT_FAST64_MIN INT_LEAST64_MIN @@ -323,7 +368,7 @@ typedef __uint_least64_t uint_least64_t; #endif #ifdef __INTMAX_MAX__ -#define INTMAX_MAX (__INTMAX_MAX__) +#define INTMAX_MAX __INTMAX_MAX__ #define INTMAX_MIN (-INTMAX_MAX - 1) #elif defined(__INTMAX_TYPE__) /* All relevant GCC versions prefer long to long long for intmax_t. */ @@ -332,7 +377,7 @@ typedef __uint_least64_t uint_least64_t; #endif #ifdef __UINTMAX_MAX__ -#define UINTMAX_MAX (__UINTMAX_MAX__) +#define UINTMAX_MAX __UINTMAX_MAX__ #elif defined(__UINTMAX_TYPE__) /* All relevant GCC versions prefer long to long long for intmax_t. */ #define UINTMAX_MAX UINT64_MAX @@ -340,27 +385,27 @@ typedef __uint_least64_t uint_least64_t; /* This must match size_t in stddef.h, currently long unsigned int */ #ifdef __SIZE_MAX__ -#define SIZE_MAX (__SIZE_MAX__) +#define SIZE_MAX __SIZE_MAX__ #else #define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1) #endif /* This must match sig_atomic_t in (currently int) */ #define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1) -#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX)) +#define SIG_ATOMIC_MAX __STDINT_EXP(INT_MAX) /* This must match ptrdiff_t in (currently long int) */ #ifdef __PTRDIFF_MAX__ -#define PTRDIFF_MAX (__PTRDIFF_MAX__) +#define PTRDIFF_MAX __PTRDIFF_MAX__ #else -#define PTRDIFF_MAX (__STDINT_EXP(LONG_MAX)) +#define PTRDIFF_MAX __STDINT_EXP(LONG_MAX) #endif #define PTRDIFF_MIN (-PTRDIFF_MAX - 1) /* This must match definition in */ #ifndef WCHAR_MIN #ifdef __WCHAR_MIN__ -#define WCHAR_MIN (__WCHAR_MIN__) +#define WCHAR_MIN __WCHAR_MIN__ #elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0) #define WCHAR_MIN (0 + L'\0') #else @@ -371,7 +416,7 @@ typedef __uint_least64_t uint_least64_t; /* This must match definition in */ #ifndef WCHAR_MAX #ifdef __WCHAR_MAX__ -#define WCHAR_MAX (__WCHAR_MAX__) +#define WCHAR_MAX __WCHAR_MAX__ #elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0) #define WCHAR_MAX (0xffffffffu + L'\0') #else @@ -381,14 +426,14 @@ typedef __uint_least64_t uint_least64_t; /* wint_t is unsigned int on almost all GCC targets. */ #ifdef __WINT_MAX__ -#define WINT_MAX (__WINT_MAX__) +#define WINT_MAX __WINT_MAX__ #else #define WINT_MAX (__STDINT_EXP(INT_MAX) * 2U + 1U) #endif #ifdef __WINT_MIN__ -#define WINT_MIN (__WINT_MIN__) +#define WINT_MIN __WINT_MIN__ #else -#define WINT_MIN (0U) +#define WINT_MIN 0U #endif /** Macros for minimum-width integer constant expressions */ @@ -420,7 +465,7 @@ typedef __uint_least64_t uint_least64_t; #define INT32_C(x) __INT32_C(x) #define UINT32_C(x) __UINT32_C(x) #else -#if defined (_INT32_EQ_LONG) +#if __have_long32 #define INT32_C(x) x##L #define UINT32_C(x) x##UL #else diff --git a/libc/xtensa-lx106-elf/include/stdio.h b/libc/xtensa-lx106-elf/include/stdio.h index cbc0fa9..e336ee6 100644 --- a/libc/xtensa-lx106-elf/include/stdio.h +++ b/libc/xtensa-lx106-elf/include/stdio.h @@ -35,22 +35,9 @@ #include #include -/* typedef only __gnuc_va_list, used throughout the header */ #define __need___va_list #include -/* typedef va_list only when required */ -#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE -#ifdef __GNUC__ -#ifndef _VA_LIST_DEFINED -typedef __gnuc_va_list va_list; -#define _VA_LIST_DEFINED -#endif -#else /* !__GNUC__ */ -#include -#endif -#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */ - /* * defines __FILE, _fpos_t. * They must be defined there because struct _reent needs them (and we don't @@ -62,10 +49,7 @@ typedef __gnuc_va_list va_list; _BEGIN_STD_C -#if !defined(__FILE_defined) typedef __FILE FILE; -# define __FILE_defined -#endif #ifdef __CYGWIN__ typedef _fpos64_t fpos_t; @@ -141,7 +125,7 @@ typedef _fpos64_t fpos64_t; #define L_tmpnam FILENAME_MAX #endif -#if __BSD_VISIBLE || __XSI_VISIBLE +#ifndef __STRICT_ANSI__ #define P_tmpdir "/tmp" #endif @@ -177,215 +161,192 @@ typedef _fpos64_t fpos64_t; #endif #endif -#if __POSIX_VISIBLE -char * ctermid (char *); -#endif -#if __XSI_VISIBLE && __XSI_VISIBLE < 600 -char * cuserid (char *); -#endif -FILE * tmpfile (void); -char * tmpnam (char *); +FILE * _EXFUN(tmpfile, (void)); +char * _EXFUN(tmpnam, (char *)); #if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 -char * tempnam (const char *, const char *); +char * _EXFUN(tempnam, (const char *, const char *)); #endif -int fclose (FILE *); -int fflush (FILE *); -FILE * freopen (const char *__restrict, const char *__restrict, FILE *__restrict); -void setbuf (FILE *__restrict, char *__restrict); -int setvbuf (FILE *__restrict, char *__restrict, int, size_t); -int fprintf (FILE *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); -int fscanf (FILE *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__scanf__, 2, 3))); -int printf (const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 1, 2))); -int scanf (const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__scanf__, 1, 2))); -int sscanf (const char *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__scanf__, 2, 3))); -int vfprintf (FILE *__restrict, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -int vprintf (const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 1, 0))); -int vsprintf (char *__restrict, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -int fgetc (FILE *); -char * fgets (char *__restrict, int, FILE *__restrict); -int fputc (int, FILE *); -int fputs (const char *__restrict, FILE *__restrict); -int getc (FILE *); -int getchar (void); -char * gets (char *); -int putc (int, FILE *); -int putchar (int); -int puts (const char *); -int ungetc (int, FILE *); -size_t fread (void *__restrict, size_t _size, size_t _n, FILE *__restrict); -size_t fwrite (const void *__restrict , size_t _size, size_t _n, FILE *); +int _EXFUN(fclose, (FILE *)); +int _EXFUN(fflush, (FILE *)); +FILE * _EXFUN(freopen, (const char *__restrict, const char *__restrict, FILE *__restrict)); +void _EXFUN(setbuf, (FILE *__restrict, char *__restrict)); +int _EXFUN(setvbuf, (FILE *__restrict, char *__restrict, int, size_t)); +int _EXFUN(fprintf, (FILE *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(fscanf, (FILE *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(printf, (const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 1, 2)))); +int _EXFUN(scanf, (const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 1, 2)))); +int _EXFUN(sscanf, (const char *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(vfprintf, (FILE *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vprintf, (const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 1, 0)))); +int _EXFUN(vsprintf, (char *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(fgetc, (FILE *)); +char * _EXFUN(fgets, (char *__restrict, int, FILE *__restrict)); +int _EXFUN(fputc, (int, FILE *)); +int _EXFUN(fputs, (const char *__restrict, FILE *__restrict)); +int _EXFUN(getc, (FILE *)); +int _EXFUN(getchar, (void)); +char * _EXFUN(gets, (char *)); +int _EXFUN(putc, (int, FILE *)); +int _EXFUN(putchar, (int)); +int _EXFUN(puts, (const char *)); +int _EXFUN(ungetc, (int, FILE *)); +size_t _EXFUN(fread, (_PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +size_t _EXFUN(fwrite, (const _PTR __restrict , size_t _size, size_t _n, FILE *)); #ifdef _COMPILING_NEWLIB -int fgetpos (FILE *, _fpos_t *); +int _EXFUN(fgetpos, (FILE *, _fpos_t *)); #else -int fgetpos (FILE *__restrict, fpos_t *__restrict); +int _EXFUN(fgetpos, (FILE *__restrict, fpos_t *__restrict)); #endif -int fseek (FILE *, long, int); +int _EXFUN(fseek, (FILE *, long, int)); #ifdef _COMPILING_NEWLIB -int fsetpos (FILE *, const _fpos_t *); +int _EXFUN(fsetpos, (FILE *, const _fpos_t *)); #else -int fsetpos (FILE *, const fpos_t *); +int _EXFUN(fsetpos, (FILE *, const fpos_t *)); #endif -long ftell ( FILE *); -void rewind (FILE *); -void clearerr (FILE *); -int feof (FILE *); -int ferror (FILE *); -void perror (const char *); +long _EXFUN(ftell, ( FILE *)); +void _EXFUN(rewind, (FILE *)); +void _EXFUN(clearerr, (FILE *)); +int _EXFUN(feof, (FILE *)); +int _EXFUN(ferror, (FILE *)); +void _EXFUN(perror, (const char *)); #ifndef _REENT_ONLY -FILE * fopen (const char *__restrict _name, const char *__restrict _type); -int sprintf (char *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); -int remove (const char *); -int rename (const char *, const char *); +FILE * _EXFUN(fopen, (const char *__restrict _name, const char *__restrict _type)); +int _EXFUN(sprintf, (char *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(remove, (const char *)); +int _EXFUN(rename, (const char *, const char *)); #ifdef _COMPILING_NEWLIB -int _rename (const char *, const char *); +int _EXFUN(_rename, (const char *, const char *)); #endif #endif -#if __LARGEFILE_VISIBLE || __POSIX_VISIBLE >= 200112 +#if !defined(__STRICT_ANSI__) || defined(__USE_XOPEN2K) #ifdef _COMPILING_NEWLIB -int fseeko (FILE *, _off_t, int); -_off_t ftello (FILE *); +int _EXFUN(fseeko, (FILE *, _off_t, int)); +_off_t _EXFUN(ftello, ( FILE *)); #else -int fseeko (FILE *, off_t, int); -off_t ftello (FILE *); +int _EXFUN(fseeko, (FILE *, off_t, int)); +off_t _EXFUN(ftello, ( FILE *)); #endif #endif #if __GNU_VISIBLE -int fcloseall (void); +int _EXFUN(fcloseall, (_VOID)); #endif +#if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 201103L) #ifndef _REENT_ONLY -#if __ISO_C_VISIBLE >= 1999 -int snprintf (char *__restrict, size_t, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int vsnprintf (char *__restrict, size_t, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int vfscanf (FILE *__restrict, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 2, 0))); -int vscanf (const char *, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 1, 0))); -int vsscanf (const char *__restrict, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 2, 0))); -#endif -#if __GNU_VISIBLE -int asprintf (char **__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); -int vasprintf (char **, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -#endif -#if __MISC_VISIBLE /* Newlib-specific */ -int asiprintf (char **, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); -char * asniprintf (char *, size_t *, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -char * asnprintf (char *__restrict, size_t *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); +int _EXFUN(asiprintf, (char **, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +char * _EXFUN(asniprintf, (char *, size_t *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +char * _EXFUN(asnprintf, (char *__restrict, size_t *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(asprintf, (char **__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); #ifndef diprintf -int diprintf (int, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); +int _EXFUN(diprintf, (int, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); #endif -int fiprintf (FILE *, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); -int fiscanf (FILE *, const char *, ...) - _ATTRIBUTE ((__format__ (__scanf__, 2, 3))); -int iprintf (const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 1, 2))); -int iscanf (const char *, ...) - _ATTRIBUTE ((__format__ (__scanf__, 1, 2))); -int siprintf (char *, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); -int siscanf (const char *, const char *, ...) - _ATTRIBUTE ((__format__ (__scanf__, 2, 3))); -int sniprintf (char *, size_t, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int vasiprintf (char **, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -char * vasniprintf (char *, size_t *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -char * vasnprintf (char *, size_t *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int vdiprintf (int, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -int vfiprintf (FILE *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -int vfiscanf (FILE *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 2, 0))); -int viprintf (const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 1, 0))); -int viscanf (const char *, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 1, 0))); -int vsiprintf (char *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -int vsiscanf (const char *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 2, 0))); -int vsniprintf (char *, size_t, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -#endif /* __MISC_VISIBLE */ +int _EXFUN(fiprintf, (FILE *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(fiscanf, (FILE *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(iprintf, (const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 1, 2)))); +int _EXFUN(iscanf, (const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 1, 2)))); +int _EXFUN(siprintf, (char *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(siscanf, (const char *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(snprintf, (char *__restrict, size_t, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(sniprintf, (char *, size_t, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(vasiprintf, (char **, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +char * _EXFUN(vasniprintf, (char *, size_t *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +char * _EXFUN(vasnprintf, (char *, size_t *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(vasprintf, (char **, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vdiprintf, (int, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vfiprintf, (FILE *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vfiscanf, (FILE *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(vfscanf, (FILE *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(viprintf, (const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 1, 0)))); +int _EXFUN(viscanf, (const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 1, 0)))); +int _EXFUN(vscanf, (const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 1, 0)))); +int _EXFUN(vsiprintf, (char *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(vsiscanf, (const char *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(vsniprintf, (char *, size_t, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(vsnprintf, (char *__restrict, size_t, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(vsscanf, (const char *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); #endif /* !_REENT_ONLY */ +#endif /* !__STRICT_ANSI__ */ /* * Routines in POSIX 1003.1:2001. */ -#if __POSIX_VISIBLE +#ifndef __STRICT_ANSI__ #ifndef _REENT_ONLY -FILE * fdopen (int, const char *); -#endif -int fileno (FILE *); -#endif -#if __MISC_VISIBLE || __POSIX_VISIBLE >= 199209 -int pclose (FILE *); -FILE * popen (const char *, const char *); -#endif - -#if __BSD_VISIBLE -void setbuffer (FILE *, char *, int); -int setlinebuf (FILE *); -#endif - -#if __MISC_VISIBLE || (__XSI_VISIBLE && __POSIX_VISIBLE < 200112) -int getw (FILE *); -int putw (int, FILE *); -#endif -#if __MISC_VISIBLE || __POSIX_VISIBLE -int getc_unlocked (FILE *); -int getchar_unlocked (void); -void flockfile (FILE *); -int ftrylockfile (FILE *); -void funlockfile (FILE *); -int putc_unlocked (int, FILE *); -int putchar_unlocked (int); +FILE * _EXFUN(fdopen, (int, const char *)); #endif +int _EXFUN(fileno, (FILE *)); +int _EXFUN(getw, (FILE *)); +int _EXFUN(pclose, (FILE *)); +FILE * _EXFUN(popen, (const char *, const char *)); +int _EXFUN(putw, (int, FILE *)); +void _EXFUN(setbuffer, (FILE *, char *, int)); +int _EXFUN(setlinebuf, (FILE *)); +int _EXFUN(getc_unlocked, (FILE *)); +int _EXFUN(getchar_unlocked, (void)); +void _EXFUN(flockfile, (FILE *)); +int _EXFUN(ftrylockfile, (FILE *)); +void _EXFUN(funlockfile, (FILE *)); +int _EXFUN(putc_unlocked, (int, FILE *)); +int _EXFUN(putchar_unlocked, (int)); +#endif /* ! __STRICT_ANSI__ */ /* * Routines in POSIX 1003.1:200x. */ -#if __POSIX_VISIBLE >= 200809 +#ifndef __STRICT_ANSI__ # ifndef _REENT_ONLY # ifndef dprintf -int dprintf (int, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); +int _EXFUN(dprintf, (int, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); # endif -FILE * fmemopen (void *__restrict, size_t, const char *__restrict); +FILE * _EXFUN(fmemopen, (void *__restrict, size_t, const char *__restrict)); /* getdelim - see __getdelim for now */ /* getline - see __getline for now */ -FILE * open_memstream (char **, size_t *); -int vdprintf (int, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -# endif +FILE * _EXFUN(open_memstream, (char **, size_t *)); +#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 +int _EXFUN(renameat, (int, const char *, int, const char *)); #endif -#if __ATFILE_VISIBLE -int renameat (int, const char *, int, const char *); -# ifdef __CYGWIN__ -int renameat2 (int, const char *, int, const char *, unsigned int); +int _EXFUN(vdprintf, (int, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); # endif #endif @@ -393,180 +354,180 @@ int renameat2 (int, const char *, int, const char *, unsigned int); * Recursive versions of the above. */ -int _asiprintf_r (struct _reent *, char **, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -char * _asniprintf_r (struct _reent *, char *, size_t *, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 4, 5))); -char * _asnprintf_r (struct _reent *, char *__restrict, size_t *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 4, 5))); -int _asprintf_r (struct _reent *, char **__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int _diprintf_r (struct _reent *, int, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int _dprintf_r (struct _reent *, int, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int _fclose_r (struct _reent *, FILE *); -int _fcloseall_r (struct _reent *); -FILE * _fdopen_r (struct _reent *, int, const char *); -int _fflush_r (struct _reent *, FILE *); -int _fgetc_r (struct _reent *, FILE *); -int _fgetc_unlocked_r (struct _reent *, FILE *); -char * _fgets_r (struct _reent *, char *__restrict, int, FILE *__restrict); -char * _fgets_unlocked_r (struct _reent *, char *__restrict, int, FILE *__restrict); +int _EXFUN(_asiprintf_r, (struct _reent *, char **, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +char * _EXFUN(_asniprintf_r, (struct _reent *, char *, size_t *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 4, 5)))); +char * _EXFUN(_asnprintf_r, (struct _reent *, char *__restrict, size_t *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 4, 5)))); +int _EXFUN(_asprintf_r, (struct _reent *, char **__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_diprintf_r, (struct _reent *, int, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_dprintf_r, (struct _reent *, int, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_fclose_r, (struct _reent *, FILE *)); +int _EXFUN(_fcloseall_r, (struct _reent *)); +FILE * _EXFUN(_fdopen_r, (struct _reent *, int, const char *)); +int _EXFUN(_fflush_r, (struct _reent *, FILE *)); +int _EXFUN(_fgetc_r, (struct _reent *, FILE *)); +int _EXFUN(_fgetc_unlocked_r, (struct _reent *, FILE *)); +char * _EXFUN(_fgets_r, (struct _reent *, char *__restrict, int, FILE *__restrict)); +char * _EXFUN(_fgets_unlocked_r, (struct _reent *, char *__restrict, int, FILE *__restrict)); #ifdef _COMPILING_NEWLIB -int _fgetpos_r (struct _reent *, FILE *__restrict, _fpos_t *__restrict); -int _fsetpos_r (struct _reent *, FILE *, const _fpos_t *); +int _EXFUN(_fgetpos_r, (struct _reent *, FILE *__restrict, _fpos_t *__restrict)); +int _EXFUN(_fsetpos_r, (struct _reent *, FILE *, const _fpos_t *)); #else -int _fgetpos_r (struct _reent *, FILE *, fpos_t *); -int _fsetpos_r (struct _reent *, FILE *, const fpos_t *); +int _EXFUN(_fgetpos_r, (struct _reent *, FILE *, fpos_t *)); +int _EXFUN(_fsetpos_r, (struct _reent *, FILE *, const fpos_t *)); #endif -int _fiprintf_r (struct _reent *, FILE *, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int _fiscanf_r (struct _reent *, FILE *, const char *, ...) - _ATTRIBUTE ((__format__ (__scanf__, 3, 4))); -FILE * _fmemopen_r (struct _reent *, void *__restrict, size_t, const char *__restrict); -FILE * _fopen_r (struct _reent *, const char *__restrict, const char *__restrict); -FILE * _freopen_r (struct _reent *, const char *__restrict, const char *__restrict, FILE *__restrict); -int _fprintf_r (struct _reent *, FILE *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int _fpurge_r (struct _reent *, FILE *); -int _fputc_r (struct _reent *, int, FILE *); -int _fputc_unlocked_r (struct _reent *, int, FILE *); -int _fputs_r (struct _reent *, const char *__restrict, FILE *__restrict); -int _fputs_unlocked_r (struct _reent *, const char *__restrict, FILE *__restrict); -size_t _fread_r (struct _reent *, void *__restrict, size_t _size, size_t _n, FILE *__restrict); -size_t _fread_unlocked_r (struct _reent *, void *__restrict, size_t _size, size_t _n, FILE *__restrict); -int _fscanf_r (struct _reent *, FILE *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__scanf__, 3, 4))); -int _fseek_r (struct _reent *, FILE *, long, int); -int _fseeko_r (struct _reent *, FILE *, _off_t, int); -long _ftell_r (struct _reent *, FILE *); -_off_t _ftello_r (struct _reent *, FILE *); -void _rewind_r (struct _reent *, FILE *); -size_t _fwrite_r (struct _reent *, const void *__restrict, size_t _size, size_t _n, FILE *__restrict); -size_t _fwrite_unlocked_r (struct _reent *, const void *__restrict, size_t _size, size_t _n, FILE *__restrict); -int _getc_r (struct _reent *, FILE *); -int _getc_unlocked_r (struct _reent *, FILE *); -int _getchar_r (struct _reent *); -int _getchar_unlocked_r (struct _reent *); -char * _gets_r (struct _reent *, char *); -int _iprintf_r (struct _reent *, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); -int _iscanf_r (struct _reent *, const char *, ...) - _ATTRIBUTE ((__format__ (__scanf__, 2, 3))); -FILE * _open_memstream_r (struct _reent *, char **, size_t *); -void _perror_r (struct _reent *, const char *); -int _printf_r (struct _reent *, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 2, 3))); -int _putc_r (struct _reent *, int, FILE *); -int _putc_unlocked_r (struct _reent *, int, FILE *); -int _putchar_unlocked_r (struct _reent *, int); -int _putchar_r (struct _reent *, int); -int _puts_r (struct _reent *, const char *); -int _remove_r (struct _reent *, const char *); -int _rename_r (struct _reent *, - const char *_old, const char *_new); -int _scanf_r (struct _reent *, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__scanf__, 2, 3))); -int _siprintf_r (struct _reent *, char *, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int _siscanf_r (struct _reent *, const char *, const char *, ...) - _ATTRIBUTE ((__format__ (__scanf__, 3, 4))); -int _sniprintf_r (struct _reent *, char *, size_t, const char *, ...) - _ATTRIBUTE ((__format__ (__printf__, 4, 5))); -int _snprintf_r (struct _reent *, char *__restrict, size_t, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 4, 5))); -int _sprintf_r (struct _reent *, char *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__printf__, 3, 4))); -int _sscanf_r (struct _reent *, const char *__restrict, const char *__restrict, ...) - _ATTRIBUTE ((__format__ (__scanf__, 3, 4))); -char * _tempnam_r (struct _reent *, const char *, const char *); -FILE * _tmpfile_r (struct _reent *); -char * _tmpnam_r (struct _reent *, char *); -int _ungetc_r (struct _reent *, int, FILE *); -int _vasiprintf_r (struct _reent *, char **, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -char * _vasniprintf_r (struct _reent*, char *, size_t *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 4, 0))); -char * _vasnprintf_r (struct _reent*, char *, size_t *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 4, 0))); -int _vasprintf_r (struct _reent *, char **, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int _vdiprintf_r (struct _reent *, int, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int _vdprintf_r (struct _reent *, int, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int _vfiprintf_r (struct _reent *, FILE *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int _vfiscanf_r (struct _reent *, FILE *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 3, 0))); -int _vfprintf_r (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int _vfscanf_r (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 3, 0))); -int _viprintf_r (struct _reent *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -int _viscanf_r (struct _reent *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 2, 0))); -int _vprintf_r (struct _reent *, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 2, 0))); -int _vscanf_r (struct _reent *, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 2, 0))); -int _vsiprintf_r (struct _reent *, char *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int _vsiscanf_r (struct _reent *, const char *, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 3, 0))); -int _vsniprintf_r (struct _reent *, char *, size_t, const char *, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 4, 0))); -int _vsnprintf_r (struct _reent *, char *__restrict, size_t, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 4, 0))); -int _vsprintf_r (struct _reent *, char *__restrict, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__printf__, 3, 0))); -int _vsscanf_r (struct _reent *, const char *__restrict, const char *__restrict, __VALIST) - _ATTRIBUTE ((__format__ (__scanf__, 3, 0))); +int _EXFUN(_fiprintf_r, (struct _reent *, FILE *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_fiscanf_r, (struct _reent *, FILE *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 3, 4)))); +FILE * _EXFUN(_fmemopen_r, (struct _reent *, void *__restrict, size_t, const char *__restrict)); +FILE * _EXFUN(_fopen_r, (struct _reent *, const char *__restrict, const char *__restrict)); +FILE * _EXFUN(_freopen_r, (struct _reent *, const char *__restrict, const char *__restrict, FILE *__restrict)); +int _EXFUN(_fprintf_r, (struct _reent *, FILE *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_fpurge_r, (struct _reent *, FILE *)); +int _EXFUN(_fputc_r, (struct _reent *, int, FILE *)); +int _EXFUN(_fputc_unlocked_r, (struct _reent *, int, FILE *)); +int _EXFUN(_fputs_r, (struct _reent *, const char *__restrict, FILE *__restrict)); +int _EXFUN(_fputs_unlocked_r, (struct _reent *, const char *__restrict, FILE *__restrict)); +size_t _EXFUN(_fread_r, (struct _reent *, _PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +size_t _EXFUN(_fread_unlocked_r, (struct _reent *, _PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +int _EXFUN(_fscanf_r, (struct _reent *, FILE *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 3, 4)))); +int _EXFUN(_fseek_r, (struct _reent *, FILE *, long, int)); +int _EXFUN(_fseeko_r,(struct _reent *, FILE *, _off_t, int)); +long _EXFUN(_ftell_r, (struct _reent *, FILE *)); +_off_t _EXFUN(_ftello_r,(struct _reent *, FILE *)); +void _EXFUN(_rewind_r, (struct _reent *, FILE *)); +size_t _EXFUN(_fwrite_r, (struct _reent *, const _PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +size_t _EXFUN(_fwrite_unlocked_r, (struct _reent *, const _PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +int _EXFUN(_getc_r, (struct _reent *, FILE *)); +int _EXFUN(_getc_unlocked_r, (struct _reent *, FILE *)); +int _EXFUN(_getchar_r, (struct _reent *)); +int _EXFUN(_getchar_unlocked_r, (struct _reent *)); +char * _EXFUN(_gets_r, (struct _reent *, char *)); +int _EXFUN(_iprintf_r, (struct _reent *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(_iscanf_r, (struct _reent *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +FILE * _EXFUN(_open_memstream_r, (struct _reent *, char **, size_t *)); +void _EXFUN(_perror_r, (struct _reent *, const char *)); +int _EXFUN(_printf_r, (struct _reent *, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 2, 3)))); +int _EXFUN(_putc_r, (struct _reent *, int, FILE *)); +int _EXFUN(_putc_unlocked_r, (struct _reent *, int, FILE *)); +int _EXFUN(_putchar_unlocked_r, (struct _reent *, int)); +int _EXFUN(_putchar_r, (struct _reent *, int)); +int _EXFUN(_puts_r, (struct _reent *, const char *)); +int _EXFUN(_remove_r, (struct _reent *, const char *)); +int _EXFUN(_rename_r, (struct _reent *, + const char *_old, const char *_new)); +int _EXFUN(_scanf_r, (struct _reent *, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 2, 3)))); +int _EXFUN(_siprintf_r, (struct _reent *, char *, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_siscanf_r, (struct _reent *, const char *, const char *, ...) + _ATTRIBUTE ((__format__ (__scanf__, 3, 4)))); +int _EXFUN(_sniprintf_r, (struct _reent *, char *, size_t, const char *, ...) + _ATTRIBUTE ((__format__ (__printf__, 4, 5)))); +int _EXFUN(_snprintf_r, (struct _reent *, char *__restrict, size_t, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 4, 5)))); +int _EXFUN(_sprintf_r, (struct _reent *, char *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__printf__, 3, 4)))); +int _EXFUN(_sscanf_r, (struct _reent *, const char *__restrict, const char *__restrict, ...) + _ATTRIBUTE ((__format__ (__scanf__, 3, 4)))); +char * _EXFUN(_tempnam_r, (struct _reent *, const char *, const char *)); +FILE * _EXFUN(_tmpfile_r, (struct _reent *)); +char * _EXFUN(_tmpnam_r, (struct _reent *, char *)); +int _EXFUN(_ungetc_r, (struct _reent *, int, FILE *)); +int _EXFUN(_vasiprintf_r, (struct _reent *, char **, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +char * _EXFUN(_vasniprintf_r, (struct _reent*, char *, size_t *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 4, 0)))); +char * _EXFUN(_vasnprintf_r, (struct _reent*, char *, size_t *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 4, 0)))); +int _EXFUN(_vasprintf_r, (struct _reent *, char **, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vdiprintf_r, (struct _reent *, int, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vdprintf_r, (struct _reent *, int, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vfiprintf_r, (struct _reent *, FILE *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vfiscanf_r, (struct _reent *, FILE *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 3, 0)))); +int _EXFUN(_vfprintf_r, (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vfscanf_r, (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 3, 0)))); +int _EXFUN(_viprintf_r, (struct _reent *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(_viscanf_r, (struct _reent *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(_vprintf_r, (struct _reent *, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 2, 0)))); +int _EXFUN(_vscanf_r, (struct _reent *, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 2, 0)))); +int _EXFUN(_vsiprintf_r, (struct _reent *, char *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vsiscanf_r, (struct _reent *, const char *, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 3, 0)))); +int _EXFUN(_vsniprintf_r, (struct _reent *, char *, size_t, const char *, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 4, 0)))); +int _EXFUN(_vsnprintf_r, (struct _reent *, char *__restrict, size_t, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 4, 0)))); +int _EXFUN(_vsprintf_r, (struct _reent *, char *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__printf__, 3, 0)))); +int _EXFUN(_vsscanf_r, (struct _reent *, const char *__restrict, const char *__restrict, __VALIST) + _ATTRIBUTE ((__format__ (__scanf__, 3, 0)))); /* Other extensions. */ -int fpurge (FILE *); -ssize_t __getdelim (char **, size_t *, int, FILE *); -ssize_t __getline (char **, size_t *, FILE *); +int _EXFUN(fpurge, (FILE *)); +ssize_t _EXFUN(__getdelim, (char **, size_t *, int, FILE *)); +ssize_t _EXFUN(__getline, (char **, size_t *, FILE *)); -#if __MISC_VISIBLE -void clearerr_unlocked (FILE *); -int feof_unlocked (FILE *); -int ferror_unlocked (FILE *); -int fileno_unlocked (FILE *); -int fflush_unlocked (FILE *); -int fgetc_unlocked (FILE *); -int fputc_unlocked (int, FILE *); -size_t fread_unlocked (void *__restrict, size_t _size, size_t _n, FILE *__restrict); -size_t fwrite_unlocked (const void *__restrict , size_t _size, size_t _n, FILE *); +#if __BSD_VISIBLE +void _EXFUN(clearerr_unlocked, (FILE *)); +int _EXFUN(feof_unlocked, (FILE *)); +int _EXFUN(ferror_unlocked, (FILE *)); +int _EXFUN(fileno_unlocked, (FILE *)); +int _EXFUN(fflush_unlocked, (FILE *)); +int _EXFUN(fgetc_unlocked, (FILE *)); +int _EXFUN(fputc_unlocked, (int, FILE *)); +size_t _EXFUN(fread_unlocked, (_PTR __restrict, size_t _size, size_t _n, FILE *__restrict)); +size_t _EXFUN(fwrite_unlocked, (const _PTR __restrict , size_t _size, size_t _n, FILE *)); #endif #if __GNU_VISIBLE -char * fgets_unlocked (char *__restrict, int, FILE *__restrict); -int fputs_unlocked (const char *__restrict, FILE *__restrict); +char * _EXFUN(fgets_unlocked, (char *__restrict, int, FILE *__restrict)); +int _EXFUN(fputs_unlocked, (const char *__restrict, FILE *__restrict)); #endif #ifdef __LARGE64_FILES #if !defined(__CYGWIN__) || defined(_COMPILING_NEWLIB) -FILE * fdopen64 (int, const char *); -FILE * fopen64 (const char *, const char *); -FILE * freopen64 (const char *, const char *, FILE *); -_off64_t ftello64 (FILE *); -_off64_t fseeko64 (FILE *, _off64_t, int); -int fgetpos64 (FILE *, _fpos64_t *); -int fsetpos64 (FILE *, const _fpos64_t *); -FILE * tmpfile64 (void); +FILE * _EXFUN(fdopen64, (int, const char *)); +FILE * _EXFUN(fopen64, (const char *, const char *)); +FILE * _EXFUN(freopen64, (_CONST char *, _CONST char *, FILE *)); +_off64_t _EXFUN(ftello64, (FILE *)); +_off64_t _EXFUN(fseeko64, (FILE *, _off64_t, int)); +int _EXFUN(fgetpos64, (FILE *, _fpos64_t *)); +int _EXFUN(fsetpos64, (FILE *, const _fpos64_t *)); +FILE * _EXFUN(tmpfile64, (void)); -FILE * _fdopen64_r (struct _reent *, int, const char *); -FILE * _fopen64_r (struct _reent *,const char *, const char *); -FILE * _freopen64_r (struct _reent *, const char *, const char *, FILE *); -_off64_t _ftello64_r (struct _reent *, FILE *); -_off64_t _fseeko64_r (struct _reent *, FILE *, _off64_t, int); -int _fgetpos64_r (struct _reent *, FILE *, _fpos64_t *); -int _fsetpos64_r (struct _reent *, FILE *, const _fpos64_t *); -FILE * _tmpfile64_r (struct _reent *); +FILE * _EXFUN(_fdopen64_r, (struct _reent *, int, const char *)); +FILE * _EXFUN(_fopen64_r, (struct _reent *,const char *, const char *)); +FILE * _EXFUN(_freopen64_r, (struct _reent *, _CONST char *, _CONST char *, FILE *)); +_off64_t _EXFUN(_ftello64_r, (struct _reent *, FILE *)); +_off64_t _EXFUN(_fseeko64_r, (struct _reent *, FILE *, _off64_t, int)); +int _EXFUN(_fgetpos64_r, (struct _reent *, FILE *, _fpos64_t *)); +int _EXFUN(_fsetpos64_r, (struct _reent *, FILE *, const _fpos64_t *)); +FILE * _EXFUN(_tmpfile64_r, (struct _reent *)); #endif /* !__CYGWIN__ */ #endif /* __LARGE64_FILES */ @@ -574,53 +535,51 @@ FILE * _tmpfile64_r (struct _reent *); * Routines internal to the implementation. */ -int __srget_r (struct _reent *, FILE *); -int __swbuf_r (struct _reent *, int, FILE *); +int _EXFUN(__srget_r, (struct _reent *, FILE *)); +int _EXFUN(__swbuf_r, (struct _reent *, int, FILE *)); /* * Stdio function-access interface. */ -#if __BSD_VISIBLE +#ifndef __STRICT_ANSI__ # ifdef __LARGE64_FILES -FILE *funopen (const void *__cookie, - int (*__readfn)(void *__c, char *__buf, +FILE *_EXFUN(funopen,(const _PTR __cookie, + int (*__readfn)(_PTR __c, char *__buf, _READ_WRITE_BUFSIZE_TYPE __n), - int (*__writefn)(void *__c, const char *__buf, + int (*__writefn)(_PTR __c, const char *__buf, _READ_WRITE_BUFSIZE_TYPE __n), - _fpos64_t (*__seekfn)(void *__c, _fpos64_t __off, int __whence), - int (*__closefn)(void *__c)); -FILE *_funopen_r (struct _reent *, const void *__cookie, - int (*__readfn)(void *__c, char *__buf, + _fpos64_t (*__seekfn)(_PTR __c, _fpos64_t __off, int __whence), + int (*__closefn)(_PTR __c))); +FILE *_EXFUN(_funopen_r,(struct _reent *, const _PTR __cookie, + int (*__readfn)(_PTR __c, char *__buf, _READ_WRITE_BUFSIZE_TYPE __n), - int (*__writefn)(void *__c, const char *__buf, + int (*__writefn)(_PTR __c, const char *__buf, _READ_WRITE_BUFSIZE_TYPE __n), - _fpos64_t (*__seekfn)(void *__c, _fpos64_t __off, int __whence), - int (*__closefn)(void *__c)); + _fpos64_t (*__seekfn)(_PTR __c, _fpos64_t __off, int __whence), + int (*__closefn)(_PTR __c))); # else -FILE *funopen (const void *__cookie, - int (*__readfn)(void *__cookie, char *__buf, +FILE *_EXFUN(funopen,(const _PTR __cookie, + int (*__readfn)(_PTR __cookie, char *__buf, _READ_WRITE_BUFSIZE_TYPE __n), - int (*__writefn)(void *__cookie, const char *__buf, + int (*__writefn)(_PTR __cookie, const char *__buf, _READ_WRITE_BUFSIZE_TYPE __n), - fpos_t (*__seekfn)(void *__cookie, fpos_t __off, int __whence), - int (*__closefn)(void *__cookie)); -FILE *_funopen_r (struct _reent *, const void *__cookie, - int (*__readfn)(void *__cookie, char *__buf, + fpos_t (*__seekfn)(_PTR __cookie, fpos_t __off, int __whence), + int (*__closefn)(_PTR __cookie))); +FILE *_EXFUN(_funopen_r,(struct _reent *, const _PTR __cookie, + int (*__readfn)(_PTR __cookie, char *__buf, _READ_WRITE_BUFSIZE_TYPE __n), - int (*__writefn)(void *__cookie, const char *__buf, + int (*__writefn)(_PTR __cookie, const char *__buf, _READ_WRITE_BUFSIZE_TYPE __n), - fpos_t (*__seekfn)(void *__cookie, fpos_t __off, int __whence), - int (*__closefn)(void *__cookie)); + fpos_t (*__seekfn)(_PTR __cookie, fpos_t __off, int __whence), + int (*__closefn)(_PTR __cookie))); # endif /* !__LARGE64_FILES */ # define fropen(__cookie, __fn) funopen(__cookie, __fn, (int (*)())0, \ (fpos_t (*)())0, (int (*)())0) # define fwopen(__cookie, __fn) funopen(__cookie, (int (*)())0, __fn, \ (fpos_t (*)())0, (int (*)())0) -#endif /* __BSD_VISIBLE */ -#if __GNU_VISIBLE typedef ssize_t cookie_read_function_t(void *__cookie, char *__buf, size_t __n); typedef ssize_t cookie_write_function_t(void *__cookie, const char *__buf, size_t __n); @@ -640,11 +599,11 @@ typedef struct cookie_seek_function_t *seek; cookie_close_function_t *close; } cookie_io_functions_t; -FILE *fopencookie (void *__cookie, - const char *__mode, cookie_io_functions_t __functions); -FILE *_fopencookie_r (struct _reent *, void *__cookie, - const char *__mode, cookie_io_functions_t __functions); -#endif /* __GNU_VISIBLE */ +FILE *_EXFUN(fopencookie,(void *__cookie, + const char *__mode, cookie_io_functions_t __functions)); +FILE *_EXFUN(_fopencookie_r,(struct _reent *, void *__cookie, + const char *__mode, cookie_io_functions_t __functions)); +#endif /* ! __STRICT_ANSI__ */ #ifndef __CUSTOM_FILE_IO__ /* @@ -683,12 +642,10 @@ _ELIDABLE_INLINE int __sgetc_r(struct _reent *__ptr, FILE *__p) #define __sgetc_r(__ptr, __p) __sgetc_raw_r(__ptr, __p) #endif -#ifdef __GNUC__ +#ifdef _never /* __GNUC__ */ +/* If this inline is actually used, then systems using coff debugging + info get hopelessly confused. 21sept93 rich@cygnus.com. */ _ELIDABLE_INLINE int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) { -#ifdef __SCLE - if ((_p->_flags & __SCLE) && _c == '\n') - __sputc_r (_ptr, '\r', _p); -#endif if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) return (*_p->_p++ = _c); else @@ -721,83 +678,50 @@ _ELIDABLE_INLINE int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) { #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) #define __sfileno(p) ((p)->_file) -#ifndef __cplusplus #ifndef _REENT_SMALL #define feof(p) __sfeof(p) #define ferror(p) __sferror(p) #define clearerr(p) __sclearerr(p) -#if __MISC_VISIBLE +#if __BSD_VISIBLE #define feof_unlocked(p) __sfeof(p) #define ferror_unlocked(p) __sferror(p) #define clearerr_unlocked(p) __sclearerr(p) -#endif /* __MISC_VISIBLE */ +#endif /* __BSD_VISIBLE */ #endif /* _REENT_SMALL */ -#if 0 /* __POSIX_VISIBLE - FIXME: must initialize stdio first, use fn */ +#if 0 /*ndef __STRICT_ANSI__ - FIXME: must initialize stdio first, use fn */ #define fileno(p) __sfileno(p) #endif -static __inline int -_getchar_unlocked(void) -{ - struct _reent *_ptr; +#ifndef __CYGWIN__ +#ifndef lint +#define getc(fp) __sgetc_r(_REENT, fp) +#define putc(x, fp) __sputc_r(_REENT, x, fp) +#endif /* lint */ +#endif /* __CYGWIN__ */ - _ptr = _REENT; - return (__sgetc_r(_ptr, _stdin_r(_ptr))); -} - -static __inline int -_putchar_unlocked(int _c) -{ - struct _reent *_ptr; - - _ptr = _REENT; - return (__sputc_r(_ptr, _c, _stdout_r(_ptr))); -} - -#ifdef __SINGLE_THREAD__ -#define getc(_p) __sgetc_r(_REENT, _p) -#define putc(_c, _p) __sputc_r(_REENT, _c, _p) -#define getchar() _getchar_unlocked() -#define putchar(_c) _putchar_unlocked(_c) -#endif /* __SINGLE_THREAD__ */ - -#if __MISC_VISIBLE || __POSIX_VISIBLE -#define getchar_unlocked() _getchar_unlocked() -#define putchar_unlocked(_c) _putchar_unlocked(_c) -#endif -#endif /* __cplusplus */ - -#if __MISC_VISIBLE +#ifndef __STRICT_ANSI__ /* fast always-buffered version, true iff error */ #define fast_putc(x,p) (--(p)->_w < 0 ? \ __swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0)) -#endif -#if __GNU_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 600) #define L_cuserid 9 /* posix says it goes in stdio.h :( */ -#endif -#if __POSIX_VISIBLE +#ifdef __CYGWIN__ #define L_ctermid 16 #endif - -#else /* __CUSTOM_FILE_IO__ */ - -#define getchar() getc(stdin) -#define putchar(x) putc(x, stdout) - -#if __MISC_VISIBLE || __POSIX_VISIBLE -#define getchar_unlocked() getc_unlocked(stdin) -#define putchar_unlocked(x) putc_unlocked(x, stdout) #endif #endif /* !__CUSTOM_FILE_IO__ */ -_END_STD_C +#define getchar() getc(stdin) +#define putchar(x) putc(x, stdout) -#if __SSP_FORTIFY_LEVEL > 0 -#include +#ifndef __STRICT_ANSI__ +#define getchar_unlocked() getc_unlocked(stdin) +#define putchar_unlocked(x) putc_unlocked(x, stdout) #endif +_END_STD_C + #endif /* _STDIO_H_ */ diff --git a/libc/xtensa-lx106-elf/include/stdio_ext.h b/libc/xtensa-lx106-elf/include/stdio_ext.h index 231262d..029ab02 100644 --- a/libc/xtensa-lx106-elf/include/stdio_ext.h +++ b/libc/xtensa-lx106-elf/include/stdio_ext.h @@ -19,8 +19,8 @@ _BEGIN_STD_C -void __fpurge (FILE *); -int __fsetlocking (FILE *, int); +void _EXFUN(__fpurge,(FILE *)); +int _EXFUN(__fsetlocking,(FILE *, int)); /* TODO: @@ -52,13 +52,13 @@ __fpending (FILE *__fp) { return __fp->_p - __fp->_bf._base; } #else -size_t __fbufsize (FILE *); -int __freading (FILE *); -int __fwriting (FILE *); -int __freadable (FILE *); -int __fwritable (FILE *); -int __flbf (FILE *); -size_t __fpending (FILE *); +size_t _EXFUN(__fbufsize,(FILE *)); +int _EXFUN(__freading,(FILE *)); +int _EXFUN(__fwriting,(FILE *)); +int _EXFUN(__freadable,(FILE *)); +int _EXFUN(__fwritable,(FILE *)); +int _EXFUN(__flbf,(FILE *)); +size_t _EXFUN(__fpending,(FILE *)); #ifndef __cplusplus diff --git a/libc/xtensa-lx106-elf/include/stdlib.h b/libc/xtensa-lx106-elf/include/stdlib.h index 5417ac0..254ddd7 100644 --- a/libc/xtensa-lx106-elf/include/stdlib.h +++ b/libc/xtensa-lx106-elf/include/stdlib.h @@ -26,10 +26,6 @@ #include #endif -#if __GNU_VISIBLE -#include -#endif - _BEGIN_STD_C typedef struct @@ -44,7 +40,9 @@ typedef struct long rem; /* remainder */ } ldiv_t; -#if __ISO_C_VISIBLE >= 1999 +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) typedef struct { long long int quot; /* quotient */ @@ -54,7 +52,7 @@ typedef struct #ifndef __compar_fn_t_defined #define __compar_fn_t_defined -typedef int (*__compar_fn_t) (const void *, const void *); +typedef int (*__compar_fn_t) (const _PTR, const _PTR); #endif #ifndef NULL @@ -66,280 +64,234 @@ typedef int (*__compar_fn_t) (const void *, const void *); #define RAND_MAX __RAND_MAX -int __locale_mb_cur_max (void); +int _EXFUN(__locale_mb_cur_max,(_VOID)); #define MB_CUR_MAX __locale_mb_cur_max() -void abort (void) _ATTRIBUTE ((__noreturn__)); -int abs (int); -#if __BSD_VISIBLE -__uint32_t arc4random (void); -__uint32_t arc4random_uniform (__uint32_t); -void arc4random_buf (void *, size_t); +_VOID _EXFUN(abort,(_VOID) _ATTRIBUTE ((__noreturn__))); +int _EXFUN(abs,(int)); +int _EXFUN(atexit,(_VOID (*__func)(_VOID))); +double _EXFUN(atof,(const char *__nptr)); +#ifndef __STRICT_ANSI__ +float _EXFUN(atoff,(const char *__nptr)); #endif -int atexit (void (*__func)(void)); -double atof (const char *__nptr); -#if __MISC_VISIBLE -float atoff (const char *__nptr); -#endif -int atoi (const char *__nptr); -int _atoi_r (struct _reent *, const char *__nptr); -long atol (const char *__nptr); -long _atol_r (struct _reent *, const char *__nptr); -void * bsearch (const void *__key, - const void *__base, +int _EXFUN(atoi,(const char *__nptr)); +int _EXFUN(_atoi_r,(struct _reent *, const char *__nptr)); +long _EXFUN(atol,(const char *__nptr)); +long _EXFUN(_atol_r,(struct _reent *, const char *__nptr)); +_PTR _EXFUN(bsearch,(const _PTR __key, + const _PTR __base, size_t __nmemb, size_t __size, - __compar_fn_t _compar); -void * calloc (size_t __nmemb, size_t __size) _NOTHROW; -div_t div (int __numer, int __denom); -void exit (int __status) _ATTRIBUTE ((__noreturn__)); -void free (void *) _NOTHROW; -char * getenv (const char *__string); -char * _getenv_r (struct _reent *, const char *__string); -char * _findenv (const char *, int *); -char * _findenv_r (struct _reent *, const char *, int *); -#if __POSIX_VISIBLE >= 200809 + __compar_fn_t _compar)); +_PTR _EXFUN_NOTHROW(calloc,(size_t __nmemb, size_t __size)); +div_t _EXFUN(div,(int __numer, int __denom)); +_VOID _EXFUN(exit,(int __status) _ATTRIBUTE ((__noreturn__))); +_VOID _EXFUN_NOTHROW(free,(_PTR)); +char * _EXFUN(getenv,(const char *__string)); +char * _EXFUN(_getenv_r,(struct _reent *, const char *__string)); +char * _EXFUN(_findenv,(_CONST char *, int *)); +char * _EXFUN(_findenv_r,(struct _reent *, _CONST char *, int *)); +#ifndef __STRICT_ANSI__ extern char *suboptarg; /* getsubopt(3) external variable */ -int getsubopt (char **, char * const *, char **); +int _EXFUN(getsubopt,(char **, char * const *, char **)); #endif -long labs (long); -ldiv_t ldiv (long __numer, long __denom); -void * malloc (size_t __size) _NOTHROW; -int mblen (const char *, size_t); -int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *); -int mbtowc (wchar_t *__restrict, const char *__restrict, size_t); -int _mbtowc_r (struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *); -int wctomb (char *, wchar_t); -int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *); -size_t mbstowcs (wchar_t *__restrict, const char *__restrict, size_t); -size_t _mbstowcs_r (struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *); -size_t wcstombs (char *__restrict, const wchar_t *__restrict, size_t); -size_t _wcstombs_r (struct _reent *, char *__restrict, const wchar_t *__restrict, size_t, _mbstate_t *); +long _EXFUN(labs,(long)); +ldiv_t _EXFUN(ldiv,(long __numer, long __denom)); +_PTR _EXFUN_NOTHROW(malloc,(size_t __size)); +int _EXFUN(mblen,(const char *, size_t)); +int _EXFUN(_mblen_r,(struct _reent *, const char *, size_t, _mbstate_t *)); +int _EXFUN(mbtowc,(wchar_t *__restrict, const char *__restrict, size_t)); +int _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *)); +int _EXFUN(wctomb,(char *, wchar_t)); +int _EXFUN(_wctomb_r,(struct _reent *, char *, wchar_t, _mbstate_t *)); +size_t _EXFUN(mbstowcs,(wchar_t *__restrict, const char *__restrict, size_t)); +size_t _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *)); +size_t _EXFUN(wcstombs,(char *__restrict, const wchar_t *__restrict, size_t)); +size_t _EXFUN(_wcstombs_r,(struct _reent *, char *__restrict, const wchar_t *__restrict, size_t, _mbstate_t *)); +#ifndef __STRICT_ANSI__ #ifndef _REENT_ONLY -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 -char * mkdtemp (char *); +char * _EXFUN(mkdtemp,(char *)); +int _EXFUN(mkostemp,(char *, int)); +int _EXFUN(mkostemps,(char *, int, int)); +int _EXFUN(mkstemp,(char *)); +int _EXFUN(mkstemps,(char *, int)); +#if (__GNUC__ < 4) || defined(__XTENSA__) +char * _EXFUN(mktemp,(char *)); +#else +char * _EXFUN(mktemp,(char *) _ATTRIBUTE ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead")))); #endif -#if __GNU_VISIBLE -int mkostemp (char *, int); -int mkostemps (char *, int, int); #endif -#if __MISC_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 4 -int mkstemp (char *); +char * _EXFUN(_mkdtemp_r, (struct _reent *, char *)); +int _EXFUN(_mkostemp_r, (struct _reent *, char *, int)); +int _EXFUN(_mkostemps_r, (struct _reent *, char *, int, int)); +int _EXFUN(_mkstemp_r, (struct _reent *, char *)); +int _EXFUN(_mkstemps_r, (struct _reent *, char *, int)); +#if (__GNUC__ < 4) || defined(__XTENSA__) +char * _EXFUN(_mktemp_r, (struct _reent *, char *)); +#else +char * _EXFUN(_mktemp_r, (struct _reent *, char *) _ATTRIBUTE ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead")))); #endif -#if __MISC_VISIBLE -int mkstemps (char *, int); #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112) -char * mktemp (char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead"))); +_VOID _EXFUN(qsort,(_PTR __base, size_t __nmemb, size_t __size, __compar_fn_t _compar)); +int _EXFUN(rand,(_VOID)); +_PTR _EXFUN_NOTHROW(realloc,(_PTR __r, size_t __size)); +#ifndef __STRICT_ANSI__ +_PTR _EXFUN(reallocf,(_PTR __r, size_t __size)); +char * _EXFUN(realpath, (const char *__restrict path, char *__restrict resolved_path)); #endif -#endif /* !_REENT_ONLY */ -char * _mkdtemp_r (struct _reent *, char *); -int _mkostemp_r (struct _reent *, char *, int); -int _mkostemps_r (struct _reent *, char *, int, int); -int _mkstemp_r (struct _reent *, char *); -int _mkstemps_r (struct _reent *, char *, int); -char * _mktemp_r (struct _reent *, char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead"))); -void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar); -int rand (void); -void * realloc (void *__r, size_t __size) _NOTHROW; -#if __BSD_VISIBLE -void *reallocarray(void *, size_t, size_t) __result_use_check __alloc_size(2) - __alloc_size(3); -void * reallocf (void *__r, size_t __size); +_VOID _EXFUN(srand,(unsigned __seed)); +double _EXFUN(strtod,(const char *__restrict __n, char **__restrict __end_PTR)); +double _EXFUN(_strtod_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR)); +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +float _EXFUN(strtof,(const char *__restrict __n, char **__restrict __end_PTR)); #endif -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 -char * realpath (const char *__restrict path, char *__restrict resolved_path); -#endif -#if __BSD_VISIBLE -int rpmatch (const char *response); -#endif -#if __XSI_VISIBLE -void setkey (const char *__key); -#endif -void srand (unsigned __seed); -double strtod (const char *__restrict __n, char **__restrict __end_PTR); -double _strtod_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR); -#if __ISO_C_VISIBLE >= 1999 -float strtof (const char *__restrict __n, char **__restrict __end_PTR); -#endif -#if __MISC_VISIBLE +#ifndef __STRICT_ANSI__ /* the following strtodf interface is deprecated...use strtof instead */ -# ifndef strtodf +# ifndef strtodf # define strtodf strtof # endif #endif -long strtol (const char *__restrict __n, char **__restrict __end_PTR, int __base); -long _strtol_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base); -unsigned long strtoul (const char *__restrict __n, char **__restrict __end_PTR, int __base); -unsigned long _strtoul_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base); +long _EXFUN(strtol,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); +long _EXFUN(_strtol_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base)); +unsigned long _EXFUN(strtoul,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); +unsigned long _EXFUN(_strtoul_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base)); -#if __GNU_VISIBLE -double strtod_l (const char *__restrict, char **__restrict, locale_t); -float strtof_l (const char *__restrict, char **__restrict, locale_t); -#ifdef _HAVE_LONG_DOUBLE -extern long double strtold_l (const char *__restrict, char **__restrict, - locale_t); -#endif /* _HAVE_LONG_DOUBLE */ -long strtol_l (const char *__restrict, char **__restrict, int, locale_t); -unsigned long strtoul_l (const char *__restrict, char **__restrict, int, - locale_t __loc); -long long strtoll_l (const char *__restrict, char **__restrict, int, locale_t); -unsigned long long strtoull_l (const char *__restrict, char **__restrict, int, - locale_t __loc); -#endif +int _EXFUN(system,(const char *__string)); -int system (const char *__string); +#ifndef __STRICT_ANSI__ +long _EXFUN(a64l,(const char *__input)); +char * _EXFUN(l64a,(long __input)); +char * _EXFUN(_l64a_r,(struct _reent *,long __input)); +int _EXFUN(on_exit,(_VOID (*__func)(int, _PTR),_PTR __arg)); +#endif /* ! __STRICT_ANSI__ */ +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +_VOID _EXFUN(_Exit,(int __status) _ATTRIBUTE ((__noreturn__))); +#endif +#ifndef __STRICT_ANSI__ +int _EXFUN(putenv,(char *__string)); +int _EXFUN(_putenv_r,(struct _reent *, char *__string)); +_PTR _EXFUN(_reallocf_r,(struct _reent *, _PTR, size_t)); +int _EXFUN(setenv,(const char *__string, const char *__value, int __overwrite)); +int _EXFUN(_setenv_r,(struct _reent *, const char *__string, const char *__value, int __overwrite)); -#if __SVID_VISIBLE || __XSI_VISIBLE >= 4 -long a64l (const char *__input); -char * l64a (long __input); -char * _l64a_r (struct _reent *,long __input); +char * _EXFUN(gcvt,(double,int,char *)); +char * _EXFUN(gcvtf,(float,int,char *)); +char * _EXFUN(fcvt,(double,int,int *,int *)); +char * _EXFUN(fcvtf,(float,int,int *,int *)); +char * _EXFUN(ecvt,(double,int,int *,int *)); +char * _EXFUN(ecvtbuf,(double, int, int*, int*, char *)); +char * _EXFUN(fcvtbuf,(double, int, int*, int*, char *)); +char * _EXFUN(ecvtf,(float,int,int *,int *)); +char * _EXFUN(dtoa,(double, int, int, int *, int*, char**)); #endif -#if __MISC_VISIBLE -int on_exit (void (*__func)(int, void *),void *__arg); -#endif -#if __ISO_C_VISIBLE >= 1999 -void _Exit (int __status) _ATTRIBUTE ((__noreturn__)); -#endif -#if __SVID_VISIBLE || __XSI_VISIBLE -int putenv (char *__string); -#endif -int _putenv_r (struct _reent *, char *__string); -void * _reallocf_r (struct _reent *, void *, size_t); -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 -int setenv (const char *__string, const char *__value, int __overwrite); -#endif -int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite); +char * _EXFUN(__itoa,(int, char *, int)); +char * _EXFUN(__utoa,(unsigned, char *, int)); +#ifndef __STRICT_ANSI__ +char * _EXFUN(itoa,(int, char *, int)); +char * _EXFUN(utoa,(unsigned, char *, int)); +int _EXFUN(rand_r,(unsigned *__seed)); -#if __XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112 -char * gcvt (double,int,char *); -char * gcvtf (float,int,char *); -char * fcvt (double,int,int *,int *); -char * fcvtf (float,int,int *,int *); -char * ecvt (double,int,int *,int *); -char * ecvtbuf (double, int, int*, int*, char *); -char * fcvtbuf (double, int, int*, int*, char *); -char * ecvtf (float,int,int *,int *); -#endif -char * __itoa (int, char *, int); -char * __utoa (unsigned, char *, int); -#if __MISC_VISIBLE -char * itoa (int, char *, int); -char * utoa (unsigned, char *, int); -#endif -#if __POSIX_VISIBLE -int rand_r (unsigned *__seed); -#endif - -#if __SVID_VISIBLE || __XSI_VISIBLE -double drand48 (void); -double _drand48_r (struct _reent *); -double erand48 (unsigned short [3]); -double _erand48_r (struct _reent *, unsigned short [3]); -long jrand48 (unsigned short [3]); -long _jrand48_r (struct _reent *, unsigned short [3]); -void lcong48 (unsigned short [7]); -void _lcong48_r (struct _reent *, unsigned short [7]); -long lrand48 (void); -long _lrand48_r (struct _reent *); -long mrand48 (void); -long _mrand48_r (struct _reent *); -long nrand48 (unsigned short [3]); -long _nrand48_r (struct _reent *, unsigned short [3]); +double _EXFUN(drand48,(_VOID)); +double _EXFUN(_drand48_r,(struct _reent *)); +double _EXFUN(erand48,(unsigned short [3])); +double _EXFUN(_erand48_r,(struct _reent *, unsigned short [3])); +long _EXFUN(jrand48,(unsigned short [3])); +long _EXFUN(_jrand48_r,(struct _reent *, unsigned short [3])); +_VOID _EXFUN(lcong48,(unsigned short [7])); +_VOID _EXFUN(_lcong48_r,(struct _reent *, unsigned short [7])); +long _EXFUN(lrand48,(_VOID)); +long _EXFUN(_lrand48_r,(struct _reent *)); +long _EXFUN(mrand48,(_VOID)); +long _EXFUN(_mrand48_r,(struct _reent *)); +long _EXFUN(nrand48,(unsigned short [3])); +long _EXFUN(_nrand48_r,(struct _reent *, unsigned short [3])); unsigned short * - seed48 (unsigned short [3]); + _EXFUN(seed48,(unsigned short [3])); unsigned short * - _seed48_r (struct _reent *, unsigned short [3]); -void srand48 (long); -void _srand48_r (struct _reent *, long); -#endif /* __SVID_VISIBLE || __XSI_VISIBLE */ -#if __SVID_VISIBLE || __XSI_VISIBLE >= 4 || __BSD_VISIBLE -char * initstate (unsigned, char *, size_t); -long random (void); -char * setstate (char *); -void srandom (unsigned); + _EXFUN(_seed48_r,(struct _reent *, unsigned short [3])); +_VOID _EXFUN(srand48,(long)); +_VOID _EXFUN(_srand48_r,(struct _reent *, long)); +#endif /* ! __STRICT_ANSI__ */ +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +long long _EXFUN(atoll,(const char *__nptr)); #endif -#if __ISO_C_VISIBLE >= 1999 -long long atoll (const char *__nptr); +#ifndef __STRICT_ANSI__ +long long _EXFUN(_atoll_r,(struct _reent *, const char *__nptr)); +#endif /* ! __STRICT_ANSI__ */ +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +long long _EXFUN(llabs,(long long)); +lldiv_t _EXFUN(lldiv,(long long __numer, long long __denom)); +long long _EXFUN(strtoll,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); #endif -long long _atoll_r (struct _reent *, const char *__nptr); -#if __ISO_C_VISIBLE >= 1999 -long long llabs (long long); -lldiv_t lldiv (long long __numer, long long __denom); -long long strtoll (const char *__restrict __n, char **__restrict __end_PTR, int __base); +#ifndef __STRICT_ANSI__ +long long _EXFUN(_strtoll_r,(struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base)); +#endif /* ! __STRICT_ANSI__ */ +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) +unsigned long long _EXFUN(strtoull,(const char *__restrict __n, char **__restrict __end_PTR, int __base)); #endif -long long _strtoll_r (struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base); -#if __ISO_C_VISIBLE >= 1999 -unsigned long long strtoull (const char *__restrict __n, char **__restrict __end_PTR, int __base); -#endif -unsigned long long _strtoull_r (struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base); +#ifndef __STRICT_ANSI__ +unsigned long long _EXFUN(_strtoull_r,(struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base)); #ifndef __CYGWIN__ -#if __MISC_VISIBLE -void cfree (void *); -#endif -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 -int unsetenv (const char *__string); -#endif -int _unsetenv_r (struct _reent *, const char *__string); -#endif /* !__CYGWIN__ */ - -#if __POSIX_VISIBLE >= 200112 -int __nonnull ((1)) posix_memalign (void **, size_t, size_t); +_VOID _EXFUN(cfree,(_PTR)); +int _EXFUN(unsetenv,(const char *__string)); +int _EXFUN(_unsetenv_r,(struct _reent *, const char *__string)); #endif -char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**); +#ifdef __rtems__ +int _EXFUN(posix_memalign,(void **, size_t, size_t)); +#endif + +#endif /* ! __STRICT_ANSI__ */ + +char * _EXFUN(_dtoa_r,(struct _reent *, double, int, int, int *, int*, char**)); #ifndef __CYGWIN__ -void * _malloc_r (struct _reent *, size_t) _NOTHROW; -void * _calloc_r (struct _reent *, size_t, size_t) _NOTHROW; -void _free_r (struct _reent *, void *) _NOTHROW; -void * _realloc_r (struct _reent *, void *, size_t) _NOTHROW; -void _mstats_r (struct _reent *, char *); +_PTR _EXFUN_NOTHROW(_malloc_r,(struct _reent *, size_t)); +_PTR _EXFUN_NOTHROW(_calloc_r,(struct _reent *, size_t, size_t)); +_VOID _EXFUN_NOTHROW(_free_r,(struct _reent *, _PTR)); +_PTR _EXFUN_NOTHROW(_realloc_r,(struct _reent *, _PTR, size_t)); +_VOID _EXFUN(_mstats_r,(struct _reent *, char *)); #endif -int _system_r (struct _reent *, const char *); +int _EXFUN(_system_r,(struct _reent *, const char *)); -void __eprintf (const char *, const char *, unsigned int, const char *); +_VOID _EXFUN(__eprintf,(const char *, const char *, unsigned int, const char *)); /* There are two common qsort_r variants. If you request _BSD_SOURCE, you get the BSD version; otherwise you get the GNU version. We want that #undef qsort_r will still let you invoke the underlying function, but that requires gcc support. */ -#if __GNU_VISIBLE -void qsort_r (void *__base, size_t __nmemb, size_t __size, int (*_compar)(const void *, const void *, void *), void *__thunk); -#elif __BSD_VISIBLE +#ifdef _BSD_SOURCE # ifdef __GNUC__ -void qsort_r (void *__base, size_t __nmemb, size_t __size, void *__thunk, int (*_compar)(void *, const void *, const void *)) +_VOID _EXFUN(qsort_r,(_PTR __base, size_t __nmemb, size_t __size, _PTR __thunk, int (*_compar)(_PTR, const _PTR, const _PTR))) __asm__ (__ASMNAME ("__bsd_qsort_r")); # else -void __bsd_qsort_r (void *__base, size_t __nmemb, size_t __size, void *__thunk, int (*_compar)(void *, const void *, const void *)); +_VOID _EXFUN(__bsd_qsort_r,(_PTR __base, size_t __nmemb, size_t __size, _PTR __thunk, int (*_compar)(_PTR, const _PTR, const _PTR))); # define qsort_r __bsd_qsort_r # endif +#elif __GNU_VISIBLE +_VOID _EXFUN(qsort_r,(_PTR __base, size_t __nmemb, size_t __size, int (*_compar)(const _PTR, const _PTR, _PTR), _PTR __thunk)); #endif /* On platforms where long double equals double. */ #ifdef _HAVE_LONG_DOUBLE -extern long double _strtold_r (struct _reent *, const char *__restrict, char **__restrict); -#if __ISO_C_VISIBLE >= 1999 +#if !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + (defined(__cplusplus) && __cplusplus >= 201103L) extern long double strtold (const char *__restrict, char **__restrict); #endif #endif /* _HAVE_LONG_DOUBLE */ -/* - * If we're in a mode greater than C99, expose C11 functions. - */ -#if __ISO_C_VISIBLE >= 2011 -void * aligned_alloc(size_t, size_t) __malloc_like __alloc_align(1) - __alloc_size(2); -int at_quick_exit(void (*)(void)); -_Noreturn void - quick_exit(int); -#endif /* __ISO_C_VISIBLE >= 2011 */ - _END_STD_C -#if __SSP_FORTIFY_LEVEL > 0 -#include -#endif - #endif /* _STDLIB_H_ */ diff --git a/libc/xtensa-lx106-elf/include/string.h b/libc/xtensa-lx106-elf/include/string.h index 37febad..af5c9da 100644 --- a/libc/xtensa-lx106-elf/include/string.h +++ b/libc/xtensa-lx106-elf/include/string.h @@ -16,168 +16,152 @@ #define __need_NULL #include -#if __POSIX_VISIBLE >= 200809 -#include -#endif - -#if __BSD_VISIBLE -#include -#endif - _BEGIN_STD_C -void * memchr (const void *, int, size_t); -int memcmp (const void *, const void *, size_t); -void * memcpy (void *__restrict, const void *__restrict, size_t); -void * memmove (void *, const void *, size_t); -void * memset (void *, int, size_t); -char *strcat (char *__restrict, const char *__restrict); -char *strchr (const char *, int); -int strcmp (const char *, const char *); -int strcoll (const char *, const char *); -char *strcpy (char *__restrict, const char *__restrict); -size_t strcspn (const char *, const char *); -char *strerror (int); -size_t strlen (const char *); -char *strncat (char *__restrict, const char *__restrict, size_t); -int strncmp (const char *, const char *, size_t); -char *strncpy (char *__restrict, const char *__restrict, size_t); -char *strpbrk (const char *, const char *); -char *strrchr (const char *, int); -size_t strspn (const char *, const char *); -char *strstr (const char *, const char *); +_PTR _EXFUN(memchr,(const _PTR, int, size_t)); +int _EXFUN(memcmp,(const _PTR, const _PTR, size_t)); +_PTR _EXFUN(memcpy,(_PTR __restrict, const _PTR __restrict, size_t)); +_PTR _EXFUN(memmove,(_PTR, const _PTR, size_t)); +_PTR _EXFUN(memset,(_PTR, int, size_t)); +char *_EXFUN(strcat,(char *__restrict, const char *__restrict)); +char *_EXFUN(strchr,(const char *, int)); +int _EXFUN(strcmp,(const char *, const char *)); +int _EXFUN(strcoll,(const char *, const char *)); +char *_EXFUN(strcpy,(char *__restrict, const char *__restrict)); +size_t _EXFUN(strcspn,(const char *, const char *)); +char *_EXFUN(strerror,(int)); +size_t _EXFUN(strlen,(const char *)); +char *_EXFUN(strncat,(char *__restrict, const char *__restrict, size_t)); +int _EXFUN(strncmp,(const char *, const char *, size_t)); +char *_EXFUN(strncpy,(char *__restrict, const char *__restrict, size_t)); +char *_EXFUN(strpbrk,(const char *, const char *)); +char *_EXFUN(strrchr,(const char *, int)); +size_t _EXFUN(strspn,(const char *, const char *)); +char *_EXFUN(strstr,(const char *, const char *)); #ifndef _REENT_ONLY -char *strtok (char *__restrict, const char *__restrict); +char *_EXFUN(strtok,(char *__restrict, const char *__restrict)); #endif -size_t strxfrm (char *__restrict, const char *__restrict, size_t); +size_t _EXFUN(strxfrm,(char *__restrict, const char *__restrict, size_t)); -#if __POSIX_VISIBLE >= 200809 -int strcoll_l (const char *, const char *, locale_t); -char *strerror_l (int, locale_t); -size_t strxfrm_l (char *__restrict, const char *__restrict, size_t, locale_t); -#endif -#if __MISC_VISIBLE || __POSIX_VISIBLE -char *strtok_r (char *__restrict, const char *__restrict, char **__restrict); +#if __POSIX_VISIBLE +char *_EXFUN(strtok_r,(char *__restrict, const char *__restrict, char **__restrict)); #endif #if __BSD_VISIBLE -int timingsafe_bcmp (const void *, const void *, size_t); -int timingsafe_memcmp (const void *, const void *, size_t); +int _EXFUN(bcmp,(const void *, const void *, size_t)); +void _EXFUN(bcopy,(const void *, void *, size_t)); +void _EXFUN(bzero,(void *, size_t)); +int _EXFUN(ffs,(int)); +char *_EXFUN(index,(const char *, int)); #endif -#if __MISC_VISIBLE || __POSIX_VISIBLE -void * memccpy (void *__restrict, const void *__restrict, int, size_t); +#if __BSD_VISIBLE || __XSI_VISIBLE +_PTR _EXFUN(memccpy,(_PTR __restrict, const _PTR __restrict, int, size_t)); #endif #if __GNU_VISIBLE -void * mempcpy (void *, const void *, size_t); -void * memmem (const void *, size_t, const void *, size_t); -void * memrchr (const void *, int, size_t); -void * rawmemchr (const void *, int); +_PTR _EXFUN(mempcpy,(_PTR, const _PTR, size_t)); +_PTR _EXFUN(memmem, (const _PTR, size_t, const _PTR, size_t)); #endif -#if __POSIX_VISIBLE >= 200809 -char *stpcpy (char *__restrict, const char *__restrict); -char *stpncpy (char *__restrict, const char *__restrict, size_t); +_PTR _EXFUN(memrchr,(const _PTR, int, size_t)); +#if __GNU_VISIBLE +_PTR _EXFUN(rawmemchr,(const _PTR, int)); +#endif +#if __BSD_VISIBLE +char *_EXFUN(rindex,(const char *, int)); +#endif +char *_EXFUN(stpcpy,(char *__restrict, const char *__restrict)); +char *_EXFUN(stpncpy,(char *__restrict, const char *__restrict, size_t)); +#if __BSD_VISIBLE || __POSIX_VISIBLE +int _EXFUN(strcasecmp,(const char *, const char *)); #endif #if __GNU_VISIBLE -char *strcasestr (const char *, const char *); -char *strchrnul (const char *, int); +char *_EXFUN(strcasestr,(const char *, const char *)); +char *_EXFUN(strchrnul,(const char *, int)); #endif -#if __MISC_VISIBLE || __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 4 -char *strdup (const char *); +#if __XSI_VISIBLE >= 500 +char *_EXFUN(strdup,(const char *)); #endif -char *_strdup_r (struct _reent *, const char *); -#if __POSIX_VISIBLE >= 200809 -char *strndup (const char *, size_t); +#ifndef __STRICT_ANSI__ +char *_EXFUN(_strdup_r,(struct _reent *, const char *)); +#endif +#if __XSI_VISIBLE >= 700 +char *_EXFUN(strndup,(const char *, size_t)); +#endif + +#ifndef __STRICT_ANSI__ +char *_EXFUN(_strndup_r,(struct _reent *, const char *, size_t)); +#endif + +#if __GNU_VISIBLE +int _EXFUN(ffsl,(long)); +int _EXFUN(ffsll, (long long)); #endif -char *_strndup_r (struct _reent *, const char *, size_t); /* There are two common strerror_r variants. If you request _GNU_SOURCE, you get the GNU version; otherwise you get the POSIX version. POSIX requires that #undef strerror_r will still let you invoke the underlying function, but that requires gcc support. */ #if __GNU_VISIBLE -char *strerror_r (int, char *, size_t); -#elif __POSIX_VISIBLE >= 200112 +char *_EXFUN(strerror_r,(int, char *, size_t)); +#else # ifdef __GNUC__ -int strerror_r (int, char *, size_t) -#ifdef __ASMNAME - __asm__ (__ASMNAME ("__xpg_strerror_r")) -#endif - ; +int _EXFUN(strerror_r,(int, char *, size_t)) + __asm__ (__ASMNAME ("__xpg_strerror_r")); # else -int __xpg_strerror_r (int, char *, size_t); +int _EXFUN(__xpg_strerror_r,(int, char *, size_t)); # define strerror_r __xpg_strerror_r # endif #endif /* Reentrant version of strerror. */ -char * _strerror_r (struct _reent *, int, int, int *); +char * _EXFUN(_strerror_r, (struct _reent *, int, int, int *)); #if __BSD_VISIBLE -size_t strlcat (char *, const char *, size_t); -size_t strlcpy (char *, const char *, size_t); +size_t _EXFUN(strlcat,(char *, const char *, size_t)); +size_t _EXFUN(strlcpy,(char *, const char *, size_t)); #endif -#if __POSIX_VISIBLE >= 200809 -size_t strnlen (const char *, size_t); +#if __BSD_VISIBLE || __POSIX_VISIBLE +int _EXFUN(strncasecmp,(const char *, const char *, size_t)); +#endif +#if !defined(__STRICT_ANSI__) || __POSIX_VISIBLE >= 200809 || \ + __XSI_VISIBLE >= 700 +size_t _EXFUN(strnlen,(const char *, size_t)); #endif #if __BSD_VISIBLE -char *strsep (char **, const char *); -#endif -#if __BSD_VISIBLE -char *strnstr(const char *, const char *, size_t) __pure; +char *_EXFUN(strsep,(char **, const char *)); #endif -#if __MISC_VISIBLE -char *strlwr (char *); -char *strupr (char *); +/* + * The origin of these is unknown to me so I am conditionalizing them + * on __STRICT_ANSI__. Finetuning this is definitely needed. --joel + */ +#if !defined(__STRICT_ANSI__) +char *_EXFUN(strlwr,(char *)); +char *_EXFUN(strupr,(char *)); #endif #ifndef DEFS_H /* Kludge to work around problem compiling in gdb */ -char *strsignal (int __signo); +char *_EXFUN(strsignal, (int __signo)); #endif #ifdef __CYGWIN__ -int strtosigno (const char *__name); +int _EXFUN(strtosigno, (const char *__name)); #endif -#if __GNU_VISIBLE -int strverscmp (const char *, const char *); -#endif - -#if __GNU_VISIBLE && defined(__GNUC__) +#if defined _GNU_SOURCE && defined __GNUC__ #define strdupa(__s) \ - (__extension__ ({const char *__sin = (__s); \ - size_t __len = strlen (__sin) + 1; \ - char * __sout = (char *) __builtin_alloca (__len); \ - (char *) memcpy (__sout, __sin, __len);})) + (__extension__ ({const char *__in = (__s); \ + size_t __len = strlen (__in) + 1; \ + char * __out = (char *) __builtin_alloca (__len); \ + (char *) memcpy (__out, __in, __len);})) #define strndupa(__s, __n) \ - (__extension__ ({const char *__sin = (__s); \ - size_t __len = strnlen (__sin, (__n)) + 1; \ - char *__sout = (char *) __builtin_alloca (__len); \ - __sout[__len-1] = '\0'; \ - (char *) memcpy (__sout, __sin, __len-1);})) -#endif /* __GNU_VISIBLE && __GNUC__ */ - -/* There are two common basename variants. If you do NOT #include - and you do - - #define _GNU_SOURCE - #include - - you get the GNU version. Otherwise you get the POSIX versionfor which you - should #include i for the function prototype. POSIX requires that - #undef basename will still let you invoke the underlying function. However, - this also implies that the POSIX version is used in this case. That's made - sure here. */ -#if __GNU_VISIBLE && !defined(basename) -# define basename basename -char *__nonnull ((1)) basename (const char *) __asm__(__ASMNAME("__gnu_basename")); -#endif + (__extension__ ({const char *__in = (__s); \ + size_t __len = strnlen (__in, (__n)) + 1; \ + char *__out = (char *) __builtin_alloca (__len); \ + __out[__len-1] = '\0'; \ + (char *) memcpy (__out, __in, __len-1);})) +#endif /* _GNU_SOURCE && __GNUC__ */ #include _END_STD_C -#if __SSP_FORTIFY_LEVEL > 0 -#include -#endif - #endif /* _STRING_H_ */ diff --git a/libc/xtensa-lx106-elf/include/strings.h b/libc/xtensa-lx106-elf/include/strings.h index 7e2e557..131d81d 100644 --- a/libc/xtensa-lx106-elf/include/strings.h +++ b/libc/xtensa-lx106-elf/include/strings.h @@ -1,80 +1,35 @@ -/*- - * Copyright (c) 2002 Mike Barcroft - * All rights reserved. +/* + * strings.h * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - * - * $FreeBSD: head/include/strings.h 272673 2014-10-07 04:54:11Z delphij $ + * Definitions for string operations. */ #ifndef _STRINGS_H_ -#define _STRINGS_H_ +#define _STRINGS_H_ -#include -#include +#include "_ansi.h" +#include -#if __POSIX_VISIBLE >= 200809 -#include -#endif +#include /* for size_t */ -#ifndef _SIZE_T_DECLARED -typedef __size_t size_t; -#define _SIZE_T_DECLARED -#endif +_BEGIN_STD_C -__BEGIN_DECLS -#if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112 -int bcmp(const void *, const void *, size_t) __pure; /* LEGACY */ -void bcopy(const void *, void *, size_t); /* LEGACY */ -void bzero(void *, size_t); /* LEGACY */ -#endif -#if __BSD_VISIBLE -void explicit_bzero(void *, size_t); -#endif -#if __MISC_VISIBLE || __POSIX_VISIBLE < 200809 || __XSI_VISIBLE >= 700 -int ffs(int) __pure2; -#endif -#if __BSD_VISIBLE -int ffsl(long) __pure2; -int ffsll(long long) __pure2; -int fls(int) __pure2; -int flsl(long) __pure2; -int flsll(long long) __pure2; -#endif -#if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112 -char *index(const char *, int) __pure; /* LEGACY */ -char *rindex(const char *, int) __pure; /* LEGACY */ -#endif -int strcasecmp(const char *, const char *) __pure; -int strncasecmp(const char *, const char *, size_t) __pure; +#if !defined __STRICT_ANSI__ && _POSIX_VERSION < 200809L +/* + * Marked LEGACY in Open Group Base Specifications Issue 6/IEEE Std 1003.1-2004 + * Removed from Open Group Base Specifications Issue 7/IEEE Std 1003.1-2008 + */ +int _EXFUN(bcmp,(const void *, const void *, size_t)); +void _EXFUN(bcopy,(const void *, void *, size_t)); +void _EXFUN(bzero,(void *, size_t)); +char *_EXFUN(index,(const char *, int)); +char *_EXFUN(rindex,(const char *, int)); +#endif /* ! __STRICT_ANSI__ */ -#if __POSIX_VISIBLE >= 200809 -int strcasecmp_l (const char *, const char *, locale_t); -int strncasecmp_l (const char *, const char *, size_t, locale_t); -#endif -__END_DECLS +int _EXFUN(ffs,(int)); +int _EXFUN(strcasecmp,(const char *, const char *)); +int _EXFUN(strncasecmp,(const char *, const char *, size_t)); -#if __SSP_FORTIFY_LEVEL > 0 -#include -#endif +_END_STD_C #endif /* _STRINGS_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/_default_fcntl.h b/libc/xtensa-lx106-elf/include/sys/_default_fcntl.h index 33b4622..eb674ae 100644 --- a/libc/xtensa-lx106-elf/include/sys/_default_fcntl.h +++ b/libc/xtensa-lx106-elf/include/sys/_default_fcntl.h @@ -52,32 +52,20 @@ extern "C" { #define _FNOFOLLOW 0x100000 #define _FDIRECTORY 0x200000 #define _FEXECSRCH 0x400000 -#define _FTMPFILE 0x800000 -#define _FNOATIME 0x1000000 #define O_BINARY _FBINARY #define O_TEXT _FTEXT +#define O_CLOEXEC _FNOINHERIT +#define O_DIRECT _FDIRECT +#define O_NOFOLLOW _FNOFOLLOW #define O_DSYNC _FSYNC #define O_RSYNC _FSYNC +#define O_DIRECTORY _FDIRECTORY #define O_EXEC _FEXECSRCH #define O_SEARCH _FEXECSRCH - -/* POSIX-1.2008 specific flags */ -#if __POSIX_VISIBLE >= 200809 -#define O_CLOEXEC _FNOINHERIT -#define O_NOFOLLOW _FNOFOLLOW -#define O_DIRECTORY _FDIRECTORY #endif -/* Linux-specific flags */ -#if __GNU_VISIBLE -#define O_DIRECT _FDIRECT -#define O_TMPFILE _FTMPFILE -#define O_NOATIME _FNOATIME -#endif -#endif - -#if __MISC_VISIBLE +#ifndef _POSIX_SOURCE /* * Flags that work for fcntl(fd, F_SETFL, FXXXX) @@ -109,11 +97,7 @@ extern "C" { #define FEXCL _FEXCL #define FNOCTTY _FNOCTTY -#endif /* __MISC_VISIBLE */ - -#if __BSD_VISIBLE -#define FNONBLOCK _FNONBLOCK -#endif /* __BSD_VISIBLE */ +#endif /* !_POSIX_SOURCE */ /* XXX close on exec request; must match UF_EXCLOSE in user.h */ #define FD_CLOEXEC 1 /* posix */ @@ -124,20 +108,20 @@ extern "C" { #define F_SETFD 2 /* Set fildes flags (close on exec) */ #define F_GETFL 3 /* Get file flags */ #define F_SETFL 4 /* Set file flags */ -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 +#ifndef _POSIX_SOURCE #define F_GETOWN 5 /* Get owner - for ASYNC */ #define F_SETOWN 6 /* Set owner - for ASYNC */ -#endif /* __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 */ +#endif /* !_POSIX_SOURCE */ #define F_GETLK 7 /* Get record-locking information */ #define F_SETLK 8 /* Set or Clear a record-lock (Non-Blocking) */ #define F_SETLKW 9 /* Set or Clear a record-lock (Blocking) */ -#if __MISC_VISIBLE +#ifndef _POSIX_SOURCE #define F_RGETLK 10 /* Test a remote lock to see if it is blocked */ #define F_RSETLK 11 /* Set or unlock a remote lock */ #define F_CNVT 12 /* Convert a fhandle to an open fd */ #define F_RSETLKW 13 /* Set or Clear remote record-lock(Blocking) */ -#endif /* __MISC_VISIBLE */ -#if __POSIX_VISIBLE >= 200809 +#endif /* !_POSIX_SOURCE */ +#ifdef __CYGWIN__ #define F_DUPFD_CLOEXEC 14 /* As F_DUPFD, but set close-on-exec flag */ #endif @@ -145,11 +129,11 @@ extern "C" { #define F_RDLCK 1 /* read lock */ #define F_WRLCK 2 /* write lock */ #define F_UNLCK 3 /* remove lock(s) */ -#if __MISC_VISIBLE +#ifndef _POSIX_SOURCE #define F_UNLKSYS 4 /* remove remote locks for a given system */ -#endif /* __MISC_VISIBLE */ +#endif /* !_POSIX_SOURCE */ -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 +#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || defined(__CYGWIN__) /* Special descriptor value to denote the cwd in calls to openat(2) etc. */ #define AT_FDCWD -2 @@ -182,7 +166,7 @@ struct flock { }; #endif /* __CYGWIN__ */ -#if __MISC_VISIBLE +#ifndef _POSIX_SOURCE /* extended file segment locking set data type */ struct eflock { short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */ @@ -194,32 +178,32 @@ struct eflock { long l_rpid; /* Remote process id wanting this lock */ long l_rsys; /* Remote system id wanting this lock */ }; -#endif /* __MISC_VISIBLE */ +#endif /* !_POSIX_SOURCE */ #include #include /* sigh. for the mode bits for open/creat */ -extern int open (const char *, int, ...); -#if __ATFILE_VISIBLE -extern int openat (int, const char *, int, ...); +extern int open _PARAMS ((const char *, int, ...)); +#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || defined(__CYGWIN__) +extern int openat _PARAMS ((int, const char *, int, ...)); #endif -extern int creat (const char *, mode_t); -extern int fcntl (int, int, ...); +extern int creat _PARAMS ((const char *, mode_t)); +extern int fcntl _PARAMS ((int, int, ...)); #if __BSD_VISIBLE -extern int flock (int, int); +extern int flock _PARAMS ((int, int)); #endif -#if __GNU_VISIBLE +#ifdef __CYGWIN__ #include -extern int futimesat (int, const char *, const struct timeval *); +extern int futimesat _PARAMS ((int, const char *, const struct timeval *)); #endif /* Provide _ prototypes for functions provided by some versions of newlib. */ #ifdef _COMPILING_NEWLIB -extern int _open (const char *, int, ...); -extern int _fcntl (int, int, ...); +extern int _open _PARAMS ((const char *, int, ...)); +extern int _fcntl _PARAMS ((int, int, ...)); #ifdef __LARGE64_FILES -extern int _open64 (const char *, int, ...); +extern int _open64 _PARAMS ((const char *, int, ...)); #endif #endif diff --git a/libc/xtensa-lx106-elf/include/sys/_intsup.h b/libc/xtensa-lx106-elf/include/sys/_intsup.h index 88d7400..fa78426 100644 --- a/libc/xtensa-lx106-elf/include/sys/_intsup.h +++ b/libc/xtensa-lx106-elf/include/sys/_intsup.h @@ -4,6 +4,8 @@ * * Permission to use, copy, modify, and distribute this software * is freely granted, provided that this notice is preserved. + * + * Modified for xtensa arch & non-long int32_t, removes automatic setting of __have_long32. */ #ifndef _SYS__INTSUP_H @@ -11,185 +13,8 @@ #include -#if __GNUC_PREREQ (3, 2) -/* gcc > 3.2 implicitly defines the values we are interested */ #define __STDINT_EXP(x) __##x##__ -#else -#define __STDINT_EXP(x) x -#include -#endif -/* Determine how intptr_t and intN_t fastN_t and leastN_t are defined by gcc - for this target. This is used to determine the correct printf() constant in - inttypes.h and other constants in stdint.h. - So we end up with - ?(signed|unsigned) char == 0 - ?(signed|unsigned) short == 1 - ?(signed|unsigned) int == 2 - ?(signed|unsigned) short int == 3 - ?(signed|unsigned) long == 4 - ?(signed|unsigned) long int == 6 - ?(signed|unsigned) long long == 8 - ?(signed|unsigned) long long int == 10 - */ -#pragma push_macro("signed") -#pragma push_macro("unsigned") -#pragma push_macro("char") -#pragma push_macro("short") -#pragma push_macro("__int20") -#pragma push_macro("int") -#pragma push_macro("long") -#undef signed -#undef unsigned -#undef char -#undef short -#undef int -#undef __int20 -#undef long -#define signed +0 -#define unsigned +0 -#define char +0 -#define short +1 -#define __int20 +2 -#define int +2 -#define long +4 -#if (__INTPTR_TYPE__ == 8 || __INTPTR_TYPE__ == 10) -#define _INTPTR_EQ_LONGLONG -#elif (__INTPTR_TYPE__ == 4 || __INTPTR_TYPE__ == 6) -#define _INTPTR_EQ_LONG -/* Note - the tests for _INTPTR_EQ_INT and _INTPTR_EQ_SHORT are currently - redundant as the values are not used. But one day they may be needed - and so the tests remain. */ -#elif __INTPTR_TYPE__ == 2 -#define _INTPTR_EQ_INT -#elif (__INTPTR_TYPE__ == 1 || __INTPTR_TYPE__ == 3) -#define _INTPTR_EQ_SHORT -#else -#error "Unable to determine type definition of intptr_t" -#endif -#if (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6) -#define _INT32_EQ_LONG -#elif __INT32_TYPE__ == 2 -/* Nothing to define because int32_t is safe to print as an int. */ -#else -#error "Unable to determine type definition of int32_t" -#endif - -#if (__INT8_TYPE__ == 0) -#define __INT8 "hh" -#elif (__INT8_TYPE__ == 1 || __INT8_TYPE__ == 3) -#define __INT8 "h" -#elif (__INT8_TYPE__ == 2) -#define __INT8 -#elif (__INT8_TYPE__ == 4 || __INT8_TYPE__ == 6) -#define __INT8 "l" -#elif (__INT8_TYPE__ == 8 || __INT8_TYPE__ == 10) -#define __INT8 "ll" -#endif -#if (__INT16_TYPE__ == 1 || __INT16_TYPE__ == 3) -#define __INT16 "h" -#elif (__INT16_TYPE__ == 2) -#define __INT16 -#elif (__INT16_TYPE__ == 4 || __INT16_TYPE__ == 6) -#define __INT16 "l" -#elif (__INT16_TYPE__ == 8 || __INT16_TYPE__ == 10) -#define __INT16 "ll" -#endif -#if (__INT32_TYPE__ == 2) -#define __INT32 -#elif (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6) -#define __INT32 "l" -#elif (__INT32_TYPE__ == 8 || __INT32_TYPE__ == 10) -#define __INT32 "ll" -#endif -#if (__INT64_TYPE__ == 2) -#define __INT64 -#elif (__INT64_TYPE__ == 4 || __INT64_TYPE__ == 6) -#define __INT64 "l" -#elif (__INT64_TYPE__ == 8 || __INT64_TYPE__ == 10) -#define __INT64 "ll" -#endif -#if (__INT_FAST8_TYPE__ == 0) -#define __FAST8 "hh" -#elif (__INT_FAST8_TYPE__ == 1 || __INT_FAST8_TYPE__ == 3) -#define __FAST8 "h" -#elif (__INT_FAST8_TYPE__ == 2) -#define __FAST8 -#elif (__INT_FAST8_TYPE__ == 4 || __INT_FAST8_TYPE__ == 6) -#define __FAST8 "l" -#elif (__INT_FAST8_TYPE__ == 8 || __INT_FAST8_TYPE__ == 10) -#define __FAST8 "ll" -#endif -#if (__INT_FAST16_TYPE__ == 1 || __INT_FAST16_TYPE__ == 3) -#define __FAST16 "h" -#elif (__INT_FAST16_TYPE__ == 2) -#define __FAST16 -#elif (__INT_FAST16_TYPE__ == 4 || __INT_FAST16_TYPE__ == 6) -#define __FAST16 "l" -#elif (__INT_FAST16_TYPE__ == 8 || __INT_FAST16_TYPE__ == 10) -#define __FAST16 "ll" -#endif -#if (__INT_FAST32_TYPE__ == 2) -#define __FAST32 -#elif (__INT_FAST32_TYPE__ == 4 || __INT_FAST32_TYPE__ == 6) -#define __FAST32 "l" -#elif (__INT_FAST32_TYPE__ == 8 || __INT_FAST32_TYPE__ == 10) -#define __FAST32 "ll" -#endif -#if (__INT_FAST64_TYPE__ == 2) -#define __FAST64 -#elif (__INT_FAST64_TYPE__ == 4 || __INT_FAST64_TYPE__ == 6) -#define __FAST64 "l" -#elif (__INT_FAST64_TYPE__ == 8 || __INT_FAST64_TYPE__ == 10) -#define __FAST64 "ll" -#endif - -#if (__INT_LEAST8_TYPE__ == 0) -#define __LEAST8 "hh" -#elif (__INT_LEAST8_TYPE__ == 1 || __INT_LEAST8_TYPE__ == 3) -#define __LEAST8 "h" -#elif (__INT_LEAST8_TYPE__ == 2) -#define __LEAST8 -#elif (__INT_LEAST8_TYPE__ == 4 || __INT_LEAST8_TYPE__ == 6) -#define __LEAST8 "l" -#elif (__INT_LEAST8_TYPE__ == 8 || __INT_LEAST8_TYPE__ == 10) -#define __LEAST8 "ll" -#endif -#if (__INT_LEAST16_TYPE__ == 1 || __INT_LEAST16_TYPE__ == 3) -#define __LEAST16 "h" -#elif (__INT_LEAST16_TYPE__ == 2) -#define __LEAST16 -#elif (__INT_LEAST16_TYPE__ == 4 || __INT_LEAST16_TYPE__ == 6) -#define __LEAST16 "l" -#elif (__INT_LEAST16_TYPE__ == 8 || __INT_LEAST16_TYPE__ == 10) -#define __LEAST16 "ll" -#endif -#if (__INT_LEAST32_TYPE__ == 2) -#define __LEAST32 -#elif (__INT_LEAST32_TYPE__ == 4 || __INT_LEAST32_TYPE__ == 6) -#define __LEAST32 "l" -#elif (__INT_LEAST32_TYPE__ == 8 || __INT_LEAST32_TYPE__ == 10) -#define __LEAST32 "ll" -#endif -#if (__INT_LEAST64_TYPE__ == 2) -#define __LEAST64 -#elif (__INT_LEAST64_TYPE__ == 4 || __INT_LEAST64_TYPE__ == 6) -#define __LEAST64 "l" -#elif (__INT_LEAST64_TYPE__ == 8 || __INT_LEAST64_TYPE__ == 10) -#define __LEAST64 "ll" -#endif -#undef signed -#undef unsigned -#undef char -#undef short -#undef int -#undef long -#pragma pop_macro("signed") -#pragma pop_macro("unsigned") -#pragma pop_macro("char") -#pragma pop_macro("short") -#pragma pop_macro("__int20") -#pragma pop_macro("int") -#pragma pop_macro("long") +#define __have_longlong64 1 #endif /* _SYS__INTSUP_H */ diff --git a/libc/xtensa-lx106-elf/include/sys/_pthreadtypes.h b/libc/xtensa-lx106-elf/include/sys/_pthreadtypes.h deleted file mode 100644 index 75e9e1c..0000000 --- a/libc/xtensa-lx106-elf/include/sys/_pthreadtypes.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Written by Joel Sherrill . - * - * COPYRIGHT (c) 1989-2013, 2015. - * On-Line Applications Research Corporation (OAR). - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION - * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS - * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - */ - -#ifndef _SYS__PTHREADTYPES_H_ -#define _SYS__PTHREADTYPES_H_ - -#if defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 - -#include - -/* - * 2.5 Primitive System Data Types, P1003.1c/D10, p. 19. - */ - -#if defined(__XMK__) -typedef unsigned int pthread_t; /* identify a thread */ -#else -typedef __uint32_t pthread_t; /* identify a thread */ -#endif - -/* P1003.1c/D10, p. 118-119 */ -#define PTHREAD_SCOPE_PROCESS 0 -#define PTHREAD_SCOPE_SYSTEM 1 - -/* P1003.1c/D10, p. 111 */ -#define PTHREAD_INHERIT_SCHED 1 /* scheduling policy and associated */ - /* attributes are inherited from */ - /* the calling thread. */ -#define PTHREAD_EXPLICIT_SCHED 2 /* set from provided attribute object */ - -/* P1003.1c/D10, p. 141 */ -#define PTHREAD_CREATE_DETACHED 0 -#define PTHREAD_CREATE_JOINABLE 1 - -#if defined(__XMK__) -typedef struct pthread_attr_s { - int contentionscope; - struct sched_param schedparam; - int detachstate; - void *stackaddr; - size_t stacksize; -} pthread_attr_t; - -#define PTHREAD_STACK_MIN 200 - -#else /* !defined(__XMK__) */ -typedef struct { - int is_initialized; - void *stackaddr; - int stacksize; - int contentionscope; - int inheritsched; - int schedpolicy; - struct sched_param schedparam; - - /* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute. */ -#if defined(_POSIX_THREAD_CPUTIME) - int cputime_clock_allowed; /* see time.h */ -#endif - int detachstate; -} pthread_attr_t; - -#endif /* !defined(__XMK__) */ - -#if defined(_POSIX_THREAD_PROCESS_SHARED) -/* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared. */ - -#define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */ -#define PTHREAD_PROCESS_SHARED 1 /* visible too all processes with access to */ - /* the memory where the resource is */ - /* located */ -#endif - -#if defined(_POSIX_THREAD_PRIO_PROTECT) -/* Mutexes */ - -/* Values for blocking protocol. */ - -#define PTHREAD_PRIO_NONE 0 -#define PTHREAD_PRIO_INHERIT 1 -#define PTHREAD_PRIO_PROTECT 2 -#endif - -#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) - -/* Values for mutex type */ - -/* The following defines are part of the X/Open System Interface (XSI). */ - -/* - * This type of mutex does not detect deadlock. A thread attempting to - * relock this mutex without first unlocking it shall deadlock. Attempting - * to unlock a mutex locked by a different thread results in undefined - * behavior. Attempting to unlock an unlocked mutex results in undefined - * behavior. - */ -#define PTHREAD_MUTEX_NORMAL 0 - -/* - * A thread attempting to relock this mutex without first unlocking - * it shall succeed in locking the mutex. The relocking deadlock which - * can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with - * this type of mutex. Multiple locks of this mutex shall require the - * same number of unlocks to release the mutex before another thread can - * acquire the mutex. A thread attempting to unlock a mutex which another - * thread has locked shall return with an error. A thread attempting to - * unlock an unlocked mutex shall return with an error. - */ -#define PTHREAD_MUTEX_RECURSIVE 1 - -/* - * This type of mutex provides error checking. A thread attempting - * to relock this mutex without first unlocking it shall return with an - * error. A thread attempting to unlock a mutex which another thread has - * locked shall return with an error. A thread attempting to unlock an - * unlocked mutex shall return with an error. - */ -#define PTHREAD_MUTEX_ERRORCHECK 2 - -/* - * Attempting to recursively lock a mutex of this type results - * in undefined behavior. Attempting to unlock a mutex of this type - * which was not locked by the calling thread results in undefined - * behavior. Attempting to unlock a mutex of this type which is not locked - * results in undefined behavior. An implementation may map this mutex to - * one of the other mutex types. - */ -#define PTHREAD_MUTEX_DEFAULT 3 - -#endif /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */ - -#if defined(__XMK__) -typedef unsigned int pthread_mutex_t; /* identify a mutex */ - -typedef struct { - int type; -} pthread_mutexattr_t; - -#else /* !defined(__XMK__) */ -typedef __uint32_t pthread_mutex_t; /* identify a mutex */ - -typedef struct { - int is_initialized; -#if defined(_POSIX_THREAD_PROCESS_SHARED) - int process_shared; /* allow mutex to be shared amongst processes */ -#endif -#if defined(_POSIX_THREAD_PRIO_PROTECT) - int prio_ceiling; - int protocol; -#endif -#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) - int type; -#endif - int recursive; -} pthread_mutexattr_t; -#endif /* !defined(__XMK__) */ - -#define _PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF) - -/* Condition Variables */ - -typedef __uint32_t pthread_cond_t; /* identify a condition variable */ - -#define _PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF) - -typedef struct { - int is_initialized; - clock_t clock; /* specifiy clock for timeouts */ -#if defined(_POSIX_THREAD_PROCESS_SHARED) - int process_shared; /* allow this to be shared amongst processes */ -#endif -} pthread_condattr_t; /* a condition attribute object */ - -/* Keys */ - -typedef __uint32_t pthread_key_t; /* thread-specific data keys */ - -typedef struct { - int is_initialized; /* is this structure initialized? */ - int init_executed; /* has the initialization routine been run? */ -} pthread_once_t; /* dynamic package initialization */ - -#define _PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */ -#endif /* defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 */ - -/* POSIX Barrier Types */ - -#if defined(_POSIX_BARRIERS) -typedef __uint32_t pthread_barrier_t; /* POSIX Barrier Object */ -typedef struct { - int is_initialized; /* is this structure initialized? */ -#if defined(_POSIX_THREAD_PROCESS_SHARED) - int process_shared; /* allow this to be shared amongst processes */ -#endif -} pthread_barrierattr_t; -#endif /* defined(_POSIX_BARRIERS) */ - -/* POSIX Spin Lock Types */ - -#if defined(_POSIX_SPIN_LOCKS) -typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */ -#endif /* defined(_POSIX_SPIN_LOCKS) */ - -/* POSIX Reader/Writer Lock Types */ - -#if defined(_POSIX_READER_WRITER_LOCKS) -typedef __uint32_t pthread_rwlock_t; /* POSIX RWLock Object */ - -#define _PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) 0xFFFFFFFF) - -typedef struct { - int is_initialized; /* is this structure initialized? */ -#if defined(_POSIX_THREAD_PROCESS_SHARED) - int process_shared; /* allow this to be shared amongst processes */ -#endif -} pthread_rwlockattr_t; -#endif /* defined(_POSIX_READER_WRITER_LOCKS) */ - -#endif /* ! _SYS__PTHREADTYPES_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/_sigset.h b/libc/xtensa-lx106-elf/include/sys/_sigset.h deleted file mode 100644 index a9c0d2d..0000000 --- a/libc/xtensa-lx106-elf/include/sys/_sigset.h +++ /dev/null @@ -1,43 +0,0 @@ -/*- - * Copyright (c) 1982, 1986, 1989, 1991, 1993 - * The Regents of the University of California. All rights reserved. - * (c) UNIX System Laboratories, Inc. - * All or some portions of this file are derived from material licensed - * to the University of California by American Telephone and Telegraph - * Co. or Unix System Laboratories, Inc. and are reproduced herein with - * the permission of UNIX System Laboratories, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. - * - * @(#)signal.h 8.4 (Berkeley) 5/4/95 - * $FreeBSD$ - */ - -#ifndef _SYS__SIGSET_H_ -#define _SYS__SIGSET_H_ - -typedef unsigned long __sigset_t; - -#endif /* !_SYS__SIGSET_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/_stdint.h b/libc/xtensa-lx106-elf/include/sys/_stdint.h deleted file mode 100644 index 21a14d3..0000000 --- a/libc/xtensa-lx106-elf/include/sys/_stdint.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2004, 2005 by - * Ralf Corsepius, Ulm/Germany. All rights reserved. - * - * Permission to use, copy, modify, and distribute this software - * is freely granted, provided that this notice is preserved. - */ - -#ifndef _SYS__STDINT_H -#define _SYS__STDINT_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef ___int8_t_defined -#ifndef _INT8_T_DECLARED -typedef __int8_t int8_t ; -#define _INT8_T_DECLARED -#endif -#ifndef _UINT8_T_DECLARED -typedef __uint8_t uint8_t ; -#define _UINT8_T_DECLARED -#endif -#define __int8_t_defined 1 -#endif /* ___int8_t_defined */ - -#ifdef ___int16_t_defined -#ifndef _INT16_T_DECLARED -typedef __int16_t int16_t ; -#define _INT16_T_DECLARED -#endif -#ifndef _UINT16_T_DECLARED -typedef __uint16_t uint16_t ; -#define _UINT16_T_DECLARED -#endif -#define __int16_t_defined 1 -#endif /* ___int16_t_defined */ - -#ifdef ___int32_t_defined -#ifndef _INT32_T_DECLARED -typedef __int32_t int32_t ; -#define _INT32_T_DECLARED -#endif -#ifndef _UINT32_T_DECLARED -typedef __uint32_t uint32_t ; -#define _UINT32_T_DECLARED -#endif -#define __int32_t_defined 1 -#endif /* ___int32_t_defined */ - -#ifdef ___int64_t_defined -#ifndef _INT64_T_DECLARED -typedef __int64_t int64_t ; -#define _INT64_T_DECLARED -#endif -#ifndef _UINT64_T_DECLARED -typedef __uint64_t uint64_t ; -#define _UINT64_T_DECLARED -#endif -#define __int64_t_defined 1 -#endif /* ___int64_t_defined */ - -#ifndef _INTMAX_T_DECLARED -typedef __intmax_t intmax_t; -#define _INTMAX_T_DECLARED -#endif - -#ifndef _UINTMAX_T_DECLARED -typedef __uintmax_t uintmax_t; -#define _UINTMAX_T_DECLARED -#endif - -#ifndef _INTPTR_T_DECLARED -typedef __intptr_t intptr_t; -#define _INTPTR_T_DECLARED -#endif - -#ifndef _UINTPTR_T_DECLARED -typedef __uintptr_t uintptr_t; -#define _UINTPTR_T_DECLARED -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _SYS__STDINT_H */ diff --git a/libc/xtensa-lx106-elf/include/sys/_timespec.h b/libc/xtensa-lx106-elf/include/sys/_timespec.h deleted file mode 100644 index 7609e4a..0000000 --- a/libc/xtensa-lx106-elf/include/sys/_timespec.h +++ /dev/null @@ -1,50 +0,0 @@ -/*- - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. - * - * @(#)time.h 8.5 (Berkeley) 5/4/95 - * from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp - * $FreeBSD$ - */ - -#ifndef _SYS__TIMESPEC_H_ -#define _SYS__TIMESPEC_H_ - -#include - -#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED) -typedef _TIME_T_ time_t; -#define __time_t_defined -#define _TIME_T_DECLARED -#endif - -struct timespec { - time_t tv_sec; /* seconds */ - long tv_nsec; /* and nanoseconds */ -}; - -#endif /* !_SYS__TIMESPEC_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/_timeval.h b/libc/xtensa-lx106-elf/include/sys/_timeval.h deleted file mode 100644 index 676a0b8..0000000 --- a/libc/xtensa-lx106-elf/include/sys/_timeval.h +++ /dev/null @@ -1,89 +0,0 @@ -/*- - * Copyright (c) 2002 Mike Barcroft - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - * - * $FreeBSD$ - */ - -#ifndef _SYS__TIMEVAL_H_ -#define _SYS__TIMEVAL_H_ - -#include - -#ifndef _SUSECONDS_T_DECLARED -typedef __suseconds_t suseconds_t; -#define _SUSECONDS_T_DECLARED -#endif - -#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED) -typedef _TIME_T_ time_t; -#define __time_t_defined -#define _TIME_T_DECLARED -#endif - -/* This define is also used outside of Newlib, e.g. in MinGW-w64 */ -#ifndef _TIMEVAL_DEFINED -#define _TIMEVAL_DEFINED - -/* - * Structure returned by gettimeofday(2) system call, and used in other calls. - */ -struct timeval { - time_t tv_sec; /* seconds */ - suseconds_t tv_usec; /* and microseconds */ -}; - -#if __BSD_VISIBLE -#ifndef _KERNEL /* NetBSD/OpenBSD compatible interfaces */ - -#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) -#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) -#define timercmp(tvp, uvp, cmp) \ - (((tvp)->tv_sec == (uvp)->tv_sec) ? \ - ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ - ((tvp)->tv_sec cmp (uvp)->tv_sec)) -#define timeradd(tvp, uvp, vvp) \ - do { \ - (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ - (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \ - if ((vvp)->tv_usec >= 1000000) { \ - (vvp)->tv_sec++; \ - (vvp)->tv_usec -= 1000000; \ - } \ - } while (0) -#define timersub(tvp, uvp, vvp) \ - do { \ - (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ - (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ - if ((vvp)->tv_usec < 0) { \ - (vvp)->tv_sec--; \ - (vvp)->tv_usec += 1000000; \ - } \ - } while (0) -#endif -#endif /* __BSD_VISIBLE */ - -#endif /* _TIMEVAL_DEFINED */ - -#endif /* !_SYS__TIMEVAL_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/_types.h b/libc/xtensa-lx106-elf/include/sys/_types.h index 72e1dc1..07bc276 100644 --- a/libc/xtensa-lx106-elf/include/sys/_types.h +++ b/libc/xtensa-lx106-elf/include/sys/_types.h @@ -2,141 +2,51 @@ /* This file defines various typedefs needed by the system calls that support the C library. Basically, they're just the POSIX versions with an '_' - prepended. Targets shall use to define their own - internal types if desired. - - There are three define patterns used for type definitions. Lets assume - xyz_t is a user type. - - The internal type definition uses __machine_xyz_t_defined. It is defined by - to disable a default definition in . It - must not be used in other files. - - User type definitions are guarded by __xyz_t_defined in glibc and - _XYZ_T_DECLARED in BSD compatible systems. + prepended. This file lives in the `sys' directory so targets can provide + their own if desired (or they can put target dependant conditionals here). */ #ifndef _SYS__TYPES_H #define _SYS__TYPES_H -#include -#include #include #include -#ifndef __machine_blkcnt_t_defined -typedef long __blkcnt_t; -#endif - -#ifndef __machine_blksize_t_defined -typedef long __blksize_t; -#endif - -#ifndef __machine_fsblkcnt_t_defined -typedef __uint64_t __fsblkcnt_t; -#endif - -#ifndef __machine_fsfilcnt_t_defined -typedef __uint32_t __fsfilcnt_t; -#endif - -#ifndef __machine_off_t_defined +#ifndef __off_t_defined typedef long _off_t; #endif -#if defined(__XMK__) -typedef signed char __pid_t; -#else -typedef int __pid_t; -#endif - -#ifndef __machine_dev_t_defined +#ifndef __dev_t_defined typedef short __dev_t; #endif -#ifndef __machine_uid_t_defined +#ifndef __uid_t_defined typedef unsigned short __uid_t; #endif -#ifndef __machine_gid_t_defined +#ifndef __gid_t_defined typedef unsigned short __gid_t; #endif -#ifndef __machine_id_t_defined -typedef __uint32_t __id_t; -#endif - -#ifndef __machine_ino_t_defined -#if (defined(__i386__) && (defined(GO32) || defined(__MSDOS__))) || \ - defined(__sparc__) || defined(__SPU__) -typedef unsigned long __ino_t; -#else -typedef unsigned short __ino_t; -#endif -#endif - -#ifndef __machine_mode_t_defined -#if defined(__i386__) && (defined(GO32) || defined(__MSDOS__)) -typedef int __mode_t; -#else -#if defined(__sparc__) && !defined(__sparc_v9__) -#ifdef __svr4__ -typedef unsigned long __mode_t; -#else -typedef unsigned short __mode_t; -#endif -#else -typedef __uint32_t __mode_t; -#endif -#endif -#endif - -#ifndef __machine_off64_t_defined +#ifndef __off64_t_defined __extension__ typedef long long _off64_t; #endif -#if defined(__CYGWIN__) && !defined(__LP64__) -typedef _off64_t __off_t; -#else -typedef _off_t __off_t; -#endif - -typedef _off64_t __loff_t; - -#ifndef __machine_key_t_defined -typedef long __key_t; -#endif - /* * We need fpos_t for the following, but it doesn't have a leading "_", * so we use _fpos_t instead. */ -#ifndef __machine_fpos_t_defined +#ifndef __fpos_t_defined typedef long _fpos_t; /* XXX must match off_t in */ /* (and must be `long' for now) */ #endif #ifdef __LARGE64_FILES -#ifndef __machine_fpos64_t_defined +#ifndef __fpos64_t_defined typedef _off64_t _fpos64_t; #endif #endif -/* Defined by GCC provided */ -#undef __size_t - -#ifndef __machine_size_t_defined -#ifdef __SIZE_TYPE__ -typedef __SIZE_TYPE__ __size_t; -#else -#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647 -typedef unsigned int __size_t; -#else -typedef unsigned long __size_t; -#endif -#endif -#endif - -#ifndef __machine_ssize_t_defined +#ifndef __ssize_t_defined #ifdef __SIZE_TYPE__ /* If __SIZE_TYPE__ is defined (gcc) we define ssize_t based on size_t. We simply change "unsigned" to "signed" for this single definition @@ -153,12 +63,10 @@ typedef long _ssize_t; #endif #endif -typedef _ssize_t __ssize_t; - #define __need_wint_t #include -#ifndef __machine_mbstate_t_defined +#ifndef __mbstate_t_defined /* Conversion state information. */ typedef struct { @@ -171,50 +79,13 @@ typedef struct } _mbstate_t; #endif -#ifndef __machine_flock_t_defined +#ifndef __flock_t_defined typedef _LOCK_RECURSIVE_T _flock_t; #endif -#ifndef __machine_iconv_t_defined +#ifndef __iconv_t_defined /* Iconv descriptor type */ typedef void *_iconv_t; #endif -#ifndef __machine_clock_t_defined -#define _CLOCK_T_ unsigned long /* clock() */ -#endif - -typedef _CLOCK_T_ __clock_t; - -#if defined(_USE_LONG_TIME_T) || __LONG_MAX__ > 0x7fffffffL -#define _TIME_T_ long -#else -#define _TIME_T_ __int_least64_t -#endif -typedef _TIME_T_ __time_t; - -#define _CLOCKID_T_ unsigned long -typedef _CLOCKID_T_ __clockid_t; - -#define _TIMER_T_ unsigned long -typedef _TIMER_T_ __timer_t; - -#ifndef __machine_sa_family_t_defined -typedef __uint8_t __sa_family_t; -#endif - -#ifndef __machine_socklen_t_defined -typedef __uint32_t __socklen_t; -#endif - -typedef unsigned short __nlink_t; -typedef long __suseconds_t; /* microseconds (signed) */ -typedef unsigned long __useconds_t; /* microseconds (unsigned) */ - -#ifdef __GNUCLIKE_BUILTIN_VARARGS -typedef __builtin_va_list __va_list; -#else -typedef char * __va_list; -#endif /* __GNUCLIKE_BUILTIN_VARARGS */ - #endif /* _SYS__TYPES_H */ diff --git a/libc/xtensa-lx106-elf/include/sys/cdefs.h b/libc/xtensa-lx106-elf/include/sys/cdefs.h index fc564a5..a5e613c 100644 --- a/libc/xtensa-lx106-elf/include/sys/cdefs.h +++ b/libc/xtensa-lx106-elf/include/sys/cdefs.h @@ -17,7 +17,7 @@ * 2. 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. - * 3. Neither the name of the University nor the names of its contributors + * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -69,9 +69,7 @@ /* * Testing against Clang-specific extensions. */ -#ifndef __has_attribute -#define __has_attribute(x) 0 -#endif + #ifndef __has_extension #define __has_extension __has_feature #endif @@ -102,33 +100,33 @@ #if defined(__GNUC__) || defined(__INTEL_COMPILER) #if __GNUC__ >= 3 || defined(__INTEL_COMPILER) -#define __GNUCLIKE_ASM 3 -#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS +#define __GNUCLIKE_ASM 3 +#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS #else -#define __GNUCLIKE_ASM 2 +#define __GNUCLIKE_ASM 2 #endif -#define __GNUCLIKE___TYPEOF 1 -#define __GNUCLIKE___OFFSETOF 1 -#define __GNUCLIKE___SECTION 1 +#define __GNUCLIKE___TYPEOF 1 +#define __GNUCLIKE___OFFSETOF 1 +#define __GNUCLIKE___SECTION 1 #ifndef __INTEL_COMPILER -#define __GNUCLIKE_CTOR_SECTION_HANDLING 1 +# define __GNUCLIKE_CTOR_SECTION_HANDLING 1 #endif -#define __GNUCLIKE_BUILTIN_CONSTANT_P 1 -#if defined(__INTEL_COMPILER) && defined(__cplusplus) && \ - __INTEL_COMPILER < 800 -#undef __GNUCLIKE_BUILTIN_CONSTANT_P -#endif +#define __GNUCLIKE_BUILTIN_CONSTANT_P 1 +# if defined(__INTEL_COMPILER) && defined(__cplusplus) \ + && __INTEL_COMPILER < 800 +# undef __GNUCLIKE_BUILTIN_CONSTANT_P +# endif -#if (__GNUC_MINOR__ > 95 || __GNUC__ >= 3) -#define __GNUCLIKE_BUILTIN_VARARGS 1 -#define __GNUCLIKE_BUILTIN_STDARG 1 -#define __GNUCLIKE_BUILTIN_VAALIST 1 +#if (__GNUC_MINOR__ > 95 || __GNUC__ >= 3) && !defined(__INTEL_COMPILER) +# define __GNUCLIKE_BUILTIN_VARARGS 1 +# define __GNUCLIKE_BUILTIN_STDARG 1 +# define __GNUCLIKE_BUILTIN_VAALIST 1 #endif #if defined(__GNUC__) -#define __GNUC_VA_LIST_COMPATIBILITY 1 +# define __GNUC_VA_LIST_COMPATIBILITY 1 #endif /* @@ -139,23 +137,23 @@ #endif #ifndef __INTEL_COMPILER -#define __GNUCLIKE_BUILTIN_NEXT_ARG 1 -#define __GNUCLIKE_MATH_BUILTIN_RELOPS +# define __GNUCLIKE_BUILTIN_NEXT_ARG 1 +# define __GNUCLIKE_MATH_BUILTIN_RELOPS #endif -#define __GNUCLIKE_BUILTIN_MEMCPY 1 +#define __GNUCLIKE_BUILTIN_MEMCPY 1 /* XXX: if __GNUC__ >= 2: not tested everywhere originally, where replaced */ -#define __CC_SUPPORTS_INLINE 1 -#define __CC_SUPPORTS___INLINE 1 -#define __CC_SUPPORTS___INLINE__ 1 +#define __CC_SUPPORTS_INLINE 1 +#define __CC_SUPPORTS___INLINE 1 +#define __CC_SUPPORTS___INLINE__ 1 -#define __CC_SUPPORTS___FUNC__ 1 -#define __CC_SUPPORTS_WARNING 1 +#define __CC_SUPPORTS___FUNC__ 1 +#define __CC_SUPPORTS_WARNING 1 -#define __CC_SUPPORTS_VARADIC_XXX 1 /* see varargs.h */ +#define __CC_SUPPORTS_VARADIC_XXX 1 /* see varargs.h */ -#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1 +#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1 #endif /* __GNUC__ || __INTEL_COMPILER */ @@ -231,12 +229,8 @@ #define __unused #define __packed #define __aligned(x) -#define __alloc_align(x) -#define __alloc_size(x) #define __section(x) -#define __weak_symbol #else -#define __weak_symbol __attribute__((__weak__)) #if !__GNUC_PREREQ__(2, 5) && !defined(__INTEL_COMPILER) #define __dead2 #define __pure2 @@ -248,7 +242,7 @@ #define __unused /* XXX Find out what to do for __packed, __aligned and __section */ #endif -#if __GNUC_PREREQ__(2, 7) || defined(__INTEL_COMPILER) +#if __GNUC_PREREQ__(2, 7) #define __dead2 __attribute__((__noreturn__)) #define __pure2 __attribute__((__const__)) #define __unused __attribute__((__unused__)) @@ -257,17 +251,16 @@ #define __aligned(x) __attribute__((__aligned__(x))) #define __section(x) __attribute__((__section__(x))) #endif -#if __GNUC_PREREQ__(4, 3) || __has_attribute(__alloc_size__) -#define __alloc_size(x) __attribute__((__alloc_size__(x))) -#else -#define __alloc_size(x) +#if defined(__INTEL_COMPILER) +#define __dead2 __attribute__((__noreturn__)) +#define __pure2 __attribute__((__const__)) +#define __unused __attribute__((__unused__)) +#define __used __attribute__((__used__)) +#define __packed __attribute__((__packed__)) +#define __aligned(x) __attribute__((__aligned__(x))) +#define __section(x) __attribute__((__section__(x))) #endif -#if __GNUC_PREREQ__(4, 9) || __has_attribute(__alloc_align__) -#define __alloc_align(x) __attribute__((__alloc_align__(x))) -#else -#define __alloc_align(x) #endif -#endif /* lint */ #if !__GNUC_PREREQ__(2, 95) #define __alignof(x) __offsetof(struct { char __a; x __b; }, __b) @@ -277,7 +270,7 @@ * Keywords added in C11. */ -#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L || defined(lint) +#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L #if !__has_extension(c_alignas) #if (defined(__cplusplus) && __cplusplus >= 201103L) || \ @@ -295,8 +288,7 @@ #define _Alignof(x) __alignof(x) #endif -#if !defined(__cplusplus) && !__has_extension(c_atomic) && \ - !__has_extension(cxx_atomic) +#if !__has_extension(c_atomic) && !__has_extension(cxx_atomic) /* * No native support for _Atomic(). Place object in structure to prevent * most forms of direct non-atomic access. @@ -310,28 +302,23 @@ #define _Noreturn __dead2 #endif -#if !__has_extension(c_static_assert) +#if __GNUC_PREREQ__(4, 6) && !defined(__cplusplus) +/* Do nothing: _Static_assert() works as per C11 */ +#elif !__has_extension(c_static_assert) #if (defined(__cplusplus) && __cplusplus >= 201103L) || \ __has_extension(cxx_static_assert) #define _Static_assert(x, y) static_assert(x, y) -#elif __GNUC_PREREQ__(4,6) -/* Nothing, gcc 4.6 and higher has _Static_assert built-in */ #elif defined(__COUNTER__) #define _Static_assert(x, y) __Static_assert(x, __COUNTER__) #define __Static_assert(x, y) ___Static_assert(x, y) -#define ___Static_assert(x, y) typedef char __assert_ ## y[(x) ? 1 : -1] \ - __unused +#define ___Static_assert(x, y) typedef char __assert_ ## y[(x) ? 1 : -1] #else #define _Static_assert(x, y) struct __hack #endif #endif #if !__has_extension(c_thread_local) -/* - * XXX: Some compilers (Clang 3.3, GCC 4.7) falsely announce C++11 mode - * without actually supporting the thread_local keyword. Don't check for - * the presence of C++11 when defining _Thread_local. - */ +/* XXX: Change this to test against C++11 when clang in base supports it. */ #if /* (defined(__cplusplus) && __cplusplus >= 201103L) || */ \ __has_extension(cxx_thread_local) #define _Thread_local thread_local @@ -351,8 +338,7 @@ * distinguish multiple cases. */ -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \ - __has_extension(c_generic_selections) +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L #define __generic(expr, t, yes, no) \ _Generic(expr, t: yes, default: no) #elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus) @@ -361,21 +347,6 @@ __builtin_types_compatible_p(__typeof(expr), t), yes, no) #endif -/* - * C99 Static array indices in function parameter declarations. Syntax such as: - * void bar(int myArray[static 10]); - * is allowed in C99 but not in C++. Define __min_size appropriately so - * headers using it can be compiled in either language. Use like this: - * void bar(int myArray[__min_size(10)]); - */ -#if !defined(__cplusplus) && \ - (defined(__clang__) || __GNUC_PREREQ__(4, 6)) && \ - (!defined(__STDC_VERSION__) || (__STDC_VERSION__ >= 199901)) -#define __min_size(x) static (x) -#else -#define __min_size(x) (x) -#endif - #if __GNUC_PREREQ__(2, 96) #define __malloc_like __attribute__((__malloc__)) #define __pure __attribute__((__pure__)) @@ -385,7 +356,7 @@ #endif #if __GNUC_PREREQ__(3, 1) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800) -#define __always_inline __inline__ __attribute__((__always_inline__)) +#define __always_inline __attribute__((__always_inline__)) #else #define __always_inline #endif @@ -397,19 +368,15 @@ #endif #if __GNUC_PREREQ__(3, 3) -#define __nonnull(x) __attribute__((__nonnull__ x)) -#define __nonnull_all __attribute__((__nonnull__)) +#define __nonnull(x) __attribute__((__nonnull__(x))) #else -#define __nonnull(x) -#define __nonnull_all +#define __nonnull(x) #endif #if __GNUC_PREREQ__(3, 4) #define __fastcall __attribute__((__fastcall__)) -#define __result_use_check __attribute__((__warn_unused_result__)) #else #define __fastcall -#define __result_use_check #endif #if __GNUC_PREREQ__(4, 1) @@ -418,12 +385,6 @@ #define __returns_twice #endif -#if __GNUC_PREREQ__(4, 6) || __has_builtin(__builtin_unreachable) -#define __unreachable() __builtin_unreachable() -#else -#define __unreachable() ((void)0) -#endif - /* XXX: should use `#if __STDC_VERSION__ < 199901'. */ #if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER) #define __func__ NULL @@ -472,26 +433,19 @@ * larger code. */ #if __GNUC_PREREQ__(2, 96) -#define __predict_true(exp) __builtin_expect((exp), 1) -#define __predict_false(exp) __builtin_expect((exp), 0) +#define __predict_true(exp) __builtin_expect((exp), 1) +#define __predict_false(exp) __builtin_expect((exp), 0) #else -#define __predict_true(exp) (exp) -#define __predict_false(exp) (exp) +#define __predict_true(exp) (exp) +#define __predict_false(exp) (exp) #endif -#if __GNUC_PREREQ__(4, 0) -#define __null_sentinel __attribute__((__sentinel__)) -#define __exported __attribute__((__visibility__("default"))) -/* Only default visibility is supported on PE/COFF targets. */ -#ifndef __CYGWIN__ +#if __GNUC_PREREQ__(4, 2) #define __hidden __attribute__((__visibility__("hidden"))) +#define __exported __attribute__((__visibility__("default"))) #else #define __hidden -#endif -#else -#define __null_sentinel #define __exported -#define __hidden #endif #define __offsetof(type, field) offsetof(type, field) @@ -506,7 +460,7 @@ */ #if __GNUC_PREREQ__(3, 1) #define __containerof(x, s, m) ({ \ - const volatile __typeof(((s *)0)->m) *__x = (x); \ + const volatile __typeof__(((s *)0)->m) *__x = (x); \ __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));\ }) #else @@ -629,96 +583,128 @@ #define __DEQUALIFY(type, var) ((type)(__uintptr_t)(const volatile void *)(var)) #endif -/* - * Nullability qualifiers: currently only supported by Clang. +/*- + * The following definitions are an extension of the behavior originally + * implemented in , but with a different level of granularity. + * POSIX.1 requires that the macros we test be defined before any standard + * header file is included. + * + * Here's a quick run-down of the versions: + * defined(_POSIX_SOURCE) 1003.1-1988 + * _POSIX_C_SOURCE == 1 1003.1-1990 + * _POSIX_C_SOURCE == 2 1003.2-1992 C Language Binding Option + * _POSIX_C_SOURCE == 199309 1003.1b-1993 + * _POSIX_C_SOURCE == 199506 1003.1c-1995, 1003.1i-1995, + * and the omnibus ISO/IEC 9945-1: 1996 + * _POSIX_C_SOURCE == 200112 1003.1-2001 + * _POSIX_C_SOURCE == 200809 1003.1-2008 + * + * In addition, the X/Open Portability Guide, which is now the Single UNIX + * Specification, defines a feature-test macro which indicates the version of + * that specification, and which subsumes _POSIX_C_SOURCE. + * + * Our macros begin with two underscores to avoid namespace screwage. */ -#if !(defined(__clang__) && __has_feature(nullability)) -#define _Nonnull -#define _Nullable -#define _Null_unspecified -#define __NULLABILITY_PRAGMA_PUSH -#define __NULLABILITY_PRAGMA_POP -#else -#define __NULLABILITY_PRAGMA_PUSH _Pragma("clang diagnostic push") \ - _Pragma("clang diagnostic ignored \"-Wnullability-completeness\"") -#define __NULLABILITY_PRAGMA_POP _Pragma("clang diagnostic pop") + +/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */ +#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1 +#undef _POSIX_C_SOURCE /* Probably illegal, but beyond caring now. */ +#define _POSIX_C_SOURCE 199009 +#endif + +/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */ +#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 199209 +#endif + +/* Deal with various X/Open Portability Guides and Single UNIX Spec. */ +#ifdef _XOPEN_SOURCE +#if _XOPEN_SOURCE - 0 >= 700 +#define __XSI_VISIBLE 700 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200809 +#elif _XOPEN_SOURCE - 0 >= 600 +#define __XSI_VISIBLE 600 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200112 +#elif _XOPEN_SOURCE - 0 >= 500 +#define __XSI_VISIBLE 500 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 199506 +#endif #endif /* - * Type Safety Checking - * - * Clang provides additional attributes to enable checking type safety - * properties that cannot be enforced by the C type system. + * Deal with all versions of POSIX. The ordering relative to the tests above is + * important. */ - -#if __has_attribute(__argument_with_type_tag__) && \ - __has_attribute(__type_tag_for_datatype__) && !defined(lint) -#define __arg_type_tag(arg_kind, arg_idx, type_tag_idx) \ - __attribute__((__argument_with_type_tag__(arg_kind, arg_idx, type_tag_idx))) -#define __datatype_type_tag(kind, type) \ - __attribute__((__type_tag_for_datatype__(kind, type))) -#else -#define __arg_type_tag(arg_kind, arg_idx, type_tag_idx) -#define __datatype_type_tag(kind, type) +#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) +#define _POSIX_C_SOURCE 198808 #endif - -/* - * Lock annotations. +#ifdef _POSIX_C_SOURCE +#if _POSIX_C_SOURCE >= 200809 +#define __POSIX_VISIBLE 200809 +#define __ISO_C_VISIBLE 1999 +#elif _POSIX_C_SOURCE >= 200112 +#define __POSIX_VISIBLE 200112 +#define __ISO_C_VISIBLE 1999 +#elif _POSIX_C_SOURCE >= 199506 +#define __POSIX_VISIBLE 199506 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199309 +#define __POSIX_VISIBLE 199309 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199209 +#define __POSIX_VISIBLE 199209 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199009 +#define __POSIX_VISIBLE 199009 +#define __ISO_C_VISIBLE 1990 +#else +#define __POSIX_VISIBLE 198808 +#define __ISO_C_VISIBLE 0 +#endif /* _POSIX_C_SOURCE */ +#else +/*- + * Deal with _ANSI_SOURCE: + * If it is defined, and no other compilation environment is explicitly + * requested, then define our internal feature-test macros to zero. This + * makes no difference to the preprocessor (undefined symbols in preprocessing + * expressions are defined to have value zero), but makes it more convenient for + * a test program to print out the values. * - * Clang provides support for doing basic thread-safety tests at - * compile-time, by marking which locks will/should be held when - * entering/leaving a functions. - * - * Furthermore, it is also possible to annotate variables and structure - * members to enforce that they are only accessed when certain locks are - * held. + * If a program mistakenly defines _ANSI_SOURCE and some other macro such as + * _POSIX_C_SOURCE, we will assume that it wants the broader compilation + * environment (and in fact we will never get here). */ - -#if __has_extension(c_thread_safety_attributes) -#define __lock_annotate(x) __attribute__((x)) -#else -#define __lock_annotate(x) +#if defined(_ANSI_SOURCE) /* Hide almost everything. */ +#define __POSIX_VISIBLE 0 +#define __XSI_VISIBLE 0 +#define __BSD_VISIBLE 0 +#define __ISO_C_VISIBLE 1990 +#elif defined(_C99_SOURCE) /* Localism to specify strict C99 env. */ +#define __POSIX_VISIBLE 0 +#define __XSI_VISIBLE 0 +#define __BSD_VISIBLE 0 +#define __ISO_C_VISIBLE 1999 +#elif defined(_C11_SOURCE) /* Localism to specify strict C11 env. */ +#define __POSIX_VISIBLE 0 +#define __XSI_VISIBLE 0 +#define __BSD_VISIBLE 0 +#define __ISO_C_VISIBLE 2011 +#elif defined(_GNU_SOURCE) /* Everything and the kitchen sink. */ +#define __POSIX_VISIBLE 200809 +#define __XSI_VISIBLE 700 +#define __BSD_VISIBLE 1 +#define __ISO_C_VISIBLE 2011 +#define __GNU_VISIBLE 1 +#else /* Default: everything except __GNU_VISIBLE. */ +#define __POSIX_VISIBLE 200809 +#define __XSI_VISIBLE 700 +#define __BSD_VISIBLE 1 +#define __ISO_C_VISIBLE 2011 +#endif #endif - -/* Structure implements a lock. */ -/* FIXME: Use __lockable__, etc. to avoid colliding with user namespace macros, - * once clang is fixed: https://bugs.llvm.org/show_bug.cgi?id=34319 */ -#define __lockable __lock_annotate(lockable) - -/* Function acquires an exclusive or shared lock. */ -#define __locks_exclusive(...) \ - __lock_annotate(exclusive_lock_function(__VA_ARGS__)) -#define __locks_shared(...) \ - __lock_annotate(shared_lock_function(__VA_ARGS__)) - -/* Function attempts to acquire an exclusive or shared lock. */ -#define __trylocks_exclusive(...) \ - __lock_annotate(exclusive_trylock_function(__VA_ARGS__)) -#define __trylocks_shared(...) \ - __lock_annotate(shared_trylock_function(__VA_ARGS__)) - -/* Function releases a lock. */ -#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__)) - -/* Function asserts that an exclusive or shared lock is held. */ -#define __asserts_exclusive(...) \ - __lock_annotate(assert_exclusive_lock(__VA_ARGS__)) -#define __asserts_shared(...) \ - __lock_annotate(assert_shared_lock(__VA_ARGS__)) - -/* Function requires that an exclusive or shared lock is or is not held. */ -#define __requires_exclusive(...) \ - __lock_annotate(exclusive_locks_required(__VA_ARGS__)) -#define __requires_shared(...) \ - __lock_annotate(shared_locks_required(__VA_ARGS__)) -#define __requires_unlocked(...) \ - __lock_annotate(locks_excluded(__VA_ARGS__)) - -/* Function should not be analyzed. */ -#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis) - -/* Guard variables and structure members by lock. */ -#define __guarded_by(x) __lock_annotate(guarded_by(x)) -#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x)) #endif /* !_SYS_CDEFS_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/config.h b/libc/xtensa-lx106-elf/include/sys/config.h index 3c185ea..f6f923e 100644 --- a/libc/xtensa-lx106-elf/include/sys/config.h +++ b/libc/xtensa-lx106-elf/include/sys/config.h @@ -75,7 +75,7 @@ #define _POINTER_INT short #endif -#if defined(__m68k__) || defined(__mc68000__) || defined(__riscv) +#if defined(__m68k__) || defined(__mc68000__) #define _READ_WRITE_RETURN_TYPE _ssize_t #endif @@ -92,6 +92,7 @@ /* we want the reentrancy structure to be returned by a function */ #define __DYNAMIC_REENT__ #define HAVE_GETDATE +#define _HAVE_SYSTYPES #define _READ_WRITE_RETURN_TYPE _ssize_t #define __LARGE64_FILES 1 /* we use some glibc header files so turn on glibc large file feature */ @@ -154,7 +155,6 @@ #define _REENT_SMALL #endif -#define __BUFSIZ__ 256 #define __SMALL_BITFIELDS #ifdef __MSP430X_LARGE__ @@ -185,10 +185,6 @@ #define __CUSTOM_FILE_IO__ #endif -#if defined(__or1k__) || defined(__or1knd__) -#define __DYNAMIC_REENT__ -#endif - #ifdef __XTENSA__ #include #define MALLOC_ALIGNMENT ((XCHAL_DATA_WIDTH) < 16 ? 16 : (XCHAL_DATA_WIDTH)) @@ -239,6 +235,9 @@ #if defined(__CYGWIN__) #include +#if !defined (__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) +#define __USE_XOPEN2K 1 +#endif #endif #if defined(__rtems__) @@ -246,7 +245,6 @@ #define _READ_WRITE_RETURN_TYPE _ssize_t #define __DYNAMIC_REENT__ #define _REENT_GLOBAL_ATEXIT -#define _REENT_GLOBAL_STDIO_STREAMS #endif #ifndef __EXPORT @@ -284,18 +282,6 @@ #endif #endif -#ifdef _WANT_REENT_GLOBAL_STDIO_STREAMS -#ifndef _REENT_GLOBAL_STDIO_STREAMS -#define _REENT_GLOBAL_STDIO_STREAMS -#endif -#endif - -#ifdef _WANT_USE_LONG_TIME_T -#ifndef _USE_LONG_TIME_T -#define _USE_LONG_TIME_T -#endif -#endif - /* If _MB_EXTENDED_CHARSETS_ALL is set, we want all of the extended charsets. The extended charsets add a few functions and a couple of tables of a few K each. */ diff --git a/libc/xtensa-lx106-elf/include/sys/errno.h b/libc/xtensa-lx106-elf/include/sys/errno.h index 025b461..a72c373 100644 --- a/libc/xtensa-lx106-elf/include/sys/errno.h +++ b/libc/xtensa-lx106-elf/include/sys/errno.h @@ -12,12 +12,12 @@ extern "C" { #ifndef _REENT_ONLY #define errno (*__errno()) -extern int *__errno (void); +extern int *__errno _PARAMS ((void)); #endif /* Please don't use these variables directly. Use strerror instead. */ -extern __IMPORT const char * const _sys_errlist[]; +extern __IMPORT _CONST char * _CONST _sys_errlist[]; extern __IMPORT int _sys_nerr; #ifdef __CYGWIN__ extern __IMPORT const char * const sys_errlist[]; diff --git a/libc/xtensa-lx106-elf/include/sys/features.h b/libc/xtensa-lx106-elf/include/sys/features.h index 2900b33..1d90921 100644 --- a/libc/xtensa-lx106-elf/include/sys/features.h +++ b/libc/xtensa-lx106-elf/include/sys/features.h @@ -1,7 +1,7 @@ /* * Written by Joel Sherrill . * - * COPYRIGHT (c) 1989-2014. + * COPYRIGHT (c) 1989-2000. * * On-Line Applications Research Corporation (OAR). * @@ -25,7 +25,11 @@ extern "C" { #endif -#include <_newlib_version.h> +/* Macros to determine that newlib is being used. Put in this header to + * be similar to where glibc stores its version of these macros. + */ +#define __NEWLIB__ 2 +#define __NEWLIB_MINOR__ 1 /* Macro to test version of GCC. Returns 0 for non-GCC or too old GCC. */ #ifndef __GNUC_PREREQ @@ -39,297 +43,6 @@ extern "C" { /* Version with trailing underscores for BSD compatibility. */ #define __GNUC_PREREQ__(ma, mi) __GNUC_PREREQ(ma, mi) - -/* - * Feature test macros control which symbols are exposed by the system - * headers. Any of these must be defined before including any headers. - * - * __STRICT_ANSI__ (defined by gcc -ansi, -std=c90, -std=c99, or -std=c11) - * ISO C - * - * _POSIX_SOURCE (deprecated by _POSIX_C_SOURCE=1) - * _POSIX_C_SOURCE >= 1 - * POSIX.1-1990 - * - * _POSIX_C_SOURCE >= 2 - * POSIX.2-1992 - * - * _POSIX_C_SOURCE >= 199309L - * POSIX.1b-1993 Real-time extensions - * - * _POSIX_C_SOURCE >= 199506L - * POSIX.1c-1995 Threads extensions - * - * _POSIX_C_SOURCE >= 200112L - * POSIX.1-2001 and C99 - * - * _POSIX_C_SOURCE >= 200809L - * POSIX.1-2008 - * - * _XOPEN_SOURCE - * POSIX.1-1990 and XPG4 - * - * _XOPEN_SOURCE_EXTENDED - * SUSv1 (POSIX.2-1992 plus XPG4v2) - * - * _XOPEN_SOURCE >= 500 - * SUSv2 (POSIX.1c-1995 plus XSI) - * - * _XOPEN_SOURCE >= 600 - * SUSv3 (POSIX.1-2001 plus XSI) and C99 - * - * _XOPEN_SOURCE >= 700 - * SUSv4 (POSIX.1-2008 plus XSI) - * - * _ISOC99_SOURCE or gcc -std=c99 or g++ - * ISO C99 - * - * _ISOC11_SOURCE or gcc -std=c11 or g++ -std=c++11 - * ISO C11 - * - * _ATFILE_SOURCE (implied by _POSIX_C_SOURCE >= 200809L) - * "at" functions - * - * _LARGEFILE_SOURCE (deprecated by _XOPEN_SOURCE >= 500) - * fseeko, ftello - * - * _GNU_SOURCE - * All of the above plus GNU extensions - * - * _BSD_SOURCE (deprecated by _DEFAULT_SOURCE) - * _SVID_SOURCE (deprecated by _DEFAULT_SOURCE) - * _DEFAULT_SOURCE (or none of the above) - * POSIX-1.2008 with BSD and SVr4 extensions - * - * _FORTIFY_SOURCE = 1 or 2 - * Object Size Checking function wrappers - */ - -#ifdef _GNU_SOURCE -#undef _ATFILE_SOURCE -#define _ATFILE_SOURCE 1 -#undef _DEFAULT_SOURCE -#define _DEFAULT_SOURCE 1 -#undef _ISOC99_SOURCE -#define _ISOC99_SOURCE 1 -#undef _ISOC11_SOURCE -#define _ISOC11_SOURCE 1 -#undef _POSIX_SOURCE -#define _POSIX_SOURCE 1 -#undef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 200809L -#undef _XOPEN_SOURCE -#define _XOPEN_SOURCE 700 -#undef _XOPEN_SOURCE_EXTENDED -#define _XOPEN_SOURCE_EXTENDED 1 -#endif /* _GNU_SOURCE */ - -#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || \ - (!defined(__STRICT_ANSI__) && !defined(_ANSI_SOURCE) && \ - !defined(_ISOC99_SOURCE) && !defined(_POSIX_SOURCE) && \ - !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) -#undef _DEFAULT_SOURCE -#define _DEFAULT_SOURCE 1 -#endif - -#if defined(_DEFAULT_SOURCE) -#undef _POSIX_SOURCE -#define _POSIX_SOURCE 1 -#undef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 200809L -#endif - -#if !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) && \ - ((!defined(__STRICT_ANSI__) && !defined(_ANSI_SOURCE)) || \ - (_XOPEN_SOURCE - 0) >= 500) -#define _POSIX_SOURCE 1 -#if !defined(_XOPEN_SOURCE) || (_XOPEN_SOURCE - 0) >= 700 -#define _POSIX_C_SOURCE 200809L -#elif (_XOPEN_SOURCE - 0) >= 600 -#define _POSIX_C_SOURCE 200112L -#elif (_XOPEN_SOURCE - 0) >= 500 -#define _POSIX_C_SOURCE 199506L -#elif (_XOPEN_SOURCE - 0) < 500 -#define _POSIX_C_SOURCE 2 -#endif -#endif - -#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200809 -#undef _ATFILE_SOURCE -#define _ATFILE_SOURCE 1 -#endif - -/* - * The following private macros are used throughout the headers to control - * which symbols should be exposed. They are for internal use only, as - * indicated by the leading double underscore, and must never be used outside - * of these headers. - * - * __POSIX_VISIBLE - * any version of POSIX.1; enabled by default, or with _POSIX_SOURCE, - * any value of _POSIX_C_SOURCE, or _XOPEN_SOURCE >= 500. - * - * __POSIX_VISIBLE >= 2 - * POSIX.2-1992; enabled by default, with _POSIX_C_SOURCE >= 2, - * or _XOPEN_SOURCE >= 500. - * - * __POSIX_VISIBLE >= 199309 - * POSIX.1b-1993; enabled by default, with _POSIX_C_SOURCE >= 199309L, - * or _XOPEN_SOURCE >= 500. - * - * __POSIX_VISIBLE >= 199506 - * POSIX.1c-1995; enabled by default, with _POSIX_C_SOURCE >= 199506L, - * or _XOPEN_SOURCE >= 500. - * - * __POSIX_VISIBLE >= 200112 - * POSIX.1-2001; enabled by default, with _POSIX_C_SOURCE >= 200112L, - * or _XOPEN_SOURCE >= 600. - * - * __POSIX_VISIBLE >= 200809 - * POSIX.1-2008; enabled by default, with _POSIX_C_SOURCE >= 200809L, - * or _XOPEN_SOURCE >= 700. - * - * __XSI_VISIBLE - * XPG4 XSI extensions; enabled with any version of _XOPEN_SOURCE. - * - * __XSI_VISIBLE >= 4 - * SUSv1 XSI extensions; enabled with both _XOPEN_SOURCE and - * _XOPEN_SOURCE_EXTENDED together. - * - * __XSI_VISIBLE >= 500 - * SUSv2 XSI extensions; enabled with _XOPEN_SOURCE >= 500. - * - * __XSI_VISIBLE >= 600 - * SUSv3 XSI extensions; enabled with _XOPEN_SOURCE >= 600. - * - * __XSI_VISIBLE >= 700 - * SUSv4 XSI extensions; enabled with _XOPEN_SOURCE >= 700. - * - * __ISO_C_VISIBLE >= 1999 - * ISO C99; enabled with gcc -std=c99 or newer (on by default since GCC 5), - * any version of C++, or with _ISOC99_SOURCE, _POSIX_C_SOURCE >= 200112L, - * or _XOPEN_SOURCE >= 600. - * - * __ISO_C_VISIBLE >= 2011 - * ISO C11; enabled with gcc -std=c11 or newer (on by default since GCC 5), - * g++ -std=c++11 or newer (on by default since GCC 6), or with - * _ISOC11_SOURCE. - * - * __ATFILE_VISIBLE - * "at" functions; enabled by default, with _ATFILE_SOURCE, - * _POSIX_C_SOURCE >= 200809L, or _XOPEN_SOURCE >= 700. - * - * __LARGEFILE_VISIBLE - * fseeko, ftello; enabled with _LARGEFILE_SOURCE or _XOPEN_SOURCE >= 500. - * - * __BSD_VISIBLE - * BSD extensions; enabled by default, or with _BSD_SOURCE. - * - * __SVID_VISIBLE - * SVr4 extensions; enabled by default, or with _SVID_SOURCE. - * - * __MISC_VISIBLE - * Extensions found in both BSD and SVr4 (shorthand for - * (__BSD_VISIBLE || __SVID_VISIBLE)), or newlib-specific - * extensions; enabled by default. - * - * __GNU_VISIBLE - * GNU extensions; enabled with _GNU_SOURCE. - * - * __SSP_FORTIFY_LEVEL - * Object Size Checking; defined to 0 (off), 1, or 2. - * - * In all cases above, "enabled by default" means either by defining - * _DEFAULT_SOURCE, or by not defining any of the public feature test macros. - */ - -#ifdef _ATFILE_SOURCE -#define __ATFILE_VISIBLE 1 -#else -#define __ATFILE_VISIBLE 0 -#endif - -#ifdef _DEFAULT_SOURCE -#define __BSD_VISIBLE 1 -#else -#define __BSD_VISIBLE 0 -#endif - -#ifdef _GNU_SOURCE -#define __GNU_VISIBLE 1 -#else -#define __GNU_VISIBLE 0 -#endif - -#if defined(_ISOC11_SOURCE) || \ - (__STDC_VERSION__ - 0) >= 201112L || (__cplusplus - 0) >= 201103L -#define __ISO_C_VISIBLE 2011 -#elif defined(_ISOC99_SOURCE) || (_POSIX_C_SOURCE - 0) >= 200112L || \ - (__STDC_VERSION__ - 0) >= 199901L || defined(__cplusplus) -#define __ISO_C_VISIBLE 1999 -#else -#define __ISO_C_VISIBLE 1990 -#endif - -#if defined(_LARGEFILE_SOURCE) || (_XOPEN_SOURCE - 0) >= 500 -#define __LARGEFILE_VISIBLE 1 -#else -#define __LARGEFILE_VISIBLE 0 -#endif - -#ifdef _DEFAULT_SOURCE -#define __MISC_VISIBLE 1 -#else -#define __MISC_VISIBLE 0 -#endif - -#if (_POSIX_C_SOURCE - 0) >= 200809L -#define __POSIX_VISIBLE 200809 -#elif (_POSIX_C_SOURCE - 0) >= 200112L -#define __POSIX_VISIBLE 200112 -#elif (_POSIX_C_SOURCE - 0) >= 199506L -#define __POSIX_VISIBLE 199506 -#elif (_POSIX_C_SOURCE - 0) >= 199309L -#define __POSIX_VISIBLE 199309 -#elif (_POSIX_C_SOURCE - 0) >= 2 || defined(_XOPEN_SOURCE) -#define __POSIX_VISIBLE 199209 -#elif defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) -#define __POSIX_VISIBLE 199009 -#else -#define __POSIX_VISIBLE 0 -#endif - -#ifdef _DEFAULT_SOURCE -#define __SVID_VISIBLE 1 -#else -#define __SVID_VISIBLE 0 -#endif - -#if (_XOPEN_SOURCE - 0) >= 700 -#define __XSI_VISIBLE 700 -#elif (_XOPEN_SOURCE - 0) >= 600 -#define __XSI_VISIBLE 600 -#elif (_XOPEN_SOURCE - 0) >= 500 -#define __XSI_VISIBLE 500 -#elif defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED) -#define __XSI_VISIBLE 4 -#elif defined(_XOPEN_SOURCE) -#define __XSI_VISIBLE 1 -#else -#define __XSI_VISIBLE 0 -#endif - -#if _FORTIFY_SOURCE > 0 && !defined(__cplusplus) && !defined(__lint__) && \ - (__OPTIMIZE__ > 0 || defined(__clang__)) && __GNUC_PREREQ__(4, 1) -# if _FORTIFY_SOURCE > 1 -# define __SSP_FORTIFY_LEVEL 2 -# else -# define __SSP_FORTIFY_LEVEL 1 -# endif -#else -# define __SSP_FORTIFY_LEVEL 0 -#endif - /* RTEMS adheres to POSIX -- 1003.1b with some features from annexes. */ #ifdef __rtems__ @@ -344,12 +57,11 @@ extern "C" { #define _POSIX_MEMORY_PROTECTION 1 #define _POSIX_MESSAGE_PASSING 1 #define _POSIX_MONOTONIC_CLOCK 200112L -#define _POSIX_CLOCK_SELECTION 200112L #define _POSIX_PRIORITIZED_IO 1 #define _POSIX_PRIORITY_SCHEDULING 1 #define _POSIX_REALTIME_SIGNALS 1 #define _POSIX_SEMAPHORES 1 -#define _POSIX_SHARED_MEMORY_OBJECTS 1 +/* #define _POSIX_SHARED_MEMORY_OBJECTS 1 */ #define _POSIX_SYNCHRONIZED_IO 1 #define _POSIX_TIMERS 1 #define _POSIX_BARRIERS 200112L @@ -382,9 +94,6 @@ extern "C" { /* UNIX98 added some new pthread mutex attributes */ #define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1 -/* POSIX 1003.26-2003 defined device control method */ -#define _POSIX_26_VERSION 200312L - #endif /* XMK loosely adheres to POSIX -- 1003.1 */ @@ -402,82 +111,62 @@ extern "C" { #ifdef __CYGWIN__ -#if __POSIX_VISIBLE >= 200809 -#define _POSIX_VERSION 200809L -#define _POSIX2_VERSION 200809L -#elif __POSIX_VISIBLE >= 200112 +#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L #define _POSIX_VERSION 200112L #define _POSIX2_VERSION 200112L -#elif __POSIX_VISIBLE >= 199506 -#define _POSIX_VERSION 199506L -#define _POSIX2_VERSION 199506L -#elif __POSIX_VISIBLE >= 199309 -#define _POSIX_VERSION 199309L -#define _POSIX2_VERSION 199209L -#elif __POSIX_VISIBLE >= 199209 -#define _POSIX_VERSION 199009L -#define _POSIX2_VERSION 199209L -#elif __POSIX_VISIBLE -#define _POSIX_VERSION 199009L -#endif -#if __XSI_VISIBLE >= 4 -#define _XOPEN_VERSION __XSI_VISIBLE -#endif +#define _XOPEN_VERSION 600 -#define _POSIX_ADVISORY_INFO 200809L +#define _POSIX_ADVISORY_INFO 200112L /* #define _POSIX_ASYNCHRONOUS_IO -1 */ -#define _POSIX_BARRIERS 200809L +/* #define _POSIX_BARRIERS -1 */ #define _POSIX_CHOWN_RESTRICTED 1 -#define _POSIX_CLOCK_SELECTION 200809L -#define _POSIX_CPUTIME 200809L -#define _POSIX_FSYNC 200809L -#define _POSIX_IPV6 200809L +#define _POSIX_CLOCK_SELECTION 200112L +#define _POSIX_CPUTIME 200112L +#define _POSIX_FSYNC 200112L +#define _POSIX_IPV6 200112L #define _POSIX_JOB_CONTROL 1 -#define _POSIX_MAPPED_FILES 200809L +#define _POSIX_MAPPED_FILES 200112L /* #define _POSIX_MEMLOCK -1 */ -#define _POSIX_MEMLOCK_RANGE 200809L -#define _POSIX_MEMORY_PROTECTION 200809L -#define _POSIX_MESSAGE_PASSING 200809L -#define _POSIX_MONOTONIC_CLOCK 200809L +#define _POSIX_MEMLOCK_RANGE 200112L +#define _POSIX_MEMORY_PROTECTION 200112L +#define _POSIX_MESSAGE_PASSING 200112L +#define _POSIX_MONOTONIC_CLOCK 200112L #define _POSIX_NO_TRUNC 1 /* #define _POSIX_PRIORITIZED_IO -1 */ -#define _POSIX_PRIORITY_SCHEDULING 200809L -#define _POSIX_RAW_SOCKETS 200809L -#define _POSIX_READER_WRITER_LOCKS 200809L -#define _POSIX_REALTIME_SIGNALS 200809L +#define _POSIX_PRIORITY_SCHEDULING 200112L +#define _POSIX_RAW_SOCKETS 200112L +#define _POSIX_READER_WRITER_LOCKS 200112L +#define _POSIX_REALTIME_SIGNALS 200112L #define _POSIX_REGEXP 1 #define _POSIX_SAVED_IDS 1 -#define _POSIX_SEMAPHORES 200809L -#define _POSIX_SHARED_MEMORY_OBJECTS 200809L +#define _POSIX_SEMAPHORES 200112L +#define _POSIX_SHARED_MEMORY_OBJECTS 200112L #define _POSIX_SHELL 1 -#define _POSIX_SPAWN 200809L -#define _POSIX_SPIN_LOCKS 200809L +/* #define _POSIX_SPAWN -1 */ +#define _POSIX_SPIN_LOCKS 200112L /* #define _POSIX_SPORADIC_SERVER -1 */ -#define _POSIX_SYNCHRONIZED_IO 200809L -#define _POSIX_THREAD_ATTR_STACKADDR 200809L -#define _POSIX_THREAD_ATTR_STACKSIZE 200809L -#define _POSIX_THREAD_CPUTIME 200809L +#define _POSIX_SYNCHRONIZED_IO 200112L +#define _POSIX_THREAD_ATTR_STACKADDR 200112L +#define _POSIX_THREAD_ATTR_STACKSIZE 200112L +#define _POSIX_THREAD_CPUTIME 200112L /* #define _POSIX_THREAD_PRIO_INHERIT -1 */ /* #define _POSIX_THREAD_PRIO_PROTECT -1 */ -#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L -#define _POSIX_THREAD_PROCESS_SHARED 200809L -#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L +#define _POSIX_THREAD_PRIORITY_SCHEDULING 200112L +#define _POSIX_THREAD_PROCESS_SHARED 200112L +#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L /* #define _POSIX_THREAD_SPORADIC_SERVER -1 */ -#define _POSIX_THREADS 200809L -#define _POSIX_TIMEOUTS 200809L -#define _POSIX_TIMERS 200809L +#define _POSIX_THREADS 200112L +/* #define _POSIX_TIMEOUTS -1 */ +#define _POSIX_TIMERS 1 /* #define _POSIX_TRACE -1 */ /* #define _POSIX_TRACE_EVENT_FILTER -1 */ /* #define _POSIX_TRACE_INHERIT -1 */ /* #define _POSIX_TRACE_LOG -1 */ /* #define _POSIX_TYPED_MEMORY_OBJECTS -1 */ #define _POSIX_VDISABLE '\0' - -#if __POSIX_VISIBLE >= 2 -#define _POSIX2_C_VERSION _POSIX2_VERSION -#define _POSIX2_C_BIND _POSIX2_VERSION -#define _POSIX2_C_DEV _POSIX2_VERSION -#define _POSIX2_CHAR_TERM _POSIX2_VERSION +#define _POSIX2_C_BIND 200112L +#define _POSIX2_C_DEV 200112L +#define _POSIX2_CHAR_TERM 200112L /* #define _POSIX2_FORT_DEV -1 */ /* #define _POSIX2_FORT_RUN -1 */ /* #define _POSIX2_LOCALEDEF -1 */ @@ -487,10 +176,8 @@ extern "C" { /* #define _POSIX2_PBS_LOCATE -1 */ /* #define _POSIX2_PBS_MESSAGE -1 */ /* #define _POSIX2_PBS_TRACK -1 */ -#define _POSIX2_SW_DEV _POSIX2_VERSION -#define _POSIX2_UPE _POSIX2_VERSION -#endif /* __POSIX_VISIBLE >= 2 */ - +#define _POSIX2_SW_DEV 200112L +#define _POSIX2_UPE 200112L #define _POSIX_V6_ILP32_OFF32 -1 #ifdef __LP64__ #define _POSIX_V6_ILP32_OFFBIG -1 @@ -501,16 +188,10 @@ extern "C" { #define _POSIX_V6_LP64_OFF64 -1 #define _POSIX_V6_LPBIG_OFFBIG -1 #endif -#define _POSIX_V7_ILP32_OFF32 _POSIX_V6_ILP32_OFF32 -#define _POSIX_V7_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG -#define _POSIX_V7_LP64_OFF64 _POSIX_V6_LP64_OFF64 -#define _POSIX_V7_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG #define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32 #define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG #define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64 #define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG - -#if __XSI_VISIBLE #define _XOPEN_CRYPT 1 #define _XOPEN_ENH_I18N 1 /* #define _XOPEN_LEGACY -1 */ @@ -519,14 +200,35 @@ extern "C" { #define _XOPEN_SHM 1 /* #define _XOPEN_STREAMS -1 */ /* #define _XOPEN_UNIX -1 */ -#endif /* __XSI_VISIBLE */ -/* The value corresponds to UNICODE version 5.2, which is the current - state of newlib's wide char conversion functions. */ -#define __STDC_ISO_10646__ 200910L +#endif /* !__STRICT_ANSI__ || __cplusplus || __STDC_VERSION__ >= 199901L */ + +/* The value corresponds to UNICODE version 4.0, which is the version + supported by XP. Newlib supports 5.2 (2011) but so far Cygwin needs + the MS conversions for double-byte charsets. */ +#define __STDC_ISO_10646__ 200305L #endif /* __CYGWIN__ */ +/* Per the permission given in POSIX.1-2008 section 2.2.1, define + * _POSIX_C_SOURCE if _XOPEN_SOURCE is defined and _POSIX_C_SOURCE is not. + * (_XOPEN_SOURCE indicates that XSI extensions are desired by an application.) + * This permission is first granted in 2008, but use it for older ones, also. + * Allow for _XOPEN_SOURCE to be empty (from the earliest form of it, before it + * was required to have specific values). + */ +#if !defined(_POSIX_C_SOURCE) && defined(_XOPEN_SOURCE) + #if (_XOPEN_SOURCE - 0) == 700 /* POSIX.1-2008 */ + #define _POSIX_C_SOURCE 200809L + #elif (_XOPEN_SOURCE - 0) == 600 /* POSIX.1-2001 or 2004 */ + #define _POSIX_C_SOURCE 200112L + #elif (_XOPEN_SOURCE - 0) == 500 /* POSIX.1-1995 */ + #define _POSIX_C_SOURCE 199506L + #elif (_XOPEN_SOURCE - 0) < 500 /* really old */ + #define _POSIX_C_SOURCE 2 + #endif +#endif + #ifdef __cplusplus } #endif diff --git a/libc/xtensa-lx106-elf/include/sys/iconvnls.h b/libc/xtensa-lx106-elf/include/sys/iconvnls.h index d4ee0b7..09ea183 100644 --- a/libc/xtensa-lx106-elf/include/sys/iconvnls.h +++ b/libc/xtensa-lx106-elf/include/sys/iconvnls.h @@ -44,34 +44,34 @@ #define ICONV_NLS_FROM 0 #define ICONV_NLS_TO 1 -void -_iconv_nls_get_state (iconv_t cd, mbstate_t *ps, int direction); +_VOID +_EXFUN(_iconv_nls_get_state, (iconv_t cd, mbstate_t *ps, int direction)); int -_iconv_nls_set_state (iconv_t cd, mbstate_t *ps, int direction); +_EXFUN(_iconv_nls_set_state, (iconv_t cd, mbstate_t *ps, int direction)); int -_iconv_nls_is_stateful (iconv_t cd, int direction); +_EXFUN(_iconv_nls_is_stateful, (iconv_t cd, int direction)); int -_iconv_nls_get_mb_cur_max (iconv_t cd, int direction); +_EXFUN(_iconv_nls_get_mb_cur_max, (iconv_t cd, int direction)); size_t -_iconv_nls_conv (struct _reent *rptr, iconv_t cd, - const char **inbuf, size_t *inbytesleft, - char **outbuf, size_t *outbytesleft); +_EXFUN(_iconv_nls_conv, (struct _reent *rptr, iconv_t cd, + _CONST char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft)); -const char * -_iconv_nls_construct_filename (struct _reent *rptr, const char *file, - const char *dir, const char *ext); +_CONST char * +_EXFUN(_iconv_nls_construct_filename, (struct _reent *rptr, _CONST char *file, + _CONST char *dir, _CONST char *ext)); int -_iconv_nls_open (struct _reent *rptr, const char *encoding, - iconv_t *towc, iconv_t *fromwc, int flag); +_EXFUN(_iconv_nls_open, (struct _reent *rptr, _CONST char *encoding, + iconv_t *towc, iconv_t *fromwc, int flag)); char * -_iconv_resolve_encoding_name (struct _reent *rptr, const char *ca); +_EXFUN(_iconv_resolve_encoding_name, (struct _reent *rptr, _CONST char *ca)); #endif /* __SYS_ICONVNLS_H__ */ diff --git a/libc/xtensa-lx106-elf/include/sys/lock.h b/libc/xtensa-lx106-elf/include/sys/lock.h index 02701cb..0ff3475 100644 --- a/libc/xtensa-lx106-elf/include/sys/lock.h +++ b/libc/xtensa-lx106-elf/include/sys/lock.h @@ -22,17 +22,8 @@ typedef _lock_t _LOCK_T; Lock functions all take a pointer to the _lock_t entry, so the value stored there can be manipulated. */ -#if 0 #define __LOCK_INIT(CLASS,NAME) CLASS _lock_t NAME = 0; #define __LOCK_INIT_RECURSIVE(CLASS,NAME) CLASS _lock_t NAME = 0; -#else -/* - * Skip a 'static' class definition, so they are all visible and can - * be initialize at startup. - */ -#define __LOCK_INIT(CLASS,NAME) _lock_t NAME = 0; -#define __LOCK_INIT_RECURSIVE(CLASS,NAME) _lock_t NAME = 0; -#endif void _lock_init(_lock_t *lock); void _lock_init_recursive(_lock_t *lock); diff --git a/libc/xtensa-lx106-elf/include/sys/param.h b/libc/xtensa-lx106-elf/include/sys/param.h index 9a6f115..ef203d3 100644 --- a/libc/xtensa-lx106-elf/include/sys/param.h +++ b/libc/xtensa-lx106-elf/include/sys/param.h @@ -10,9 +10,6 @@ #include #include -#ifndef NBBY -# define NBBY 8 /* number of bits in a byte */ -#endif #ifndef HZ # define HZ (60) #endif @@ -28,8 +25,4 @@ #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) -#ifndef howmany -#define howmany(x, y) (((x)+((y)-1))/(y)) -#endif - #endif diff --git a/libc/xtensa-lx106-elf/include/sys/queue.h b/libc/xtensa-lx106-elf/include/sys/queue.h index 491bdde..4bc7dac 100644 --- a/libc/xtensa-lx106-elf/include/sys/queue.h +++ b/libc/xtensa-lx106-elf/include/sys/queue.h @@ -10,7 +10,7 @@ * 2. 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. - * 3. Neither the name of the University nor the names of its contributors + * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -76,17 +76,11 @@ * * For details on the use of these macros, see the queue(3) manual page. * - * Below is a summary of implemented functions where: - * + means the macro is available - * - means the macro is not available - * s means the macro is available but is slow (runs in O(n) time) * * SLIST LIST STAILQ TAILQ * _HEAD + + + + - * _CLASS_HEAD + + + + * _HEAD_INITIALIZER + + + + * _ENTRY + + + + - * _CLASS_ENTRY + + + + * _INIT + + + + * _EMPTY + + + + * _FIRST + + + + @@ -94,31 +88,21 @@ * _PREV - + - + * _LAST - - + + * _FOREACH + + + + - * _FOREACH_FROM + + + + * _FOREACH_SAFE + + + + - * _FOREACH_FROM_SAFE + + + + * _FOREACH_REVERSE - - - + - * _FOREACH_REVERSE_FROM - - - + * _FOREACH_REVERSE_SAFE - - - + - * _FOREACH_REVERSE_FROM_SAFE - - - + * _INSERT_HEAD + + + + * _INSERT_BEFORE - + - + * _INSERT_AFTER + + + + * _INSERT_TAIL - - + + - * _CONCAT s s + + + * _CONCAT - - + + * _REMOVE_AFTER + - + - * _REMOVE_HEAD + - + - - * _REMOVE s + s + + * _REMOVE + + + + * _SWAP + + + + * */ #ifdef QUEUE_MACRO_DEBUG -#warn Use QUEUE_MACRO_DEBUG_TRACE and/or QUEUE_MACRO_DEBUG_TRASH -#define QUEUE_MACRO_DEBUG_TRACE -#define QUEUE_MACRO_DEBUG_TRASH -#endif - -#ifdef QUEUE_MACRO_DEBUG_TRACE /* Store the last 2 places the queue element or head was altered */ struct qm_trace { unsigned long lastline; @@ -128,7 +112,9 @@ struct qm_trace { }; #define TRACEBUF struct qm_trace trace; -#define TRACEBUF_INITIALIZER { __LINE__, 0, __FILE__, NULL } , +#define TRACEBUF_INITIALIZER { __FILE__, __LINE__, NULL, 0 } , +#define TRASHIT(x) do {(x) = (void *)-1;} while (0) +#define QMD_SAVELINK(name, link) void **name = (void *)&(link) #define QMD_TRACE_HEAD(head) do { \ (head)->trace.prevline = (head)->trace.lastline; \ @@ -144,35 +130,14 @@ struct qm_trace { (elem)->trace.lastfile = __FILE__; \ } while (0) -#else /* !QUEUE_MACRO_DEBUG_TRACE */ +#else #define QMD_TRACE_ELEM(elem) #define QMD_TRACE_HEAD(head) +#define QMD_SAVELINK(name, link) #define TRACEBUF #define TRACEBUF_INITIALIZER -#endif /* QUEUE_MACRO_DEBUG_TRACE */ - -#ifdef QUEUE_MACRO_DEBUG_TRASH -#define TRASHIT(x) do {(x) = (void *)-1;} while (0) -#define QMD_IS_TRASHED(x) ((x) == (void *)(intptr_t)-1) -#else /* !QUEUE_MACRO_DEBUG_TRASH */ #define TRASHIT(x) -#define QMD_IS_TRASHED(x) 0 -#endif /* QUEUE_MACRO_DEBUG_TRASH */ - -#if defined(QUEUE_MACRO_DEBUG_TRACE) || defined(QUEUE_MACRO_DEBUG_TRASH) -#define QMD_SAVELINK(name, link) void **name = (void *)&(link) -#else /* !QUEUE_MACRO_DEBUG_TRACE && !QUEUE_MACRO_DEBUG_TRASH */ -#define QMD_SAVELINK(name, link) -#endif /* QUEUE_MACRO_DEBUG_TRACE || QUEUE_MACRO_DEBUG_TRASH */ - -#ifdef __cplusplus -/* - * In C++ there can be structure lists and class lists: - */ -#define QUEUE_TYPEOF(type) type -#else -#define QUEUE_TYPEOF(type) struct type -#endif +#endif /* QUEUE_MACRO_DEBUG */ /* * Singly-linked List declarations. @@ -182,11 +147,6 @@ struct name { \ struct type *slh_first; /* first element */ \ } -#define SLIST_CLASS_HEAD(name, type) \ -struct name { \ - class type *slh_first; /* first element */ \ -} - #define SLIST_HEAD_INITIALIZER(head) \ { NULL } @@ -195,37 +155,9 @@ struct { \ struct type *sle_next; /* next element */ \ } -#define SLIST_CLASS_ENTRY(type) \ -struct { \ - class type *sle_next; /* next element */ \ -} - /* * Singly-linked List functions. */ -#if (defined(_KERNEL) && defined(INVARIANTS)) -#define QMD_SLIST_CHECK_PREVPTR(prevp, elm) do { \ - if (*(prevp) != (elm)) \ - panic("Bad prevptr *(%p) == %p != %p", \ - (prevp), *(prevp), (elm)); \ -} while (0) -#else -#define QMD_SLIST_CHECK_PREVPTR(prevp, elm) -#endif - -#define SLIST_CONCAT(head1, head2, type, field) do { \ - QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head1); \ - if (curelm == NULL) { \ - if ((SLIST_FIRST(head1) = SLIST_FIRST(head2)) != NULL) \ - SLIST_INIT(head2); \ - } else if (SLIST_FIRST(head2) != NULL) { \ - while (SLIST_NEXT(curelm, field) != NULL) \ - curelm = SLIST_NEXT(curelm, field); \ - SLIST_NEXT(curelm, field) = SLIST_FIRST(head2); \ - SLIST_INIT(head2); \ - } \ -} while (0) - #define SLIST_EMPTY(head) ((head)->slh_first == NULL) #define SLIST_FIRST(head) ((head)->slh_first) @@ -235,21 +167,11 @@ struct { \ (var); \ (var) = SLIST_NEXT((var), field)) -#define SLIST_FOREACH_FROM(var, head, field) \ - for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \ - (var); \ - (var) = SLIST_NEXT((var), field)) - #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = SLIST_FIRST((head)); \ (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ (var) = (tvar)) -#define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \ - for ((var) = ((var) ? (var) : SLIST_FIRST((head))); \ - (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ - (var) = (tvar)) - #define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ for ((varp) = &SLIST_FIRST((head)); \ ((var) = *(varp)) != NULL; \ @@ -277,7 +199,7 @@ struct { \ SLIST_REMOVE_HEAD((head), field); \ } \ else { \ - QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head); \ + struct type *curelm = SLIST_FIRST((head)); \ while (SLIST_NEXT(curelm, field) != (elm)) \ curelm = SLIST_NEXT(curelm, field); \ SLIST_REMOVE_AFTER(curelm, field); \ @@ -294,14 +216,8 @@ struct { \ SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \ } while (0) -#define SLIST_REMOVE_PREVPTR(prevp, elm, field) do { \ - QMD_SLIST_CHECK_PREVPTR(prevp, elm); \ - *(prevp) = SLIST_NEXT(elm, field); \ - TRASHIT((elm)->field.sle_next); \ -} while (0) - #define SLIST_SWAP(head1, head2, type) do { \ - QUEUE_TYPEOF(type) *swap_first = SLIST_FIRST(head1); \ + struct type *swap_first = SLIST_FIRST(head1); \ SLIST_FIRST(head1) = SLIST_FIRST(head2); \ SLIST_FIRST(head2) = swap_first; \ } while (0) @@ -315,12 +231,6 @@ struct name { \ struct type **stqh_last;/* addr of last next element */ \ } -#define STAILQ_CLASS_HEAD(name, type) \ -struct name { \ - class type *stqh_first; /* first element */ \ - class type **stqh_last; /* addr of last next element */ \ -} - #define STAILQ_HEAD_INITIALIZER(head) \ { NULL, &(head).stqh_first } @@ -329,11 +239,6 @@ struct { \ struct type *stqe_next; /* next element */ \ } -#define STAILQ_CLASS_ENTRY(type) \ -struct { \ - class type *stqe_next; /* next element */ \ -} - /* * Singly-linked Tail queue functions. */ @@ -354,21 +259,12 @@ struct { \ (var); \ (var) = STAILQ_NEXT((var), field)) -#define STAILQ_FOREACH_FROM(var, head, field) \ - for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \ - (var); \ - (var) = STAILQ_NEXT((var), field)) #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = STAILQ_FIRST((head)); \ (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ (var) = (tvar)) -#define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \ - for ((var) = ((var) ? (var) : STAILQ_FIRST((head))); \ - (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) - #define STAILQ_INIT(head) do { \ STAILQ_FIRST((head)) = NULL; \ (head)->stqh_last = &STAILQ_FIRST((head)); \ @@ -392,10 +288,9 @@ struct { \ (head)->stqh_last = &STAILQ_NEXT((elm), field); \ } while (0) -#define STAILQ_LAST(head, type, field) \ - (STAILQ_EMPTY((head)) ? NULL : \ - __containerof((head)->stqh_last, \ - QUEUE_TYPEOF(type), field.stqe_next)) +#define STAILQ_LAST(head, type, field) \ + (STAILQ_EMPTY((head)) ? NULL : \ + __containerof((head)->stqh_last, struct type, field.stqe_next)) #define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) @@ -405,7 +300,7 @@ struct { \ STAILQ_REMOVE_HEAD((head), field); \ } \ else { \ - QUEUE_TYPEOF(type) *curelm = STAILQ_FIRST(head); \ + struct type *curelm = STAILQ_FIRST((head)); \ while (STAILQ_NEXT(curelm, field) != (elm)) \ curelm = STAILQ_NEXT(curelm, field); \ STAILQ_REMOVE_AFTER(head, curelm, field); \ @@ -431,8 +326,8 @@ struct { \ } while (0) #define STAILQ_SWAP(head1, head2, type) do { \ - QUEUE_TYPEOF(type) *swap_first = STAILQ_FIRST(head1); \ - QUEUE_TYPEOF(type) **swap_last = (head1)->stqh_last; \ + struct type *swap_first = STAILQ_FIRST(head1); \ + struct type **swap_last = (head1)->stqh_last; \ STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \ (head1)->stqh_last = (head2)->stqh_last; \ STAILQ_FIRST(head2) = swap_first; \ @@ -452,11 +347,6 @@ struct name { \ struct type *lh_first; /* first element */ \ } -#define LIST_CLASS_HEAD(name, type) \ -struct name { \ - class type *lh_first; /* first element */ \ -} - #define LIST_HEAD_INITIALIZER(head) \ { NULL } @@ -466,23 +356,11 @@ struct { \ struct type **le_prev; /* address of previous next element */ \ } -#define LIST_CLASS_ENTRY(type) \ -struct { \ - class type *le_next; /* next element */ \ - class type **le_prev; /* address of previous next element */ \ -} - /* * List functions. */ #if (defined(_KERNEL) && defined(INVARIANTS)) -/* - * QMD_LIST_CHECK_HEAD(LIST_HEAD *head, LIST_ENTRY NAME) - * - * If the list is non-empty, validates that the first element of the list - * points back at 'head.' - */ #define QMD_LIST_CHECK_HEAD(head, field) do { \ if (LIST_FIRST((head)) != NULL && \ LIST_FIRST((head))->field.le_prev != \ @@ -490,12 +368,6 @@ struct { \ panic("Bad list head %p first->prev != head", (head)); \ } while (0) -/* - * QMD_LIST_CHECK_NEXT(TYPE *elm, LIST_ENTRY NAME) - * - * If an element follows 'elm' in the list, validates that the next element - * points back at 'elm.' - */ #define QMD_LIST_CHECK_NEXT(elm, field) do { \ if (LIST_NEXT((elm), field) != NULL && \ LIST_NEXT((elm), field)->field.le_prev != \ @@ -503,11 +375,6 @@ struct { \ panic("Bad link elm %p next->prev != elm", (elm)); \ } while (0) -/* - * QMD_LIST_CHECK_PREV(TYPE *elm, LIST_ENTRY NAME) - * - * Validates that the previous element (or head of the list) points to 'elm.' - */ #define QMD_LIST_CHECK_PREV(elm, field) do { \ if (*(elm)->field.le_prev != (elm)) \ panic("Bad link elm %p prev->next != elm", (elm)); \ @@ -518,23 +385,6 @@ struct { \ #define QMD_LIST_CHECK_PREV(elm, field) #endif /* (_KERNEL && INVARIANTS) */ -#define LIST_CONCAT(head1, head2, type, field) do { \ - QUEUE_TYPEOF(type) *curelm = LIST_FIRST(head1); \ - if (curelm == NULL) { \ - if ((LIST_FIRST(head1) = LIST_FIRST(head2)) != NULL) { \ - LIST_FIRST(head2)->field.le_prev = \ - &LIST_FIRST((head1)); \ - LIST_INIT(head2); \ - } \ - } else if (LIST_FIRST(head2) != NULL) { \ - while (LIST_NEXT(curelm, field) != NULL) \ - curelm = LIST_NEXT(curelm, field); \ - LIST_NEXT(curelm, field) = LIST_FIRST(head2); \ - LIST_FIRST(head2)->field.le_prev = &LIST_NEXT(curelm, field); \ - LIST_INIT(head2); \ - } \ -} while (0) - #define LIST_EMPTY(head) ((head)->lh_first == NULL) #define LIST_FIRST(head) ((head)->lh_first) @@ -544,21 +394,11 @@ struct { \ (var); \ (var) = LIST_NEXT((var), field)) -#define LIST_FOREACH_FROM(var, head, field) \ - for ((var) = ((var) ? (var) : LIST_FIRST((head))); \ - (var); \ - (var) = LIST_NEXT((var), field)) - #define LIST_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = LIST_FIRST((head)); \ (var) && ((tvar) = LIST_NEXT((var), field), 1); \ (var) = (tvar)) -#define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \ - for ((var) = ((var) ? (var) : LIST_FIRST((head))); \ - (var) && ((tvar) = LIST_NEXT((var), field), 1); \ - (var) = (tvar)) - #define LIST_INIT(head) do { \ LIST_FIRST((head)) = NULL; \ } while (0) @@ -590,10 +430,9 @@ struct { \ #define LIST_NEXT(elm, field) ((elm)->field.le_next) -#define LIST_PREV(elm, head, type, field) \ - ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \ - __containerof((elm)->field.le_prev, \ - QUEUE_TYPEOF(type), field.le_next)) +#define LIST_PREV(elm, head, type, field) \ + ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \ + __containerof((elm)->field.le_prev, struct type, field.le_next)) #define LIST_REMOVE(elm, field) do { \ QMD_SAVELINK(oldnext, (elm)->field.le_next); \ @@ -609,7 +448,7 @@ struct { \ } while (0) #define LIST_SWAP(head1, head2, type, field) do { \ - QUEUE_TYPEOF(type) *swap_tmp = LIST_FIRST(head1); \ + struct type *swap_tmp = LIST_FIRST((head1)); \ LIST_FIRST((head1)) = LIST_FIRST((head2)); \ LIST_FIRST((head2)) = swap_tmp; \ if ((swap_tmp = LIST_FIRST((head1))) != NULL) \ @@ -628,13 +467,6 @@ struct name { \ TRACEBUF \ } -#define TAILQ_CLASS_HEAD(name, type) \ -struct name { \ - class type *tqh_first; /* first element */ \ - class type **tqh_last; /* addr of last next element */ \ - TRACEBUF \ -} - #define TAILQ_HEAD_INITIALIZER(head) \ { NULL, &(head).tqh_first, TRACEBUF_INITIALIZER } @@ -645,23 +477,10 @@ struct { \ TRACEBUF \ } -#define TAILQ_CLASS_ENTRY(type) \ -struct { \ - class type *tqe_next; /* next element */ \ - class type **tqe_prev; /* address of previous next element */ \ - TRACEBUF \ -} - /* * Tail queue functions. */ #if (defined(_KERNEL) && defined(INVARIANTS)) -/* - * QMD_TAILQ_CHECK_HEAD(TAILQ_HEAD *head, TAILQ_ENTRY NAME) - * - * If the tailq is non-empty, validates that the first element of the tailq - * points back at 'head.' - */ #define QMD_TAILQ_CHECK_HEAD(head, field) do { \ if (!TAILQ_EMPTY(head) && \ TAILQ_FIRST((head))->field.tqe_prev != \ @@ -669,22 +488,11 @@ struct { \ panic("Bad tailq head %p first->prev != head", (head)); \ } while (0) -/* - * QMD_TAILQ_CHECK_TAIL(TAILQ_HEAD *head, TAILQ_ENTRY NAME) - * - * Validates that the tail of the tailq is a pointer to pointer to NULL. - */ #define QMD_TAILQ_CHECK_TAIL(head, field) do { \ if (*(head)->tqh_last != NULL) \ panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \ } while (0) -/* - * QMD_TAILQ_CHECK_NEXT(TYPE *elm, TAILQ_ENTRY NAME) - * - * If an element follows 'elm' in the tailq, validates that the next element - * points back at 'elm.' - */ #define QMD_TAILQ_CHECK_NEXT(elm, field) do { \ if (TAILQ_NEXT((elm), field) != NULL && \ TAILQ_NEXT((elm), field)->field.tqe_prev != \ @@ -692,11 +500,6 @@ struct { \ panic("Bad link elm %p next->prev != elm", (elm)); \ } while (0) -/* - * QMD_TAILQ_CHECK_PREV(TYPE *elm, TAILQ_ENTRY NAME) - * - * Validates that the previous element (or head of the tailq) points to 'elm.' - */ #define QMD_TAILQ_CHECK_PREV(elm, field) do { \ if (*(elm)->field.tqe_prev != (elm)) \ panic("Bad link elm %p prev->next != elm", (elm)); \ @@ -728,41 +531,21 @@ struct { \ (var); \ (var) = TAILQ_NEXT((var), field)) -#define TAILQ_FOREACH_FROM(var, head, field) \ - for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \ - (var); \ - (var) = TAILQ_NEXT((var), field)) - #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = TAILQ_FIRST((head)); \ (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ (var) = (tvar)) -#define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \ - for ((var) = ((var) ? (var) : TAILQ_FIRST((head))); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) - #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ for ((var) = TAILQ_LAST((head), headname); \ (var); \ (var) = TAILQ_PREV((var), headname, field)) -#define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \ - for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \ - (var); \ - (var) = TAILQ_PREV((var), headname, field)) - #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ for ((var) = TAILQ_LAST((head), headname); \ (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ (var) = (tvar)) -#define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \ - for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname)); \ - (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ - (var) = (tvar)) - #define TAILQ_INIT(head) do { \ TAILQ_FIRST((head)) = NULL; \ (head)->tqh_last = &TAILQ_FIRST((head)); \ @@ -781,7 +564,7 @@ struct { \ TAILQ_NEXT((listelm), field) = (elm); \ (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ QMD_TRACE_ELEM(&(elm)->field); \ - QMD_TRACE_ELEM(&(listelm)->field); \ + QMD_TRACE_ELEM(&listelm->field); \ } while (0) #define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ @@ -791,7 +574,7 @@ struct { \ *(listelm)->field.tqe_prev = (elm); \ (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ QMD_TRACE_ELEM(&(elm)->field); \ - QMD_TRACE_ELEM(&(listelm)->field); \ + QMD_TRACE_ELEM(&listelm->field); \ } while (0) #define TAILQ_INSERT_HEAD(head, elm, field) do { \ @@ -844,8 +627,8 @@ struct { \ } while (0) #define TAILQ_SWAP(head1, head2, type, field) do { \ - QUEUE_TYPEOF(type) *swap_first = (head1)->tqh_first; \ - QUEUE_TYPEOF(type) **swap_last = (head1)->tqh_last; \ + struct type *swap_first = (head1)->tqh_first; \ + struct type **swap_last = (head1)->tqh_last; \ (head1)->tqh_first = (head2)->tqh_first; \ (head1)->tqh_last = (head2)->tqh_last; \ (head2)->tqh_first = swap_first; \ diff --git a/libc/xtensa-lx106-elf/include/sys/reent.h b/libc/xtensa-lx106-elf/include/sys/reent.h index 0f21c68..ce5b3ed 100644 --- a/libc/xtensa-lx106-elf/include/sys/reent.h +++ b/libc/xtensa-lx106-elf/include/sys/reent.h @@ -37,8 +37,6 @@ typedef __uint32_t __ULong; struct _reent; -struct __locale_t; - /* * If _REENT_SMALL is defined, we make struct _reent as small as possible, * by having nearly everything possible allocated at first use. @@ -144,7 +142,7 @@ struct __sbuf { * _ub._base!=NULL) and _up and _ur save the current values of _p and _r. */ -#if defined(_REENT_SMALL) && !defined(_REENT_GLOBAL_STDIO_STREAMS) +#ifdef _REENT_SMALL /* * struct __sFILE_fake is the start of a struct __sFILE, with only the * minimal fields allocated. In __sinit() we really allocate the 3 @@ -165,7 +163,7 @@ struct __sFILE_fake { /* Following is needed both in libc/stdio and libc/stdlib so we put it * here instead of libc/stdio/local.h where it was previously. */ -extern void __sinit (struct _reent *); +extern _VOID _EXFUN(__sinit,(struct _reent *)); # define _REENT_SMALL_CHECK_INIT(ptr) \ do \ @@ -192,15 +190,15 @@ struct __sFILE { #endif /* operations */ - void * _cookie; /* cookie passed to io functions */ + _PTR _cookie; /* cookie passed to io functions */ - _READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *, - char *, _READ_WRITE_BUFSIZE_TYPE); - _READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *, + _READ_WRITE_RETURN_TYPE _EXFNPTR(_read, (struct _reent *, _PTR, + char *, _READ_WRITE_BUFSIZE_TYPE)); + _READ_WRITE_RETURN_TYPE _EXFNPTR(_write, (struct _reent *, _PTR, const char *, - _READ_WRITE_BUFSIZE_TYPE); - _fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int); - int (*_close) (struct _reent *, void *); + _READ_WRITE_BUFSIZE_TYPE)); + _fpos_t _EXFNPTR(_seek, (struct _reent *, _PTR, _fpos_t, int)); + int _EXFNPTR(_close, (struct _reent *, _PTR)); /* separate buffer for long sequences of ungetc() */ struct __sbuf _ub; /* ungetc buffer */ @@ -248,15 +246,15 @@ struct __sFILE64 { struct _reent *_data; /* operations */ - void * _cookie; /* cookie passed to io functions */ + _PTR _cookie; /* cookie passed to io functions */ - _READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *, - char *, _READ_WRITE_BUFSIZE_TYPE); - _READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *, + _READ_WRITE_RETURN_TYPE _EXFNPTR(_read, (struct _reent *, _PTR, + char *, _READ_WRITE_BUFSIZE_TYPE)); + _READ_WRITE_RETURN_TYPE _EXFNPTR(_write, (struct _reent *, _PTR, const char *, - _READ_WRITE_BUFSIZE_TYPE); - _fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int); - int (*_close) (struct _reent *, void *); + _READ_WRITE_BUFSIZE_TYPE)); + _fpos_t _EXFNPTR(_seek, (struct _reent *, _PTR, _fpos_t, int)); + int _EXFNPTR(_close, (struct _reent *, _PTR)); /* separate buffer for long sequences of ungetc() */ struct __sbuf _ub; /* ungetc buffer */ @@ -275,7 +273,7 @@ struct __sFILE64 { int _flags2; /* for future use */ _off64_t _offset; /* current lseek offset */ - _fpos64_t (*_seek64) (struct _reent *, void *, _fpos64_t, int); + _fpos64_t _EXFNPTR(_seek64, (struct _reent *, _PTR, _fpos64_t, int)); #ifndef __SINGLE_THREAD__ _flock_t _lock; /* for thread-safety locking */ @@ -386,12 +384,12 @@ struct _reent int __sdidinit; /* 1 means stdio has been init'd */ - int _unspecified_locale_info; /* unused, reserved for locale stuff */ - struct __locale_t *_locale;/* per-thread locale */ + int _current_category; /* unused */ + _CONST char *_current_locale; /* unused */ struct _mprec *_mp; - void (*__cleanup) (struct _reent *); + void _EXFNPTR(__cleanup, (struct _reent *)); int _gamma_signgam; @@ -418,43 +416,6 @@ struct _reent char *_signal_buf; /* strsignal */ }; -#ifdef _REENT_GLOBAL_STDIO_STREAMS -extern __FILE __sf[3]; - -# define _REENT_INIT(var) \ - { 0, \ - &__sf[0], \ - &__sf[1], \ - &__sf[2], \ - 0, \ - _NULL, \ - 0, \ - 0, \ - _NULL, \ - _NULL, \ - _NULL, \ - 0, \ - 0, \ - _NULL, \ - _NULL, \ - _NULL, \ - _NULL, \ - _NULL, \ - _REENT_INIT_ATEXIT \ - {_NULL, 0, _NULL}, \ - _NULL, \ - _NULL, \ - _NULL \ - } - -#define _REENT_INIT_PTR_ZEROED(var) \ - { (var)->_stdin = &__sf[0]; \ - (var)->_stdout = &__sf[1]; \ - (var)->_stderr = &__sf[2]; \ - } - -#else - extern const struct __sFILE_fake __sf_fake_stdin; extern const struct __sFILE_fake __sf_fake_stdout; extern const struct __sFILE_fake __sf_fake_stderr; @@ -468,7 +429,7 @@ extern const struct __sFILE_fake __sf_fake_stderr; _NULL, \ 0, \ 0, \ - _NULL, \ + "C", \ _NULL, \ _NULL, \ 0, \ @@ -485,16 +446,16 @@ extern const struct __sFILE_fake __sf_fake_stderr; _NULL \ } -#define _REENT_INIT_PTR_ZEROED(var) \ - { (var)->_stdin = (__FILE *)&__sf_fake_stdin; \ +#define _REENT_INIT_PTR(var) \ + { memset((var), 0, sizeof(*(var))); \ + (var)->_stdin = (__FILE *)&__sf_fake_stdin; \ (var)->_stdout = (__FILE *)&__sf_fake_stdout; \ (var)->_stderr = (__FILE *)&__sf_fake_stderr; \ + (var)->_current_locale = "C"; \ } -#endif - -/* Only add assert() calls if we are specified to debug. */ -#ifdef _REENT_CHECK_DEBUG +/* Only built the assert() calls if we are built with debugging. */ +#if DEBUG #include #define __reent_assert(x) assert(x) #else @@ -617,13 +578,12 @@ struct _reent int _inc; /* used by tmpnam */ char _emergency[_REENT_EMERGENCY_SIZE]; - /* TODO */ - int _unspecified_locale_info; /* unused, reserved for locale stuff */ - struct __locale_t *_locale;/* per-thread locale */ + int _current_category; /* used by setlocale */ + _CONST char *_current_locale; int __sdidinit; /* 1 means stdio has been init'd */ - void (*__cleanup) (struct _reent *); + void _EXFNPTR(__cleanup, (struct _reent *)); /* used by mprec routines */ struct _Bigint *_result; @@ -683,27 +643,18 @@ struct _reent of the above members (on the off chance that future binary compatibility would be broken otherwise). */ struct _glue __sglue; /* root of glue chain */ -# ifndef _REENT_GLOBAL_STDIO_STREAMS __FILE __sf[3]; /* first three file descriptors */ -# endif }; -#ifdef _REENT_GLOBAL_STDIO_STREAMS -extern __FILE __sf[3]; -#define _REENT_STDIO_STREAM(var, index) &__sf[index] -#else -#define _REENT_STDIO_STREAM(var, index) &(var)->__sf[index] -#endif - #define _REENT_INIT(var) \ { 0, \ - _REENT_STDIO_STREAM(&(var), 0), \ - _REENT_STDIO_STREAM(&(var), 1), \ - _REENT_STDIO_STREAM(&(var), 2), \ + &(var).__sf[0], \ + &(var).__sf[1], \ + &(var).__sf[2], \ 0, \ "", \ 0, \ - _NULL, \ + "C", \ 0, \ _NULL, \ _NULL, \ @@ -743,10 +694,12 @@ extern __FILE __sf[3]; {_NULL, 0, _NULL} \ } -#define _REENT_INIT_PTR_ZEROED(var) \ - { (var)->_stdin = _REENT_STDIO_STREAM(var, 0); \ - (var)->_stdout = _REENT_STDIO_STREAM(var, 1); \ - (var)->_stderr = _REENT_STDIO_STREAM(var, 2); \ +#define _REENT_INIT_PTR(var) \ + { memset((var), 0, sizeof(*(var))); \ + (var)->_stdin = &(var)->__sf[0]; \ + (var)->_stdout = &(var)->__sf[1]; \ + (var)->_stderr = &(var)->__sf[2]; \ + (var)->_current_locale = "C"; \ (var)->_new._reent._rand_next = 1; \ (var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; \ (var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; \ @@ -792,11 +745,6 @@ extern __FILE __sf[3]; #endif /* !_REENT_SMALL */ -#define _REENT_INIT_PTR(var) \ - { memset((var), 0, sizeof(*(var))); \ - _REENT_INIT_PTR_ZEROED(var); \ - } - /* This value is used in stdlib/misc.c. reent/reent.c has to know it as well to make sure the freelist is correctly free'd. Therefore we define it here, rather than in stdlib/misc.c, as before. */ @@ -812,15 +760,15 @@ extern __FILE __sf[3]; #endif extern struct _reent *_impure_ptr __ATTRIBUTE_IMPURE_PTR__; -extern struct _reent *const _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__; +extern struct _reent *_CONST _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__; -void _reclaim_reent (struct _reent *); +void _reclaim_reent _PARAMS ((struct _reent *)); /* #define _REENT_ONLY define this to get only reentrant routines */ #if defined(__DYNAMIC_REENT__) && !defined(__SINGLE_THREAD__) #ifndef __getreent - struct _reent * __getreent (void); + struct _reent * _EXFUN(__getreent, (void)); #endif # define _REENT (__getreent()) #else /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */ diff --git a/libc/xtensa-lx106-elf/include/sys/resource.h b/libc/xtensa-lx106-elf/include/sys/resource.h index b99506b..c35ac2a 100644 --- a/libc/xtensa-lx106-elf/include/sys/resource.h +++ b/libc/xtensa-lx106-elf/include/sys/resource.h @@ -11,7 +11,7 @@ struct rusage { struct timeval ru_stime; /* system time used */ }; -int getrusage (int, struct rusage*); +int _EXFUN(getrusage, (int, struct rusage*)); #endif diff --git a/libc/xtensa-lx106-elf/include/sys/sched.h b/libc/xtensa-lx106-elf/include/sys/sched.h index 4adb6e2..58f99d6 100644 --- a/libc/xtensa-lx106-elf/include/sys/sched.h +++ b/libc/xtensa-lx106-elf/include/sys/sched.h @@ -21,8 +21,6 @@ #ifndef _SYS_SCHED_H_ #define _SYS_SCHED_H_ -#include - #ifdef __cplusplus extern "C" { #endif diff --git a/libc/xtensa-lx106-elf/include/sys/select.h b/libc/xtensa-lx106-elf/include/sys/select.h deleted file mode 100644 index 1e5d895..0000000 --- a/libc/xtensa-lx106-elf/include/sys/select.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef _SYS_SELECT_H -#define _SYS_SELECT_H - -/* We don't define fd_set and friends if we are compiling POSIX - source, or if we have included (or may include as indicated - by __USE_W32_SOCKETS) the W32api winsock[2].h header which - defines Windows versions of them. Note that a program which - includes the W32api winsock[2].h header must know what it is doing; - it must not call the Cygwin select function. -*/ -# if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) - -#include -#include -#include -#include - -#if !defined(_SIGSET_T_DECLARED) -#define _SIGSET_T_DECLARED -typedef __sigset_t sigset_t; -#endif - -# define _SYS_TYPES_FD_SET -/* - * Select uses bit masks of file descriptors in longs. - * These macros manipulate such bit fields (the filesystem macros use chars). - * FD_SETSIZE may be defined by the user, but the default here - * should be >= NOFILE (param.h). - */ -# ifndef FD_SETSIZE -# define FD_SETSIZE 64 -# endif - -typedef unsigned long fd_mask; -# define NFDBITS (sizeof (fd_mask) * 8) /* bits per mask */ -# ifndef _howmany -# define _howmany(x,y) (((x)+((y)-1))/(y)) -# endif - -/* We use a macro for fd_set so that including Sockets.h afterwards - can work. */ -typedef struct _types_fd_set { - fd_mask fds_bits[_howmany(FD_SETSIZE, NFDBITS)]; -} _types_fd_set; - -#define fd_set _types_fd_set - -# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) -# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) -# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) -# define FD_ZERO(p) (__extension__ (void)({ \ - size_t __i; \ - char *__tmp = (char *)p; \ - for (__i = 0; __i < sizeof (*(p)); ++__i) \ - *__tmp++ = 0; \ -})) - -#if !defined (__INSIDE_CYGWIN_NET__) - -__BEGIN_DECLS - -int select __P ((int __n, fd_set *__readfds, fd_set *__writefds, - fd_set *__exceptfds, struct timeval *__timeout)); -#if __POSIX_VISIBLE >= 200112 -int pselect __P ((int __n, fd_set *__readfds, fd_set *__writefds, - fd_set *__exceptfds, const struct timespec *__timeout, - const sigset_t *__set)); -#endif - -__END_DECLS - -#endif /* !__INSIDE_CYGWIN_NET__ */ - -#endif /* !(_WINSOCK_H || _WINSOCKAPI_ || __USE_W32_SOCKETS) */ - -#endif /* sys/select.h */ diff --git a/libc/xtensa-lx106-elf/include/sys/signal.h b/libc/xtensa-lx106-elf/include/sys/signal.h index 7d0c594..a29f525 100644 --- a/libc/xtensa-lx106-elf/include/sys/signal.h +++ b/libc/xtensa-lx106-elf/include/sys/signal.h @@ -7,22 +7,19 @@ extern "C" { #endif #include "_ansi.h" -#include #include #include -#include -#include -#if !defined(_SIGSET_T_DECLARED) -#define _SIGSET_T_DECLARED -typedef __sigset_t sigset_t; +/* #ifndef __STRICT_ANSI__*/ + +/* Cygwin defines it's own sigset_t in include/cygwin/signal.h */ +#ifndef __CYGWIN__ +typedef unsigned long sigset_t; #endif -#if defined(__CYGWIN__) -#include -#else +#if defined(__rtems__) -#if defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309 +#if defined(_POSIX_REALTIME_SIGNALS) /* sigev_notify values NOTE: P1003.1c/D10, p. 34 adds SIGEV_THREAD. */ @@ -70,16 +67,14 @@ typedef struct { int si_code; /* Cause of the signal */ union sigval si_value; /* Signal value */ } siginfo_t; -#endif /* defined(_POSIX_REALTIME_SIGNALS) || __POSIX_VISIBLE >= 199309 */ - -#if defined(__rtems__) +#endif /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */ #define SA_NOCLDSTOP 0x1 /* Do not generate SIGCHLD when children stop */ #define SA_SIGINFO 0x2 /* Invoke the signal catching function with */ /* three arguments instead of one. */ -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 +#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 #define SA_ONSTACK 0x4 /* Signal delivery will be on a separate stack. */ #endif @@ -112,22 +107,7 @@ struct sigaction { #define sa_sigaction _signal_handlers._sigaction #endif -#else /* defined(__rtems__) */ - -#define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */ - -typedef void (*_sig_func_ptr)(int); - -struct sigaction -{ - _sig_func_ptr sa_handler; - sigset_t sa_mask; - int sa_flags; -}; -#endif /* defined(__rtems__) */ -#endif /* defined(__CYGWIN__) */ - -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 +#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 /* * Minimum and default signal stack constants. Allow for target overrides * from . @@ -145,8 +125,6 @@ struct sigaction #define SS_ONSTACK 0x1 #define SS_DISABLE 0x2 -#endif - /* * Structure used in sigaltstack call. */ @@ -155,42 +133,27 @@ typedef struct sigaltstack { int ss_flags; /* Flags. */ size_t ss_size; /* Stack size. */ } stack_t; +#endif + +#elif defined(__CYGWIN__) +#include +#else +#define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */ + +typedef void (*_sig_func_ptr)(int); + +struct sigaction +{ + _sig_func_ptr sa_handler; + sigset_t sa_mask; + int sa_flags; +}; +#endif /* defined(__rtems__) */ -#if __POSIX_VISIBLE #define SIG_SETMASK 0 /* set mask with sigprocmask() */ #define SIG_BLOCK 1 /* set of signals to block */ #define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ -int sigprocmask (int how, const sigset_t *set, sigset_t *oset); -#endif - -#if __POSIX_VISIBLE >= 199506 -int pthread_sigmask (int how, const sigset_t *set, sigset_t *oset); -#endif - -#ifdef _COMPILING_NEWLIB -int _kill (pid_t, int); -#endif /* _COMPILING_NEWLIB */ - -#if __POSIX_VISIBLE -int kill (pid_t, int); -#endif - -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 -int killpg (pid_t, int); -#endif -#if __POSIX_VISIBLE -int sigaction (int, const struct sigaction *, struct sigaction *); -int sigaddset (sigset_t *, const int); -int sigdelset (sigset_t *, const int); -int sigismember (const sigset_t *, int); -int sigfillset (sigset_t *); -int sigemptyset (sigset_t *); -int sigpending (sigset_t *); -int sigsuspend (const sigset_t *); -int sigwait (const sigset_t *set, int *sig); - -#if !defined(__CYGWIN__) && !defined(__rtems__) /* These depend upon the type of sigset_t, which right now is always a long.. They're in the POSIX namespace, but are not ANSI. */ @@ -199,45 +162,73 @@ int sigwait (const sigset_t *set, int *sig); #define sigemptyset(what) (*(what) = 0, 0) #define sigfillset(what) (*(what) = ~(0), 0) #define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) -#endif /* !__CYGWIN__ && !__rtems__ */ -#endif /* __POSIX_VISIBLE */ -/* There are two common sigpause variants, both of which take an int argument. - If you request _XOPEN_SOURCE or _GNU_SOURCE, you get the System V version, - which removes the given signal from the process's signal mask; otherwise - you get the BSD version, which sets the process's signal mask to the given - value. */ -#if __XSI_VISIBLE && !defined(__INSIDE_CYGWIN__) -# ifdef __GNUC__ -int sigpause (int) __asm__ (__ASMNAME ("__xpg_sigpause")); -# else -int __xpg_sigpause (int); -# define sigpause __xpg_sigpause -# endif -#elif __BSD_VISIBLE -int sigpause (int); +int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset)); + +#if defined(_POSIX_THREADS) +int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset)); #endif -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 -int sigaltstack (const stack_t *__restrict, stack_t *__restrict); +#if defined(__CYGWIN__) || defined(__rtems__) +#undef sigaddset +#undef sigdelset +#undef sigemptyset +#undef sigfillset +#undef sigismember + +#ifdef _COMPILING_NEWLIB +int _EXFUN(_kill, (pid_t, int)); +#endif /* _COMPILING_NEWLIB */ +#endif /* __CYGWIN__ || __rtems__ */ +#if defined(__CYGWIN__) || defined(__rtems__) || defined(__SPU__) +int _EXFUN(kill, (pid_t, int)); +#endif /* __CYGWIN__ || __rtems__ || __SPU__ */ +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(killpg, (pid_t, int)); +int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *)); +int _EXFUN(sigaddset, (sigset_t *, const int)); +int _EXFUN(sigdelset, (sigset_t *, const int)); +int _EXFUN(sigismember, (const sigset_t *, int)); +int _EXFUN(sigfillset, (sigset_t *)); +int _EXFUN(sigemptyset, (sigset_t *)); +int _EXFUN(sigpending, (sigset_t *)); +int _EXFUN(sigsuspend, (const sigset_t *)); +int _EXFUN(sigpause, (int)); + +#ifdef __rtems__ +#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 +int _EXFUN(sigaltstack, (const stack_t *__restrict, stack_t *__restrict)); +#endif #endif -#if __POSIX_VISIBLE >= 199506 -int pthread_kill (pthread_t thread, int sig); +#if defined(_POSIX_THREADS) +#ifdef __CYGWIN__ +# ifndef _CYGWIN_TYPES_H +# error You need the winsup sources or a cygwin installation to compile the cygwin version of newlib. +# endif +#endif +int _EXFUN(pthread_kill, (pthread_t thread, int sig)); #endif -#if __POSIX_VISIBLE >= 199309 +#if defined(_POSIX_REALTIME_SIGNALS) /* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 NOTE: P1003.1c/D10, p. 39 adds sigwait(). */ -int sigwaitinfo (const sigset_t *set, siginfo_t *info); -int sigtimedwait (const sigset_t *set, siginfo_t *info, - const struct timespec *timeout); -/* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */ -int sigqueue (pid_t pid, int signo, const union sigval value); +int _EXFUN(sigwaitinfo, (const sigset_t *set, siginfo_t *info)); +int _EXFUN(sigtimedwait, + (const sigset_t *set, siginfo_t *info, const struct timespec *timeout) +); +int _EXFUN(sigwait, (const sigset_t *set, int *sig)); -#endif /* __POSIX_VISIBLE >= 199309 */ +/* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */ +int _EXFUN(sigqueue, (pid_t pid, int signo, const union sigval value)); + +#endif /* defined(_POSIX_REALTIME_SIGNALS) */ + +#endif /* defined(__CYGWIN__) || defined(__rtems__) */ + +/* #endif __STRICT_ANSI__ */ #if defined(___AM29K__) /* These all need to be defined for ANSI C, but I don't think they are @@ -358,12 +349,6 @@ int sigqueue (pid_t pid, int signo, const union sigval value); } #endif -#if defined(__CYGWIN__) -#if __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 -#include -#endif -#endif - #ifndef _SIGNAL_H_ /* Some applications take advantage of the fact that * and are equivalent in glibc. Allow for that here. */ diff --git a/libc/xtensa-lx106-elf/include/sys/stat.h b/libc/xtensa-lx106-elf/include/sys/stat.h index eee98db..11b9d80 100644 --- a/libc/xtensa-lx106-elf/include/sys/stat.h +++ b/libc/xtensa-lx106-elf/include/sys/stat.h @@ -9,7 +9,6 @@ extern "C" { #include #include #include -#include /* dj's stat defines _STAT_H_ */ #ifndef _STAT_H_ @@ -53,8 +52,8 @@ struct stat long st_spare2; time_t st_ctime; long st_spare3; - blksize_t st_blksize; - blkcnt_t st_blocks; + long st_blksize; + long st_blocks; long st_spare4[2]; #endif #endif @@ -82,12 +81,12 @@ struct stat #define S_ISUID 0004000 /* set user id on execution */ #define S_ISGID 0002000 /* set group id on execution */ #define S_ISVTX 0001000 /* save swapped text even after use */ -#if __BSD_VISIBLE +#ifndef _POSIX_SOURCE #define S_IREAD 0000400 /* read permission, owner */ #define S_IWRITE 0000200 /* write permission, owner */ #define S_IEXEC 0000100 /* execute/search permission, owner */ #define S_ENFMT 0002000 /* enforcement-mode locking */ -#endif /* !_BSD_VISIBLE */ +#endif /* !_POSIX_SOURCE */ #define S_IFMT _IFMT #define S_IFDIR _IFDIR @@ -124,7 +123,7 @@ struct stat #define S_IWOTH 0000002 /* write permission, other */ #define S_IXOTH 0000001/* execute/search permission, other */ -#if __BSD_VISIBLE +#ifndef _POSIX_SOURCE #define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) /* 0777 */ #define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) /* 07777 */ #define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */ @@ -144,41 +143,45 @@ struct stat #define UTIME_OMIT -1L #endif -int chmod (const char *__path, mode_t __mode ); -int fchmod (int __fd, mode_t __mode); -int fstat (int __fd, struct stat *__sbuf ); -int mkdir (const char *_path, mode_t __mode ); -int mkfifo (const char *__path, mode_t __mode ); -int stat (const char *__restrict __path, struct stat *__restrict __sbuf ); -mode_t umask (mode_t __mask ); +int _EXFUN(chmod,( const char *__path, mode_t __mode )); +int _EXFUN(fchmod,(int __fd, mode_t __mode)); +int _EXFUN(fstat,( int __fd, struct stat *__sbuf )); +int _EXFUN(mkdir,( const char *_path, mode_t __mode )); +int _EXFUN(mkfifo,( const char *__path, mode_t __mode )); +int _EXFUN(stat,( const char *__restrict __path, struct stat *__restrict __sbuf )); +mode_t _EXFUN(umask,( mode_t __mask )); #if defined (__SPU__) || defined(__rtems__) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__) -int lstat (const char *__restrict __path, struct stat *__restrict __buf ); -int mknod (const char *__path, mode_t __mode, dev_t __dev ); +int _EXFUN(lstat,( const char *__restrict __path, struct stat *__restrict __buf )); +int _EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev )); #endif -#if __ATFILE_VISIBLE && !defined(__INSIDE_CYGWIN__) -int fchmodat (int, const char *, mode_t, int); -int fstatat (int, const char *__restrict , struct stat *__restrict, int); -int mkdirat (int, const char *, mode_t); -int mkfifoat (int, const char *, mode_t); -int mknodat (int, const char *, mode_t, dev_t); -int utimensat (int, const char *, const struct timespec *, int); +#if (__POSIX_VISIBLE >= 200809 || defined (__CYGWIN__)) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(fchmodat, (int, const char *, mode_t, int)); #endif -#if __POSIX_VISIBLE >= 200809 && !defined(__INSIDE_CYGWIN__) -int futimens (int, const struct timespec *); +#if (__BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || defined (__CYGWIN__)) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(fstatat, (int, const char *__restrict , struct stat *__restrict, int)); +int _EXFUN(mkdirat, (int, const char *, mode_t)); +int _EXFUN(mkfifoat, (int, const char *, mode_t)); +#endif +#if (__BSD_VISIBLE || __XSI_VISIBLE >= 700 || defined (__CYGWIN__)) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(mknodat, (int, const char *, mode_t, dev_t)); +#endif +#if (__BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || defined (__CYGWIN__)) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(utimensat, (int, const char *, const struct timespec *, int)); +int _EXFUN(futimens, (int, const struct timespec *)); #endif /* Provide prototypes for most of the _ names that are provided in newlib for some compilers. */ #ifdef _COMPILING_NEWLIB -int _fstat (int __fd, struct stat *__sbuf ); -int _stat (const char *__restrict __path, struct stat *__restrict __sbuf ); -int _mkdir (const char *_path, mode_t __mode ); +int _EXFUN(_fstat,( int __fd, struct stat *__sbuf )); +int _EXFUN(_stat,( const char *__restrict __path, struct stat *__restrict __sbuf )); +int _EXFUN(_mkdir,( const char *_path, mode_t __mode )); #ifdef __LARGE64_FILES struct stat64; -int _stat64 (const char *__restrict __path, struct stat64 *__restrict __sbuf ); -int _fstat64 (int __fd, struct stat64 *__sbuf ); +int _EXFUN(_stat64,( const char *__restrict __path, struct stat64 *__restrict __sbuf )); +int _EXFUN(_fstat64,( int __fd, struct stat64 *__sbuf )); #endif #endif diff --git a/libc/xtensa-lx106-elf/include/sys/stdio.h b/libc/xtensa-lx106-elf/include/sys/stdio.h index 91a2745..0918fe1 100644 --- a/libc/xtensa-lx106-elf/include/sys/stdio.h +++ b/libc/xtensa-lx106-elf/include/sys/stdio.h @@ -12,7 +12,7 @@ #ifndef __SINGLE_THREAD__ # define _flockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_acquire_recursive((fp)->_lock)) #else -# define _flockfile(fp) ((void) 0) +# define _flockfile(fp) (_CAST_VOID 0) #endif #endif @@ -20,7 +20,7 @@ #ifndef __SINGLE_THREAD__ # define _funlockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_release_recursive((fp)->_lock)) #else -# define _funlockfile(fp) ((void) 0) +# define _funlockfile(fp) (_CAST_VOID 0) #endif #endif diff --git a/libc/xtensa-lx106-elf/include/sys/time.h b/libc/xtensa-lx106-elf/include/sys/time.h index ce2e667..be16497 100644 --- a/libc/xtensa-lx106-elf/include/sys/time.h +++ b/libc/xtensa-lx106-elf/include/sys/time.h @@ -2,301 +2,90 @@ Written by Geoffrey Noer Public domain; no rights reserved. */ -/*- - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. - * - * @(#)time.h 8.5 (Berkeley) 5/4/95 - * $FreeBSD$ - */ - #ifndef _SYS_TIME_H_ -#define _SYS_TIME_H_ +#define _SYS_TIME_H_ #include <_ansi.h> -#include -#include #include -#include -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE -#include +#ifdef __cplusplus +extern "C" { #endif +#ifndef _TIMEVAL_DEFINED +#define _TIMEVAL_DEFINED +struct timeval { + time_t tv_sec; + suseconds_t tv_usec; +}; + +/* BSD time macros used by RTEMS code */ +#if defined (__rtems__) || defined (__CYGWIN__) + +/* Convenience macros for operations on timevals. + NOTE: `timercmp' does not work for >= or <=. */ +#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) +#define timercmp(a, b, CMP) \ + (((a)->tv_sec == (b)->tv_sec) ? \ + ((a)->tv_usec CMP (b)->tv_usec) : \ + ((a)->tv_sec CMP (b)->tv_sec)) +#define timeradd(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \ + if ((result)->tv_usec >= 1000000) \ + { \ + ++(result)->tv_sec; \ + (result)->tv_usec -= 1000000; \ + } \ + } while (0) +#define timersub(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ + if ((result)->tv_usec < 0) { \ + --(result)->tv_sec; \ + (result)->tv_usec += 1000000; \ + } \ + } while (0) +#endif /* defined (__rtems__) || defined (__CYGWIN__) */ +#endif /* !_TIMEVAL_DEFINED */ + struct timezone { - int tz_minuteswest; /* minutes west of Greenwich */ - int tz_dsttime; /* type of dst correction */ -}; -#define DST_NONE 0 /* not on dst */ -#define DST_USA 1 /* USA style dst */ -#define DST_AUST 2 /* Australian style dst */ -#define DST_WET 3 /* Western European dst */ -#define DST_MET 4 /* Middle European dst */ -#define DST_EET 5 /* Eastern European dst */ -#define DST_CAN 6 /* Canada */ - -#if __BSD_VISIBLE -struct bintime { - time_t sec; - uint64_t frac; + int tz_minuteswest; + int tz_dsttime; }; -static __inline void -bintime_addx(struct bintime *_bt, uint64_t _x) -{ - uint64_t _u; +#ifdef __CYGWIN__ +#include +#endif /* __CYGWIN__ */ - _u = _bt->frac; - _bt->frac += _x; - if (_u > _bt->frac) - _bt->sec++; -} +#define ITIMER_REAL 0 +#define ITIMER_VIRTUAL 1 +#define ITIMER_PROF 2 -static __inline void -bintime_add(struct bintime *_bt, const struct bintime *_bt2) -{ - uint64_t _u; - - _u = _bt->frac; - _bt->frac += _bt2->frac; - if (_u > _bt->frac) - _bt->sec++; - _bt->sec += _bt2->sec; -} - -static __inline void -bintime_sub(struct bintime *_bt, const struct bintime *_bt2) -{ - uint64_t _u; - - _u = _bt->frac; - _bt->frac -= _bt2->frac; - if (_u < _bt->frac) - _bt->sec--; - _bt->sec -= _bt2->sec; -} - -static __inline void -bintime_mul(struct bintime *_bt, u_int _x) -{ - uint64_t _p1, _p2; - - _p1 = (_bt->frac & 0xffffffffull) * _x; - _p2 = (_bt->frac >> 32) * _x + (_p1 >> 32); - _bt->sec *= _x; - _bt->sec += (_p2 >> 32); - _bt->frac = (_p2 << 32) | (_p1 & 0xffffffffull); -} - -static __inline void -bintime_shift(struct bintime *_bt, int _exp) -{ - - if (_exp > 0) { - _bt->sec <<= _exp; - _bt->sec |= _bt->frac >> (64 - _exp); - _bt->frac <<= _exp; - } else if (_exp < 0) { - _bt->frac >>= -_exp; - _bt->frac |= (uint64_t)_bt->sec << (64 + _exp); - _bt->sec >>= -_exp; - } -} - -#define bintime_clear(a) ((a)->sec = (a)->frac = 0) -#define bintime_isset(a) ((a)->sec || (a)->frac) -#define bintime_cmp(a, b, cmp) \ - (((a)->sec == (b)->sec) ? \ - ((a)->frac cmp (b)->frac) : \ - ((a)->sec cmp (b)->sec)) - -#define SBT_1S ((sbintime_t)1 << 32) -#define SBT_1M (SBT_1S * 60) -#define SBT_1MS (SBT_1S / 1000) -#define SBT_1US (SBT_1S / 1000000) -#define SBT_1NS (SBT_1S / 1000000000) -#define SBT_MAX 0x7fffffffffffffffLL - -static __inline int -sbintime_getsec(sbintime_t _sbt) -{ - - return (_sbt >> 32); -} - -static __inline sbintime_t -bttosbt(const struct bintime _bt) -{ - - return (((sbintime_t)_bt.sec << 32) + (_bt.frac >> 32)); -} - -static __inline struct bintime -sbttobt(sbintime_t _sbt) -{ - struct bintime _bt; - - _bt.sec = _sbt >> 32; - _bt.frac = _sbt << 32; - return (_bt); -} - -/*- - * Background information: - * - * When converting between timestamps on parallel timescales of differing - * resolutions it is historical and scientific practice to round down rather - * than doing 4/5 rounding. - * - * The date changes at midnight, not at noon. - * - * Even at 15:59:59.999999999 it's not four'o'clock. - * - * time_second ticks after N.999999999 not after N.4999999999 - */ - -static __inline void -bintime2timespec(const struct bintime *_bt, struct timespec *_ts) -{ - - _ts->tv_sec = _bt->sec; - _ts->tv_nsec = ((uint64_t)1000000000 * - (uint32_t)(_bt->frac >> 32)) >> 32; -} - -static __inline void -timespec2bintime(const struct timespec *_ts, struct bintime *_bt) -{ - - _bt->sec = _ts->tv_sec; - /* 18446744073 = int(2^64 / 1000000000) */ - _bt->frac = _ts->tv_nsec * (uint64_t)18446744073LL; -} - -static __inline void -bintime2timeval(const struct bintime *_bt, struct timeval *_tv) -{ - - _tv->tv_sec = _bt->sec; - _tv->tv_usec = ((uint64_t)1000000 * (uint32_t)(_bt->frac >> 32)) >> 32; -} - -static __inline void -timeval2bintime(const struct timeval *_tv, struct bintime *_bt) -{ - - _bt->sec = _tv->tv_sec; - /* 18446744073709 = int(2^64 / 1000000) */ - _bt->frac = _tv->tv_usec * (uint64_t)18446744073709LL; -} - -static __inline struct timespec -sbttots(sbintime_t _sbt) -{ - struct timespec _ts; - - _ts.tv_sec = _sbt >> 32; - _ts.tv_nsec = ((uint64_t)1000000000 * (uint32_t)_sbt) >> 32; - return (_ts); -} - -static __inline sbintime_t -tstosbt(struct timespec _ts) -{ - - return (((sbintime_t)_ts.tv_sec << 32) + - (_ts.tv_nsec * (((uint64_t)1 << 63) / 500000000) >> 32)); -} - -static __inline struct timeval -sbttotv(sbintime_t _sbt) -{ - struct timeval _tv; - - _tv.tv_sec = _sbt >> 32; - _tv.tv_usec = ((uint64_t)1000000 * (uint32_t)_sbt) >> 32; - return (_tv); -} - -static __inline sbintime_t -tvtosbt(struct timeval _tv) -{ - - return (((sbintime_t)_tv.tv_sec << 32) + - (_tv.tv_usec * (((uint64_t)1 << 63) / 500000) >> 32)); -} -#endif /* __BSD_VISIBLE */ - -/* - * Names of the interval timers, and structure - * defining a timer setting. - */ -#define ITIMER_REAL 0 -#define ITIMER_VIRTUAL 1 -#define ITIMER_PROF 2 - -struct itimerval { - struct timeval it_interval; /* timer interval */ - struct timeval it_value; /* current value */ +struct itimerval { + struct timeval it_interval; + struct timeval it_value; }; -#ifndef _KERNEL -#include - -__BEGIN_DECLS -int utimes (const char *__path, const struct timeval *__tvp); - -#if __BSD_VISIBLE -int adjtime (const struct timeval *, struct timeval *); -int futimes (int, const struct timeval *); -int lutimes (const char *, const struct timeval *); -int settimeofday (const struct timeval *, const struct timezone *); -#endif - -#if __MISC_VISIBLE || __XSI_VISIBLE -int getitimer (int __which, struct itimerval *__value); -int setitimer (int __which, const struct itimerval *__restrict __value, - struct itimerval *__restrict __ovalue); -#endif - -int gettimeofday (struct timeval *__restrict __p, - void *__restrict __tz); - -#if __GNU_VISIBLE -int futimesat (int, const char *, const struct timeval [2]); -#endif - #ifdef _COMPILING_NEWLIB -int _gettimeofday (struct timeval *__p, void *__tz); +int _EXFUN(_gettimeofday, (struct timeval *__p, void *__tz)); #endif -__END_DECLS +int _EXFUN(gettimeofday, (struct timeval *__restrict __p, + void *__restrict __tz)); +#if __BSD_VISIBLE +int _EXFUN(settimeofday, (const struct timeval *, const struct timezone *)); +int _EXFUN(adjtime, (const struct timeval *, struct timeval *)); +#endif +int _EXFUN(utimes, (const char *__path, const struct timeval *__tvp)); +int _EXFUN(getitimer, (int __which, struct itimerval *__value)); +int _EXFUN(setitimer, (int __which, const struct itimerval *__restrict __value, + struct itimerval *__restrict __ovalue)); -#endif /* !_KERNEL */ -#include - -#endif /* !_SYS_TIME_H_ */ +#ifdef __cplusplus +} +#endif +#endif /* _SYS_TIME_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/timeb.h b/libc/xtensa-lx106-elf/include/sys/timeb.h index ccf6649..0a2c3de 100644 --- a/libc/xtensa-lx106-elf/include/sys/timeb.h +++ b/libc/xtensa-lx106-elf/include/sys/timeb.h @@ -15,12 +15,11 @@ extern "C" { #define _SYS_TIMEB_H #include <_ansi.h> -#include +#include -#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED) -typedef _TIME_T_ time_t; -#define __time_t_defined -#define _TIME_T_DECLARED +#ifndef __time_t_defined +typedef _TIME_T_ time_t; +#define __time_t_defined #endif struct timeb @@ -31,7 +30,7 @@ struct timeb short dstflag; }; -extern int ftime (struct timeb *); +extern int ftime _PARAMS ((struct timeb *)); #ifdef __cplusplus } diff --git a/libc/xtensa-lx106-elf/include/sys/times.h b/libc/xtensa-lx106-elf/include/sys/times.h index 05b2547..927812c 100644 --- a/libc/xtensa-lx106-elf/include/sys/times.h +++ b/libc/xtensa-lx106-elf/include/sys/times.h @@ -5,12 +5,11 @@ extern "C" { #define _SYS_TIMES_H #include <_ansi.h> -#include +#include -#if !defined(__clock_t_defined) && !defined(_CLOCK_T_DECLARED) -typedef _CLOCK_T_ clock_t; -#define __clock_t_defined -#define _CLOCK_T_DECLARED +#ifndef __clock_t_defined +typedef _CLOCK_T_ clock_t; +#define __clock_t_defined #endif /* Get Process Times, P1003.1b-1993, p. 92 */ @@ -21,9 +20,9 @@ struct tms { clock_t tms_cstime; /* system time, children */ }; -clock_t times (struct tms *); +clock_t _EXFUN(times,(struct tms *)); #ifdef _COMPILING_NEWLIB -clock_t _times (struct tms *); +clock_t _EXFUN(_times,(struct tms *)); #endif #ifdef __cplusplus diff --git a/libc/xtensa-lx106-elf/include/sys/timespec.h b/libc/xtensa-lx106-elf/include/sys/timespec.h deleted file mode 100644 index 2505cef..0000000 --- a/libc/xtensa-lx106-elf/include/sys/timespec.h +++ /dev/null @@ -1,63 +0,0 @@ -/*- - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. - * - * @(#)time.h 8.5 (Berkeley) 5/4/95 - * from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp - * $FreeBSD$ - */ - -#ifndef _SYS_TIMESPEC_H_ -#define _SYS_TIMESPEC_H_ - -#include -#include - -#if __BSD_VISIBLE -#define TIMEVAL_TO_TIMESPEC(tv, ts) \ - do { \ - (ts)->tv_sec = (tv)->tv_sec; \ - (ts)->tv_nsec = (tv)->tv_usec * 1000; \ - } while (0) -#define TIMESPEC_TO_TIMEVAL(tv, ts) \ - do { \ - (tv)->tv_sec = (ts)->tv_sec; \ - (tv)->tv_usec = (ts)->tv_nsec / 1000; \ - } while (0) - -#endif /* __BSD_VISIBLE */ - -/* - * Structure defined by POSIX.1b to be like a itimerval, but with - * timespecs. Used in the timer_*() system calls. - */ -struct itimerspec { - struct timespec it_interval; - struct timespec it_value; -}; - -#endif /* _SYS_TIMESPEC_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/tree.h b/libc/xtensa-lx106-elf/include/sys/tree.h deleted file mode 100644 index f4167c4..0000000 --- a/libc/xtensa-lx106-elf/include/sys/tree.h +++ /dev/null @@ -1,801 +0,0 @@ -/* $NetBSD: tree.h,v 1.8 2004/03/28 19:38:30 provos Exp $ */ -/* $OpenBSD: tree.h,v 1.7 2002/10/17 21:51:54 art Exp $ */ -/* $FreeBSD$ */ - -/*- - * Copyright 2002 Niels Provos - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ - -#ifndef _SYS_TREE_H_ -#define _SYS_TREE_H_ - -#include - -/* - * This file defines data structures for different types of trees: - * splay trees and red-black trees. - * - * A splay tree is a self-organizing data structure. Every operation - * on the tree causes a splay to happen. The splay moves the requested - * node to the root of the tree and partly rebalances it. - * - * This has the benefit that request locality causes faster lookups as - * the requested nodes move to the top of the tree. On the other hand, - * every lookup causes memory writes. - * - * The Balance Theorem bounds the total access time for m operations - * and n inserts on an initially empty tree as O((m + n)lg n). The - * amortized cost for a sequence of m accesses to a splay tree is O(lg n); - * - * A red-black tree is a binary search tree with the node color as an - * extra attribute. It fulfills a set of conditions: - * - every search path from the root to a leaf consists of the - * same number of black nodes, - * - each red node (except for the root) has a black parent, - * - each leaf node is black. - * - * Every operation on a red-black tree is bounded as O(lg n). - * The maximum height of a red-black tree is 2lg (n+1). - */ - -#define SPLAY_HEAD(name, type) \ -struct name { \ - struct type *sph_root; /* root of the tree */ \ -} - -#define SPLAY_INITIALIZER(root) \ - { NULL } - -#define SPLAY_INIT(root) do { \ - (root)->sph_root = NULL; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ENTRY(type) \ -struct { \ - struct type *spe_left; /* left element */ \ - struct type *spe_right; /* right element */ \ -} - -#define SPLAY_LEFT(elm, field) (elm)->field.spe_left -#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right -#define SPLAY_ROOT(head) (head)->sph_root -#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL) - -/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */ -#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \ - SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \ - SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ - (head)->sph_root = tmp; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \ - SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \ - SPLAY_LEFT(tmp, field) = (head)->sph_root; \ - (head)->sph_root = tmp; \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_LINKLEFT(head, tmp, field) do { \ - SPLAY_LEFT(tmp, field) = (head)->sph_root; \ - tmp = (head)->sph_root; \ - (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_LINKRIGHT(head, tmp, field) do { \ - SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ - tmp = (head)->sph_root; \ - (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ -} while (/*CONSTCOND*/ 0) - -#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \ - SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \ - SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field);\ - SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \ - SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \ -} while (/*CONSTCOND*/ 0) - -/* Generates prototypes and inline functions */ - -#define SPLAY_PROTOTYPE(name, type, field, cmp) \ -void name##_SPLAY(struct name *, struct type *); \ -void name##_SPLAY_MINMAX(struct name *, int); \ -struct type *name##_SPLAY_INSERT(struct name *, struct type *); \ -struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \ - \ -/* Finds the node with the same key as elm */ \ -static __inline struct type * \ -name##_SPLAY_FIND(struct name *head, struct type *elm) \ -{ \ - if (SPLAY_EMPTY(head)) \ - return(NULL); \ - name##_SPLAY(head, elm); \ - if ((cmp)(elm, (head)->sph_root) == 0) \ - return (head->sph_root); \ - return (NULL); \ -} \ - \ -static __inline struct type * \ -name##_SPLAY_NEXT(struct name *head, struct type *elm) \ -{ \ - name##_SPLAY(head, elm); \ - if (SPLAY_RIGHT(elm, field) != NULL) { \ - elm = SPLAY_RIGHT(elm, field); \ - while (SPLAY_LEFT(elm, field) != NULL) { \ - elm = SPLAY_LEFT(elm, field); \ - } \ - } else \ - elm = NULL; \ - return (elm); \ -} \ - \ -static __inline struct type * \ -name##_SPLAY_MIN_MAX(struct name *head, int val) \ -{ \ - name##_SPLAY_MINMAX(head, val); \ - return (SPLAY_ROOT(head)); \ -} - -/* Main splay operation. - * Moves node close to the key of elm to top - */ -#define SPLAY_GENERATE(name, type, field, cmp) \ -struct type * \ -name##_SPLAY_INSERT(struct name *head, struct type *elm) \ -{ \ - if (SPLAY_EMPTY(head)) { \ - SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \ - } else { \ - int __comp; \ - name##_SPLAY(head, elm); \ - __comp = (cmp)(elm, (head)->sph_root); \ - if(__comp < 0) { \ - SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field);\ - SPLAY_RIGHT(elm, field) = (head)->sph_root; \ - SPLAY_LEFT((head)->sph_root, field) = NULL; \ - } else if (__comp > 0) { \ - SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field);\ - SPLAY_LEFT(elm, field) = (head)->sph_root; \ - SPLAY_RIGHT((head)->sph_root, field) = NULL; \ - } else \ - return ((head)->sph_root); \ - } \ - (head)->sph_root = (elm); \ - return (NULL); \ -} \ - \ -struct type * \ -name##_SPLAY_REMOVE(struct name *head, struct type *elm) \ -{ \ - struct type *__tmp; \ - if (SPLAY_EMPTY(head)) \ - return (NULL); \ - name##_SPLAY(head, elm); \ - if ((cmp)(elm, (head)->sph_root) == 0) { \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \ - (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);\ - } else { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - (head)->sph_root = SPLAY_LEFT((head)->sph_root, field);\ - name##_SPLAY(head, elm); \ - SPLAY_RIGHT((head)->sph_root, field) = __tmp; \ - } \ - return (elm); \ - } \ - return (NULL); \ -} \ - \ -void \ -name##_SPLAY(struct name *head, struct type *elm) \ -{ \ - struct type __node, *__left, *__right, *__tmp; \ - int __comp; \ -\ - SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\ - __left = __right = &__node; \ -\ - while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) { \ - if (__comp < 0) { \ - __tmp = SPLAY_LEFT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if ((cmp)(elm, __tmp) < 0){ \ - SPLAY_ROTATE_RIGHT(head, __tmp, field); \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL)\ - break; \ - } \ - SPLAY_LINKLEFT(head, __right, field); \ - } else if (__comp > 0) { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if ((cmp)(elm, __tmp) > 0){ \ - SPLAY_ROTATE_LEFT(head, __tmp, field); \ - if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\ - break; \ - } \ - SPLAY_LINKRIGHT(head, __left, field); \ - } \ - } \ - SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ -} \ - \ -/* Splay with either the minimum or the maximum element \ - * Used to find minimum or maximum element in tree. \ - */ \ -void name##_SPLAY_MINMAX(struct name *head, int __comp) \ -{ \ - struct type __node, *__left, *__right, *__tmp; \ -\ - SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\ - __left = __right = &__node; \ -\ - while (1) { \ - if (__comp < 0) { \ - __tmp = SPLAY_LEFT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if (__comp < 0){ \ - SPLAY_ROTATE_RIGHT(head, __tmp, field); \ - if (SPLAY_LEFT((head)->sph_root, field) == NULL)\ - break; \ - } \ - SPLAY_LINKLEFT(head, __right, field); \ - } else if (__comp > 0) { \ - __tmp = SPLAY_RIGHT((head)->sph_root, field); \ - if (__tmp == NULL) \ - break; \ - if (__comp > 0) { \ - SPLAY_ROTATE_LEFT(head, __tmp, field); \ - if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\ - break; \ - } \ - SPLAY_LINKRIGHT(head, __left, field); \ - } \ - } \ - SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ -} - -#define SPLAY_NEGINF -1 -#define SPLAY_INF 1 - -#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y) -#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y) -#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y) -#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y) -#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \ - : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF)) -#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \ - : name##_SPLAY_MIN_MAX(x, SPLAY_INF)) - -#define SPLAY_FOREACH(x, name, head) \ - for ((x) = SPLAY_MIN(name, head); \ - (x) != NULL; \ - (x) = SPLAY_NEXT(name, head, x)) - -/* Macros that define a red-black tree */ -#define RB_HEAD(name, type) \ -struct name { \ - struct type *rbh_root; /* root of the tree */ \ -} - -#define RB_INITIALIZER(root) \ - { NULL } - -#define RB_INIT(root) do { \ - (root)->rbh_root = NULL; \ -} while (/*CONSTCOND*/ 0) - -#define RB_BLACK 0 -#define RB_RED 1 -#define RB_ENTRY(type) \ -struct { \ - struct type *rbe_left; /* left element */ \ - struct type *rbe_right; /* right element */ \ - struct type *rbe_parent; /* parent element */ \ - int rbe_color; /* node color */ \ -} - -#define RB_LEFT(elm, field) (elm)->field.rbe_left -#define RB_RIGHT(elm, field) (elm)->field.rbe_right -#define RB_PARENT(elm, field) (elm)->field.rbe_parent -#define RB_COLOR(elm, field) (elm)->field.rbe_color -#define RB_ROOT(head) (head)->rbh_root -#define RB_EMPTY(head) (RB_ROOT(head) == NULL) - -#define RB_SET(elm, parent, field) do { \ - RB_PARENT(elm, field) = parent; \ - RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \ - RB_COLOR(elm, field) = RB_RED; \ -} while (/*CONSTCOND*/ 0) - -#define RB_SET_BLACKRED(black, red, field) do { \ - RB_COLOR(black, field) = RB_BLACK; \ - RB_COLOR(red, field) = RB_RED; \ -} while (/*CONSTCOND*/ 0) - -#ifndef RB_AUGMENT -#define RB_AUGMENT(x) do {} while (0) -#endif - -#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \ - (tmp) = RB_RIGHT(elm, field); \ - if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) { \ - RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \ - } \ - RB_AUGMENT(elm); \ - if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ - if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ - RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ - else \ - RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ - } else \ - (head)->rbh_root = (tmp); \ - RB_LEFT(tmp, field) = (elm); \ - RB_PARENT(elm, field) = (tmp); \ - RB_AUGMENT(tmp); \ - if ((RB_PARENT(tmp, field))) \ - RB_AUGMENT(RB_PARENT(tmp, field)); \ -} while (/*CONSTCOND*/ 0) - -#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \ - (tmp) = RB_LEFT(elm, field); \ - if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) { \ - RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \ - } \ - RB_AUGMENT(elm); \ - if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ - if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ - RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ - else \ - RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ - } else \ - (head)->rbh_root = (tmp); \ - RB_RIGHT(tmp, field) = (elm); \ - RB_PARENT(elm, field) = (tmp); \ - RB_AUGMENT(tmp); \ - if ((RB_PARENT(tmp, field))) \ - RB_AUGMENT(RB_PARENT(tmp, field)); \ -} while (/*CONSTCOND*/ 0) - -/* Generates prototypes and inline functions */ -#define RB_PROTOTYPE(name, type, field, cmp) \ - RB_PROTOTYPE_INTERNAL(name, type, field, cmp,) -#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \ - RB_PROTOTYPE_INTERNAL(name, type, field, cmp, __unused static) -#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \ - RB_PROTOTYPE_INSERT_COLOR(name, type, attr); \ - RB_PROTOTYPE_REMOVE_COLOR(name, type, attr); \ - RB_PROTOTYPE_INSERT(name, type, attr); \ - RB_PROTOTYPE_REMOVE(name, type, attr); \ - RB_PROTOTYPE_FIND(name, type, attr); \ - RB_PROTOTYPE_NFIND(name, type, attr); \ - RB_PROTOTYPE_NEXT(name, type, attr); \ - RB_PROTOTYPE_PREV(name, type, attr); \ - RB_PROTOTYPE_MINMAX(name, type, attr); -#define RB_PROTOTYPE_INSERT_COLOR(name, type, attr) \ - attr void name##_RB_INSERT_COLOR(struct name *, struct type *) -#define RB_PROTOTYPE_REMOVE_COLOR(name, type, attr) \ - attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *) -#define RB_PROTOTYPE_REMOVE(name, type, attr) \ - attr struct type *name##_RB_REMOVE(struct name *, struct type *) -#define RB_PROTOTYPE_INSERT(name, type, attr) \ - attr struct type *name##_RB_INSERT(struct name *, struct type *) -#define RB_PROTOTYPE_FIND(name, type, attr) \ - attr struct type *name##_RB_FIND(struct name *, struct type *) -#define RB_PROTOTYPE_NFIND(name, type, attr) \ - attr struct type *name##_RB_NFIND(struct name *, struct type *) -#define RB_PROTOTYPE_NEXT(name, type, attr) \ - attr struct type *name##_RB_NEXT(struct type *) -#define RB_PROTOTYPE_PREV(name, type, attr) \ - attr struct type *name##_RB_PREV(struct type *) -#define RB_PROTOTYPE_MINMAX(name, type, attr) \ - attr struct type *name##_RB_MINMAX(struct name *, int) - -/* Main rb operation. - * Moves node close to the key of elm to top - */ -#define RB_GENERATE(name, type, field, cmp) \ - RB_GENERATE_INTERNAL(name, type, field, cmp,) -#define RB_GENERATE_STATIC(name, type, field, cmp) \ - RB_GENERATE_INTERNAL(name, type, field, cmp, __unused static) -#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \ - RB_GENERATE_INSERT_COLOR(name, type, field, attr) \ - RB_GENERATE_REMOVE_COLOR(name, type, field, attr) \ - RB_GENERATE_INSERT(name, type, field, cmp, attr) \ - RB_GENERATE_REMOVE(name, type, field, attr) \ - RB_GENERATE_FIND(name, type, field, cmp, attr) \ - RB_GENERATE_NFIND(name, type, field, cmp, attr) \ - RB_GENERATE_NEXT(name, type, field, attr) \ - RB_GENERATE_PREV(name, type, field, attr) \ - RB_GENERATE_MINMAX(name, type, field, attr) - -#define RB_GENERATE_INSERT_COLOR(name, type, field, attr) \ -attr void \ -name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \ -{ \ - struct type *parent, *gparent, *tmp; \ - while ((parent = RB_PARENT(elm, field)) != NULL && \ - RB_COLOR(parent, field) == RB_RED) { \ - gparent = RB_PARENT(parent, field); \ - if (parent == RB_LEFT(gparent, field)) { \ - tmp = RB_RIGHT(gparent, field); \ - if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ - RB_COLOR(tmp, field) = RB_BLACK; \ - RB_SET_BLACKRED(parent, gparent, field);\ - elm = gparent; \ - continue; \ - } \ - if (RB_RIGHT(parent, field) == elm) { \ - RB_ROTATE_LEFT(head, parent, tmp, field);\ - tmp = parent; \ - parent = elm; \ - elm = tmp; \ - } \ - RB_SET_BLACKRED(parent, gparent, field); \ - RB_ROTATE_RIGHT(head, gparent, tmp, field); \ - } else { \ - tmp = RB_LEFT(gparent, field); \ - if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ - RB_COLOR(tmp, field) = RB_BLACK; \ - RB_SET_BLACKRED(parent, gparent, field);\ - elm = gparent; \ - continue; \ - } \ - if (RB_LEFT(parent, field) == elm) { \ - RB_ROTATE_RIGHT(head, parent, tmp, field);\ - tmp = parent; \ - parent = elm; \ - elm = tmp; \ - } \ - RB_SET_BLACKRED(parent, gparent, field); \ - RB_ROTATE_LEFT(head, gparent, tmp, field); \ - } \ - } \ - RB_COLOR(head->rbh_root, field) = RB_BLACK; \ -} - -#define RB_GENERATE_REMOVE_COLOR(name, type, field, attr) \ -attr void \ -name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, struct type *elm) \ -{ \ - struct type *tmp; \ - while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \ - elm != RB_ROOT(head)) { \ - if (RB_LEFT(parent, field) == elm) { \ - tmp = RB_RIGHT(parent, field); \ - if (RB_COLOR(tmp, field) == RB_RED) { \ - RB_SET_BLACKRED(tmp, parent, field); \ - RB_ROTATE_LEFT(head, parent, tmp, field);\ - tmp = RB_RIGHT(parent, field); \ - } \ - if ((RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\ - (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\ - RB_COLOR(tmp, field) = RB_RED; \ - elm = parent; \ - parent = RB_PARENT(elm, field); \ - } else { \ - if (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) {\ - struct type *oleft; \ - if ((oleft = RB_LEFT(tmp, field)) \ - != NULL) \ - RB_COLOR(oleft, field) = RB_BLACK;\ - RB_COLOR(tmp, field) = RB_RED; \ - RB_ROTATE_RIGHT(head, tmp, oleft, field);\ - tmp = RB_RIGHT(parent, field); \ - } \ - RB_COLOR(tmp, field) = RB_COLOR(parent, field);\ - RB_COLOR(parent, field) = RB_BLACK; \ - if (RB_RIGHT(tmp, field)) \ - RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK;\ - RB_ROTATE_LEFT(head, parent, tmp, field);\ - elm = RB_ROOT(head); \ - break; \ - } \ - } else { \ - tmp = RB_LEFT(parent, field); \ - if (RB_COLOR(tmp, field) == RB_RED) { \ - RB_SET_BLACKRED(tmp, parent, field); \ - RB_ROTATE_RIGHT(head, parent, tmp, field);\ - tmp = RB_LEFT(parent, field); \ - } \ - if ((RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\ - (RB_RIGHT(tmp, field) == NULL || \ - RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\ - RB_COLOR(tmp, field) = RB_RED; \ - elm = parent; \ - parent = RB_PARENT(elm, field); \ - } else { \ - if (RB_LEFT(tmp, field) == NULL || \ - RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) {\ - struct type *oright; \ - if ((oright = RB_RIGHT(tmp, field)) \ - != NULL) \ - RB_COLOR(oright, field) = RB_BLACK;\ - RB_COLOR(tmp, field) = RB_RED; \ - RB_ROTATE_LEFT(head, tmp, oright, field);\ - tmp = RB_LEFT(parent, field); \ - } \ - RB_COLOR(tmp, field) = RB_COLOR(parent, field);\ - RB_COLOR(parent, field) = RB_BLACK; \ - if (RB_LEFT(tmp, field)) \ - RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK;\ - RB_ROTATE_RIGHT(head, parent, tmp, field);\ - elm = RB_ROOT(head); \ - break; \ - } \ - } \ - } \ - if (elm) \ - RB_COLOR(elm, field) = RB_BLACK; \ -} - -#define RB_GENERATE_REMOVE(name, type, field, attr) \ -attr struct type * \ -name##_RB_REMOVE(struct name *head, struct type *elm) \ -{ \ - struct type *child, *parent, *old = elm; \ - int color; \ - if (RB_LEFT(elm, field) == NULL) \ - child = RB_RIGHT(elm, field); \ - else if (RB_RIGHT(elm, field) == NULL) \ - child = RB_LEFT(elm, field); \ - else { \ - struct type *left; \ - elm = RB_RIGHT(elm, field); \ - while ((left = RB_LEFT(elm, field)) != NULL) \ - elm = left; \ - child = RB_RIGHT(elm, field); \ - parent = RB_PARENT(elm, field); \ - color = RB_COLOR(elm, field); \ - if (child) \ - RB_PARENT(child, field) = parent; \ - if (parent) { \ - if (RB_LEFT(parent, field) == elm) \ - RB_LEFT(parent, field) = child; \ - else \ - RB_RIGHT(parent, field) = child; \ - RB_AUGMENT(parent); \ - } else \ - RB_ROOT(head) = child; \ - if (RB_PARENT(elm, field) == old) \ - parent = elm; \ - (elm)->field = (old)->field; \ - if (RB_PARENT(old, field)) { \ - if (RB_LEFT(RB_PARENT(old, field), field) == old)\ - RB_LEFT(RB_PARENT(old, field), field) = elm;\ - else \ - RB_RIGHT(RB_PARENT(old, field), field) = elm;\ - RB_AUGMENT(RB_PARENT(old, field)); \ - } else \ - RB_ROOT(head) = elm; \ - RB_PARENT(RB_LEFT(old, field), field) = elm; \ - if (RB_RIGHT(old, field)) \ - RB_PARENT(RB_RIGHT(old, field), field) = elm; \ - if (parent) { \ - left = parent; \ - do { \ - RB_AUGMENT(left); \ - } while ((left = RB_PARENT(left, field)) != NULL); \ - } \ - goto color; \ - } \ - parent = RB_PARENT(elm, field); \ - color = RB_COLOR(elm, field); \ - if (child) \ - RB_PARENT(child, field) = parent; \ - if (parent) { \ - if (RB_LEFT(parent, field) == elm) \ - RB_LEFT(parent, field) = child; \ - else \ - RB_RIGHT(parent, field) = child; \ - RB_AUGMENT(parent); \ - } else \ - RB_ROOT(head) = child; \ -color: \ - if (color == RB_BLACK) \ - name##_RB_REMOVE_COLOR(head, parent, child); \ - return (old); \ -} \ - -#define RB_GENERATE_INSERT(name, type, field, cmp, attr) \ -/* Inserts a node into the RB tree */ \ -attr struct type * \ -name##_RB_INSERT(struct name *head, struct type *elm) \ -{ \ - struct type *tmp; \ - struct type *parent = NULL; \ - int comp = 0; \ - tmp = RB_ROOT(head); \ - while (tmp) { \ - parent = tmp; \ - comp = (cmp)(elm, parent); \ - if (comp < 0) \ - tmp = RB_LEFT(tmp, field); \ - else if (comp > 0) \ - tmp = RB_RIGHT(tmp, field); \ - else \ - return (tmp); \ - } \ - RB_SET(elm, parent, field); \ - if (parent != NULL) { \ - if (comp < 0) \ - RB_LEFT(parent, field) = elm; \ - else \ - RB_RIGHT(parent, field) = elm; \ - RB_AUGMENT(parent); \ - } else \ - RB_ROOT(head) = elm; \ - name##_RB_INSERT_COLOR(head, elm); \ - return (NULL); \ -} - -#define RB_GENERATE_FIND(name, type, field, cmp, attr) \ -/* Finds the node with the same key as elm */ \ -attr struct type * \ -name##_RB_FIND(struct name *head, struct type *elm) \ -{ \ - struct type *tmp = RB_ROOT(head); \ - int comp; \ - while (tmp) { \ - comp = cmp(elm, tmp); \ - if (comp < 0) \ - tmp = RB_LEFT(tmp, field); \ - else if (comp > 0) \ - tmp = RB_RIGHT(tmp, field); \ - else \ - return (tmp); \ - } \ - return (NULL); \ -} - -#define RB_GENERATE_NFIND(name, type, field, cmp, attr) \ -/* Finds the first node greater than or equal to the search key */ \ -attr struct type * \ -name##_RB_NFIND(struct name *head, struct type *elm) \ -{ \ - struct type *tmp = RB_ROOT(head); \ - struct type *res = NULL; \ - int comp; \ - while (tmp) { \ - comp = cmp(elm, tmp); \ - if (comp < 0) { \ - res = tmp; \ - tmp = RB_LEFT(tmp, field); \ - } \ - else if (comp > 0) \ - tmp = RB_RIGHT(tmp, field); \ - else \ - return (tmp); \ - } \ - return (res); \ -} - -#define RB_GENERATE_NEXT(name, type, field, attr) \ -/* ARGSUSED */ \ -attr struct type * \ -name##_RB_NEXT(struct type *elm) \ -{ \ - if (RB_RIGHT(elm, field)) { \ - elm = RB_RIGHT(elm, field); \ - while (RB_LEFT(elm, field)) \ - elm = RB_LEFT(elm, field); \ - } else { \ - if (RB_PARENT(elm, field) && \ - (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ - elm = RB_PARENT(elm, field); \ - else { \ - while (RB_PARENT(elm, field) && \ - (elm == RB_RIGHT(RB_PARENT(elm, field), field)))\ - elm = RB_PARENT(elm, field); \ - elm = RB_PARENT(elm, field); \ - } \ - } \ - return (elm); \ -} - -#define RB_GENERATE_PREV(name, type, field, attr) \ -/* ARGSUSED */ \ -attr struct type * \ -name##_RB_PREV(struct type *elm) \ -{ \ - if (RB_LEFT(elm, field)) { \ - elm = RB_LEFT(elm, field); \ - while (RB_RIGHT(elm, field)) \ - elm = RB_RIGHT(elm, field); \ - } else { \ - if (RB_PARENT(elm, field) && \ - (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ - elm = RB_PARENT(elm, field); \ - else { \ - while (RB_PARENT(elm, field) && \ - (elm == RB_LEFT(RB_PARENT(elm, field), field)))\ - elm = RB_PARENT(elm, field); \ - elm = RB_PARENT(elm, field); \ - } \ - } \ - return (elm); \ -} - -#define RB_GENERATE_MINMAX(name, type, field, attr) \ -attr struct type * \ -name##_RB_MINMAX(struct name *head, int val) \ -{ \ - struct type *tmp = RB_ROOT(head); \ - struct type *parent = NULL; \ - while (tmp) { \ - parent = tmp; \ - if (val < 0) \ - tmp = RB_LEFT(tmp, field); \ - else \ - tmp = RB_RIGHT(tmp, field); \ - } \ - return (parent); \ -} - -#define RB_NEGINF -1 -#define RB_INF 1 - -#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y) -#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y) -#define RB_FIND(name, x, y) name##_RB_FIND(x, y) -#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y) -#define RB_NEXT(name, x, y) name##_RB_NEXT(y) -#define RB_PREV(name, x, y) name##_RB_PREV(y) -#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF) -#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF) - -#define RB_FOREACH(x, name, head) \ - for ((x) = RB_MIN(name, head); \ - (x) != NULL; \ - (x) = name##_RB_NEXT(x)) - -#define RB_FOREACH_FROM(x, name, y) \ - for ((x) = (y); \ - ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ - (x) = (y)) - -#define RB_FOREACH_SAFE(x, name, head, y) \ - for ((x) = RB_MIN(name, head); \ - ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ - (x) = (y)) - -#define RB_FOREACH_REVERSE(x, name, head) \ - for ((x) = RB_MAX(name, head); \ - (x) != NULL; \ - (x) = name##_RB_PREV(x)) - -#define RB_FOREACH_REVERSE_FROM(x, name, y) \ - for ((x) = (y); \ - ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ - (x) = (y)) - -#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \ - for ((x) = RB_MAX(name, head); \ - ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ - (x) = (y)) - -#endif /* _SYS_TREE_H_ */ diff --git a/libc/xtensa-lx106-elf/include/sys/types.h b/libc/xtensa-lx106-elf/include/sys/types.h index 65ff520..ed33e0a 100644 --- a/libc/xtensa-lx106-elf/include/sys/types.h +++ b/libc/xtensa-lx106-elf/include/sys/types.h @@ -18,26 +18,11 @@ #ifndef _SYS_TYPES_H #include <_ansi.h> -#include -#include -/* BSD types permitted by POSIX and always exposed as in Glibc. Only provided - for backward compatibility with BSD code. The uintN_t standard types should - be preferred in new code. */ -#if ___int8_t_defined -typedef __uint8_t u_int8_t; -#endif -#if ___int16_t_defined -typedef __uint16_t u_int16_t; -#endif -#if ___int32_t_defined -typedef __uint32_t u_int32_t; -#endif -#if ___int64_t_defined -typedef __uint64_t u_int64_t; -#endif -typedef int register_t; -#define __BIT_TYPES_DEFINED__ 1 +#ifndef __INTTYPES_DEFINED__ +#define __INTTYPES_DEFINED__ + +#include #if defined(__rtems__) || defined(__XMK__) /* @@ -47,40 +32,61 @@ typedef int register_t; */ /* deprecated */ +#if ___int8_t_defined +typedef __uint8_t u_int8_t; +#endif +#if ___int16_t_defined +typedef __uint16_t u_int16_t; +#endif +#if ___int32_t_defined +typedef __uint32_t u_int32_t; +#endif + #if ___int64_t_defined +typedef __uint64_t u_int64_t; + +/* deprecated */ typedef __uint64_t u_quad_t; typedef __int64_t quad_t; typedef quad_t * qaddr_t; #endif -#endif /* __rtems__ || __XMK__ */ +#endif + +#endif /* ! __INTTYPES_DEFINED */ #ifndef __need_inttypes #define _SYS_TYPES_H -/* must be before for __size_t considerations */ -#include #include -#include -#if __BSD_VISIBLE -#include -#include +#ifdef __i386__ +#if defined (GO32) || defined (__MSDOS__) +#define __MS_types__ +#endif +#endif + +# include +# include + +/* To ensure the stat struct's layout doesn't change when sizeof(int), etc. + changes, we assume sizeof short and long never change and have all types + used to define struct stat use them and not int where possible. + Where not possible, _ST_INTxx are used. It would be preferable to not have + such assumptions, but until the extra fluff is necessary, it's avoided. + No 64 bit targets use stat yet. What to do about them is postponed + until necessary. */ +#ifdef __GNUC__ +#define _ST_INT32 __attribute__ ((__mode__ (__SI__))) +#else +#define _ST_INT32 +#endif + +# ifndef _POSIX_SOURCE + # define physadr physadr_t # define quad quad_t -#ifndef _IN_ADDR_T_DECLARED -typedef __uint32_t in_addr_t; /* base type for internet address */ -#define _IN_ADDR_T_DECLARED -#endif - -#ifndef _IN_PORT_T_DECLARED -typedef __uint16_t in_port_t; -#define _IN_PORT_T_DECLARED -#endif -#endif /* __BSD_VISIBLE */ - -#if __MISC_VISIBLE #ifndef _BSDTYPES_DEFINED /* also defined in mingw/gmon.h and in w32api/winsock[2].h */ #ifndef __u_char_defined @@ -101,35 +107,36 @@ typedef unsigned long u_long; #endif #define _BSDTYPES_DEFINED #endif -#endif /*__BSD_VISIBLE || __CYGWIN__ */ -#if __MISC_VISIBLE typedef unsigned short ushort; /* System V compatibility */ typedef unsigned int uint; /* System V compatibility */ typedef unsigned long ulong; /* System V compatibility */ +# endif /*!_POSIX_SOURCE */ + +#ifndef __clock_t_defined +typedef _CLOCK_T_ clock_t; +#define __clock_t_defined #endif -#ifndef _BLKCNT_T_DECLARED -typedef __blkcnt_t blkcnt_t; -#define _BLKCNT_T_DECLARED +#ifndef __time_t_defined +typedef _TIME_T_ time_t; +#define __time_t_defined #endif -#ifndef _BLKSIZE_T_DECLARED -typedef __blksize_t blksize_t; -#define _BLKSIZE_T_DECLARED +#ifndef __timespec_defined +#define __timespec_defined +/* Time Value Specification Structures, P1003.1b-1993, p. 261 */ + +struct timespec { + time_t tv_sec; /* Seconds */ + long tv_nsec; /* Nanoseconds */ +}; #endif -#if !defined(__clock_t_defined) && !defined(_CLOCK_T_DECLARED) -typedef _CLOCK_T_ clock_t; -#define __clock_t_defined -#define _CLOCK_T_DECLARED -#endif - -#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED) -typedef _TIME_T_ time_t; -#define __time_t_defined -#define _TIME_T_DECLARED -#endif +struct itimerspec { + struct timespec it_interval; /* Timer period */ + struct timespec it_value; /* Timer expiration */ +}; #ifndef __daddr_t_defined typedef long daddr_t; @@ -140,27 +147,31 @@ typedef char * caddr_t; #define __caddr_t_defined #endif -#ifndef _FSBLKCNT_T_DECLARED /* for statvfs() */ -typedef __fsblkcnt_t fsblkcnt_t; -typedef __fsfilcnt_t fsfilcnt_t; -#define _FSBLKCNT_T_DECLARED +#ifndef __CYGWIN__ +#if defined(__MS_types__) || defined(__rtems__) || \ + defined(__sparc__) || defined(__SPU__) +typedef unsigned long ino_t; +#else +typedef unsigned short ino_t; #endif +#endif /*__CYGWIN__*/ -#ifndef _ID_T_DECLARED -typedef __id_t id_t; /* can hold a uid_t or pid_t */ -#define _ID_T_DECLARED -#endif - -#ifndef _INO_T_DECLARED -typedef __ino_t ino_t; /* inode number */ -#define _INO_T_DECLARED -#endif - -#if defined(__i386__) && (defined(GO32) || defined(__MSDOS__)) -typedef char * addr_t; +#ifdef __MS_types__ typedef unsigned long vm_offset_t; typedef unsigned long vm_size_t; -#endif /* __i386__ && (GO32 || __MSDOS__) */ + +#define __BIT_TYPES_DEFINED__ + +typedef signed char int8_t; +typedef unsigned char u_int8_t; +typedef short int16_t; +typedef unsigned short u_int16_t; +typedef int int32_t; +typedef unsigned int u_int32_t; +typedef long long int64_t; +typedef unsigned long long u_int64_t; +typedef int32_t register_t; +#endif /* __MS_types__ */ /* * All these should be machine specific - right now they are all broken. @@ -169,75 +180,339 @@ typedef unsigned long vm_size_t; * how the file was compiled (e.g. -mint16 vs -mint32, etc.). */ -#ifndef _OFF_T_DECLARED -typedef __off_t off_t; /* file offset */ -#define _OFF_T_DECLARED -#endif -#ifndef _DEV_T_DECLARED -typedef __dev_t dev_t; /* device number or struct cdev */ -#define _DEV_T_DECLARED -#endif -#ifndef _UID_T_DECLARED -typedef __uid_t uid_t; /* user id */ -#define _UID_T_DECLARED -#endif -#ifndef _GID_T_DECLARED -typedef __gid_t gid_t; /* group id */ -#define _GID_T_DECLARED +#ifndef __CYGWIN__ /* which defines these types in it's own types.h. */ +typedef _off_t off_t; +typedef __dev_t dev_t; +typedef __uid_t uid_t; +typedef __gid_t gid_t; #endif -#ifndef _PID_T_DECLARED -typedef __pid_t pid_t; /* process id */ -#define _PID_T_DECLARED +#if defined(__XMK__) +typedef signed char pid_t; +#else +typedef int pid_t; #endif -#ifndef _KEY_T_DECLARED -typedef __key_t key_t; /* IPC key */ -#define _KEY_T_DECLARED +#if defined(__rtems__) +typedef _mode_t mode_t; #endif -#ifndef _SSIZE_T_DECLARED +#ifndef __CYGWIN__ +typedef long key_t; +#endif typedef _ssize_t ssize_t; -#define _SSIZE_T_DECLARED + +#if !defined(__CYGWIN__) && !defined(__rtems__) +#ifdef __MS_types__ +typedef char * addr_t; +typedef int mode_t; +#else +#if defined (__sparc__) && !defined (__sparc_v9__) +#ifdef __svr4__ +typedef unsigned long mode_t; +#else +typedef unsigned short mode_t; +#endif +#else +typedef unsigned int mode_t _ST_INT32; +#endif +#endif /* ! __MS_types__ */ +#endif /*__CYGWIN__*/ + +typedef unsigned short nlink_t; + +/* We don't define fd_set and friends if we are compiling POSIX + source, or if we have included (or may include as indicated + by __USE_W32_SOCKETS) the W32api winsock[2].h header which + defines Windows versions of them. Note that a program which + includes the W32api winsock[2].h header must know what it is doing; + it must not call the cygwin32 select function. +*/ +# if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) +# define _SYS_TYPES_FD_SET +# define NBBY 8 /* number of bits in a byte */ +/* + * Select uses bit masks of file descriptors in longs. + * These macros manipulate such bit fields (the filesystem macros use chars). + * FD_SETSIZE may be defined by the user, but the default here + * should be >= NOFILE (param.h). + */ +# ifndef FD_SETSIZE +# define FD_SETSIZE 64 +# endif + +typedef long fd_mask; +# define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */ +# ifndef howmany +# define howmany(x,y) (((x)+((y)-1))/(y)) +# endif + +/* We use a macro for fd_set so that including Sockets.h afterwards + can work. */ +typedef struct _types_fd_set { + fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; +} _types_fd_set; + +#define fd_set _types_fd_set + +# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) +# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) +# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) +# define FD_ZERO(p) (__extension__ (void)({ \ + size_t __i; \ + char *__tmp = (char *)p; \ + for (__i = 0; __i < sizeof (*(p)); ++__i) \ + *__tmp++ = 0; \ +})) + +# endif /* !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) */ + +#undef __MS_types__ +#undef _ST_INT32 + + +#ifndef __clockid_t_defined +typedef _CLOCKID_T_ clockid_t; +#define __clockid_t_defined #endif -#ifndef _MODE_T_DECLARED -typedef __mode_t mode_t; /* permissions */ -#define _MODE_T_DECLARED +#ifndef __timer_t_defined +typedef _TIMER_T_ timer_t; +#define __timer_t_defined #endif -#ifndef _NLINK_T_DECLARED -typedef __nlink_t nlink_t; /* link count */ -#define _NLINK_T_DECLARED -#endif - -#if !defined(__clockid_t_defined) && !defined(_CLOCKID_T_DECLARED) -typedef __clockid_t clockid_t; -#define __clockid_t_defined -#define _CLOCKID_T_DECLARED -#endif - -#if !defined(__timer_t_defined) && !defined(_TIMER_T_DECLARED) -typedef __timer_t timer_t; -#define __timer_t_defined -#define _TIMER_T_DECLARED -#endif - -#ifndef _USECONDS_T_DECLARED -typedef __useconds_t useconds_t; /* microseconds (unsigned) */ -#define _USECONDS_T_DECLARED -#endif - -#ifndef _SUSECONDS_T_DECLARED -typedef __suseconds_t suseconds_t; -#define _SUSECONDS_T_DECLARED -#endif - -typedef __int64_t sbintime_t; +typedef unsigned long useconds_t; +typedef long suseconds_t; #include -#include -#include + + +/* Cygwin will probably never have full posix compliance due to little things + * like an inability to set the stackaddress. Cygwin is also using void * + * pointers rather than structs to ensure maximum binary compatability with + * previous releases. + * This means that we don't use the types defined here, but rather in + * + */ +#if defined(_POSIX_THREADS) && !defined(__CYGWIN__) + +#include + +/* + * 2.5 Primitive System Data Types, P1003.1c/D10, p. 19. + */ + +#if defined(__XMK__) +typedef unsigned int pthread_t; /* identify a thread */ +#else +typedef __uint32_t pthread_t; /* identify a thread */ +#endif + +/* P1003.1c/D10, p. 118-119 */ +#define PTHREAD_SCOPE_PROCESS 0 +#define PTHREAD_SCOPE_SYSTEM 1 + +/* P1003.1c/D10, p. 111 */ +#define PTHREAD_INHERIT_SCHED 1 /* scheduling policy and associated */ + /* attributes are inherited from */ + /* the calling thread. */ +#define PTHREAD_EXPLICIT_SCHED 2 /* set from provided attribute object */ + +/* P1003.1c/D10, p. 141 */ +#define PTHREAD_CREATE_DETACHED 0 +#define PTHREAD_CREATE_JOINABLE 1 + +#if defined(__rtems__) + #include +#endif + +#if defined(__XMK__) +typedef struct pthread_attr_s { + int contentionscope; + struct sched_param schedparam; + int detachstate; + void *stackaddr; + size_t stacksize; +} pthread_attr_t; + +#define PTHREAD_STACK_MIN 200 + +#else /* !defined(__XMK__) */ +typedef struct { + int is_initialized; + void *stackaddr; + int stacksize; + int contentionscope; + int inheritsched; + int schedpolicy; + struct sched_param schedparam; +#if defined(__rtems__) + size_t guardsize; +#endif + + /* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute. */ +#if defined(_POSIX_THREAD_CPUTIME) + int cputime_clock_allowed; /* see time.h */ +#endif + int detachstate; +#if defined(__rtems__) + size_t affinitysetsize; + cpu_set_t *affinityset; + cpu_set_t affinitysetpreallocated; +#endif +} pthread_attr_t; + +#endif /* !defined(__XMK__) */ + +#if defined(_POSIX_THREAD_PROCESS_SHARED) +/* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared. */ + +#define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */ +#define PTHREAD_PROCESS_SHARED 1 /* visible too all processes with access to */ + /* the memory where the resource is */ + /* located */ +#endif + +#if defined(_POSIX_THREAD_PRIO_PROTECT) +/* Mutexes */ + +/* Values for blocking protocol. */ + +#define PTHREAD_PRIO_NONE 0 +#define PTHREAD_PRIO_INHERIT 1 +#define PTHREAD_PRIO_PROTECT 2 +#endif + +#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) + +/* Values for mutex type */ + +/* The following defines are part of the X/Open System Interface (XSI). */ + +/* + * This type of mutex does not detect deadlock. A thread attempting to + * relock this mutex without first unlocking it shall deadlock. Attempting + * to unlock a mutex locked by a different thread results in undefined + * behavior. Attempting to unlock an unlocked mutex results in undefined + * behavior. + */ +#define PTHREAD_MUTEX_NORMAL 0 + +/* + * A thread attempting to relock this mutex without first unlocking + * it shall succeed in locking the mutex. The relocking deadlock which + * can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with + * this type of mutex. Multiple locks of this mutex shall require the + * same number of unlocks to release the mutex before another thread can + * acquire the mutex. A thread attempting to unlock a mutex which another + * thread has locked shall return with an error. A thread attempting to + * unlock an unlocked mutex shall return with an error. + */ +#define PTHREAD_MUTEX_RECURSIVE 1 + +/* + * This type of mutex provides error checking. A thread attempting + * to relock this mutex without first unlocking it shall return with an + * error. A thread attempting to unlock a mutex which another thread has + * locked shall return with an error. A thread attempting to unlock an + * unlocked mutex shall return with an error. + */ +#define PTHREAD_MUTEX_ERRORCHECK 2 + +/* + * Attempting to recursively lock a mutex of this type results + * in undefined behavior. Attempting to unlock a mutex of this type + * which was not locked by the calling thread results in undefined + * behavior. Attempting to unlock a mutex of this type which is not locked + * results in undefined behavior. An implementation may map this mutex to + * one of the other mutex types. + */ +#define PTHREAD_MUTEX_DEFAULT 3 + +#endif /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */ + +#if defined(__XMK__) +typedef unsigned int pthread_mutex_t; /* identify a mutex */ + +typedef struct { + int type; +} pthread_mutexattr_t; + +#else /* !defined(__XMK__) */ +typedef __uint32_t pthread_mutex_t; /* identify a mutex */ + +typedef struct { + int is_initialized; +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow mutex to be shared amongst processes */ +#endif +#if defined(_POSIX_THREAD_PRIO_PROTECT) + int prio_ceiling; + int protocol; +#endif +#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) + int type; +#endif + int recursive; +} pthread_mutexattr_t; +#endif /* !defined(__XMK__) */ + +/* Condition Variables */ + +typedef __uint32_t pthread_cond_t; /* identify a condition variable */ + +typedef struct { + int is_initialized; +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_condattr_t; /* a condition attribute object */ + +/* Keys */ + +typedef __uint32_t pthread_key_t; /* thread-specific data keys */ + +typedef struct { + int is_initialized; /* is this structure initialized? */ + int init_executed; /* has the initialization routine been run? */ +} pthread_once_t; /* dynamic package initialization */ +#else +#if defined (__CYGWIN__) +#include +#endif +#endif /* defined(_POSIX_THREADS) */ + +/* POSIX Barrier Types */ + +#if defined(_POSIX_BARRIERS) +typedef __uint32_t pthread_barrier_t; /* POSIX Barrier Object */ +typedef struct { + int is_initialized; /* is this structure initialized? */ +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_barrierattr_t; +#endif /* defined(_POSIX_BARRIERS) */ + +/* POSIX Spin Lock Types */ + +#if !defined (__CYGWIN__) +#if defined(_POSIX_SPIN_LOCKS) +typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */ +#endif /* defined(_POSIX_SPIN_LOCKS) */ + +/* POSIX Reader/Writer Lock Types */ + +#if defined(_POSIX_READER_WRITER_LOCKS) +typedef __uint32_t pthread_rwlock_t; /* POSIX RWLock Object */ +typedef struct { + int is_initialized; /* is this structure initialized? */ +#if defined(_POSIX_THREAD_PROCESS_SHARED) + int process_shared; /* allow this to be shared amongst processes */ +#endif +} pthread_rwlockattr_t; +#endif /* defined(_POSIX_READER_WRITER_LOCKS) */ +#endif /* __CYGWIN__ */ #endif /* !__need_inttypes */ diff --git a/libc/xtensa-lx106-elf/include/sys/unistd.h b/libc/xtensa-lx106-elf/include/sys/unistd.h index 5386bd4..a741383 100644 --- a/libc/xtensa-lx106-elf/include/sys/unistd.h +++ b/libc/xtensa-lx106-elf/include/sys/unistd.h @@ -15,234 +15,186 @@ extern "C" { extern char **environ; -void _exit (int __status) _ATTRIBUTE ((__noreturn__)); +void _EXFUN(_exit, (int __status ) _ATTRIBUTE ((__noreturn__))); -int access (const char *__path, int __amode); -unsigned alarm (unsigned __secs); -int chdir (const char *__path); -int chmod (const char *__path, mode_t __mode); +int _EXFUN(access,(const char *__path, int __amode )); +unsigned _EXFUN(alarm, (unsigned __secs )); +int _EXFUN(chdir, (const char *__path )); +int _EXFUN(chmod, (const char *__path, mode_t __mode )); #if !defined(__INSIDE_CYGWIN__) -int chown (const char *__path, uid_t __owner, gid_t __group); +int _EXFUN(chown, (const char *__path, uid_t __owner, gid_t __group )); #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112) -int chroot (const char *__path); +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(chroot, (const char *__path )); #endif -int close (int __fildes); -#if __POSIX_VISIBLE >= 199209 -size_t confstr (int __name, char *__buf, size_t __len); +int _EXFUN(close, (int __fildes )); +#if defined(__CYGWIN__) +size_t _EXFUN(confstr, (int __name, char *__buf, size_t __len)); #endif -#if __XSI_VISIBLE -char * crypt (const char *__key, const char *__salt); +char * _EXFUN(ctermid, (char *__s )); +char * _EXFUN(cuserid, (char *__s )); +#if defined(__CYGWIN__) +int _EXFUN(daemon, (int nochdir, int noclose)); #endif -#if __XSI_VISIBLE && __XSI_VISIBLE < 700 -char * ctermid (char *__s); +int _EXFUN(dup, (int __fildes )); +int _EXFUN(dup2, (int __fildes, int __fildes2 )); +#if defined(__CYGWIN__) +int _EXFUN(dup3, (int __fildes, int __fildes2, int flags)); +int _EXFUN(eaccess, (const char *__path, int __mode)); +void _EXFUN(endusershell, (void)); +int _EXFUN(euidaccess, (const char *__path, int __mode)); #endif -#if __XSI_VISIBLE && __XSI_VISIBLE < 600 -char * cuserid (char *__s); +int _EXFUN(execl, (const char *__path, const char *, ... )); +int _EXFUN(execle, (const char *__path, const char *, ... )); +int _EXFUN(execlp, (const char *__file, const char *, ... )); +#if defined(__CYGWIN__) +int _EXFUN(execlpe, (const char *__file, const char *, ... )); #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500) -int daemon (int nochdir, int noclose); +int _EXFUN(execv, (const char *__path, char * const __argv[] )); +int _EXFUN(execve, (const char *__path, char * const __argv[], char * const __envp[] )); +int _EXFUN(execvp, (const char *__file, char * const __argv[] )); +#if defined(__CYGWIN__) +int _EXFUN(execvpe, (const char *__file, char * const __argv[], char * const __envp[] )); #endif -int dup (int __fildes); -int dup2 (int __fildes, int __fildes2); -#if __GNU_VISIBLE -int dup3 (int __fildes, int __fildes2, int flags); -int eaccess (const char *__path, int __mode); +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +int _EXFUN(faccessat, (int __dirfd, const char *__path, int __mode, int __flags)); #endif -#if __XSI_VISIBLE -void encrypt (char *__block, int __edflag); +#if defined(__CYGWIN__) || defined(__rtems__) || defined(__SPU__) +int _EXFUN(fchdir, (int __fildes)); #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500) -void endusershell (void); +int _EXFUN(fchmod, (int __fildes, mode_t __mode )); +#if !defined(__INSIDE_CYGWIN__) +int _EXFUN(fchown, (int __fildes, uid_t __owner, gid_t __group )); #endif -#if __GNU_VISIBLE -int euidaccess (const char *__path, int __mode); +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +int _EXFUN(fchownat, (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags)); #endif -int execl (const char *__path, const char *, ...); -int execle (const char *__path, const char *, ...); -int execlp (const char *__file, const char *, ...); -#if __MISC_VISIBLE -int execlpe (const char *__file, const char *, ...); +#if defined(__CYGWIN__) +int _EXFUN(fexecve, (int __fd, char * const __argv[], char * const __envp[] )); #endif -int execv (const char *__path, char * const __argv[]); -int execve (const char *__path, char * const __argv[], char * const __envp[]); -int execvp (const char *__file, char * const __argv[]); -#if __GNU_VISIBLE -int execvpe (const char *__file, char * const __argv[], char * const __envp[]); +pid_t _EXFUN(fork, (void )); +long _EXFUN(fpathconf, (int __fd, int __name )); +int _EXFUN(fsync, (int __fd)); +int _EXFUN(fdatasync, (int __fd)); +#if defined(__CYGWIN__) +char * _EXFUN(get_current_dir_name, (void)); #endif -#if __ATFILE_VISIBLE -int faccessat (int __dirfd, const char *__path, int __mode, int __flags); -#endif -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 -int fchdir (int __fildes); -#endif -#if __POSIX_VISIBLE >= 199309 -int fchmod (int __fildes, mode_t __mode); +char * _EXFUN(getcwd, (char *__buf, size_t __size )); +#if defined(__CYGWIN__) +int _EXFUN(getdomainname ,(char *__name, size_t __len)); #endif #if !defined(__INSIDE_CYGWIN__) -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 -int fchown (int __fildes, uid_t __owner, gid_t __group); +gid_t _EXFUN(getegid, (void )); +uid_t _EXFUN(geteuid, (void )); +gid_t _EXFUN(getgid, (void )); #endif +int _EXFUN(getgroups, (int __gidsetsize, gid_t __grouplist[] )); +#if defined(__CYGWIN__) +long _EXFUN(gethostid, (void)); #endif -#if __ATFILE_VISIBLE -int fchownat (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags); -#endif -#if __POSIX_VISIBLE >= 200809 -int fexecve (int __fd, char * const __argv[], char * const __envp[]); -#endif -pid_t fork (void); -long fpathconf (int __fd, int __name); -int fsync (int __fd); -#if __POSIX_VISIBLE >= 199309 -int fdatasync (int __fd); -#endif -#if __GNU_VISIBLE -char * get_current_dir_name (void); -#endif -char * getcwd (char *__buf, size_t __size); -#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500) -int getdomainname (char *__name, size_t __len); -#endif -#if __BSD_VISIBLE -int getentropy (void *, size_t); -#endif -#if !defined(__INSIDE_CYGWIN__) -gid_t getegid (void); -uid_t geteuid (void); -gid_t getgid (void); -#endif -int getgroups (int __gidsetsize, gid_t __grouplist[]); -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 -long gethostid (void); -#endif -char * getlogin (void); +char * _EXFUN(getlogin, (void )); #if defined(_POSIX_THREAD_SAFE_FUNCTIONS) -int getlogin_r (char *name, size_t namesize) ; +int _EXFUN(getlogin_r, (char *name, size_t namesize) ); #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE && __POSIX_VISIBLE < 200112) -char * getpass (const char *__prompt); -int getpagesize (void); +char * _EXFUN(getpass, (const char *__prompt)); +int _EXFUN(getpagesize, (void)); +#if defined(__CYGWIN__) +int _EXFUN(getpeereid, (int, uid_t *, gid_t *)); #endif -#if __BSD_VISIBLE -int getpeereid (int, uid_t *, gid_t *); -#endif -#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 4 -pid_t getpgid (pid_t); -#endif -pid_t getpgrp (void); -pid_t getpid (void); -pid_t getppid (void); -#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 4 -pid_t getsid (pid_t); +pid_t _EXFUN(getpgid, (pid_t)); +pid_t _EXFUN(getpgrp, (void )); +pid_t _EXFUN(getpid, (void )); +pid_t _EXFUN(getppid, (void )); +#if defined(__CYGWIN__) || defined(__rtems__) +pid_t _EXFUN(getsid, (pid_t)); #endif #if !defined(__INSIDE_CYGWIN__) -uid_t getuid (void); +uid_t _EXFUN(getuid, (void )); #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500) -char * getusershell (void); -#endif -#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200809) -char * getwd (char *__buf); -#endif -#if __BSD_VISIBLE -int iruserok (unsigned long raddr, int superuser, const char *ruser, const char *luser); -#endif -int isatty (int __fildes); -#if __BSD_VISIBLE -int issetugid (void); +#ifdef __CYGWIN__ +char * _EXFUN(getusershell, (void)); +char * _EXFUN(getwd, (char *__buf )); +int _EXFUN(iruserok, (unsigned long raddr, int superuser, const char *ruser, const char *luser)); #endif +int _EXFUN(isatty, (int __fildes )); #if !defined(__INSIDE_CYGWIN__) -#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809 -int lchown (const char *__path, uid_t __owner, gid_t __group); +int _EXFUN(lchown, (const char *__path, uid_t __owner, gid_t __group )); #endif +int _EXFUN(link, (const char *__path1, const char *__path2 )); +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +int _EXFUN(linkat, (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags )); #endif -int link (const char *__path1, const char *__path2); -#if __ATFILE_VISIBLE -int linkat (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags); -#endif -#if __MISC_VISIBLE || __XSI_VISIBLE -int nice (int __nice_value); -#endif +int _EXFUN(nice, (int __nice_value )); #if !defined(__INSIDE_CYGWIN__) -off_t lseek (int __fildes, off_t __offset, int __whence); +off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence )); #endif -#if __MISC_VISIBLE || __XSI_VISIBLE >= 4 +#if defined(__SPU__) || defined(__CYGWIN__) #define F_ULOCK 0 #define F_LOCK 1 #define F_TLOCK 2 #define F_TEST 3 -int lockf (int __fd, int __cmd, off_t __len); +int _EXFUN(lockf, (int __fd, int __cmd, off_t __len)); #endif -long pathconf (const char *__path, int __name); -int pause (void); -#if __POSIX_VISIBLE >= 199506 -int pthread_atfork (void (*)(void), void (*)(void), void (*)(void)); +long _EXFUN(pathconf, (const char *__path, int __name )); +int _EXFUN(pause, (void )); +#ifdef __CYGWIN__ +int _EXFUN(pthread_atfork, (void (*)(void), void (*)(void), void (*)(void))); #endif -int pipe (int __fildes[2]); -#if __GNU_VISIBLE -int pipe2 (int __fildes[2], int flags); +int _EXFUN(pipe, (int __fildes[2] )); +#ifdef __CYGWIN__ +int _EXFUN(pipe2, (int __fildes[2], int flags)); #endif -#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500 -ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset); -ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset); +ssize_t _EXFUN(pread, (int __fd, void *__buf, size_t __nbytes, off_t __offset)); +ssize_t _EXFUN(pwrite, (int __fd, const void *__buf, size_t __nbytes, off_t __offset)); +_READ_WRITE_RETURN_TYPE _EXFUN(read, (int __fd, void *__buf, size_t __nbyte )); +#if defined(__CYGWIN__) +int _EXFUN(rresvport, (int *__alport)); +int _EXFUN(revoke, (char *__path)); #endif -_READ_WRITE_RETURN_TYPE read (int __fd, void *__buf, size_t __nbyte); -#if __BSD_VISIBLE -int rresvport (int *__alport); -int revoke (char *__path); -#endif -int rmdir (const char *__path); -#if __BSD_VISIBLE -int ruserok (const char *rhost, int superuser, const char *ruser, const char *luser); -#endif -#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112) -void * sbrk (ptrdiff_t __incr); +int _EXFUN(rmdir, (const char *__path )); +#if defined(__CYGWIN__) +int _EXFUN(ruserok, (const char *rhost, int superuser, const char *ruser, const char *luser)); #endif +void * _EXFUN(sbrk, (ptrdiff_t __incr)); #if !defined(__INSIDE_CYGWIN__) -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 -int setegid (gid_t __gid); -int seteuid (uid_t __uid); +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(setegid, (gid_t __gid )); +int _EXFUN(seteuid, (uid_t __uid )); #endif -int setgid (gid_t __gid); +int _EXFUN(setgid, (gid_t __gid )); #endif -#if __BSD_VISIBLE -int setgroups (int ngroups, const gid_t *grouplist); +#if defined(__CYGWIN__) +int _EXFUN(setgroups, (int ngroups, const gid_t *grouplist )); #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500) -int sethostname (const char *, size_t); +#if __BSD_VISIBLE || (defined(_XOPEN_SOURCE) && __XSI_VISIBLE < 500) +int _EXFUN(sethostname, (const char *, size_t)); #endif -int setpgid (pid_t __pid, pid_t __pgid); -#if __SVID_VISIBLE || __XSI_VISIBLE >= 500 -int setpgrp (void); +int _EXFUN(setpgid, (pid_t __pid, pid_t __pgid )); +int _EXFUN(setpgrp, (void )); +#if defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__) +int _EXFUN(setregid, (gid_t __rgid, gid_t __egid)); +int _EXFUN(setreuid, (uid_t __ruid, uid_t __euid)); #endif -#if (__BSD_VISIBLE || __XSI_VISIBLE >= 4) && !defined(__INSIDE_CYGWIN__) -int setregid (gid_t __rgid, gid_t __egid); -int setreuid (uid_t __ruid, uid_t __euid); -#endif -pid_t setsid (void); +pid_t _EXFUN(setsid, (void )); #if !defined(__INSIDE_CYGWIN__) -int setuid (uid_t __uid); +int _EXFUN(setuid, (uid_t __uid )); #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500) -void setusershell (void); +#if defined(__CYGWIN__) +void _EXFUN(setusershell, (void)); #endif -unsigned sleep (unsigned int __seconds); -#if __XSI_VISIBLE -void swab (const void *__restrict, void *__restrict, ssize_t); +unsigned _EXFUN(sleep, (unsigned int __seconds )); +void _EXFUN(swab, (const void *__restrict, void *__restrict, ssize_t)); +long _EXFUN(sysconf, (int __name )); +pid_t _EXFUN(tcgetpgrp, (int __fildes )); +int _EXFUN(tcsetpgrp, (int __fildes, pid_t __pgrp_id )); +char * _EXFUN(ttyname, (int __fildes )); +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(ttyname_r, (int, char *, size_t)); #endif -long sysconf (int __name); -pid_t tcgetpgrp (int __fildes); -int tcsetpgrp (int __fildes, pid_t __pgrp_id); -char * ttyname (int __fildes); -int ttyname_r (int, char *, size_t); -int unlink (const char *__path); -#if __XSI_VISIBLE >= 500 && __POSIX_VISIBLE < 200809 || __BSD_VISIBLE -int usleep (useconds_t __useconds); -#endif -#if __BSD_VISIBLE -int vhangup (void); -#endif -_READ_WRITE_RETURN_TYPE write (int __fd, const void *__buf, size_t __nbyte); +int _EXFUN(unlink, (const char *__path )); +int _EXFUN(usleep, (useconds_t __useconds)); +int _EXFUN(vhangup, (void )); +_READ_WRITE_RETURN_TYPE _EXFUN(write, (int __fd, const void *__buf, size_t __nbyte )); #ifdef __CYGWIN__ # define __UNISTD_GETOPT__ @@ -255,70 +207,61 @@ int getopt(int, char * const [], const char *); extern int optreset; /* getopt(3) external variable */ #endif -#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200809) -pid_t vfork (void); -#endif +#ifndef _POSIX_SOURCE +pid_t _EXFUN(vfork, (void )); +#endif /* _POSIX_SOURCE */ #ifdef _COMPILING_NEWLIB /* Provide prototypes for most of the _ names that are provided in newlib for some compilers. */ -int _close (int __fildes); -pid_t _fork (void); -pid_t _getpid (void); -int _isatty (int __fildes); -int _link (const char *__path1, const char *__path2); -_off_t _lseek (int __fildes, _off_t __offset, int __whence); +int _EXFUN(_close, (int __fildes )); +pid_t _EXFUN(_fork, (void )); +pid_t _EXFUN(_getpid, (void )); +int _EXFUN(_isatty, (int __fildes )); +int _EXFUN(_link, (const char *__path1, const char *__path2 )); +_off_t _EXFUN(_lseek, (int __fildes, _off_t __offset, int __whence )); #ifdef __LARGE64_FILES -_off64_t _lseek64 (int __filedes, _off64_t __offset, int __whence); +_off64_t _EXFUN(_lseek64, (int __filedes, _off64_t __offset, int __whence )); #endif -_READ_WRITE_RETURN_TYPE _read (int __fd, void *__buf, size_t __nbyte); -void * _sbrk (ptrdiff_t __incr); -int _unlink (const char *__path); -_READ_WRITE_RETURN_TYPE _write (int __fd, const void *__buf, size_t __nbyte); -int _execve (const char *__path, char * const __argv[], char * const __envp[]); +_READ_WRITE_RETURN_TYPE _EXFUN(_read, (int __fd, void *__buf, size_t __nbyte )); +void * _EXFUN(_sbrk, (ptrdiff_t __incr)); +int _EXFUN(_unlink, (const char *__path )); +_READ_WRITE_RETURN_TYPE _EXFUN(_write, (int __fd, const void *__buf, size_t __nbyte )); +int _EXFUN(_execve, (const char *__path, char * const __argv[], char * const __envp[] )); #endif +#if defined(__CYGWIN__) || defined(__rtems__) || defined(__aarch64__) || defined (__arm__) || defined(__sh__) || defined(__SPU__) #if !defined(__INSIDE_CYGWIN__) -#if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500 -int ftruncate (int __fd, off_t __length); -#endif -#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500 -int truncate (const char *, off_t __length); +int _EXFUN(ftruncate, (int __fd, off_t __length)); +int _EXFUN(truncate, (const char *, off_t __length)); #endif #endif -#if __BSD_VISIBLE || __POSIX_VISIBLE < 200112 -int getdtablesize (void); -#endif -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500 -useconds_t ualarm (useconds_t __useconds, useconds_t __interval); -#endif - -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500 +#if defined(__CYGWIN__) || defined(__rtems__) +int _EXFUN(getdtablesize, (void)); +int _EXFUN(setdtablesize, (int)); +useconds_t _EXFUN(ualarm, (useconds_t __useconds, useconds_t __interval)); #if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) /* winsock[2].h defines as __stdcall, and with int as 2nd arg */ - int gethostname (char *__name, size_t __len); + int _EXFUN(gethostname, (char *__name, size_t __len)); #endif +char * _EXFUN(mktemp, (char *)); #endif -#if __MISC_VISIBLE -int setdtablesize (int); +#if defined(__CYGWIN__) || defined(__SPU__) || defined(__rtems__) +void _EXFUN(sync, (void)); #endif -#if __BSD_VISIBLE || __XSI_VISIBLE >= 500 -void sync (void); +ssize_t _EXFUN(readlink, (const char *__restrict __path, + char *__restrict __buf, size_t __buflen)); +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +ssize_t _EXFUN(readlinkat, (int __dirfd1, const char *__restrict __path, + char *__restrict __buf, size_t __buflen)); #endif - -#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 4 -ssize_t readlink (const char *__restrict __path, - char *__restrict __buf, size_t __buflen); -int symlink (const char *__name1, const char *__name2); -#endif -#if __ATFILE_VISIBLE -ssize_t readlinkat (int __dirfd1, const char *__restrict __path, - char *__restrict __buf, size_t __buflen); -int symlinkat (const char *, int, const char *); -int unlinkat (int, const char *, int); +int _EXFUN(symlink, (const char *__name1, const char *__name2)); +#if __POSIX_VISIBLE >= 200809 || __BSD_VISIBLE || defined(__CYGWIN__) +int _EXFUN(symlinkat, (const char *, int, const char *)); +int _EXFUN(unlinkat, (int, const char *, int)); #endif #define F_OK 0 @@ -479,22 +422,6 @@ int unlinkat (int, const char *, int); #define _SC_THREAD_ROBUST_PRIO_INHERIT 122 #define _SC_THREAD_ROBUST_PRIO_PROTECT 123 #define _SC_XOPEN_UUCP 124 -#define _SC_LEVEL1_ICACHE_SIZE 125 -#define _SC_LEVEL1_ICACHE_ASSOC 126 -#define _SC_LEVEL1_ICACHE_LINESIZE 127 -#define _SC_LEVEL1_DCACHE_SIZE 128 -#define _SC_LEVEL1_DCACHE_ASSOC 129 -#define _SC_LEVEL1_DCACHE_LINESIZE 130 -#define _SC_LEVEL2_CACHE_SIZE 131 -#define _SC_LEVEL2_CACHE_ASSOC 132 -#define _SC_LEVEL2_CACHE_LINESIZE 133 -#define _SC_LEVEL3_CACHE_SIZE 134 -#define _SC_LEVEL3_CACHE_ASSOC 135 -#define _SC_LEVEL3_CACHE_LINESIZE 136 -#define _SC_LEVEL4_CACHE_SIZE 137 -#define _SC_LEVEL4_CACHE_ASSOC 138 -#define _SC_LEVEL4_CACHE_LINESIZE 139 -#define _SC_POSIX_26_VERSION 140 /* * pathconf values per IEEE Std 1003.1, 2008 Edition @@ -526,7 +453,6 @@ int unlinkat (int, const char *, int); #define _PC_POSIX_PERMISSIONS 90 /* Ask for full POSIX permission support including uid/gid settings. */ #define _PC_POSIX_SECURITY 91 -#define _PC_CASE_INSENSITIVE 92 #endif /* @@ -582,18 +508,9 @@ int unlinkat (int, const char *, int); #define _CS_POSIX_V7_THREADS_LDFLAGS 19 #define _CS_V7_ENV 20 #define _CS_V6_ENV _CS_V7_ENV -#define _CS_LFS_CFLAGS 21 -#define _CS_LFS_LDFLAGS 22 -#define _CS_LFS_LIBS 23 -#define _CS_LFS_LINTFLAGS 24 #endif #ifdef __cplusplus } #endif - -#if __SSP_FORTIFY_LEVEL > 0 -#include -#endif - #endif /* _SYS_UNISTD_H */ diff --git a/libc/xtensa-lx106-elf/include/sys/wait.h b/libc/xtensa-lx106-elf/include/sys/wait.h index f17e53f..73fe372 100644 --- a/libc/xtensa-lx106-elf/include/sys/wait.h +++ b/libc/xtensa-lx106-elf/include/sys/wait.h @@ -11,7 +11,7 @@ extern "C" { #define WUNTRACED 2 /* A status looks like: - <1 byte info> <1 byte code> + <2 bytes info> <2 bytes code> == 0, child has exited, info is the exit value == 1..7e, child has exited, info is the signal number. diff --git a/libc/xtensa-lx106-elf/include/tar.h b/libc/xtensa-lx106-elf/include/tar.h index 36437fc..07b06dd 100644 --- a/libc/xtensa-lx106-elf/include/tar.h +++ b/libc/xtensa-lx106-elf/include/tar.h @@ -5,8 +5,6 @@ #ifndef _TAR_H #define _TAR_H -#include - /* General definitions */ #define TMAGIC "ustar" /* ustar plus null byte. */ #define TMAGLEN 6 /* Length of the above. */ @@ -27,9 +25,7 @@ /* Mode field bit definitions (octal) */ #define TSUID 04000 /* Set UID on execution. */ #define TSGID 02000 /* Set GID on execution. */ -#if __XSI_VISIBLE || __POSIX_VISIBLE < 200112 #define TSVTX 01000 /* On directories, restricted deletion flag. */ -#endif #define TUREAD 00400 /* Read by owner. */ #define TUWRITE 00200 /* Write by owner. */ #define TUEXEC 00100 /* Execute/search by owner. */ diff --git a/libc/xtensa-lx106-elf/include/tgmath.h b/libc/xtensa-lx106-elf/include/tgmath.h index 97dc50e..f9c8311 100644 --- a/libc/xtensa-lx106-elf/include/tgmath.h +++ b/libc/xtensa-lx106-elf/include/tgmath.h @@ -79,7 +79,7 @@ __tg_type3(__e1, __e2, __e3, long double _Complex) || \ __tg_type3(__e1, __e2, __e3, __typeof__(_Complex_I))) -#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__) +#ifdef _LDBL_EQ_DBL #define __tg_impl_simple(x, y, z, fn, fnf, fnl, ...) \ __builtin_choose_expr(__tg_type_corr(x, y, z, long double), \ fnl(__VA_ARGS__), __builtin_choose_expr( \ @@ -161,10 +161,9 @@ #define lround(__x) __tg_simple(__x, lround) #define nearbyint(__x) __tg_simple(__x, nearbyint) #define nextafter(__x, __y) __tg_simple2(__x, __y, nextafter) -/* not yet implemented even for _LDBL_EQ_DBL platforms */ -#ifdef __CYGWIN__ +/* not yet implemented even for _LDBL_EQ_DBL platforms #define nexttoward(__x, __y) __tg_simplev(__x, nexttoward, __x, __y) -#endif +*/ #define remainder(__x, __y) __tg_simple2(__x, __y, remainder) #define remquo(__x, __y, __z) __tg_impl_simple(__x, __x, __y, remquo, remquof, \ remquol, __x, __y, __z) diff --git a/libc/xtensa-lx106-elf/include/threads.h b/libc/xtensa-lx106-elf/include/threads.h deleted file mode 100644 index 9fb08b0..0000000 --- a/libc/xtensa-lx106-elf/include/threads.h +++ /dev/null @@ -1,93 +0,0 @@ -/*- - * Copyright (c) 2011 Ed Schouten - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - */ - -#ifndef _THREADS_H_ -#define _THREADS_H_ - -#include -#include - -typedef void (*tss_dtor_t)(void *); -typedef int (*thrd_start_t)(void *); - -enum { - mtx_plain = 0x1, - mtx_recursive = 0x2, - mtx_timed = 0x4 -}; - -enum { - thrd_busy = 1, - thrd_error = 2, - thrd_nomem = 3, - thrd_success = 4, - thrd_timedout = 5 -}; - -#if !defined(__cplusplus) || __cplusplus < 201103L -#define thread_local _Thread_local -#endif - -__BEGIN_DECLS -void call_once(once_flag *, void (*)(void)); -int cnd_broadcast(cnd_t *); -void cnd_destroy(cnd_t *); -int cnd_init(cnd_t *); -int cnd_signal(cnd_t *); -int cnd_timedwait(cnd_t *__restrict, mtx_t *__restrict __mtx, - const struct timespec *__restrict) - __requires_exclusive(*__mtx); -int cnd_wait(cnd_t *, mtx_t *__mtx) - __requires_exclusive(*__mtx); -void mtx_destroy(mtx_t *__mtx) - __requires_unlocked(*__mtx); -int mtx_init(mtx_t *__mtx, int) - __requires_unlocked(*__mtx); -int mtx_lock(mtx_t *__mtx) - __locks_exclusive(*__mtx); -int mtx_timedlock(mtx_t *__restrict __mtx, - const struct timespec *__restrict) - __trylocks_exclusive(thrd_success, *__mtx); -int mtx_trylock(mtx_t *__mtx) - __trylocks_exclusive(thrd_success, *__mtx); -int mtx_unlock(mtx_t *__mtx) - __unlocks(*__mtx); -int thrd_create(thrd_t *, thrd_start_t, void *); -thrd_t thrd_current(void); -int thrd_detach(thrd_t); -int thrd_equal(thrd_t, thrd_t); -_Noreturn void - thrd_exit(int); -int thrd_join(thrd_t, int *); -int thrd_sleep(const struct timespec *, struct timespec *); -void thrd_yield(void); -int tss_create(tss_t *, tss_dtor_t); -void tss_delete(tss_t); -void * tss_get(tss_t); -int tss_set(tss_t, void *); -__END_DECLS - -#endif /* !_THREADS_H_ */ diff --git a/libc/xtensa-lx106-elf/include/time.h b/libc/xtensa-lx106-elf/include/time.h index a2efcc1..d7b6612 100644 --- a/libc/xtensa-lx106-elf/include/time.h +++ b/libc/xtensa-lx106-elf/include/time.h @@ -8,7 +8,6 @@ #define _TIME_H_ #include "_ansi.h" -#include #include #define __need_size_t @@ -26,11 +25,6 @@ #define CLK_TCK CLOCKS_PER_SEC #include -#include - -#if __POSIX_VISIBLE >= 200809 -#include -#endif _BEGIN_STD_C @@ -53,33 +47,27 @@ struct tm #endif }; -clock_t clock (void); -double difftime (time_t _time2, time_t _time1); -time_t mktime (struct tm *_timeptr); -time_t time (time_t *_timer); +clock_t _EXFUN(clock, (void)); +double _EXFUN(difftime, (time_t _time2, time_t _time1)); +time_t _EXFUN(mktime, (struct tm *_timeptr)); +time_t _EXFUN(time, (time_t *_timer)); #ifndef _REENT_ONLY -char *asctime (const struct tm *_tblock); -char *ctime (const time_t *_time); -struct tm *gmtime (const time_t *_timer); -struct tm *localtime (const time_t *_timer); +char *_EXFUN(asctime, (const struct tm *_tblock)); +char *_EXFUN(ctime, (const time_t *_time)); +struct tm *_EXFUN(gmtime, (const time_t *_timer)); +struct tm *_EXFUN(localtime,(const time_t *_timer)); #endif -size_t strftime (char *__restrict _s, +size_t _EXFUN(strftime, (char *__restrict _s, size_t _maxsize, const char *__restrict _fmt, - const struct tm *__restrict _t); + const struct tm *__restrict _t)); -#if __POSIX_VISIBLE >= 200809 -extern size_t strftime_l (char *__restrict _s, size_t _maxsize, - const char *__restrict _fmt, - const struct tm *__restrict _t, locale_t _l); -#endif - -char *asctime_r (const struct tm *__restrict, - char *__restrict); -char *ctime_r (const time_t *, char *); -struct tm *gmtime_r (const time_t *__restrict, - struct tm *__restrict); -struct tm *localtime_r (const time_t *__restrict, - struct tm *__restrict); +char *_EXFUN(asctime_r, (const struct tm *__restrict, + char *__restrict)); +char *_EXFUN(ctime_r, (const time_t *, char *)); +struct tm *_EXFUN(gmtime_r, (const time_t *__restrict, + struct tm *__restrict)); +struct tm *_EXFUN(localtime_r, (const time_t *__restrict, + struct tm *__restrict)); _END_STD_C @@ -87,20 +75,12 @@ _END_STD_C extern "C" { #endif -#if __XSI_VISIBLE -char *strptime (const char *__restrict, +#ifndef __STRICT_ANSI__ +char *_EXFUN(strptime, (const char *__restrict, const char *__restrict, - struct tm *__restrict); -#endif -#if __GNU_VISIBLE -char *strptime_l (const char *__restrict, const char *__restrict, - struct tm *__restrict, locale_t); -#endif - -#if __POSIX_VISIBLE -void tzset (void); -#endif -void _tzset_r (struct _reent *); + struct tm *__restrict)); +_VOID _EXFUN(tzset, (_VOID)); +_VOID _EXFUN(_tzset_r, (struct _reent *)); typedef struct __tzrule_struct { @@ -120,17 +100,16 @@ typedef struct __tzinfo_struct __tzrule_type __tzrule[2]; } __tzinfo_type; -__tzinfo_type *__gettzinfo (void); +__tzinfo_type *_EXFUN (__gettzinfo, (_VOID)); /* getdate functions */ #ifdef HAVE_GETDATE -#if __XSI_VISIBLE >= 4 #ifndef _REENT_ONLY #define getdate_err (*__getdate_err()) -int *__getdate_err (void); +int *_EXFUN(__getdate_err,(_VOID)); -struct tm * getdate (const char *); +struct tm * _EXFUN(getdate, (const char *)); /* getdate_err is set to one of the following values to indicate the error. 1 the DATEMSK environment variable is null or undefined, 2 the template file cannot be opened for reading, @@ -141,27 +120,21 @@ struct tm * getdate (const char *); 7 there is no line in the template that matches the input, 8 invalid input specification */ #endif /* !_REENT_ONLY */ -#endif /* __XSI_VISIBLE >= 4 */ -#if __GNU_VISIBLE /* getdate_r returns the error code as above */ -int getdate_r (const char *, struct tm *); -#endif /* __GNU_VISIBLE */ +int _EXFUN(getdate_r, (const char *, struct tm *)); #endif /* HAVE_GETDATE */ /* defines for the opengroup specifications Derived from Issue 1 of the SVID. */ -#if __SVID_VISIBLE || __XSI_VISIBLE extern __IMPORT long _timezone; extern __IMPORT int _daylight; -#endif -#if __POSIX_VISIBLE extern __IMPORT char *_tzname[2]; /* POSIX defines the external tzname being defined in time.h */ #ifndef tzname #define tzname _tzname #endif -#endif /* __POSIX_VISIBLE */ +#endif /* !__STRICT_ANSI__ */ #ifdef __cplusplus } @@ -183,31 +156,33 @@ extern "C" { /* Clocks, P1003.1b-1993, p. 263 */ -int clock_settime (clockid_t clock_id, const struct timespec *tp); -int clock_gettime (clockid_t clock_id, struct timespec *tp); -int clock_getres (clockid_t clock_id, struct timespec *res); +int _EXFUN(clock_settime, (clockid_t clock_id, const struct timespec *tp)); +int _EXFUN(clock_gettime, (clockid_t clock_id, struct timespec *tp)); +int _EXFUN(clock_getres, (clockid_t clock_id, struct timespec *res)); /* Create a Per-Process Timer, P1003.1b-1993, p. 264 */ -int timer_create (clockid_t clock_id, +int _EXFUN(timer_create, + (clockid_t clock_id, struct sigevent *__restrict evp, - timer_t *__restrict timerid); + timer_t *__restrict timerid)); /* Delete a Per_process Timer, P1003.1b-1993, p. 266 */ -int timer_delete (timer_t timerid); +int _EXFUN(timer_delete, (timer_t timerid)); /* Per-Process Timers, P1003.1b-1993, p. 267 */ -int timer_settime (timer_t timerid, int flags, +int _EXFUN(timer_settime, + (timer_t timerid, int flags, const struct itimerspec *__restrict value, - struct itimerspec *__restrict ovalue); -int timer_gettime (timer_t timerid, struct itimerspec *value); -int timer_getoverrun (timer_t timerid); + struct itimerspec *__restrict ovalue)); +int _EXFUN(timer_gettime, (timer_t timerid, struct itimerspec *value)); +int _EXFUN(timer_getoverrun, (timer_t timerid)); /* High Resolution Sleep, P1003.1b-1993, p. 269 */ -int nanosleep (const struct timespec *rqtp, struct timespec *rmtp); +int _EXFUN(nanosleep, (const struct timespec *rqtp, struct timespec *rmtp)); #ifdef __cplusplus } @@ -220,8 +195,9 @@ int nanosleep (const struct timespec *rqtp, struct timespec *rmtp); extern "C" { #endif -int clock_nanosleep (clockid_t clock_id, int flags, - const struct timespec *rqtp, struct timespec *rmtp); +int _EXFUN(clock_nanosleep, + (clockid_t clock_id, int flags, const struct timespec *rqtp, + struct timespec *rmtp)); #ifdef __cplusplus } @@ -294,7 +270,7 @@ extern "C" { /* Accessing a Process CPU-time CLock, P1003.4b/D8, p. 55 */ -int clock_getcpuclockid (pid_t pid, clockid_t *clock_id); +int _EXFUN(clock_getcpuclockid, (pid_t pid, clockid_t *clock_id)); #endif /* _POSIX_CPUTIME */ @@ -302,8 +278,8 @@ int clock_getcpuclockid (pid_t pid, clockid_t *clock_id); /* CPU-time Clock Attribute Access, P1003.4b/D8, p. 56 */ -int clock_setenable_attr (clockid_t clock_id, int attr); -int clock_getenable_attr (clockid_t clock_id, int *attr); +int _EXFUN(clock_setenable_attr, (clockid_t clock_id, int attr)); +int _EXFUN(clock_getenable_attr, (clockid_t clock_id, int *attr)); #endif /* _POSIX_CPUTIME or _POSIX_THREAD_CPUTIME */ diff --git a/libc/xtensa-lx106-elf/include/unctrl.h b/libc/xtensa-lx106-elf/include/unctrl.h index 010812f..0040752 100644 --- a/libc/xtensa-lx106-elf/include/unctrl.h +++ b/libc/xtensa-lx106-elf/include/unctrl.h @@ -40,7 +40,7 @@ #define unctrl(c) __unctrl[(c) & 0xff] #define unctrllen(ch) __unctrllen[(ch) & 0xff] -extern __IMPORT const char * const __unctrl[256]; /* Control strings. */ -extern __IMPORT const char __unctrllen[256]; /* Control strings length. */ +extern __IMPORT _CONST char * _CONST __unctrl[256]; /* Control strings. */ +extern __IMPORT _CONST char __unctrllen[256]; /* Control strings length. */ #endif /* _UNCTRL_H_ */ diff --git a/libc/xtensa-lx106-elf/include/wchar.h b/libc/xtensa-lx106-elf/include/wchar.h index accbb8c..810a6c0 100644 --- a/libc/xtensa-lx106-elf/include/wchar.h +++ b/libc/xtensa-lx106-elf/include/wchar.h @@ -11,32 +11,15 @@ #define __need_NULL #include +#define __need___va_list +#include + /* For _mbstate_t definition. */ #include #include /* For __STDC_ISO_10646__ */ #include -/* typedef only __gnuc_va_list, used throughout the header */ -#define __need___va_list -#include - -/* typedef va_list only when required */ -#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE -#ifdef __GNUC__ -#ifndef _VA_LIST_DEFINED -typedef __gnuc_va_list va_list; -#define _VA_LIST_DEFINED -#endif -#else /* !__GNUC__ */ -#include -#endif -#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */ - -#if __XSI_VISIBLE /* && __XSI_VISIBLE < 800 */ && !__GNU_VISIBLE -#include -#endif - #ifndef WEOF # define WEOF ((wint_t)-1) #endif @@ -63,19 +46,10 @@ typedef __gnuc_va_list va_list; #endif #endif -#if __POSIX_VISIBLE >= 200809 -#include -#endif - _BEGIN_STD_C -#if __POSIX_VISIBLE >= 200809 || _XSI_VISIBLE /* As in stdio.h, defines __FILE. */ -#if !defined(__FILE_defined) typedef __FILE FILE; -# define __FILE_defined -#endif -#endif /* As required by POSIX.1-2008, declare tm as incomplete type. The actual definition is in time.h. */ @@ -86,190 +60,140 @@ struct tm; typedef _mbstate_t mbstate_t; #endif /* _MBSTATE_T */ -wint_t btowc (int); -int wctob (wint_t); -size_t mbrlen (const char *__restrict, size_t, mbstate_t *__restrict); -size_t mbrtowc (wchar_t *__restrict, const char *__restrict, size_t, - mbstate_t *__restrict); -size_t _mbrtowc_r (struct _reent *, wchar_t * , const char * , - size_t, mbstate_t *); -int mbsinit (const mbstate_t *); -#if __POSIX_VISIBLE >= 200809 -size_t mbsnrtowcs (wchar_t *__restrict, const char **__restrict, - size_t, size_t, mbstate_t *__restrict); -#endif -size_t _mbsnrtowcs_r (struct _reent *, wchar_t * , const char ** , - size_t, size_t, mbstate_t *); -size_t mbsrtowcs (wchar_t *__restrict, const char **__restrict, size_t, - mbstate_t *__restrict); -size_t _mbsrtowcs_r (struct _reent *, wchar_t * , const char ** , size_t, mbstate_t *); -size_t wcrtomb (char *__restrict, wchar_t, mbstate_t *__restrict); -size_t _wcrtomb_r (struct _reent *, char * , wchar_t, mbstate_t *); -#if __POSIX_VISIBLE >= 200809 -size_t wcsnrtombs (char *__restrict, const wchar_t **__restrict, - size_t, size_t, mbstate_t *__restrict); -#endif -size_t _wcsnrtombs_r (struct _reent *, char * , const wchar_t ** , - size_t, size_t, mbstate_t *); -size_t wcsrtombs (char *__restrict, const wchar_t **__restrict, - size_t, mbstate_t *__restrict); -size_t _wcsrtombs_r (struct _reent *, char * , const wchar_t ** , - size_t, mbstate_t *); -#if __POSIX_VISIBLE >= 200809 -int wcscasecmp (const wchar_t *, const wchar_t *); -#endif -wchar_t *wcscat (wchar_t *__restrict, const wchar_t *__restrict); -wchar_t *wcschr (const wchar_t *, wchar_t); -int wcscmp (const wchar_t *, const wchar_t *); -int wcscoll (const wchar_t *, const wchar_t *); -wchar_t *wcscpy (wchar_t *__restrict, const wchar_t *__restrict); -#if __POSIX_VISIBLE >= 200809 -wchar_t *wcpcpy (wchar_t *__restrict, - const wchar_t *__restrict); -wchar_t *wcsdup (const wchar_t *); -#endif -wchar_t *_wcsdup_r (struct _reent *, const wchar_t * ); -size_t wcscspn (const wchar_t *, const wchar_t *); -size_t wcsftime (wchar_t *__restrict, size_t, - const wchar_t *__restrict, const struct tm *__restrict); -#if __GNU_VISIBLE -size_t wcsftime_l (wchar_t *__restrict, size_t, const wchar_t *__restrict, - const struct tm *__restrict, locale_t); -#endif -size_t wcslcat (wchar_t *, const wchar_t *, size_t); -size_t wcslcpy (wchar_t *, const wchar_t *, size_t); -size_t wcslen (const wchar_t *); -#if __POSIX_VISIBLE >= 200809 -int wcsncasecmp (const wchar_t *, const wchar_t *, size_t); -#endif -wchar_t *wcsncat (wchar_t *__restrict, - const wchar_t *__restrict, size_t); -int wcsncmp (const wchar_t *, const wchar_t *, size_t); -wchar_t *wcsncpy (wchar_t *__restrict, - const wchar_t *__restrict, size_t); -#if __POSIX_VISIBLE >= 200809 -wchar_t *wcpncpy (wchar_t *__restrict, - const wchar_t *__restrict, size_t); -size_t wcsnlen (const wchar_t *, size_t); -#endif -wchar_t *wcspbrk (const wchar_t *, const wchar_t *); -wchar_t *wcsrchr (const wchar_t *, wchar_t); -size_t wcsspn (const wchar_t *, const wchar_t *); -wchar_t *wcsstr (const wchar_t *__restrict, - const wchar_t *__restrict); -wchar_t *wcstok (wchar_t *__restrict, const wchar_t *__restrict, - wchar_t **__restrict); -double wcstod (const wchar_t *__restrict, wchar_t **__restrict); -double _wcstod_r (struct _reent *, const wchar_t *, wchar_t **); -#if __ISO_C_VISIBLE >= 1999 -float wcstof (const wchar_t *__restrict, wchar_t **__restrict); -#endif -#if __XSI_VISIBLE -int wcswidth (const wchar_t *, size_t); -#endif -size_t wcsxfrm (wchar_t *__restrict, const wchar_t *__restrict, - size_t); -#if __POSIX_VISIBLE >= 200809 -extern int wcscasecmp_l (const wchar_t *, const wchar_t *, locale_t); -extern int wcsncasecmp_l (const wchar_t *, const wchar_t *, size_t, locale_t); -extern int wcscoll_l (const wchar_t *, const wchar_t *, locale_t); -extern size_t wcsxfrm_l (wchar_t *__restrict, const wchar_t *__restrict, size_t, - locale_t); -#endif +wint_t _EXFUN(btowc, (int)); +int _EXFUN(wctob, (wint_t)); +size_t _EXFUN(mbrlen, (const char *__restrict, size_t, mbstate_t *__restrict)); +size_t _EXFUN(mbrtowc, (wchar_t *__restrict, const char *__restrict, size_t, + mbstate_t *__restrict)); +size_t _EXFUN(_mbrtowc_r, (struct _reent *, wchar_t * , const char * , + size_t, mbstate_t *)); +int _EXFUN(mbsinit, (const mbstate_t *)); +size_t _EXFUN(mbsnrtowcs, (wchar_t *__restrict, const char **__restrict, + size_t, size_t, mbstate_t *__restrict)); +size_t _EXFUN(_mbsnrtowcs_r, (struct _reent *, wchar_t * , const char ** , + size_t, size_t, mbstate_t *)); +size_t _EXFUN(mbsrtowcs, (wchar_t *__restrict, const char **__restrict, size_t, + mbstate_t *__restrict)); +size_t _EXFUN(_mbsrtowcs_r, (struct _reent *, wchar_t * , const char ** , size_t, mbstate_t *)); +size_t _EXFUN(wcrtomb, (char *__restrict, wchar_t, mbstate_t *__restrict)); +size_t _EXFUN(_wcrtomb_r, (struct _reent *, char * , wchar_t, mbstate_t *)); +size_t _EXFUN(wcsnrtombs, (char *__restrict, const wchar_t **__restrict, + size_t, size_t, mbstate_t *__restrict)); +size_t _EXFUN(_wcsnrtombs_r, (struct _reent *, char * , const wchar_t ** , + size_t, size_t, mbstate_t *)); +size_t _EXFUN(wcsrtombs, (char *__restrict, const wchar_t **__restrict, + size_t, mbstate_t *__restrict)); +size_t _EXFUN(_wcsrtombs_r, (struct _reent *, char * , const wchar_t ** , + size_t, mbstate_t *)); +int _EXFUN(wcscasecmp, (const wchar_t *, const wchar_t *)); +wchar_t *_EXFUN(wcscat, (wchar_t *__restrict, const wchar_t *__restrict)); +wchar_t *_EXFUN(wcschr, (const wchar_t *, wchar_t)); +int _EXFUN(wcscmp, (const wchar_t *, const wchar_t *)); +int _EXFUN(wcscoll, (const wchar_t *, const wchar_t *)); +wchar_t *_EXFUN(wcscpy, (wchar_t *__restrict, const wchar_t *__restrict)); +wchar_t *_EXFUN(wcpcpy, (wchar_t *__restrict, + const wchar_t *__restrict)); +wchar_t *_EXFUN(wcsdup, (const wchar_t *)); +wchar_t *_EXFUN(_wcsdup_r, (struct _reent *, const wchar_t * )); +size_t _EXFUN(wcscspn, (const wchar_t *, const wchar_t *)); +size_t _EXFUN(wcsftime, (wchar_t *__restrict, size_t, + const wchar_t *__restrict, const struct tm *__restrict)); +size_t _EXFUN(wcslcat, (wchar_t *, const wchar_t *, size_t)); +size_t _EXFUN(wcslcpy, (wchar_t *, const wchar_t *, size_t)); +size_t _EXFUN(wcslen, (const wchar_t *)); +int _EXFUN(wcsncasecmp, (const wchar_t *, const wchar_t *, size_t)); +wchar_t *_EXFUN(wcsncat, (wchar_t *__restrict, + const wchar_t *__restrict, size_t)); +int _EXFUN(wcsncmp, (const wchar_t *, const wchar_t *, size_t)); +wchar_t *_EXFUN(wcsncpy, (wchar_t *__restrict, + const wchar_t *__restrict, size_t)); +wchar_t *_EXFUN(wcpncpy, (wchar_t *__restrict, + const wchar_t *__restrict, size_t)); +size_t _EXFUN(wcsnlen, (const wchar_t *, size_t)); +wchar_t *_EXFUN(wcspbrk, (const wchar_t *, const wchar_t *)); +wchar_t *_EXFUN(wcsrchr, (const wchar_t *, wchar_t)); +size_t _EXFUN(wcsspn, (const wchar_t *, const wchar_t *)); +wchar_t *_EXFUN(wcsstr, (const wchar_t *__restrict, + const wchar_t *__restrict)); +wchar_t *_EXFUN(wcstok, (wchar_t *__restrict, const wchar_t *__restrict, + wchar_t **__restrict)); +double _EXFUN(wcstod, (const wchar_t *__restrict, wchar_t **__restrict)); +double _EXFUN(_wcstod_r, (struct _reent *, const wchar_t *, wchar_t **)); +float _EXFUN(wcstof, (const wchar_t *__restrict, wchar_t **__restrict)); +float _EXFUN(_wcstof_r, (struct _reent *, const wchar_t *, wchar_t **)); +#ifdef _LDBL_EQ_DBL +long double _EXFUN(wcstold, (const wchar_t *, wchar_t **)); +#endif /* _LDBL_EQ_DBL */ +int _EXFUN(wcswidth, (const wchar_t *, size_t)); +size_t _EXFUN(wcsxfrm, (wchar_t *__restrict, const wchar_t *__restrict, + size_t)); +int _EXFUN(wcwidth, (const wchar_t)); +wchar_t *_EXFUN(wmemchr, (const wchar_t *, wchar_t, size_t)); +int _EXFUN(wmemcmp, (const wchar_t *, const wchar_t *, size_t)); +wchar_t *_EXFUN(wmemcpy, (wchar_t *__restrict, const wchar_t *__restrict, + size_t)); +wchar_t *_EXFUN(wmemmove, (wchar_t *, const wchar_t *, size_t)); +wchar_t *_EXFUN(wmemset, (wchar_t *, wchar_t, size_t)); -#if __XSI_VISIBLE -int wcwidth (const wchar_t); -#endif -wchar_t *wmemchr (const wchar_t *, wchar_t, size_t); -int wmemcmp (const wchar_t *, const wchar_t *, size_t); -wchar_t *wmemcpy (wchar_t *__restrict, const wchar_t *__restrict, - size_t); -wchar_t *wmemmove (wchar_t *, const wchar_t *, size_t); -#if __GNU_VISIBLE -wchar_t *wmempcpy (wchar_t *__restrict, const wchar_t *__restrict, - size_t); -#endif -wchar_t *wmemset (wchar_t *, wchar_t, size_t); +long _EXFUN(wcstol, (const wchar_t *__restrict, wchar_t **__restrict, int)); +long long _EXFUN(wcstoll, (const wchar_t *__restrict, wchar_t **__restrict, + int)); +unsigned long _EXFUN(wcstoul, (const wchar_t *__restrict, wchar_t **__restrict, + int)); +unsigned long long _EXFUN(wcstoull, (const wchar_t *__restrict, + wchar_t **__restrict, int)); +long _EXFUN(_wcstol_r, (struct _reent *, const wchar_t *, wchar_t **, int)); +long long _EXFUN(_wcstoll_r, (struct _reent *, const wchar_t *, wchar_t **, int)); +unsigned long _EXFUN(_wcstoul_r, (struct _reent *, const wchar_t *, wchar_t **, int)); +unsigned long long _EXFUN(_wcstoull_r, (struct _reent *, const wchar_t *, wchar_t **, int)); +/* On platforms where long double equals double. */ +#ifdef _LDBL_EQ_DBL +long double _EXFUN(wcstold, (const wchar_t *, wchar_t **)); +#endif /* _LDBL_EQ_DBL */ -long wcstol (const wchar_t *__restrict, wchar_t **__restrict, int); -#if __ISO_C_VISIBLE >= 1999 -long long wcstoll (const wchar_t *__restrict, wchar_t **__restrict, - int); -#endif -unsigned long wcstoul (const wchar_t *__restrict, wchar_t **__restrict, - int); -#if __ISO_C_VISIBLE >= 1999 -unsigned long long wcstoull (const wchar_t *__restrict, - wchar_t **__restrict, int); -#endif -long _wcstol_r (struct _reent *, const wchar_t *, wchar_t **, int); -long long _wcstoll_r (struct _reent *, const wchar_t *, wchar_t **, int); -unsigned long _wcstoul_r (struct _reent *, const wchar_t *, wchar_t **, int); -unsigned long long _wcstoull_r (struct _reent *, const wchar_t *, wchar_t **, int); -#if __ISO_C_VISIBLE >= 1999 -long double wcstold (const wchar_t *, wchar_t **); -#endif +wint_t _EXFUN(fgetwc, (__FILE *)); +wchar_t *_EXFUN(fgetws, (wchar_t *__restrict, int, __FILE *__restrict)); +wint_t _EXFUN(fputwc, (wchar_t, __FILE *)); +int _EXFUN(fputws, (const wchar_t *__restrict, __FILE *__restrict)); +int _EXFUN (fwide, (__FILE *, int)); +wint_t _EXFUN (getwc, (__FILE *)); +wint_t _EXFUN (getwchar, (void)); +wint_t _EXFUN(putwc, (wchar_t, __FILE *)); +wint_t _EXFUN(putwchar, (wchar_t)); +wint_t _EXFUN (ungetwc, (wint_t wc, __FILE *)); + +wint_t _EXFUN(_fgetwc_r, (struct _reent *, __FILE *)); +wint_t _EXFUN(_fgetwc_unlocked_r, (struct _reent *, __FILE *)); +wchar_t *_EXFUN(_fgetws_r, (struct _reent *, wchar_t *, int, __FILE *)); +wchar_t *_EXFUN(_fgetws_unlocked_r, (struct _reent *, wchar_t *, int, __FILE *)); +wint_t _EXFUN(_fputwc_r, (struct _reent *, wchar_t, __FILE *)); +wint_t _EXFUN(_fputwc_unlocked_r, (struct _reent *, wchar_t, __FILE *)); +int _EXFUN(_fputws_r, (struct _reent *, const wchar_t *, __FILE *)); +int _EXFUN(_fputws_unlocked_r, (struct _reent *, const wchar_t *, __FILE *)); +int _EXFUN (_fwide_r, (struct _reent *, __FILE *, int)); +wint_t _EXFUN (_getwc_r, (struct _reent *, __FILE *)); +wint_t _EXFUN (_getwc_unlocked_r, (struct _reent *, __FILE *)); +wint_t _EXFUN (_getwchar_r, (struct _reent *ptr)); +wint_t _EXFUN (_getwchar_unlocked_r, (struct _reent *ptr)); +wint_t _EXFUN(_putwc_r, (struct _reent *, wchar_t, __FILE *)); +wint_t _EXFUN(_putwc_unlocked_r, (struct _reent *, wchar_t, __FILE *)); +wint_t _EXFUN(_putwchar_r, (struct _reent *, wchar_t)); +wint_t _EXFUN(_putwchar_unlocked_r, (struct _reent *, wchar_t)); +wint_t _EXFUN (_ungetwc_r, (struct _reent *, wint_t wc, __FILE *)); #if __GNU_VISIBLE -long wcstol_l (const wchar_t *__restrict, wchar_t **__restrict, int, locale_t); -long long wcstoll_l (const wchar_t *__restrict, wchar_t **__restrict, int, - locale_t); -unsigned long wcstoul_l (const wchar_t *__restrict, wchar_t **__restrict, int, - locale_t); -unsigned long long wcstoull_l (const wchar_t *__restrict, wchar_t **__restrict, - int, locale_t); -double wcstod_l (const wchar_t *, wchar_t **, locale_t); -float wcstof_l (const wchar_t *, wchar_t **, locale_t); -long double wcstold_l (const wchar_t *, wchar_t **, locale_t); +wint_t _EXFUN(fgetwc_unlocked, (__FILE *)); +wchar_t *_EXFUN(fgetws_unlocked, (wchar_t *__restrict, int, __FILE *__restrict)); +wint_t _EXFUN(fputwc_unlocked, (wchar_t, __FILE *)); +int _EXFUN(fputws_unlocked, (const wchar_t *__restrict, __FILE *__restrict)); +wint_t _EXFUN(getwc_unlocked, (__FILE *)); +wint_t _EXFUN(getwchar_unlocked, (void)); +wint_t _EXFUN(putwc_unlocked, (wchar_t, __FILE *)); +wint_t _EXFUN(putwchar_unlocked, (wchar_t)); #endif -wint_t fgetwc (__FILE *); -wchar_t *fgetws (wchar_t *__restrict, int, __FILE *__restrict); -wint_t fputwc (wchar_t, __FILE *); -int fputws (const wchar_t *__restrict, __FILE *__restrict); -#if __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE >= 500 -int fwide (__FILE *, int); -#endif -wint_t getwc (__FILE *); -wint_t getwchar (void); -wint_t putwc (wchar_t, __FILE *); -wint_t putwchar (wchar_t); -wint_t ungetwc (wint_t wc, __FILE *); - -wint_t _fgetwc_r (struct _reent *, __FILE *); -wint_t _fgetwc_unlocked_r (struct _reent *, __FILE *); -wchar_t *_fgetws_r (struct _reent *, wchar_t *, int, __FILE *); -wchar_t *_fgetws_unlocked_r (struct _reent *, wchar_t *, int, __FILE *); -wint_t _fputwc_r (struct _reent *, wchar_t, __FILE *); -wint_t _fputwc_unlocked_r (struct _reent *, wchar_t, __FILE *); -int _fputws_r (struct _reent *, const wchar_t *, __FILE *); -int _fputws_unlocked_r (struct _reent *, const wchar_t *, __FILE *); -int _fwide_r (struct _reent *, __FILE *, int); -wint_t _getwc_r (struct _reent *, __FILE *); -wint_t _getwc_unlocked_r (struct _reent *, __FILE *); -wint_t _getwchar_r (struct _reent *ptr); -wint_t _getwchar_unlocked_r (struct _reent *ptr); -wint_t _putwc_r (struct _reent *, wchar_t, __FILE *); -wint_t _putwc_unlocked_r (struct _reent *, wchar_t, __FILE *); -wint_t _putwchar_r (struct _reent *, wchar_t); -wint_t _putwchar_unlocked_r (struct _reent *, wchar_t); -wint_t _ungetwc_r (struct _reent *, wint_t wc, __FILE *); - -#if __GNU_VISIBLE -wint_t fgetwc_unlocked (__FILE *); -wchar_t *fgetws_unlocked (wchar_t *__restrict, int, __FILE *__restrict); -wint_t fputwc_unlocked (wchar_t, __FILE *); -int fputws_unlocked (const wchar_t *__restrict, __FILE *__restrict); -wint_t getwc_unlocked (__FILE *); -wint_t getwchar_unlocked (void); -wint_t putwc_unlocked (wchar_t, __FILE *); -wint_t putwchar_unlocked (wchar_t); -#endif - -#if __POSIX_VISIBLE >= 200809 -__FILE *open_wmemstream (wchar_t **, size_t *); -#endif -__FILE *_open_wmemstream_r (struct _reent *, wchar_t **, size_t *); +__FILE *_EXFUN (open_wmemstream, (wchar_t **, size_t *)); +__FILE *_EXFUN (_open_wmemstream_r, (struct _reent *, wchar_t **, size_t *)); #ifndef __VALIST #ifdef __GNUC__ @@ -279,43 +203,39 @@ __FILE *_open_wmemstream_r (struct _reent *, wchar_t **, size_t *); #endif #endif -#if __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE >= 500 -int fwprintf (__FILE *__restrict, const wchar_t *__restrict, ...); -int swprintf (wchar_t *__restrict, size_t, - const wchar_t *__restrict, ...); -int vfwprintf (__FILE *__restrict, const wchar_t *__restrict, - __VALIST); -int vswprintf (wchar_t *__restrict, size_t, - const wchar_t *__restrict, __VALIST); -int vwprintf (const wchar_t *__restrict, __VALIST); -int wprintf (const wchar_t *__restrict, ...); -#endif +int _EXFUN(fwprintf, (__FILE *__restrict, const wchar_t *__restrict, ...)); +int _EXFUN(swprintf, (wchar_t *__restrict, size_t, + const wchar_t *__restrict, ...)); +int _EXFUN(vfwprintf, (__FILE *__restrict, const wchar_t *__restrict, + __VALIST)); +int _EXFUN(vswprintf, (wchar_t *__restrict, size_t, + const wchar_t *__restrict, __VALIST)); +int _EXFUN(vwprintf, (const wchar_t *__restrict, __VALIST)); +int _EXFUN(wprintf, (const wchar_t *__restrict, ...)); -int _fwprintf_r (struct _reent *, __FILE *, const wchar_t *, ...); -int _swprintf_r (struct _reent *, wchar_t *, size_t, const wchar_t *, ...); -int _vfwprintf_r (struct _reent *, __FILE *, const wchar_t *, __VALIST); -int _vswprintf_r (struct _reent *, wchar_t *, size_t, const wchar_t *, __VALIST); -int _vwprintf_r (struct _reent *, const wchar_t *, __VALIST); -int _wprintf_r (struct _reent *, const wchar_t *, ...); +int _EXFUN(_fwprintf_r, (struct _reent *, __FILE *, const wchar_t *, ...)); +int _EXFUN(_swprintf_r, (struct _reent *, wchar_t *, size_t, const wchar_t *, ...)); +int _EXFUN(_vfwprintf_r, (struct _reent *, __FILE *, const wchar_t *, __VALIST)); +int _EXFUN(_vswprintf_r, (struct _reent *, wchar_t *, size_t, const wchar_t *, __VALIST)); +int _EXFUN(_vwprintf_r, (struct _reent *, const wchar_t *, __VALIST)); +int _EXFUN(_wprintf_r, (struct _reent *, const wchar_t *, ...)); -#if __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE >= 500 -int fwscanf (__FILE *__restrict, const wchar_t *__restrict, ...); -int swscanf (const wchar_t *__restrict, - const wchar_t *__restrict, ...); -int vfwscanf (__FILE *__restrict, const wchar_t *__restrict, - __VALIST); -int vswscanf (const wchar_t *__restrict, const wchar_t *__restrict, - __VALIST); -int vwscanf (const wchar_t *__restrict, __VALIST); -int wscanf (const wchar_t *__restrict, ...); -#endif +int _EXFUN(fwscanf, (__FILE *__restrict, const wchar_t *__restrict, ...)); +int _EXFUN(swscanf, (const wchar_t *__restrict, + const wchar_t *__restrict, ...)); +int _EXFUN(vfwscanf, (__FILE *__restrict, const wchar_t *__restrict, + __VALIST)); +int _EXFUN(vswscanf, (const wchar_t *__restrict, const wchar_t *__restrict, + __VALIST)); +int _EXFUN(vwscanf, (const wchar_t *__restrict, __VALIST)); +int _EXFUN(wscanf, (const wchar_t *__restrict, ...)); -int _fwscanf_r (struct _reent *, __FILE *, const wchar_t *, ...); -int _swscanf_r (struct _reent *, const wchar_t *, const wchar_t *, ...); -int _vfwscanf_r (struct _reent *, __FILE *, const wchar_t *, __VALIST); -int _vswscanf_r (struct _reent *, const wchar_t *, const wchar_t *, __VALIST); -int _vwscanf_r (struct _reent *, const wchar_t *, __VALIST); -int _wscanf_r (struct _reent *, const wchar_t *, ...); +int _EXFUN(_fwscanf_r, (struct _reent *, __FILE *, const wchar_t *, ...)); +int _EXFUN(_swscanf_r, (struct _reent *, const wchar_t *, const wchar_t *, ...)); +int _EXFUN(_vfwscanf_r, (struct _reent *, __FILE *, const wchar_t *, __VALIST)); +int _EXFUN(_vswscanf_r, (struct _reent *, const wchar_t *, const wchar_t *, __VALIST)); +int _EXFUN(_vwscanf_r, (struct _reent *, const wchar_t *, __VALIST)); +int _EXFUN(_wscanf_r, (struct _reent *, const wchar_t *, ...)); #define getwc(fp) fgetwc(fp) #define putwc(wc,fp) fputwc((wc), (fp)) @@ -331,8 +251,4 @@ int _wscanf_r (struct _reent *, const wchar_t *, ...); _END_STD_C -#if __SSP_FORTIFY_LEVEL > 0 -#include -#endif - #endif /* _WCHAR_H_ */ diff --git a/libc/xtensa-lx106-elf/include/wctype.h b/libc/xtensa-lx106-elf/include/wctype.h index 9b71090..c72c9de 100644 --- a/libc/xtensa-lx106-elf/include/wctype.h +++ b/libc/xtensa-lx106-elf/include/wctype.h @@ -7,10 +7,6 @@ #define __need_wint_t #include -#if __POSIX_VISIBLE >= 200809 -#include -#endif - #ifndef WEOF # define WEOF ((wint_t)-1) #endif @@ -27,47 +23,24 @@ typedef int wctype_t; typedef int wctrans_t; #endif -int iswalpha (wint_t); -int iswalnum (wint_t); -#if __ISO_C_VISIBLE >= 1999 -int iswblank (wint_t); -#endif -int iswcntrl (wint_t); -int iswctype (wint_t, wctype_t); -int iswdigit (wint_t); -int iswgraph (wint_t); -int iswlower (wint_t); -int iswprint (wint_t); -int iswpunct (wint_t); -int iswspace (wint_t); -int iswupper (wint_t); -int iswxdigit (wint_t); -wint_t towctrans (wint_t, wctrans_t); -wint_t towupper (wint_t); -wint_t towlower (wint_t); -wctrans_t wctrans (const char *); -wctype_t wctype (const char *); - -#if __POSIX_VISIBLE >= 200809 -extern int iswalpha_l (wint_t, locale_t); -extern int iswalnum_l (wint_t, locale_t); -extern int iswblank_l (wint_t, locale_t); -extern int iswcntrl_l (wint_t, locale_t); -extern int iswctype_l (wint_t, wctype_t, locale_t); -extern int iswdigit_l (wint_t, locale_t); -extern int iswgraph_l (wint_t, locale_t); -extern int iswlower_l (wint_t, locale_t); -extern int iswprint_l (wint_t, locale_t); -extern int iswpunct_l (wint_t, locale_t); -extern int iswspace_l (wint_t, locale_t); -extern int iswupper_l (wint_t, locale_t); -extern int iswxdigit_l (wint_t, locale_t); -extern wint_t towctrans_l (wint_t, wctrans_t, locale_t); -extern wint_t towupper_l (wint_t, locale_t); -extern wint_t towlower_l (wint_t, locale_t); -extern wctrans_t wctrans_l (const char *, locale_t); -extern wctype_t wctype_l (const char *, locale_t); -#endif +int _EXFUN(iswalpha, (wint_t)); +int _EXFUN(iswalnum, (wint_t)); +int _EXFUN(iswblank, (wint_t)); +int _EXFUN(iswcntrl, (wint_t)); +int _EXFUN(iswctype, (wint_t, wctype_t)); +int _EXFUN(iswdigit, (wint_t)); +int _EXFUN(iswgraph, (wint_t)); +int _EXFUN(iswlower, (wint_t)); +int _EXFUN(iswprint, (wint_t)); +int _EXFUN(iswpunct, (wint_t)); +int _EXFUN(iswspace, (wint_t)); +int _EXFUN(iswupper, (wint_t)); +int _EXFUN(iswxdigit, (wint_t)); +wint_t _EXFUN(towctrans, (wint_t, wctrans_t)); +wint_t _EXFUN(towupper, (wint_t)); +wint_t _EXFUN(towlower, (wint_t)); +wctrans_t _EXFUN(wctrans, (const char *)); +wctype_t _EXFUN(wctype, (const char *)); _END_STD_C diff --git a/libc/xtensa-lx106-elf/include/xlocale.h b/libc/xtensa-lx106-elf/include/xlocale.h deleted file mode 100644 index f955426..0000000 --- a/libc/xtensa-lx106-elf/include/xlocale.h +++ /dev/null @@ -1,12 +0,0 @@ -/* Definition of opaque POSIX-1.2008 type locale_t for userspace. */ - -#ifndef _XLOCALE_H -#define _XLOCALE_H - -#include -#include - -struct __locale_t; -typedef struct __locale_t *locale_t; - -#endif /* _XLOCALE_H */ diff --git a/libc/xtensa-lx106-elf/lib/crt0.o b/libc/xtensa-lx106-elf/lib/crt0.o index efc11bc..7d17e27 100644 Binary files a/libc/xtensa-lx106-elf/lib/crt0.o and b/libc/xtensa-lx106-elf/lib/crt0.o differ diff --git a/libc/xtensa-lx106-elf/lib/libc.a b/libc/xtensa-lx106-elf/lib/libc.a index 457de25..a43b5ed 100644 Binary files a/libc/xtensa-lx106-elf/lib/libc.a and b/libc/xtensa-lx106-elf/lib/libc.a differ diff --git a/libc/xtensa-lx106-elf/lib/libg.a b/libc/xtensa-lx106-elf/lib/libg.a index 457de25..4d3d50a 100644 Binary files a/libc/xtensa-lx106-elf/lib/libg.a and b/libc/xtensa-lx106-elf/lib/libg.a differ diff --git a/libc/xtensa-lx106-elf/lib/libm.a b/libc/xtensa-lx106-elf/lib/libm.a index e7c0969..2e9a859 100644 Binary files a/libc/xtensa-lx106-elf/lib/libm.a and b/libc/xtensa-lx106-elf/lib/libm.a differ diff --git a/lvgl/component.mk b/lvgl/component.mk deleted file mode 100644 index 2c294e4..0000000 --- a/lvgl/component.mk +++ /dev/null @@ -1,37 +0,0 @@ -# Component makefile for lvgl/lvgl - -# expected anyone using this driver includes it as 'lvgl/lvgl.h' -INC_DIRS += $(lvgl_ROOT) - -# args for passing into compile rule generation -lvgl_SRC_DIR = $(lvgl_ROOT) \ - $(lvgl_ROOT)/lvgl \ - $(lvgl_ROOT)/lvgl/lv_core \ - $(lvgl_ROOT)/lvgl/lv_draw \ - $(lvgl_ROOT)/lvgl/lv_hal \ - $(lvgl_ROOT)/lvgl/lv_misc \ - $(lvgl_ROOT)/lvgl/lv_fonts \ - $(lvgl_ROOT)/lvgl/lv_objx \ - $(lvgl_ROOT)/lvgl/lv_themes \ - $(lvgl_ROOT)/lv_drivers/display \ - $(lvgl_ROOT)/lv_drivers/indev - -LVGL_DIR := $(dir $(lastword $(MAKEFILE_LIST))) - -#EXTRA_CFLAGS += -DLV_CONF_INCLUDE_SIMPLE=1 - -#include $(LVGL_DIR)defaults.mk -# -#fonts_CFLAGS = $(CFLAGS) \ - -DLV_HOR_RES=$(LV_HOR_RES) \ - -DLV_VER_RES=$(LV_VER_RES) \ - -DLV_DPI=$(LV_DPI) \ - -DLV_VDB_SIZE=$(LV_VDB_SIZE) \ - -DLV_VDB_ADR=$(LV_VDB_ADR) \ - -DLV_VDB_DOUBLE=$(LV_VDB_DOUBLE) \ - -DLV_VDB2_ADR=$(LV_VDB2_ADR) \ - -DLV_ANTIALIAS=$(LV_ANTIALIAS) \ - -DLV_FONT_ANTIALIAS=$(LV_FONT_ANTIALIAS) \ - -DLV_REFR_PERIOD=$(LV_REFR_PERIOD) - -$(eval $(call component_compile_rules,lvgl)) diff --git a/lvgl/lv_conf.h b/lvgl/lv_conf.h deleted file mode 100644 index 180c1c9..0000000 --- a/lvgl/lv_conf.h +++ /dev/null @@ -1,3 +0,0 @@ - -/* Use the defaults for everything else */ -#include_next diff --git a/lvgl/lv_drivers b/lvgl/lv_drivers deleted file mode 160000 index 8fe0804..0000000 --- a/lvgl/lv_drivers +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8fe0804ceb875193a37106a2e25d07c106650a86 diff --git a/lvgl/lv_drv_conf.h b/lvgl/lv_drv_conf.h deleted file mode 100644 index b69f377..0000000 --- a/lvgl/lv_drv_conf.h +++ /dev/null @@ -1,3 +0,0 @@ - -/* Use the defaults for everything else */ -#include_next diff --git a/lvgl/lv_examples b/lvgl/lv_examples deleted file mode 160000 index c3afbc9..0000000 --- a/lvgl/lv_examples +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c3afbc9819f5492a7fe7e7e18a37df95fb60f449 diff --git a/lvgl/lvgl b/lvgl/lvgl deleted file mode 160000 index 41695bf..0000000 --- a/lvgl/lvgl +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 41695bf9ac758ae3276424e06308e1bb89c4c019 diff --git a/lwip/component.mk b/lwip/component.mk index ea35d05..1bbe21c 100644 --- a/lwip/component.mk +++ b/lwip/component.mk @@ -1,12 +1,14 @@ # Component makefile for LWIP LWIP_DIR = $(lwip_ROOT)lwip/src/ -INC_DIRS += $(LWIP_DIR)include $(ROOT)lwip/include $(lwip_ROOT)include $(LWIP_DIR)include/compat/posix $(LWIP_DIR)include/ipv4 $(LWIP_DIR)include/ipv4/lwip $(LWIP_DIR)include/lwip +INC_DIRS += $(LWIP_DIR)include $(ROOT)lwip/include $(lwip_ROOT)include $(LWIP_DIR)include/posix $(LWIP_DIR)include/ipv4 $(LWIP_DIR)include/ipv4/lwip $(LWIP_DIR)include/lwip # args for passing into compile rule generation lwip_INC_DIR = # all in INC_DIRS, needed for normal operation -lwip_SRC_DIR = $(lwip_ROOT) $(LWIP_DIR)api $(LWIP_DIR)core $(LWIP_DIR)core/ipv4 $(LWIP_DIR)core/ipv6 $(LWIP_DIR)netif -lwip_SRC_DIR += $(LWIP_DIR)apps/* +lwip_SRC_DIR = $(lwip_ROOT) $(LWIP_DIR)api $(LWIP_DIR)core $(LWIP_DIR)core/ipv4 $(LWIP_DIR)netif + +# LWIP 1.4.1 generates a single warning so we need to disable -Werror when building it +lwip_CFLAGS = $(CFLAGS) -Wno-address $(eval $(call component_compile_rules,lwip)) diff --git a/lwip/esp_interface.c b/lwip/esp_interface.c index 77ad177..6f37b5a 100644 --- a/lwip/esp_interface.c +++ b/lwip/esp_interface.c @@ -37,7 +37,6 @@ * Original Author: Simon Goldschmidt * Modified by Angus Gratton based on work by @kadamski/Espressif via esp-lwip project. */ -#include #include "lwip/opt.h" #include "lwip/def.h" @@ -45,259 +44,77 @@ #include "lwip/pbuf.h" #include #include -#include "lwip/ip.h" -#include "lwip/ethip6.h" -#include "lwip/priv/tcp_priv.h" #include "netif/etharp.h" -#include "sysparam.h" -#include "netif/ppp/pppoe.h" -#include "FreeRTOS.h" -#include "task.h" /* declared in libnet80211.a */ int8_t sdk_ieee80211_output_pbuf(struct netif *ifp, struct pbuf* pb); -/* Define those to better describe your network interface. */ -#define IFNAME0 'e' -#define IFNAME1 'n' - -/** - * In this function, the hardware should be initialized. - * Called from ethernetif_init(). - * - * @param netif the already initialized lwip network interface structure - * for this ethernetif - */ -static void -low_level_init(struct netif *netif) -{ - /* set MAC hardware address length */ - netif->hwaddr_len = ETHARP_HWADDR_LEN; - - /* maximum transfer unit */ - netif->mtu = 1500; - - /* device capabilities */ - /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */ - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6; - - /* Do whatever else is needed to initialize interface. */ -} - -/** - * This function should do the actual transmission of the packet. The packet is - * contained in the pbuf that is passed to the function. This pbuf - * might be chained. - * - * @param netif the lwip network interface structure for this ethernetif - * @param p the MAC packet to send (e.g. IP packet including MAC addresses and type) - * @return ERR_OK if the packet could be sent - * an err_t value if the packet couldn't be sent - * - * @note Returning ERR_MEM here if a DMA queue of your MAC is full can lead to - * strange results. You might consider waiting for space in the DMA queue - * to become available since the stack doesn't retry to send a packet - * dropped because of memory failure (except for the TCP timers). - */ -#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) static err_t low_level_output(struct netif *netif, struct pbuf *p) { - /* - * Note the pbuf reference count is generally one here, but not always. For - * example a buffer that had been queued by etharp_query() would have had - * its reference count increased to two, and the caller will free it on that - * return path. - */ + struct pbuf *q; - /* If the pbuf does not have contiguous data, or there is not enough room - * for the link layer header, or there are multiple pbufs in the chain then - * clone a pbuf to output. */ - if ((p->type_internal & PBUF_TYPE_FLAG_STRUCT_DATA_CONTIGUOUS) == 0 || - (u8_t *)p->payload < (u8_t *)p + SIZEOF_STRUCT_PBUF + PBUF_LINK_ENCAPSULATION_HLEN || - p->next) { - struct pbuf *q = pbuf_clone(PBUF_RAW_TX, PBUF_RAM, p); - if (q == NULL) { - return ERR_MEM; - } - sdk_ieee80211_output_pbuf(netif, q); - /* The sdk will pbuf_ref the pbuf before returning and free it later - * when it has been sent so free the link to it here. */ - pbuf_free(q); - } else { - /* The SDK modifies the eth_hdr, well the first 12 bytes of it at least, - * but otherwise leaves the payload unmodified so it can be reused by - * the caller. The only paths that appear to reuse the pbuf are in - * tcp_out for re-transmission of TCP segments, and these paths check - * that the number of references has returned to one before reusing the - * pbuf. - */ - sdk_ieee80211_output_pbuf(netif, p); - } + for(q = p; q != NULL; q = q->next) { + sdk_ieee80211_output_pbuf(netif, q); + } - LINK_STATS_INC(link.xmit); - return ERR_OK; + LINK_STATS_INC(link.xmit); + + return ERR_OK; } -/** - * Keep account of the number the PP RX pool buffers being used in lwip, - * to help make decision about the number of OOSEQ buffers to maintain etc. - */ -volatile uint32_t pp_rx_pool_usage; - -/* Support for recycling a pbuf from the sdk rx pool, and accounting for the - * number of these used in lwip. */ -void pp_recycle_rx_pbuf(struct pbuf *p) +err_t ethernetif_init(struct netif *netif) { - LWIP_ASSERT("expected esf_buf", p->esf_buf); - sdk_system_pp_recycle_rx_pkt(p->esf_buf); - taskENTER_CRITICAL(); - LWIP_ASSERT("pp_rx_pool_usage underflow", pp_rx_pool_usage > 0); - pp_rx_pool_usage--; - taskEXIT_CRITICAL(); + LWIP_ASSERT("netif != NULL", (netif != NULL)); + +#if LWIP_NETIF_HOSTNAME + /* Initialize interface hostname */ + netif->hostname = "lwip"; +#endif /* LWIP_NETIF_HOSTNAME */ + + /* + * Initialize the snmp variables and counters inside the struct netif. + * The last argument should be replaced with your link speed, in units + * of bits per second. + */ + NETIF_INIT_SNMP(netif, snmp_ifType_ethernet_csmacd, LINK_SPEED_OF_YOUR_NETIF_IN_BPS); + + // don't touch netif->state here, the field is used internally in the ESP SDK layers + netif->name[0] = 'e'; + netif->name[1] = 'n'; + netif->output = etharp_output; + netif->linkoutput = low_level_output; + + /* low_level_init components */ + netif->hwaddr_len = 6; + /* hwaddr seems to be set elsewhere, or (more likely) is set on tx by MAC layer */ + netif->mtu = 1500; + netif->flags = NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP; + + return ERR_OK; } -/* Set to true to copy the rx pbufs on input and free them. The pp rx buffer - * pool is limited so this allows a large number at the expense of memory. - */ - -#define COPY_PP_RX_PBUFS 0 - -#if TCP_QUEUE_OOSEQ - -/* Return the number of ooseq bytes that can be retained given the current - * size 'n'. */ -size_t ooseq_bytes_limit(struct tcp_pcb *pcb) -{ -#if COPY_PP_RX_PBUFS - struct tcp_seg *ooseq = pcb->ooseq; - size_t ooseq_blen = 0; - for (; ooseq != NULL; ooseq = ooseq->next) { - struct pbuf *p = ooseq->p; - ooseq_blen += p->tot_len; - } - - size_t free = xPortGetFreeHeapSize(); - ssize_t target = ((ssize_t)free - 8000) + ooseq_blen; - - if (target < 0) { - target = 0; - } - - return target; -#else - /* The pool is pre-allocated so there is no need to look at the dynamic - * memory usage, just consider the number of them below. */ - return 8000; -#endif -} - -/* Return the number of ooseq pbufs that can be retained given the current - * size 'n'. */ -size_t ooseq_pbufs_limit(struct tcp_pcb *pcb) -{ - struct tcp_seg *ooseq = pcb->ooseq; - size_t ooseq_qlen = 0; - for (; ooseq != NULL; ooseq = ooseq->next) { - struct pbuf *p = ooseq->p; - ooseq_qlen += pbuf_clen(p); - } - -#if COPY_PP_RX_PBUFS - /* More likely memory limited, but set some limit. */ - ssize_t limit = 10; -#else - /* Set a small limit if using the pp rx pool, to avoid exhausting it. */ - ssize_t limit = 2; -#endif - - size_t usage = pp_rx_pool_usage; - ssize_t target = limit - ((ssize_t)usage - ooseq_qlen); - - if (target < 0) { - target = 0; - } - - return target; -} - -#endif /* TCP_QUEUE_OOSEQ */ - -/** - * This function should be called when a packet is ready to be read - * from the interface. It uses the function low_level_input() that - * should handle the actual reception of bytes from the network - * interface. Then the type of the received packet is determined and - * the appropriate input function is called. - * - * @param netif the lwip network interface structure for this ethernetif - */ /* called from ieee80211_deliver_data with new IP frames */ void ethernetif_input(struct netif *netif, struct pbuf *p) { - struct eth_hdr *ethhdr; + struct eth_hdr *ethhdr = p->payload; + /* examine packet payloads ethernet header */ - if (p == NULL) { - return; - } - - if (p->payload == NULL) { - return; - } - - if (netif == NULL) { - return; - } - - ethhdr = p->payload; - - /* Account for the number of rx pool buffers being used. */ - taskENTER_CRITICAL(); - uint32_t usage = pp_rx_pool_usage + 1; - pp_rx_pool_usage = usage; - taskEXIT_CRITICAL(); switch(htons(ethhdr->type)) { /* IP or ARP packet? */ case ETHTYPE_IP: - case ETHTYPE_IPV6: -#if 0 - /* Simulate IP packet loss. */ - if ((random() & 0xff) < 0x10) { - pbuf_free(p); - return; - } -#endif - case ETHTYPE_ARP: -#if PPPOE_SUPPORT - /* PPPoE packet? */ - case ETHTYPE_PPPOEDISC: - case ETHTYPE_PPPOE: -#endif /* PPPOE_SUPPORT */ - { +// case ETHTYPE_IPV6: /* full packet send to tcpip_thread to process */ - -#if COPY_PP_RX_PBUFS - /* Optionally copy the rx pool buffer and free it immediately. This - * helps avoid exhausting the limited rx buffer pool but uses more - * memory. */ - struct pbuf *q = pbuf_clone(PBUF_RAW, PBUF_RAM, p); - pbuf_free(p); - if (q == NULL) { - return; - } - p = q; -#endif - - if (netif->input(p, netif) != ERR_OK) { + if (netif->input(p, netif)!=ERR_OK) + { LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n")); pbuf_free(p); p = NULL; } break; - } default: pbuf_free(p); @@ -305,98 +122,3 @@ void ethernetif_input(struct netif *netif, struct pbuf *p) break; } } - -/* Since the pbuf_type definition has changed in lwip v2 and it is used by the - * sdk when calling pbuf_alloc, the SDK libraries have been modified to rename - * their references to pbuf_alloc to _pbufalloc allowing the pbuf_type to be - * rewritten here. Doing this here keeps this hack out of the lwip code, and - * ensures that this re-writing is only applied to the sdk calls to pbuf_alloc. - * - * The only pbuf types used by the SDK are type 0 for PBUF_RAM when writing - * data, and type 2 for the received data. The receive data path references - * internal buffer objects that need to be freed with custom code so a custom - * pbuf allocation type is used for these. - * - * The pbuf_layer is now also the header offset, but the sdk calls only call - * with a value of 3 which was PBUF_RAW and is now translated to a header - * offset of zero. - */ -struct pbuf *sdk_pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) { - if (type == 0) { - LWIP_ASSERT("Unexpected sdk_pbuf_alloc layer", layer == 3 || layer == 4); - return pbuf_alloc(PBUF_RAW_TX, length, PBUF_RAM); - } else if (type == 2) { - LWIP_ASSERT("Unexpected sdk_pbuf_alloc layer", layer == 3); - return pbuf_alloc_reference(NULL, length, PBUF_ALLOC_FLAG_RX | PBUF_TYPE_ALLOC_SRC_MASK_ESP_RX); - } else { - LWIP_ASSERT("Unexpected pbuf_alloc type", 0); - for (;;); - } -} - -/** - * Should be called at the beginning of the program to set up the - * network interface. It calls the function low_level_init() to do the - * actual setup of the hardware. - * - * This function should be passed as a parameter to netif_add(). - * - * @param netif the lwip network interface structure for this ethernetif - * @return ERR_OK if the loopif is initialized - * ERR_MEM if private data couldn't be allocated - * any other err_t on error - */ -err_t -ethernetif_init(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", (netif != NULL)); - - /* The hwaddr is currently set by sdk_wifi_station_start or - * sdk_wifi_softap_start. */ - -#if LWIP_IPV6 - // Where to do this??? - netif_create_ip6_linklocal_address(netif, 1); - netif->ip6_autoconfig_enabled = 1; - printf("ip6 link local address %s\n", ip6addr_ntoa(netif_ip6_addr(netif, 0))); -#endif - -#if LWIP_NETIF_HOSTNAME - /* Initialize interface hostname */ - char *hostname = NULL; - /* Disabled for now as there were reports of crashes here, sysparam issues */ - /* sysparam_get_string("hostname", &hostname); */ - if (hostname && strlen(hostname) == 0) { - free(hostname); - hostname = NULL; - } - netif->hostname = hostname; -#endif /* LWIP_NETIF_HOSTNAME */ - - /* - * Initialize the snmp variables and counters inside the struct netif. - * The last argument should be replaced with your link speed, in units - * of bits per second. - */ - NETIF_INIT_SNMP(netif, snmp_ifType_ethernet_csmacd, LINK_SPEED_OF_YOUR_NETIF_IN_BPS); - - // don't touch netif->state here, the field is used internally in the ESP SDK layers - netif->name[0] = IFNAME0; - netif->name[1] = IFNAME1; - /* We directly use etharp_output() here to save a function call. - * You can instead declare your own function an call etharp_output() - * from it if you have to do some checks before sending (e.g. if link - * is available...) */ -#if LWIP_IPV4 - netif->output = etharp_output; -#endif /* LWIP_IPV4 */ -#if LWIP_IPV6 - netif->output_ip6 = ethip6_output; -#endif /* LWIP_IPV6 */ - netif->linkoutput = low_level_output; - - /* initialize the hardware */ - low_level_init(netif); - - return ERR_OK; -} diff --git a/lwip/include/arch/cc.h b/lwip/include/arch/cc.h index a88c413..2922a54 100644 --- a/lwip/include/arch/cc.h +++ b/lwip/include/arch/cc.h @@ -32,26 +32,36 @@ #ifndef __ARCH_CC_H__ #define __ARCH_CC_H__ +/* include ESP SDK prototypes as they're used in some LWIP routines */ +#include "espressif/sdk_private.h" + +/* ESP8266 SDK Interface + + The lwip-esp stack is designed to be also compatible with other ESP8266 SDKs, + so we can't use our 'sdk_' prefixes there +*/ +#define system_station_got_ip_set sdk_system_station_got_ip_set +#define system_pp_recycle_rx_pkt sdk_system_pp_recycle_rx_pkt + /* Include some files for defining library routines */ #include /* printf, fflush, FILE */ #include /* abort */ #include #include #include -#include -#include -struct ip4_addr; -struct esf_buf; -void sdk_system_station_got_ip_set(struct ip4_addr *, struct ip4_addr *, struct ip4_addr *); -void sdk_system_pp_recycle_rx_pkt(struct esf_buf *); +#define ERRNO -struct pbuf; -void pp_recycle_rx_pbuf(struct pbuf *); +#define BYTE_ORDER LITTLE_ENDIAN -struct tcp_pcb; -size_t ooseq_bytes_limit(struct tcp_pcb *); -size_t ooseq_pbufs_limit(struct tcp_pcb *); +/** @todo fix some warnings: don't use #pragma if compiling with cygwin gcc */ +#ifndef __GNUC__ + #include + #pragma warning (disable: 4244) /* disable conversion warning (implicit integer promotion!) */ + #pragma warning (disable: 4127) /* conditional expression is constant */ + #pragma warning (disable: 4996) /* 'strncpy' was declared deprecated */ + #pragma warning (disable: 4103) /* structure packing changed by including file */ +#endif /* Define generic types used in lwIP */ typedef uint8_t u8_t; @@ -87,9 +97,14 @@ typedef int sys_prot_t; } while(0) #define LWIP_PLATFORM_ASSERT(x) do { printf("Assertion \"%s\" failed at line %d in %s\n", \ x, __LINE__, __FILE__); abort(); } while(0) + +#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ + printf("Assertion \"%s\" failed at line %d in %s\n", message, __LINE__, __FILE__); \ + handler;} } while(0) #else #define LWIP_PLATFORM_DIAG(x) #define LWIP_PLATFORM_ASSERT(x) +#define LWIP_ERROR(m,e,h) #endif #define LWIP_PLATFORM_BYTESWAP 1 @@ -97,9 +112,4 @@ typedef int sys_prot_t; #define LWIP_PLATFORM_HTONS(_n) ((u16_t)((((_n) & 0xff) << 8) | (((_n) >> 8) & 0xff))) #define LWIP_PLATFORM_HTONL(_n) ((u32_t)( (((_n) & 0xff) << 24) | (((_n) & 0xff00) << 8) | (((_n) >> 8) & 0xff00) | (((_n) >> 24) & 0xff) )) -#define LWIP_RAND() hwrand() - -/* Newlib includes this definition so use it. */ -#define lwip_strnstr(buffer, token, n) strnstr(buffer, token, n) - #endif /* __ARCH_CC_H__ */ diff --git a/lwip/include/arch/sys_arch.h b/lwip/include/arch/sys_arch.h index 00f7957..ac616c9 100644 --- a/lwip/include/arch/sys_arch.h +++ b/lwip/include/arch/sys_arch.h @@ -1,62 +1,58 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels - * - */ -#ifndef __ARCH_SYS_ARCH_H__ -#define __ARCH_SYS_ARCH_H__ - -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" -#include "semphr.h" - -/* MBOX primitives */ - -#define SYS_MBOX_NULL ( ( QueueHandle_t ) NULL ) -#define SYS_SEM_NULL ( ( SemaphoreHandle_t ) NULL ) -#define SYS_DEFAULT_THREAD_STACK_DEPTH configMINIMAL_STACK_SIZE - -typedef SemaphoreHandle_t sys_sem_t; -typedef SemaphoreHandle_t sys_mutex_t; -typedef QueueHandle_t sys_mbox_t; -typedef TaskHandle_t sys_thread_t; - -#define sys_mbox_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) -#define sys_mbox_set_invalid( x ) ( ( *x ) = NULL ) -#define sys_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) -#define sys_sem_set_invalid( x ) ( ( *x ) = NULL ) - -#define sys_jiffies() xTaskGetTickCount() - -void sys_arch_msleep(uint32_t ms); -#define sys_msleep(ms) sys_arch_msleep(ms) - -#endif /* __ARCH_SYS_ARCH_H__ */ - +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __ARCH_SYS_ARCH_H__ +#define __ARCH_SYS_ARCH_H__ + +#include "FreeRTOS.h" +#include "task.h" +#include "queue.h" +#include "semphr.h" + +/* MBOX primitives */ + +#define SYS_MBOX_NULL ( ( xQueueHandle ) NULL ) +#define SYS_SEM_NULL ( ( xSemaphoreHandle ) NULL ) +#define SYS_DEFAULT_THREAD_STACK_DEPTH configMINIMAL_STACK_SIZE + +typedef xSemaphoreHandle sys_sem_t; +typedef xSemaphoreHandle sys_mutex_t; +typedef xQueueHandle sys_mbox_t; +typedef xTaskHandle sys_thread_t; + +#define sys_mbox_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define sys_mbox_set_invalid( x ) ( ( *x ) = NULL ) +#define sys_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) +#define sys_sem_set_invalid( x ) ( ( *x ) = NULL ) + + +#endif /* __ARCH_SYS_ARCH_H__ */ + diff --git a/lwip/include/lwipopts.h b/lwip/include/lwipopts.h index 57c6f05..8f46c7d 100644 --- a/lwip/include/lwipopts.h +++ b/lwip/include/lwipopts.h @@ -32,15 +32,11 @@ #ifndef __LWIPOPTS_H__ #define __LWIPOPTS_H__ -#define ESP_OPEN_RTOS 1 - -/* See tcp.c tcp_alloc(). */ -#ifndef ESP_TIMEWAIT_THRESHOLD +#define LWIP_ESP 1 +#define ESP_RTOS 1 +#define PBUF_RSV_FOR_WLAN 1 +#define EBUF_LWIP 1 #define ESP_TIMEWAIT_THRESHOLD 10000 -#endif - -/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided - * by your system, set this to 0 and include in cc.h */ #define LWIP_TIMEVAL_PRIVATE 0 /* @@ -67,78 +63,6 @@ */ #define SMEMCPY(dst,src,len) memcpy(dst,src,len) -/* - ------------------------------------ - ----------- Core locking ----------- - ------------------------------------ -*/ - -/** - * LWIP_TCPIP_CORE_LOCKING - * Creates a global mutex that is held during TCPIP thread operations. - * Can be locked by client code to perform lwIP operations without changing - * into TCPIP thread using callbacks. See LOCK_TCPIP_CORE() and - * UNLOCK_TCPIP_CORE(). - * Your system should provide mutexes supporting priority inversion to use this. - */ -#ifndef LWIP_TCPIP_CORE_LOCKING -#define LWIP_TCPIP_CORE_LOCKING 1 -#endif - -/** - * LWIP_TCPIP_CORE_LOCKING_INPUT: when LWIP_TCPIP_CORE_LOCKING is enabled, - * this lets tcpip_input() grab the mutex for input packets as well, - * instead of allocating a message and passing it to tcpip_thread. - * - * ATTENTION: this does not work when tcpip_input() is called from - * interrupt context! - */ -#ifndef LWIP_TCPIP_CORE_LOCKING_INPUT -#define LWIP_TCPIP_CORE_LOCKING_INPUT 0 -#endif - -/** - * Macro/function to check whether lwIP's threading/locking - * requirements are satisfied during current function call. - * This macro usually calls a function that is implemented in the OS-dependent - * sys layer and performs the following checks: - * - Not in ISR - * - If @ref LWIP_TCPIP_CORE_LOCKING = 1: TCPIP core lock is held - * - If @ref LWIP_TCPIP_CORE_LOCKING = 0: function is called from TCPIP thread - * @see @ref multithreading - */ -#ifndef LWIP_ASSERT_CORE_LOCKED -void sys_check_core_locking(void); -#define LWIP_ASSERT_CORE_LOCKED() sys_check_core_locking() -#endif - -/** - * Called as first thing in the lwIP TCPIP thread. Can be used in conjunction - * with @ref LWIP_ASSERT_CORE_LOCKED to check core locking. - * @see @ref multithreading - */ -#ifndef LWIP_MARK_TCPIP_THREAD -void sys_mark_tcpip_thread(void); -#define LWIP_MARK_TCPIP_THREAD() sys_mark_tcpip_thread() -#endif - -#if LWIP_TCPIP_CORE_LOCKING - -#ifndef LOCK_TCPIP_CORE -void sys_lock_tcpip_core(void); -#define LOCK_TCPIP_CORE() sys_lock_tcpip_core() -#endif - -#ifndef UNLOCK_TCPIP_CORE -void sys_unlock_tcpip_core(void); -#define UNLOCK_TCPIP_CORE() sys_unlock_tcpip_core() -#endif - -#else -#define LOCK_TCPIP_CORE() -#define UNLOCK_TCPIP_CORE() -#endif /* LWIP_TCPIP_CORE_LOCKING */ - /* ------------------------------------ ---------- Memory options ---------- @@ -152,64 +76,30 @@ void sys_unlock_tcpip_core(void); #define MEM_LIBC_MALLOC 1 /** - * MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. - * Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution - * speed (heap alloc can be much slower than pool alloc) and usage from interrupts - * (especially if your netif driver allocates PBUF_POOL pbufs for received frames - * from interrupt)! - * ATTENTION: Currently, this uses the heap for ALL pools (also for private pools, - * not only for internal pools defined in memp_std.h)! - */ +* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. +* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution +* speed and usage from interrupts! +*/ #define MEMP_MEM_MALLOC 1 /** * MEM_ALIGNMENT: should be set to the alignment of the CPU - * 4 byte alignment -> \#define MEM_ALIGNMENT 4 - * 2 byte alignment -> \#define MEM_ALIGNMENT 2 + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 */ #define MEM_ALIGNMENT 4 -/** - * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable - * amount of bytes before and after each memp element in every pool and fills - * it with a prominent default value. - * MEMP_OVERFLOW_CHECK == 0 no checking - * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed - * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time - * memp_malloc() or memp_free() is called (useful but slow!) - */ -#ifndef MEMP_OVERFLOW_CHECK -#define MEMP_OVERFLOW_CHECK 0 -#endif - /* ------------------------------------------------ ---------- Internal Memory Pool Sizes ---------- ------------------------------------------------ */ -/** - * MEMP_NUM_NETCONN: the number of struct netconns. - * (only needed if you use the sequential API, like api_lib.c) - * This also sets the number of lwip socket descriptors. - */ -#ifndef MEMP_NUM_NETCONN -#define MEMP_NUM_NETCONN 12 -#endif - /* -------------------------------- ---------- ARP options ------- -------------------------------- */ - -/** - * LWIP_ARP==1: Enable ARP functionality. - */ -#ifndef LWIP_ARP -#define LWIP_ARP 1 -#endif - /** * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address * resolution. By default, only the most recent packet is queued per IP address. @@ -217,9 +107,7 @@ void sys_unlock_tcpip_core(void); * startup time. Set this to 1 if you know your application sends more than one * packet in a row to an IP address that is not in the ARP cache. */ -#ifndef ARP_QUEUEING #define ARP_QUEUEING 1 -#endif /* -------------------------------- @@ -231,27 +119,21 @@ void sys_unlock_tcpip_core(void); * this option does not affect outgoing packet sizes, which can be controlled * via IP_FRAG. */ -#ifndef IP_REASSEMBLY -#define IP_REASSEMBLY 1 -#endif +#define IP_REASSEMBLY 0 /** * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note * that this option does not affect incoming packet sizes, which can be * controlled via IP_REASSEMBLY. */ -#ifndef IP_FRAG #define IP_FRAG 1 -#endif /** * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived * in this time, the whole packet is discarded. */ -#ifndef IP_REASS_MAXAGE #define IP_REASS_MAXAGE 3 -#endif /** * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. @@ -259,9 +141,7 @@ void sys_unlock_tcpip_core(void); * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive * packets even if the maximum amount of fragments is enqueued for reassembly! */ -#ifndef IP_REASS_MAX_PBUFS -#define IP_REASS_MAX_PBUFS 2 -#endif +#define IP_REASS_MAX_PBUFS 10 /* ---------------------------------- @@ -283,16 +163,7 @@ void sys_unlock_tcpip_core(void); /** * LWIP_DHCP==1: Enable DHCP module. */ -#ifndef LWIP_DHCP #define LWIP_DHCP 1 -#endif - -/** - * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. - */ -#ifndef DHCP_DOES_ARP_CHECK -#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) -#endif #define LWIP_DHCP_BOOTP_FILE 0 @@ -303,21 +174,14 @@ void sys_unlock_tcpip_core(void); */ /* ---------------------------------- - ----- SNMP MIB2 support ----- + ---------- SNMP options ---------- ---------------------------------- */ /* ---------------------------------- - ----- Multicast/IGMP options ----- + ---------- IGMP options ---------- ---------------------------------- */ -/** - * LWIP_IGMP==1: Turn on IGMP module. - */ -#ifndef LWIP_IGMP -#define LWIP_IGMP 1 -#endif - /* ---------------------------------- ---------- DNS options ----------- @@ -327,25 +191,10 @@ void sys_unlock_tcpip_core(void); * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS * transport. */ -#ifndef LWIP_DNS #define LWIP_DNS 1 -#endif -/** DNS maximum number of entries to maintain locally. */ -#ifndef DNS_TABLE_SIZE #define DNS_TABLE_SIZE 1 -#endif - -/** DNS maximum host name length supported in the name table. */ -#ifndef DNS_MAX_NAME_LENGTH #define DNS_MAX_NAME_LENGTH 128 -#endif - -/** Set this to 1 to enable querying ".local" names via mDNS - * using a One-Shot Multicast DNS Query */ -#ifndef LWIP_DNS_SUPPORT_MDNS_QUERIES -#define LWIP_DNS_SUPPORT_MDNS_QUERIES 1 -#endif /* --------------------------------- @@ -357,131 +206,30 @@ void sys_unlock_tcpip_core(void); ---------- TCP options ---------- --------------------------------- */ +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#define TCP_QUEUE_OOSEQ 0 + +/* + * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all + * events (accept, sent, etc) that happen in the system. + * LWIP_CALLBACK_API==1: The PCB callback function is called directly + * for the event. This is the default. +*/ +#define TCP_MSS 1460 + /** * TCP_MAXRTX: Maximum number of retransmissions of data segments. */ -#ifndef TCP_MAXRTX #define TCP_MAXRTX 6 -#endif + /** * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. */ -#ifndef TCP_SYNMAXRTX #define TCP_SYNMAXRTX 3 -#endif - -/** - * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. - * Define to 0 if your device is low on memory. - */ -#ifndef TCP_QUEUE_OOSEQ -#define TCP_QUEUE_OOSEQ 1 -#endif - -/** - * LWIP_TCP_SACK_OUT==1: TCP will support sending selective acknowledgements (SACKs). - */ -#ifndef LWIP_TCP_SACK_OUT -#define LWIP_TCP_SACK_OUT 1 -#endif - -/** - * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, - * you might want to increase this.) - * For the receive side, this MSS is advertised to the remote side - * when opening a connection. For the transmit size, this MSS sets - * an upper limit on the MSS advertised by the remote host. - */ -#ifndef TCP_MSS -#define TCP_MSS 1460 -#endif - -/** - * TCP_OOSEQ_MAX_BYTES: The default maximum number of bytes queued on ooseq per - * pcb if TCP_OOSEQ_BYTES_LIMIT is not defined. Default is 0 (no limit). - * Only valid for TCP_QUEUE_OOSEQ==1. - */ -#ifndef TCP_OOSEQ_MAX_BYTES -#define TCP_OOSEQ_MAX_BYTES (2 * TCP_MSS) -#endif - -/** - * TCP_OOSEQ_BYTES_LIMIT(ooseq): Return the maximum number of bytes to be queued - * on ooseq per pcb, given the pcb. Only valid for TCP_QUEUE_OOSEQ==1. - */ -#if !defined TCP_OOSEQ_BYTES_LIMIT -#define TCP_OOSEQ_BYTES_LIMIT(ooseq) ooseq_bytes_limit(ooseq) -#endif - -/** - * TCP_OOSEQ_MAX_PBUFS: The default maximum number of pbufs queued on ooseq per - * pcb if TCP_OOSEQ_BYTES_LIMIT is not defined. Default is 0 (no limit). - * Only valid for TCP_QUEUE_OOSEQ==1. - */ -#ifndef TCP_OOSEQ_MAX_PBUFS -#define TCP_OOSEQ_MAX_PBUFS 2 -#endif - -/** - * TCP_OOSEQ_PBUFS_LIMIT(ooseq): Return the maximum number of pbufs to be queued - * on ooseq per pcb, given the pcb. Only valid for TCP_QUEUE_OOSEQ==1. - */ -#ifndef TCP_OOSEQ_PBUFS_LIMIT -#define TCP_OOSEQ_PBUFS_LIMIT(ooseq) ooseq_pbufs_limit(ooseq) -#endif - -/** - * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. - */ -#ifndef TCP_LISTEN_BACKLOG -#define TCP_LISTEN_BACKLOG 1 -#endif - -/** - * The maximum allowed backlog for TCP listen netconns. - * This backlog is used unless another is explicitly specified. - * 0xff is the maximum (u8_t). - */ -#ifndef TCP_DEFAULT_LISTEN_BACKLOG -#define TCP_DEFAULT_LISTEN_BACKLOG 2 -#endif - -/** - * TCP_OVERSIZE: The maximum number of bytes that tcp_write may - * allocate ahead of time in an attempt to create shorter pbuf chains - * for transmission. The meaningful range is 0 to TCP_MSS. Some - * suggested values are: - * - * 0: Disable oversized allocation. Each tcp_write() allocates a new - pbuf (old behaviour). - * 1: Allocate size-aligned pbufs with minimal excess. Use this if your - * scatter-gather DMA requires aligned fragments. - * 128: Limit the pbuf/memory overhead to 20%. - * TCP_MSS: Try to create unfragmented TCP packets. - * TCP_MSS/4: Try to create 4 fragments or less per TCP packet. - */ -#ifndef TCP_OVERSIZE -#define TCP_OVERSIZE TCP_MSS -#endif - -/** - * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. - * The timestamp option is currently only used to help remote hosts, it is not - * really used locally. Therefore, it is only enabled when a TS option is - * received in the initial SYN packet from a remote host. - */ -#ifndef LWIP_TCP_TIMESTAMPS -#define LWIP_TCP_TIMESTAMPS 1 -#endif - -/** - * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an - * explicit window update - */ -#ifndef TCP_WND_UPDATE_THRESHOLD -#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4)) -#endif /* ---------------------------------- @@ -489,65 +237,19 @@ void sys_unlock_tcpip_core(void); ---------------------------------- */ -/** - * PBUF_LINK_ENCAPSULATION_HLEN: the number of bytes that should be allocated - * for an additional encapsulation header before ethernet headers (e.g. 802.11) - * - * 1. LINK_HLEN 14Byte will be remove in WLAN layer - * 2. IEEE80211_HDR_MAX_LEN needs 40 bytes. - * 3. encryption needs exra 4 bytes ahead of actual data payload, and require - * DAddr and SAddr to be 4-byte aligned. - * 4. TRANSPORT and IP are all 20, 4 bytes aligned, nice... - * 5. LCC add 6 bytes more, We don't consider WAPI yet... - * 6. define LWIP_MEM_ALIGN to be 4 Byte aligned, pbuf struct is 16B, Only thing may be - * matter is ether_hdr is not 4B aligned. - * - * So, we need extra (40 + 4 - 14) = 30 and it's happen to be 4-Byte aligned - * - * 1. lwip - * | empty 30B | eth_hdr (14B) | payload ...| - * total: 44B ahead payload - * 2. net80211 - * | max 80211 hdr, 32B | ccmp/tkip iv (8B) | sec rsv(4B) | payload ...| - * total: 40B ahead sec_rsv and 44B ahead payload - * - */ -#define PBUF_LINK_ENCAPSULATION_HLEN 36 - /* ------------------------------------------------ ---------- Network Interfaces options ---------- ------------------------------------------------ */ /** - * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname - * field. - */ -#ifndef LWIP_NETIF_HOSTNAME -#define LWIP_NETIF_HOSTNAME 1 -#endif - -/** - * LWIP_NETIF_API==1: Support netif api (in netifapi.c) - */ -#ifndef LWIP_NETIF_API -#define LWIP_NETIF_API 0 -#endif - -/** - * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface - * changes its up/down status (i.e., due to DHCP IP acquisition) - */ -#ifndef LWIP_NETIF_STATUS_CALLBACK -#define LWIP_NETIF_STATUS_CALLBACK 0 -#endif - -/** - * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP *tries* to put all data + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data * to be sent into one single pbuf. This is for compatibility with DMA-enabled * MACs that do not support scatter-gather. * Beware that this might involve CPU-memcpy before transmitting that would not * be needed without this flag! Use this only if you need to! + * + * @todo: TCP and IP-frag do not work with this, yet: */ #define LWIP_NETIF_TX_SINGLE_PBUF 1 @@ -573,9 +275,7 @@ void sys_unlock_tcpip_core(void); * The stack size value itself is platform-dependent, but is passed to * sys_thread_new() when the thread is created. */ -#ifndef TCPIP_THREAD_STACKSIZE -#define TCPIP_THREAD_STACKSIZE 480 -#endif +#define TCPIP_THREAD_STACKSIZE 512 //not ok:384 /** * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. @@ -623,63 +323,34 @@ void sys_unlock_tcpip_core(void); ---------- Socket options ---------- ------------------------------------ */ - -/** - * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. - * Disable this option if you use a POSIX operating system that uses the same - * names (read, write & close). (only used if you use sockets.c) - */ -#define LWIP_POSIX_SOCKETS_IO_NAMES 0 - -/** - * LWIP_SOCKET_OFFSET==n: Increases the file descriptor number created by LwIP with n. - * This can be useful when there are multiple APIs which create file descriptors. - * When they all start with a different offset and you won't make them overlap you can - * re implement read/write/close/ioctl/fnctl to send the requested action to the right - * library (sharing select will need more work though). - */ -#ifndef LWIP_SOCKET_OFFSET -#define LWIP_SOCKET_OFFSET 3 -#endif - /** * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and * SO_SNDTIMEO processing. */ -#ifndef LWIP_SO_SNDTIMEO #define LWIP_SO_SNDTIMEO 1 -#endif /** * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and * SO_RCVTIMEO processing. */ -#ifndef LWIP_SO_RCVTIMEO #define LWIP_SO_RCVTIMEO 1 -#endif /** * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set * in seconds. (does not require sockets.c, and will affect tcp.c) */ -#ifndef LWIP_TCP_KEEPALIVE #define LWIP_TCP_KEEPALIVE 1 -#endif /** * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. */ -#ifndef LWIP_SO_RCVBUF #define LWIP_SO_RCVBUF 0 -#endif /** * SO_REUSE==1: Enable SO_REUSEADDR option. */ -#ifndef SO_REUSE #define SO_REUSE 1 -#endif /* ---------------------------------------- @@ -687,20 +358,6 @@ void sys_unlock_tcpip_core(void); ---------------------------------------- */ -/** - * LWIP_STATS==1: Enable statistics collection in lwip_stats. - */ -#ifndef LWIP_STATS -#define LWIP_STATS 0 -#endif - -/** - * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. - */ -#ifndef LWIP_STATS_DISPLAY -#define LWIP_STATS_DISPLAY 0 -#endif - /* --------------------------------- ---------- PPP options ---------- @@ -718,12 +375,6 @@ void sys_unlock_tcpip_core(void); ---------- IPv6 options --------------- --------------------------------------- */ -/** - * LWIP_IPV6==1: Enable IPv6 - */ -#ifndef LWIP_IPV6 -#define LWIP_IPV6 0 -#endif /* --------------------------------------- @@ -731,20 +382,6 @@ void sys_unlock_tcpip_core(void); --------------------------------------- */ -/* - --------------------------------------- - ---------- mDNS options --------------- - --------------------------------------- -*/ - -/** - * LWIP_MDNS_RESPONDER_QUEUE_ANNOUNCEMENTS==1: Unsolicited announcements are - * queued and run from a timer callback. - */ -#ifndef LWIP_MDNS_RESPONDER_QUEUE_ANNOUNCEMENTS -#define LWIP_MDNS_RESPONDER_QUEUE_ANNOUNCEMENTS 1 -#endif - /* --------------------------------------- ---------- Debugging options ---------- @@ -754,29 +391,11 @@ void sys_unlock_tcpip_core(void); // Uncomment this line, and set the individual debug options you want, for IP stack debug output //#define LWIP_DEBUG -/** - * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is - * compared against this value. If it is smaller, then debugging - * messages are written. - */ -//#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_WARNING - -/** - * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable - * debug messages of certain types. - */ -#define LWIP_DBG_TYPES_ON LWIP_DBG_ON - /** * ETHARP_DEBUG: Enable debugging in etharp.c. */ #define ETHARP_DEBUG LWIP_DBG_OFF -/** - * NETIF_DEBUG: Enable debugging in netif.c. - */ -#define NETIF_DEBUG LWIP_DBG_OFF - /** * PBUF_DEBUG: Enable debugging in pbuf.c. */ @@ -787,156 +406,50 @@ void sys_unlock_tcpip_core(void); */ #define API_LIB_DEBUG LWIP_DBG_OFF -/** - * API_MSG_DEBUG: Enable debugging in api_msg.c. - */ -#define API_MSG_DEBUG LWIP_DBG_OFF - /** * SOCKETS_DEBUG: Enable debugging in sockets.c. */ #define SOCKETS_DEBUG LWIP_DBG_OFF -/** - * ICMP_DEBUG: Enable debugging in icmp.c. - */ -#define ICMP_DEBUG LWIP_DBG_OFF - -/** - * IGMP_DEBUG: Enable debugging in igmp.c. - */ -#define IGMP_DEBUG LWIP_DBG_OFF - -/** - * INET_DEBUG: Enable debugging in inet.c. - */ -#define INET_DEBUG LWIP_DBG_OFF - /** * IP_DEBUG: Enable debugging for IP. */ #define IP_DEBUG LWIP_DBG_OFF -/** - * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. - */ -#define IP_REASS_DEBUG LWIP_DBG_OFF - -/** - * RAW_DEBUG: Enable debugging in raw.c. - */ -#define RAW_DEBUG LWIP_DBG_OFF - -/** - * MEM_DEBUG: Enable debugging in mem.c. - */ -#define MEM_DEBUG LWIP_DBG_OFF - /** * MEMP_DEBUG: Enable debugging in memp.c. */ #define MEMP_DEBUG LWIP_DBG_OFF -/** - * SYS_DEBUG: Enable debugging in sys.c. - */ -#define SYS_DEBUG LWIP_DBG_OFF - -/** - * TIMERS_DEBUG: Enable debugging in timers.c. - */ -#define TIMERS_DEBUG LWIP_DBG_OFF - -/** - * TCP_DEBUG: Enable debugging for TCP. - */ -#define TCP_DEBUG LWIP_DBG_OFF - /** * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. */ #define TCP_INPUT_DEBUG LWIP_DBG_OFF -/** - * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. - */ -#define TCP_FR_DEBUG LWIP_DBG_OFF - -/** - * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit - * timeout. - */ -#define TCP_RTO_DEBUG LWIP_DBG_OFF - -/** - * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. - */ -#define TCP_CWND_DEBUG LWIP_DBG_OFF - -/** - * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. - */ -#define TCP_WND_DEBUG LWIP_DBG_OFF - /** * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. */ #define TCP_OUTPUT_DEBUG LWIP_DBG_OFF /** - * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. + * UDP_DEBUG: Enable debugging in udp.c. */ -#define TCP_RST_DEBUG LWIP_DBG_OFF +#define UDP_DEBUG LWIP_DBG_OFF /** - * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. + * ICMP_DEBUG: Enable debugging in udp.c. */ -#define TCP_QLEN_DEBUG LWIP_DBG_OFF - -/** - * UDP_DEBUG: Enable debugging in UDP. - */ -#define UDP_DEBUG LWIP_DBG_OFF +#define ICMP_DEBUG LWIP_DBG_OFF /** * TCPIP_DEBUG: Enable debugging in tcpip.c. */ #define TCPIP_DEBUG LWIP_DBG_OFF -/** - * SLIP_DEBUG: Enable debugging in slipif.c. - */ -#define SLIP_DEBUG LWIP_DBG_OFF /** * DHCP_DEBUG: Enable debugging in dhcp.c. */ #define DHCP_DEBUG LWIP_DBG_OFF -/** - * AUTOIP_DEBUG: Enable debugging in autoip.c. - */ -#define AUTOIP_DEBUG LWIP_DBG_OFF - -/** - * DNS_DEBUG: Enable debugging for DNS. - */ -#define DNS_DEBUG LWIP_DBG_OFF - -/** - * IP6_DEBUG: Enable debugging for IPv6. - */ -#define IP6_DEBUG LWIP_DBG_OFF - -/** - * MDNS_DEBUG: Enable debugging for multicast DNS. - */ -#define MDNS_DEBUG LWIP_DBG_OFF - -/* - -------------------------------------------------- - ---------- Performance tracking options ---------- - -------------------------------------------------- -*/ - #endif /* __LWIPOPTS_H__ */ diff --git a/lwip/lwip b/lwip/lwip index d74e9ad..3cf8d51 160000 --- a/lwip/lwip +++ b/lwip/lwip @@ -1 +1 @@ -Subproject commit d74e9ad2f7c9db996fb398cd41bf59ef463ae6fe +Subproject commit 3cf8d514bd76e6ef77e6fa514d0ec6d96da7fd9a diff --git a/lwip/sys_arch.c b/lwip/sys_arch.c index 52f5330..dc26dfd 100644 --- a/lwip/sys_arch.c +++ b/lwip/sys_arch.c @@ -48,148 +48,18 @@ #include "lwip/sys.h" #include "lwip/mem.h" #include "lwip/stats.h" -#include "lwip/tcpip.h" -#if configUSE_16_BIT_TICKS == 1 -#error This port requires 32 bit ticks or timer overflow will fail -#endif +extern bool esp_in_isr; -/*---------------------------------------------------------------------------* - * Routine: sys_sem_new - *---------------------------------------------------------------------------* - * Description: - * Creates and returns a new semaphore. The "ucCount" argument specifies - * the initial state of the semaphore. - * NOTE: Currently this routine only creates counts of 1 or 0 - * Inputs: - * sys_mbox_t mbox -- Handle of mailbox - * u8_t ucCount -- Initial ucCount of semaphore (1 or 0) - * Outputs: - * sys_sem_t -- Created semaphore or 0 if could not create. - *---------------------------------------------------------------------------*/ -err_t sys_sem_new(sys_sem_t *pxSemaphore, u8_t initial_count) +/* Based on the default xInsideISR mechanism to determine + if an ISR is running. + + Doesn't support the possibility that LWIP functions are called from the NMI + handler (none are called from NMI when using current/SDK implementation.) +*/ +static inline bool is_inside_isr() { - LWIP_ASSERT("initial_count invalid (not 0 or 1)", - (initial_count == 0) || (initial_count == 1)); - - *pxSemaphore = xSemaphoreCreateBinary(); - if (*pxSemaphore == NULL) { - SYS_STATS_INC(sem.err); - return ERR_MEM; - } - SYS_STATS_INC_USED(sem); - - if (initial_count == 1) { - BaseType_t ret = xSemaphoreGive(*pxSemaphore); - LWIP_ASSERT("sys_sem_new: initial give failed", ret == pdTRUE); - } - return ERR_OK; -} - -/*---------------------------------------------------------------------------* - * Routine: sys_sem_free - *---------------------------------------------------------------------------* - * Description: - * Deallocates a semaphore - * Inputs: - * sys_sem_t sem -- Semaphore to free - *---------------------------------------------------------------------------*/ -void sys_sem_free(sys_sem_t *pxSemaphore) -{ - SYS_STATS_DEC(sem.used); - vSemaphoreDelete(*pxSemaphore); - *pxSemaphore = NULL; -} - -/*---------------------------------------------------------------------------* - * Routine: sys_sem_signal - *---------------------------------------------------------------------------* - * Description: - * Signals (releases) a semaphore - * Inputs: - * sys_sem_t sem -- Semaphore to signal - *---------------------------------------------------------------------------*/ -void sys_sem_signal(sys_sem_t *pxSemaphore) -{ - xSemaphoreGive(*pxSemaphore); -} - -/*---------------------------------------------------------------------------* - * Routine: sys_arch_sem_wait - *---------------------------------------------------------------------------* - * Description: - - * Blocks the thread while waiting for the semaphore to be signaled. If the - * "timeout" argument is non-zero, the thread should only be blocked for - * the specified time (measured in milliseconds). If the "timeout" argument - * is zero, the thread should be blocked until the semaphore is signalled. - * - * The return value is SYS_ARCH_TIMEOUT if the semaphore wasn't signaled - * within the specified time or any other value if it was signaled (with or - * without waiting). - * - * Notice that lwIP implements a function with a similar name, - * sys_sem_wait(), that uses the sys_arch_sem_wait() function. - * Inputs: - * sys_sem_t sem -- Semaphore to wait on - * u32_t timeout -- Number of milliseconds until timeout - * Outputs: - * u32_t -- SYS_ARCH_TIMEOUT on timeout, any other value on success - *---------------------------------------------------------------------------*/ -u32_t sys_arch_sem_wait(sys_sem_t *pxSemaphore, u32_t timeout_ms) -{ - if (timeout_ms == 0) { - /* Wait infinite */ - while (xSemaphoreTake(*pxSemaphore, portMAX_DELAY) != pdTRUE); - return 0; - } - - if (xSemaphoreTake(*pxSemaphore, timeout_ms / portTICK_PERIOD_MS) == pdTRUE) { - return 0; - } else { - return SYS_ARCH_TIMEOUT; - } -} - -/** Create a new mutex - * @param mutex pointer to the mutex to create - * @return a new mutex */ -err_t sys_mutex_new(sys_mutex_t *pxMutex) -{ - *pxMutex = xSemaphoreCreateRecursiveMutex(); - - if (*pxMutex == NULL) { - SYS_STATS_INC(mutex.err); - return ERR_MEM; - } - - SYS_STATS_INC_USED(mutex); - return ERR_OK; -} - -/** Lock a mutex - * @param mutex the mutex to lock */ -void sys_mutex_lock(sys_mutex_t *pxMutex) -{ - while (xSemaphoreTakeRecursive(*pxMutex, portMAX_DELAY) != pdTRUE); -} - -/** Unlock a mutex - * @param mutex the mutex to unlock */ -void sys_mutex_unlock(sys_mutex_t *pxMutex) -{ - BaseType_t ret = xSemaphoreGiveRecursive(*pxMutex); - LWIP_ASSERT("failed to give the mutex", ret == pdTRUE); -} - - -/** Delete a semaphore - * @param mutex the mutex to delete */ -void sys_mutex_free(sys_mutex_t *pxMutex) -{ - SYS_STATS_DEC(mutex.used); - vSemaphoreDelete(*pxMutex); - *pxMutex = NULL; + return esp_in_isr; } /*---------------------------------------------------------------------------* @@ -202,21 +72,22 @@ void sys_mutex_free(sys_mutex_t *pxMutex) * Outputs: * sys_mbox_t -- Handle to new mailbox *---------------------------------------------------------------------------*/ -err_t sys_mbox_new(sys_mbox_t *mbox, int size) +err_t sys_mbox_new( sys_mbox_t *pxMailBox, int iSize ) { - LWIP_ASSERT("size > 0", size > 0); + err_t xReturn = ERR_MEM; - *mbox = xQueueCreate(size, sizeof(void *)); + *pxMailBox = xQueueCreate( iSize, sizeof( void * ) ); - if (*mbox == NULL) { - SYS_STATS_INC(mbox.err); - return ERR_MEM; + if( *pxMailBox != NULL ) + { + xReturn = ERR_OK; + SYS_STATS_INC_USED( mbox ); } - SYS_STATS_INC_USED(mbox); - return ERR_OK; + return xReturn; } + /*---------------------------------------------------------------------------* * Routine: sys_mbox_free *---------------------------------------------------------------------------* @@ -229,21 +100,25 @@ err_t sys_mbox_new(sys_mbox_t *mbox, int size) * Outputs: * sys_mbox_t -- Handle to new mailbox *---------------------------------------------------------------------------*/ -void sys_mbox_free(sys_mbox_t *mbox) +void sys_mbox_free( sys_mbox_t *pxMailBox ) { - UBaseType_t msgs_waiting; +unsigned long ulMessagesWaiting; - msgs_waiting = uxQueueMessagesWaiting(*mbox); - configASSERT(msgs_waiting == 0); + ulMessagesWaiting = uxQueueMessagesWaiting( *pxMailBox ); + configASSERT( ( ulMessagesWaiting == 0 ) ); -#if SYS_STATS - if (msgs_waiting != 0) { - SYS_STATS_INC(mbox.err); + #if SYS_STATS + { + if( ulMessagesWaiting != 0UL ) + { + SYS_STATS_INC( mbox.err ); + } + + SYS_STATS_DEC( mbox.used ); } - SYS_STATS_DEC(mbox.used); -#endif /* SYS_STATS */ + #endif /* SYS_STATS */ - vQueueDelete(*mbox); + vQueueDelete( *pxMailBox ); } /*---------------------------------------------------------------------------* @@ -255,9 +130,9 @@ void sys_mbox_free(sys_mbox_t *mbox) * sys_mbox_t mbox -- Handle of mailbox * void *data -- Pointer to data to post *---------------------------------------------------------------------------*/ -void sys_mbox_post(sys_mbox_t *mbox, void *msg) +void sys_mbox_post( sys_mbox_t *pxMailBox, void *pxMessageToPost ) { - while (xQueueSendToBack(*mbox, &msg, portMAX_DELAY) != pdTRUE); + while( xQueueSendToBack( *pxMailBox, &pxMessageToPost, portMAX_DELAY ) != pdTRUE ); } /*---------------------------------------------------------------------------* @@ -273,21 +148,32 @@ void sys_mbox_post(sys_mbox_t *mbox, void *msg) * err_t -- ERR_OK if message posted, else ERR_MEM * if not. *---------------------------------------------------------------------------*/ -err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) +err_t sys_mbox_trypost( sys_mbox_t *pxMailBox, void *pxMessageToPost ) { - if (xQueueSendToBack(*mbox, &msg, 0) == pdTRUE) { - return ERR_OK; +err_t xReturn; +portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; + + if( is_inside_isr() != pdFALSE ) + { + xReturn = xQueueSendFromISR( *pxMailBox, &pxMessageToPost, &xHigherPriorityTaskWoken ); + } + else + { + xReturn = xQueueSend( *pxMailBox, &pxMessageToPost, ( portTickType ) 0 ); } - /* The queue was already full. */ - SYS_STATS_INC(mbox.err); - return ERR_MEM; -} + if( xReturn == pdPASS ) + { + xReturn = ERR_OK; + } + else + { + /* The queue was already full. */ + xReturn = ERR_MEM; + SYS_STATS_INC( mbox.err ); + } -err_t sys_mbox_trypost_fromisr(sys_mbox_t *q, void *msg) -{ - /* Quietly fail - not implemented. */ - return ERR_MEM; + return xReturn; } /*---------------------------------------------------------------------------* @@ -302,8 +188,8 @@ err_t sys_mbox_trypost_fromisr(sys_mbox_t *q, void *msg) * should be dropped. * * The return values are the same as for the sys_arch_sem_wait() function: - * SYS_ARCH_TIMEOUT if there was a timeout, any other value if a messages - * is received. + * Number of milliseconds spent waiting or SYS_ARCH_TIMEOUT if there was a + * timeout. * * Note that a function with a similar name, sys_mbox_fetch(), is * implemented by lwIP. @@ -312,28 +198,55 @@ err_t sys_mbox_trypost_fromisr(sys_mbox_t *q, void *msg) * void **msg -- Pointer to pointer to msg received * u32_t timeout -- Number of milliseconds until timeout * Outputs: - * u32_t -- SYS_ARCH_TIMEOUT on timeout, any other value if a message has been received + * u32_t -- SYS_ARCH_TIMEOUT if timeout, else number + * of milliseconds until received. *---------------------------------------------------------------------------*/ -u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) +u32_t sys_arch_mbox_fetch( sys_mbox_t *pxMailBox, void **ppvBuffer, u32_t ulTimeOut ) { - void *msg_dummy; +void *pvDummy; +portTickType xStartTime, xEndTime, xElapsed; +unsigned long ulReturn; - if (msg == NULL) { - msg = &msg_dummy; + xStartTime = xTaskGetTickCount(); + + if( NULL == ppvBuffer ) + { + ppvBuffer = &pvDummy; } - if (timeout == 0) { - while (xQueueReceive(*mbox, &(*msg), portMAX_DELAY) != pdTRUE); - return 0; + if( ulTimeOut != 0UL ) + { + configASSERT( is_inside_isr() == ( portBASE_TYPE ) 0 ); + + if( pdTRUE == xQueueReceive( *pxMailBox, &( *ppvBuffer ), ulTimeOut/ portTICK_RATE_MS ) ) + { + xEndTime = xTaskGetTickCount(); + xElapsed = ( xEndTime - xStartTime ) * portTICK_RATE_MS; + + ulReturn = xElapsed; + } + else + { + /* Timed out. */ + *ppvBuffer = NULL; + ulReturn = SYS_ARCH_TIMEOUT; + } + } + else + { + while( pdTRUE != xQueueReceive( *pxMailBox, &( *ppvBuffer ), portMAX_DELAY ) ); + xEndTime = xTaskGetTickCount(); + xElapsed = ( xEndTime - xStartTime ) * portTICK_RATE_MS; + + if( xElapsed == 0UL ) + { + xElapsed = 1UL; + } + + ulReturn = xElapsed; } - if (xQueueReceive(*mbox, &(*msg), timeout / portTICK_PERIOD_MS) == pdTRUE) { - return 0; - } - - /* Timed out. */ - *msg = NULL; - return SYS_ARCH_TIMEOUT; + return ulReturn; } /*---------------------------------------------------------------------------* @@ -350,20 +263,216 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) * u32_t -- SYS_MBOX_EMPTY if no messages. Otherwise, * return ERR_OK. *---------------------------------------------------------------------------*/ -u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg) +u32_t sys_arch_mbox_tryfetch( sys_mbox_t *pxMailBox, void **ppvBuffer ) { - void *msg_dummy; +void *pvDummy; +unsigned long ulReturn; +long lResult; +portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; - if (msg == NULL) { - msg = &msg_dummy; + if( ppvBuffer== NULL ) + { + ppvBuffer = &pvDummy; } - if (xQueueReceive(*mbox, &(*msg), 0) == pdTRUE) { - return ERR_OK; + if( is_inside_isr() != pdFALSE ) + { + lResult = xQueueReceiveFromISR( *pxMailBox, &( *ppvBuffer ), &xHigherPriorityTaskWoken ); + } + else + { + lResult = xQueueReceive( *pxMailBox, &( *ppvBuffer ), 0UL ); } - *msg = NULL; - return SYS_MBOX_EMPTY; + if( lResult == pdPASS ) + { + ulReturn = ERR_OK; + } + else + { + ulReturn = SYS_MBOX_EMPTY; + } + + return ulReturn; +} + +/*---------------------------------------------------------------------------* + * Routine: sys_sem_new + *---------------------------------------------------------------------------* + * Description: + * Creates and returns a new semaphore. The "ucCount" argument specifies + * the initial state of the semaphore. + * NOTE: Currently this routine only creates counts of 1 or 0 + * Inputs: + * sys_mbox_t mbox -- Handle of mailbox + * u8_t ucCount -- Initial ucCount of semaphore (1 or 0) + * Outputs: + * sys_sem_t -- Created semaphore or 0 if could not create. + *---------------------------------------------------------------------------*/ +err_t sys_sem_new( sys_sem_t *pxSemaphore, u8_t ucCount ) +{ +err_t xReturn = ERR_MEM; + + vSemaphoreCreateBinary( ( *pxSemaphore ) ); + + if( *pxSemaphore != NULL ) + { + if( ucCount == 0U ) + { + xSemaphoreTake( *pxSemaphore, 1UL ); + } + + xReturn = ERR_OK; + SYS_STATS_INC_USED( sem ); + } + else + { + SYS_STATS_INC( sem.err ); + } + + return xReturn; +} + +/*---------------------------------------------------------------------------* + * Routine: sys_arch_sem_wait + *---------------------------------------------------------------------------* + * Description: + * Blocks the thread while waiting for the semaphore to be + * signaled. If the "timeout" argument is non-zero, the thread should + * only be blocked for the specified time (measured in + * milliseconds). + * + * If the timeout argument is non-zero, the return value is the number of + * milliseconds spent waiting for the semaphore to be signaled. If the + * semaphore wasn't signaled within the specified time, the return value is + * SYS_ARCH_TIMEOUT. If the thread didn't have to wait for the semaphore + * (i.e., it was already signaled), the function may return zero. + * + * Notice that lwIP implements a function with a similar name, + * sys_sem_wait(), that uses the sys_arch_sem_wait() function. + * Inputs: + * sys_sem_t sem -- Semaphore to wait on + * u32_t timeout -- Number of milliseconds until timeout + * Outputs: + * u32_t -- Time elapsed or SYS_ARCH_TIMEOUT. + *---------------------------------------------------------------------------*/ +u32_t sys_arch_sem_wait( sys_sem_t *pxSemaphore, u32_t ulTimeout ) +{ +portTickType xStartTime, xEndTime, xElapsed; +unsigned long ulReturn; + + xStartTime = xTaskGetTickCount(); + + if( ulTimeout != 0UL ) + { + if( xSemaphoreTake( *pxSemaphore, ulTimeout / portTICK_RATE_MS ) == pdTRUE ) + { + xEndTime = xTaskGetTickCount(); + xElapsed = (xEndTime - xStartTime) * portTICK_RATE_MS; + ulReturn = xElapsed; + } + else + { + ulReturn = SYS_ARCH_TIMEOUT; + } + } + else + { + while( xSemaphoreTake( *pxSemaphore, portMAX_DELAY ) != pdTRUE ); + xEndTime = xTaskGetTickCount(); + xElapsed = ( xEndTime - xStartTime ) * portTICK_RATE_MS; + + if( xElapsed == 0UL ) + { + xElapsed = 1UL; + } + + ulReturn = xElapsed; + } + + return ulReturn; +} + +/** Create a new mutex + * @param mutex pointer to the mutex to create + * @return a new mutex */ +err_t sys_mutex_new( sys_mutex_t *pxMutex ) +{ +err_t xReturn = ERR_MEM; + + *pxMutex = xSemaphoreCreateMutex(); + + if( *pxMutex != NULL ) + { + xReturn = ERR_OK; + SYS_STATS_INC_USED( mutex ); + } + else + { + SYS_STATS_INC( mutex.err ); + } + + return xReturn; +} + +/** Lock a mutex + * @param mutex the mutex to lock */ +void sys_mutex_lock( sys_mutex_t *pxMutex ) +{ + while( xSemaphoreTake( *pxMutex, portMAX_DELAY ) != pdPASS ); +} + +/** Unlock a mutex + * @param mutex the mutex to unlock */ +void sys_mutex_unlock(sys_mutex_t *pxMutex ) +{ + xSemaphoreGive( *pxMutex ); +} + + +/** Delete a semaphore + * @param mutex the mutex to delete */ +void sys_mutex_free( sys_mutex_t *pxMutex ) +{ + SYS_STATS_DEC( mutex.used ); + vQueueDelete( *pxMutex ); +} + + +/*---------------------------------------------------------------------------* + * Routine: sys_sem_signal + *---------------------------------------------------------------------------* + * Description: + * Signals (releases) a semaphore + * Inputs: + * sys_sem_t sem -- Semaphore to signal + *---------------------------------------------------------------------------*/ +void sys_sem_signal( sys_sem_t *pxSemaphore ) +{ +portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; + + if( is_inside_isr() != pdFALSE ) + { + xSemaphoreGiveFromISR( *pxSemaphore, &xHigherPriorityTaskWoken ); + } + else + { + xSemaphoreGive( *pxSemaphore ); + } +} + +/*---------------------------------------------------------------------------* + * Routine: sys_sem_free + *---------------------------------------------------------------------------* + * Description: + * Deallocates a semaphore + * Inputs: + * sys_sem_t sem -- Semaphore to free + *---------------------------------------------------------------------------*/ +void sys_sem_free( sys_sem_t *pxSemaphore ) +{ + SYS_STATS_DEC(sem.used); + vQueueDelete( *pxSemaphore ); } /*---------------------------------------------------------------------------* @@ -378,13 +487,7 @@ void sys_init(void) u32_t sys_now(void) { - return xTaskGetTickCount() * portTICK_PERIOD_MS; -} - -void sys_arch_msleep(u32_t delay_ms) -{ - TickType_t delay_ticks = delay_ms / portTICK_PERIOD_MS; - vTaskDelay(delay_ticks); + return xTaskGetTickCount() * portTICK_RATE_MS; } /*---------------------------------------------------------------------------* @@ -405,19 +508,24 @@ void sys_arch_msleep(u32_t delay_ms) * Outputs: * sys_thread_t -- Pointer to per-thread timeouts. *---------------------------------------------------------------------------*/ -sys_thread_t sys_thread_new(const char *pcName, void(*pxThread)(void *pvParameters), void *pvArg, int stacksize, int iPriority) +sys_thread_t sys_thread_new( const char *pcName, void( *pxThread )( void *pvParameters ), void *pvArg, int iStackSize, int iPriority ) { - TaskHandle_t xCreatedTask; - BaseType_t xResult; +xTaskHandle xCreatedTask; +portBASE_TYPE xResult; +sys_thread_t xReturn; - xResult = xTaskCreate(pxThread, pcName, stacksize, pvArg, iPriority, &xCreatedTask); - LWIP_ASSERT("task creation failed", xResult == pdPASS); + xResult = xTaskCreate( pxThread, ( signed char * ) pcName, iStackSize, pvArg, iPriority, &xCreatedTask ); - if (xResult == pdPASS) { - return xCreatedTask; + if( xResult == pdPASS ) + { + xReturn = xCreatedTask; + } + else + { + xReturn = NULL; } - return NULL; + return xReturn; } /*---------------------------------------------------------------------------* @@ -439,15 +547,13 @@ sys_thread_t sys_thread_new(const char *pcName, void(*pxThread)(void *pvParamete * Outputs: * sys_prot_t -- Previous protection level (not used here) *---------------------------------------------------------------------------*/ -static sys_prot_t critical_nesting; -sys_prot_t sys_arch_protect(void) +sys_prot_t sys_arch_protect( void ) { - sys_prot_t prev; - taskENTER_CRITICAL(); - prev = critical_nesting; - critical_nesting++; - return prev; - //return (sys_prot_t)1; + if( is_inside_isr() == pdFALSE ) + { + taskENTER_CRITICAL(); + } + return ( sys_prot_t ) 1; } /*---------------------------------------------------------------------------* @@ -461,70 +567,26 @@ sys_prot_t sys_arch_protect(void) * Inputs: * sys_prot_t -- Previous protection level (not used here) *---------------------------------------------------------------------------*/ -void sys_arch_unprotect(sys_prot_t pval) +void sys_arch_unprotect( sys_prot_t xValue ) { - //(void) xValue; - critical_nesting--; - //LWIP_ASSERT("unexpected critical_nestion", pval == critical_nesting); - if (pval != critical_nesting) { - printf("lwip nesting %d\n", critical_nesting); - } - taskEXIT_CRITICAL(); -} - -#if LWIP_TCPIP_CORE_LOCKING - -/** Flag the core lock held. A counter for recusive locks. */ -u8_t lwip_core_lock_count; -TaskHandle_t lwip_core_lock_holder_thread; -void sys_lock_tcpip_core(void) -{ - sys_mutex_lock(&lock_tcpip_core); - if (lwip_core_lock_count == 0) { - lwip_core_lock_holder_thread = xTaskGetCurrentTaskHandle(); - } - lwip_core_lock_count++; -} - -void sys_unlock_tcpip_core(void) -{ - lwip_core_lock_count--; - if (lwip_core_lock_count == 0) { - lwip_core_lock_holder_thread = 0; - } - sys_mutex_unlock(&lock_tcpip_core); -} - -#endif /* LWIP_TCPIP_CORE_LOCKING */ - -TaskHandle_t lwip_tcpip_thread; -void sys_mark_tcpip_thread(void) -{ - lwip_tcpip_thread = xTaskGetCurrentTaskHandle(); -} - -void sys_check_core_locking(void) -{ - /* Embedded systems should check we are NOT in an interrupt context here */ - - if (lwip_tcpip_thread != 0) { - TaskHandle_t current_thread = xTaskGetCurrentTaskHandle(); - -#if LWIP_TCPIP_CORE_LOCKING - if (current_thread != lwip_core_lock_holder_thread || - lwip_core_lock_count == 0) { - printf("Function called without core lock\n"); - } - //LWIP_ASSERT("Function called without core lock", current_thread == lwip_core_lock_holder_thread && lwip_core_lock_count > 0); -#else - if (current_thread != lwip_tcpip_thread) { - printf("Function called from wrong thread\n"); - } - //LWIP_ASSERT("Function called from wrong thread", current_thread == lwip_tcpip_thread); -#endif /* LWIP_TCPIP_CORE_LOCKING */ + (void) xValue; + if( is_inside_isr() == pdFALSE ) + { + taskEXIT_CRITICAL(); } } +/* + * Prints an assertion messages and aborts execution. + */ +void sys_assert( const char *pcMessage ) +{ + (void) pcMessage; + + for (;;) + { + } +} /*-------------------------------------------------------------------------* * End of File: sys_arch.c *-------------------------------------------------------------------------*/ diff --git a/open_esplibs/README.md b/open_esplibs/README.md deleted file mode 100644 index ba11452..0000000 --- a/open_esplibs/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Open Espressif Libs - -These are functional recreations of the MIT licensed binary Espressif SDK libraries found in `lib`. They keep the same functionality as the SDK libraries (possibly with bugfixes or other minor tweaks), but are compiled from source. - -Most of the reverse engineering work so far has been by Alex Stewart (@foogod). - -See http://esp8266-re.foogod.com/wiki/ for more technical details of SDK library internals. - -# Disabling - -The open ESP libs are compiled in by default, and they automatically replace any binary SDK symbols (functions, etc.) with the same names. - -To compile using the binary SDK libraries only, override the COMPONENTS list in parameters.mk to remove the open_esplibs component, or add -DOPEN_ESPLIBS=0 to CPPFLAGS. - -To selectively replace some functionality with binary SDK functionality for debugging, edit the header file open_esplibs/include/open_esplibs.h diff --git a/open_esplibs/component.mk b/open_esplibs/component.mk deleted file mode 100644 index e63e979..0000000 --- a/open_esplibs/component.mk +++ /dev/null @@ -1,51 +0,0 @@ -# Component makefile for "open Espressif libs" - -INC_DIRS += $(open_esplibs_ROOT)include - -$(eval $(call component_compile_rules,open_esplibs)) - -# args for passing into compile rule generation -open_esplibs_libmain_ROOT = $(open_esplibs_ROOT)libmain -open_esplibs_libmain_INC_DIR = -open_esplibs_libmain_SRC_DIR = $(open_esplibs_libmain_ROOT) -open_esplibs_libmain_EXTRA_SRC_FILES = -open_esplibs_libmain_CFLAGS = $(CFLAGS) -open_esplibs_libmain_WHOLE_ARCHIVE = yes - -$(eval $(call component_compile_rules,open_esplibs_libmain)) - -open_esplibs_libnet80211_ROOT = $(open_esplibs_ROOT)libnet80211 -open_esplibs_libnet80211_INC_DIR = -open_esplibs_libnet80211_SRC_DIR = $(open_esplibs_libnet80211_ROOT) -open_esplibs_libnet80211_EXTRA_SRC_FILES = -open_esplibs_libnet80211_CFLAGS = $(CFLAGS) -open_esplibs_libnet80211_WHOLE_ARCHIVE = yes - -$(eval $(call component_compile_rules,open_esplibs_libnet80211)) - -open_esplibs_libphy_ROOT = $(open_esplibs_ROOT)libphy -open_esplibs_libphy_INC_DIR = -open_esplibs_libphy_SRC_DIR = $(open_esplibs_libphy_ROOT) -open_esplibs_libphy_EXTRA_SRC_FILES = -open_esplibs_libphy_CFLAGS = $(CFLAGS) -open_esplibs_libphy_WHOLE_ARCHIVE = yes - -$(eval $(call component_compile_rules,open_esplibs_libphy)) - -open_esplibs_libpp_ROOT = $(open_esplibs_ROOT)libpp -open_esplibs_libpp_INC_DIR = -open_esplibs_libpp_SRC_DIR = $(open_esplibs_libpp_ROOT) -open_esplibs_libpp_EXTRA_SRC_FILES = -open_esplibs_libpp_CFLAGS = $(CFLAGS) -open_esplibs_libpp_WHOLE_ARCHIVE = yes - -$(eval $(call component_compile_rules,open_esplibs_libpp)) - -open_esplibs_libwpa_ROOT = $(open_esplibs_ROOT)libwpa -open_esplibs_libwpa_INC_DIR = -open_esplibs_libwpa_SRC_DIR = $(open_esplibs_libwpa_ROOT) -open_esplibs_libwpa_EXTRA_SRC_FILES = -open_esplibs_libwpa_CFLAGS = $(CFLAGS) -open_esplibs_libwpa_WHOLE_ARCHIVE = yes - -$(eval $(call component_compile_rules,open_esplibs_libwpa)) diff --git a/open_esplibs/include/esplibs/libmain.h b/open_esplibs/include/esplibs/libmain.h deleted file mode 100644 index 593092c..0000000 --- a/open_esplibs/include/esplibs/libmain.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Internal function declarations for Espressif SDK libmain functions. - - These are internal-facing declarations, it is not recommended to include these headers in your program. - (look at the headers in include/espressif/ instead and use these whenever possible.) - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE. -*/ - -#ifndef _ESPLIBS_LIBMAIN_H -#define _ESPLIBS_LIBMAIN_H - -#include "sdk_internal.h" - -// app_main.o -extern uint8_t sdk_user_init_flag; -extern struct sdk_info_st sdk_info; - -// ets_timer.o -extern uint32_t sdk_debug_timer; -extern void *sdk_debug_timerfn; -void sdk_ets_timer_init(void); - -// misc.c -int sdk_os_get_cpu_frequency(void); -/* Don't call this function from user code, it doesn't change the CPU - * speed. Call sdk_system_update_cpu_freq() instead. */ -void sdk_os_update_cpu_frequency(int freq); - -// os_cpu_a.o - -// spi_flash.o -extern sdk_flashchip_t sdk_flashchip; -sdk_SpiFlashOpResult sdk_SPIRead(uint32_t src_addr, uint32_t *des_addr, uint32_t size); -sdk_SpiFlashOpResult sdk_SPIWrite(uint32_t des_addr, uint32_t *src_addr, uint32_t size); - -// timers.o -void sdk_os_timer_setfn(ETSTimer *ptimer, ETSTimerFunc *pfunction, void *parg); -void sdk_os_timer_arm(ETSTimer *ptimer, uint32_t milliseconds, bool repeat_flag); -void sdk_os_timer_disarm(ETSTimer *ptimer); - -// uart.o -void sdk_uart_div_modify(uint32_t uart_no, uint32_t new_divisor); - -// user_interface.o -extern enum sdk_dhcp_status sdk_dhcpc_flag; // uint8_t in the sdk -extern bool sdk_cpu_overclock; -extern struct sdk_rst_info sdk_rst_if; -extern sdk_wifi_promiscuous_cb_t sdk_promiscuous_cb; -void sdk_system_restart_in_nmi(void); -int sdk_system_get_test_result(void); -void sdk_wifi_param_save_protect(struct sdk_g_ic_saved_st *data); -bool sdk_system_overclock(void); -bool sdk_system_restoreclock(void); -uint32_t sdk_system_relative_time(uint32_t reltime); -uint32_t sdk_system_get_checksum(uint8_t *, uint32_t); -void sdk_wifi_softap_cacl_mac(uint8_t *, uint8_t *); -void sdk_wifi_softap_set_default_ssid(void); -bool sdk_wifi_softap_set_station_info(const uint8_t *hwaddr, ip4_addr_t *); - -// xtensa_context.o - -#endif /* _ESPLIBS_LIBMAIN_H */ - diff --git a/open_esplibs/include/esplibs/libnet80211.h b/open_esplibs/include/esplibs/libnet80211.h deleted file mode 100644 index d2c117b..0000000 --- a/open_esplibs/include/esplibs/libnet80211.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Internal function declarations for Espressif SDK libnet80211 functions. - - These are internal-facing declarations, it is not recommended to include these headers in your program. - (look at the headers in include/espressif/ instead and use these whenever possible.) - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE. -*/ - -#ifndef _ESPLIBS_LIBNET80211_H -#define _ESPLIBS_LIBNET80211_H - -#include "sdk_internal.h" - -// ieee80211_action.o - -// ieee80211_crypto_ccmp.o -extern uint32_t sdk_ccmp; - -// ieee80211_crypto.o - -// ieee80211_crypto_tkip.o -extern uint32_t sdk_tkip; - -// ieee80211_crypto_wep.o -extern uint32_t sdk_wep; - -// ieee80211_ets.o -struct esf_buf *sdk_ieee80211_getmgtframe(void **arg0, uint32_t arg1, uint32_t arg2); - -// ieee80211_hostap.o -extern uint8_t sdk_TmpSTAAPCloseAP; -extern uint8_t sdk_PendFreeBcnEb; -void sdk_ieee80211_hostap_attach(struct sdk_g_ic_st *); -void sdk_hostap_handle_timer(struct sdk_cnx_node *cnx_node); -bool sdk_wifi_softap_start(); -bool sdk_wifi_softap_stop(); - -// ieee80211_ht.o - -// ieee80211_input.o -void sdk_ieee80211_deliver_data(struct sdk_g_ic_netif_info *netif_info, struct esf_buf *esf_buf); -// The esf_buf is stored in the pbuf->eb slot. -void sdk_ieee80211_deliver_data(struct sdk_g_ic_netif_info *netif_info, struct esf_buf *eb); - -// ieee80211.o -extern struct sdk_g_ic_st sdk_g_ic; -extern uint32_t sdk_xieee80211Queue; -void sdk_ieee80211_ifattach(struct sdk_g_ic_st *, uint8_t *); -void sdk_wifi_mode_set(uint8_t); - -// ieee80211_output.o -int8_t sdk_ieee80211_output_pbuf(struct netif *ifp, struct pbuf* pb); -void sdk_ieee80211_send_mgmt(struct sdk_g_ic_netif_info *info, int, int); -struct esf_buf *sdk_ieee80211_beacon_alloc(struct sdk_g_ic_netif_info *, uint32_t *); - -// ieee80211_phy.o -uint32_t sdk_ieee80211_phy_type_get(); -void sdk_ieee80211_phy_init(enum sdk_phy_mode); - -// ieee80211_power.o -void sdk_ieee80211_pwrsave(void *, struct esf_buf *b); - -// ieee80211_proto.o -extern uint8_t sdk_ieee80211_addr_bcast[6]; - -// ieee80211_scan.o -extern uint32_t sdk_ugScanStruct; // A struct. -extern uint8_t sdk_auth_type; -extern uint16_t sdk_scannum; -void sdk_scan_cancel(); - -// ieee80211_sta.o -void sdk_ieee80211_sta_new_state(struct sdk_g_ic_st *, int, int); -void sdk_sta_status_set(int status); -bool sdk_wifi_station_start(); -bool sdk_wifi_station_stop(); - -// wl_chm.o -void sdk_chm_set_current_channel(uint32_t *); -int sdk_ieee80211_chan2ieee(int *); -int sdk_chm_check_same_channel(); - -// wl_cnx.o -extern ETSTimer sdk_sta_con_timer; -extern void *sdk_g_cnx_probe_rc_list_cb; -void sdk_cnx_sta_leave(struct sdk_g_ic_netif_info *netif_info, void *); -struct sdk_cnx_node *sdk_cnx_node_search(uint8_t mac[6]); -void sdk_cnx_node_leave(struct sdk_g_ic_netif_info *netif, struct sdk_cnx_node *conn); -void sdk_cnx_rc_update_state_metric(void *, int, int); -void sdk_cnx_node_remove(struct sdk_cnx_node *cnx_node); -void sdk_cnx_attach(struct sdk_g_ic_st *); - -#endif /* _ESPLIBS_LIBNET80211_H */ - diff --git a/open_esplibs/include/esplibs/libphy.h b/open_esplibs/include/esplibs/libphy.h deleted file mode 100644 index 150ad36..0000000 --- a/open_esplibs/include/esplibs/libphy.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Internal function declarations for Espressif SDK libphy functions. - - These are internal-facing declarations, it is not recommended to include these headers in your program. - (look at the headers in include/espressif/ instead and use these whenever possible.) - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE. -*/ -#ifndef _ESPLIBS_LIBPHY_H -#define _ESPLIBS_LIBPHY_H - -#include "sdk_internal.h" - -// phy_chip_v5_ana_romfunc.o - -// phy_chip_v5_cal_romfunc.o - -// phy_chip_v5_romfunc.o - -// phy_chip_v6_ana.o -uint32_t sdk_test_tout(bool); -uint32_t sdk_readvdd33(); - -// phy_chip_v6_cal.o -extern uint16_t sdk_loop_pwctrl_pwdet_error_accum_high_power; -extern uint8_t sdk_tx_pwctrl_pk_num; -extern uint8_t sdk_loop_pwctrl_correct_atten_high_power; -extern uint8_t sdk_tx_pwctrl_set_chan_flag; -extern uint8_t sdk_rxiq_cover_fail_num; - -// phy_chip_v6.o -extern uint16_t sdk_tx_rf_ana_gain; -extern uint32_t sdk_rxiq_compute_num; -extern uint8_t sdk_rxdc_init_flag; -extern uint32_t sdk_check_result; -extern uint32_t sdk_chip6_sleep_params; -extern uint8_t sdk_chip6_phy_init_ctrl; -extern uint32_t sdk_phy_freq_offset; -extern uint8_t sdk_do_pwctrl_flag; -extern uint8_t sdk_pwctrl_debug; -extern uint8_t sdk_txbk_dpdby_flag; -extern uint8_t sdk_sw_scan_mode; -extern uint32_t sdk_periodic_cal_dc_num; -extern uint8_t sdk_periodic_cal_flag; -extern uint8_t sdk_bbpll_cal_flag; -extern uint8_t sdk_deep_sleep_en; -int sdk_register_chipv6_phy(sdk_phy_info_t *); - -// phy_chip_v6_unused.o - -// phy.o -void sdk_phy_disable_agc(void); -void sdk_phy_enable_agc(void); - -// phy_sleep.o -extern uint32_t sdk_chip_version; -extern uint8_t sdk_periodic_cal_sat; -extern uint8_t sdk_software_slp_reject; -extern uint8_t sdk_SDIO_slp_reject; -extern uint8_t sdk_hardware_reject; -void sdk_sleep_reset_analog_rtcreg_8266(void); - - -#endif /* _ESPLIBS_LIBPHY_H */ - diff --git a/open_esplibs/include/esplibs/libpp.h b/open_esplibs/include/esplibs/libpp.h deleted file mode 100644 index 836a689..0000000 --- a/open_esplibs/include/esplibs/libpp.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Internal function declarations for Espressif SDK libpp functions. - - These are internal-facing declarations, it is not recommended to include these headers in your program. - (look at the headers in include/espressif/ instead and use these whenever possible.) - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE. -*/ -#ifndef _ESPLIBS_LIBPP_H -#define _ESPLIBS_LIBPP_H - -#include "sdk_internal.h" - -// esf_buf.o -struct esf_buf *sdk_esf_rx_buf_alloc(uint32_t n); // n must be 7. -struct esf_buf *sdk_esf_buf_alloc(void *, uint32_t n); -void sdk_esf_buf_recycle(struct esf_buf *buf, int); -void sdk_esf_buf_setup(void); - -// if_hwctrl.o -extern uint8_t sdk_interface_mask; -//extern ? sdk_if_ctrl; -void sdk_ic_set_vif(int, int, uint8_t (*)[6], int, int); -void sdk_ic_bss_info_update(int, uint8_t (*hwaddr)[], int, int); -void sdk_ic_set_sta(int, int, void *, int, int, int, int, int); -void sdk_ic_remove_key(uint32_t); - -// lmac.o -extern uint32_t sdk_lmacConfMib; -void sdk_lmacInit(void); - -// mac_frame.o - -// pm.o -struct esf_buf *sdk_ieee80211_getmgtframe(void **arg0, uint32_t arg1, uint32_t arg2); -void sdk_pm_attach(void); -uint32_t sdk_pm_rtc_clock_cali_proc(void); -void sdk_pm_set_sleep_time(uint32_t); -uint8_t sdk_pm_is_waked(void); -bool sdk_pm_is_open(void); -bool sdk_pm_post(int); -enum sdk_sleep_type sdk_pm_get_sleep_type(void); -void sdk_pm_set_sleep_type_from_upper(enum sdk_sleep_type); - - -// pp.o -extern uint16_t sdk_NoiseTimerInterval; -extern uint16_t sdk_sleep_start_wait_time; -extern uint8_t sdk_pend_flag_noise_check; -extern uint8_t sdk_pend_flag_periodic_cal; -extern uint8_t sdk_dbg_stop_sw_wdt; -extern uint8_t sdk_dbg_stop_hw_wdt; -bool sdk_ppRegisterTxCallback(void *, int); -bool sdk_ppTxPkt(struct esf_buf *); -void sdk_ppRecycleRxPkt(void *); -void sdk_pp_attach(void); -void sdk_pp_soft_wdt_init(void); -void sdk_pp_soft_wdt_feed(); -void sdk_pp_post(int, int); - -// rate_control.o - -// trc.o - -// wdev.o -extern uint8_t sdk_NMIIrqIsOn; -extern uint32_t sdk_WdevTimOffSet; -uint32_t sdk_wDev_Get_Next_TBTT(); -void sdk_wDev_Reset_TBTT(); -void sdk_wDev_SetRxPolicy(int, int, int); -void sdk_wDevEnableRx(void); -void sdk_wDev_Initialize(void); -void sdk_wDev_MacTim1SetFunc(void (*func)(void)); -void sdk_wDev_MacTim1Arm(uint32_t); - -#endif /* _ESPLIBS_LIBPP_H */ - diff --git a/open_esplibs/include/esplibs/libwpa.h b/open_esplibs/include/esplibs/libwpa.h deleted file mode 100644 index 2839e56..0000000 --- a/open_esplibs/include/esplibs/libwpa.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Internal function declarations for Espressif SDK libpp functions. - - These are internal-facing declarations, it is not recommended to include these headers in your program. - (look at the headers in include/espressif/ instead and use these whenever possible.) - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE. -*/ -#ifndef _ESPLIBS_LIBWPA_H -#define _ESPLIBS_LIBWPA_H - -#include "sdk_internal.h" - -// aes-internal-dec.o - -// aes-internal-enc.o - -// aes-internal.o - -// aes-unwrap.o - -// aes-wrap.o - -// ap_config.o - -// Seems to be passed 3 args, but only uses 2? -int sdk_hostapd_setup_wpa_psk(struct _unknown_softap2 *); - -// common.o - -// ieee802_1x.o - -// md5-internal.o - -// md5.o - -// os_xtensa.o -int sdk_os_get_time(uint32_t time[]); -uint32_t sdk_os_random(); -int sdk_os_get_random(uint8_t *dst, uint32_t size); - -// rc4.o - -// sha1-internal.o - -// sha1.o - -// sha1-pbkdf2.o - -// sta_info.o - -// wpa_auth_ie.o - -// wpa_auth.o -uint32_t *sdk_wpa_init(uint8_t (*hwaddr)[], struct _unknown_wpa1 *, int); -void sdk_wpa_auth_sta_deinit(void *); - -// wpabuf.o - -// wpa_common.o - -// wpa_debug.o - -// wpa_ie.o - -// wpa_main -void sdk_ppInstallKey(void *, int, int); -void sdk_wpa_config_profile(struct sdk_g_ic_st *); -void sdk_wpa_config_bss(struct sdk_g_ic_st *g_ic, uint8_t (* hwaddr2)[6]); -void sdk_wpa_config_assoc_ie(int , int16_t *, int32_t); -void sdk_dhcp_bind_check(); -void sdk_eagle_auth_done(); -void sdk_wpa_neg_complete(); -void sdk_wpa_attach(struct sdk_g_ic_st *); - -// wpa.o -void sdk_wpa_set_profile(uint8_t); -void sdk_wpa_set_bss(uint8_t *hwaddr1, uint8_t (* hwaddr2)[6], uint8_t, uint8_t, uint8_t *, uint8_t *ssid, int); -void sdk_eapol_txcb(); -void sdk_wpa_register(int, void *, void *, void *, void *, void *); - -// wpas_glue.o - -#endif /* _ESPLIBS_LIBWPA_H */ diff --git a/open_esplibs/include/open_esplibs.h b/open_esplibs/include/open_esplibs.h deleted file mode 100644 index bcbbcd4..0000000 --- a/open_esplibs/include/open_esplibs.h +++ /dev/null @@ -1,113 +0,0 @@ -#ifndef _OPEN_ESPLIBS_H -#define _OPEN_ESPLIBS_H - -// This header includes conditional defines to control which bits of the -// Open-Source libraries get built when building esp-open-rtos. This can be -// useful for quickly troubleshooting whether a bug is due to the -// reimplementation of Espressif libraries, or something else. - -// Some source code is mandatory and these are not included as options here. -// For example code referencing lwip structures and flags etc that has changed -// since the initial binary code. - -#ifndef OPEN_ESPLIBS -#define OPEN_ESPLIBS 1 -#endif - -#ifndef OPEN_LIBMAIN -#define OPEN_LIBMAIN (OPEN_ESPLIBS) -#endif - -#ifndef OPEN_LIBMAIN_MISC -#define OPEN_LIBMAIN_MISC (OPEN_LIBMAIN) -#endif -#ifndef OPEN_LIBMAIN_OS_CPU_A -#define OPEN_LIBMAIN_OS_CPU_A (OPEN_LIBMAIN) -#endif -#ifndef OPEN_LIBMAIN_SPI_FLASH -#define OPEN_LIBMAIN_SPI_FLASH (OPEN_LIBMAIN) -#endif -#ifndef OPEN_LIBMAIN_TIMERS -#define OPEN_LIBMAIN_TIMERS (OPEN_LIBMAIN) -#endif -#ifndef OPEN_LIBMAIN_UART -#define OPEN_LIBMAIN_UART (OPEN_LIBMAIN) -#endif -#ifndef OPEN_LIBMAIN_XTENSA_CONTEXT -#define OPEN_LIBMAIN_XTENSA_CONTEXT (OPEN_LIBMAIN) -#endif -#ifndef OPEN_LIBMAIN_ETS_TIMER -#define OPEN_LIBMAIN_ETS_TIMER (OPEN_LIBMAIN) -#endif -#ifndef OPEN_LIBMAIN_ETS_TIMER -#define OPEN_LIBMAIN_ETS_TIMER (OPEN_LIBMAIN) -#endif - -#ifndef OPEN_LIBNET80211 -#define OPEN_LIBNET80211 (OPEN_ESPLIBS) -#endif -#ifndef OPEN_LIBNET80211_ETS -#define OPEN_LIBNET80211_ETS (OPEN_LIBNET80211) -#endif - -#ifndef OPEN_LIBPHY -#define OPEN_LIBPHY (OPEN_ESPLIBS) -#endif - -#ifndef OPEN_LIBPHY_PHY_ANA -#define OPEN_LIBPHY_PHY_ANA (OPEN_LIBPHY) -#endif - -#ifndef OPEN_LIBPHY_PHY_CAL -#define OPEN_LIBPHY_PHY_CAL (OPEN_LIBPHY) -#endif - -#ifndef OPEN_LIBPHY_PHY_CHIP_V6 -#define OPEN_LIBPHY_PHY_CHIP_V6 (OPEN_LIBPHY) -#endif - -#ifndef OPEN_LIBPHY_PHY -#define OPEN_LIBPHY_PHY (OPEN_LIBPHY) -#endif - -#ifndef OPEN_LIBPHY_PHY_SLEEP -#define OPEN_LIBPHY_PHY_SLEEP (OPEN_LIBPHY) -#endif - -#ifndef OPEN_LIBPP -#define OPEN_LIBPP (OPEN_ESPLIBS) -#endif - -#ifndef OPEN_LIBPP_ESF_BUF -#define OPEN_LIBPP_ESF_BUF (OPEN_LIBPP) -#endif - -#ifndef OPEN_LIBPP_IF_HWCTRL -#define OPEN_LIBPP_IF_HWCTRL (OPEN_LIBPP) -#endif - -#ifndef OPEN_LIBPP_LMAC -#define OPEN_LIBPP_LMAC (OPEN_LIBPP) -#endif - -#ifndef OPEN_LIBPP_PM -#define OPEN_LIBPP_PM (OPEN_LIBPP) -#endif - -#ifndef OPEN_LIBPP_PP -#define OPEN_LIBPP_PP (OPEN_LIBPP) -#endif - -#ifndef OPEN_LIBPP_WDEV -#define OPEN_LIBPP_WDEV (OPEN_LIBPP) -#endif - -#ifndef OPEN_LIBWPA -#define OPEN_LIBWPA (OPEN_ESPLIBS) -#endif - -#ifndef OPEN_LIBWPA_OS_XTENSA -#define OPEN_LIBWPA_OS_XTENSA (OPEN_LIBWPA) -#endif - -#endif /* _OPEN_ESPLIBS_H */ diff --git a/open_esplibs/libmain/ets_timer.c b/open_esplibs/libmain/ets_timer.c deleted file mode 100644 index 7b3ca36..0000000 --- a/open_esplibs/libmain/ets_timer.c +++ /dev/null @@ -1,340 +0,0 @@ -/** - * Recreated Espressif libmain ets_timer.o contents. - * - * Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - * BSD Licensed as described in the file LICENSE - * - * Copyright (c) 2016 sheinz (https://github.com/sheinz) - * - * This module seems to be adapted from NONOS SDK by Espressif to fit into - * RTOS SDK. Function sdk_ets_timer_handler_isr is no longer an ISR handler - * but still holds its name. Espressif just added a task that receives events - * from the real FRC2 timer ISR handler and calls former ISR handler. - * So, timer callbacks are called from the task context rather than an interrupt. - * - * Modifications from the original reverse engineered version: - * - FreeRTOS queue is replaced with Task notifications. - * - Removed unknown queue length monitoring and parameters allocation. - * - Removed unused debug variables - * - xTaskGenericCreate is replaced with xTaskCreate - * - simplified time to ticks conversion (simply multiply by 5) - * - * This timer should be used with caution together with other tasks. As the - * timer callback is executed within timer task context, access to data that - * other tasks accessing should be protected. - */ -#include "open_esplibs.h" - -#if OPEN_LIBMAIN_ETS_TIMER - -#if 0 - -#include "etstimer.h" -#include "espressif/osapi.h" - -void sdk_ets_timer_setfn(ETSTimer *timer, ETSTimerFunc *func, void *parg) { - sdk_os_timer_setfn(timer, func, parg); -} - -void sdk_ets_timer_arm(ETSTimer *timer, uint32_t value, bool repeat_flag) { - sdk_os_timer_arm(timer, value, repeat_flag); -} - -void sdk_ets_timer_arm_ms_us(ETSTimer *timer, uint32_t value, - bool repeat_flag, bool value_in_ms) { - sdk_os_timer_arm(timer, value * 1000 + value_in_ms, repeat_flag); -} - -void sdk_ets_timer_disarm(ETSTimer *timer) { - sdk_os_timer_disarm(timer); -} - -void sdk_ets_timer_init() { -} - -#else - -#include "open_esplibs.h" -#include -#include -#include -#include -#include -#include -#include - -typedef void ets_timer_func_t(void *); - -/** - * This structure is used for both timers: ets_timer.c and timer.c - */ -typedef struct ets_timer_st { - struct ets_timer_st *next; - TimerHandle_t timer_handle; // not used in ets_timer.c - uint32_t fire_ticks; // FRC2 timer value when timer should fire - uint32_t period_ticks; // timer value in FRC2 ticks for rpeating timers - ets_timer_func_t *callback; - bool repeat; // not used in ets_timer.c - void *timer_arg; -} ets_timer_t; - -/** - * Special values of ets_timer_t::next field - */ -#define ETS_TIMER_NOT_ARMED (ets_timer_t*)(0xffffffff) -#define ETS_TIMER_LIST_END (ets_timer_t*)(0) - -/** - * Linked list of timers - */ -static ets_timer_t* timer_list = 0; - -static TaskHandle_t task_handle = NULL; - -void sdk_ets_timer_setfn(ets_timer_t *timer, ets_timer_func_t *func, void *parg) -{ - timer->callback = func; - timer->timer_arg = parg; - timer->fire_ticks = 0; - timer->period_ticks = 0; - timer->next = ETS_TIMER_NOT_ARMED; -} - -static inline void set_alarm_value(uint32_t value) -{ - TIMER_FRC2.ALARM = value; -} - -/** - * Set timer alarm and make sure the alarm is set in the future - * and will not be missed by the timer. - */ -static void set_alarm(uint32_t ticks) -{ - uint32_t curr_time = TIMER_FRC2.COUNT; - int32_t delta = (int32_t)ticks - curr_time; - if ((delta - 40) < 1) { - if (delta < 1) { - set_alarm_value(curr_time + 40); - } else { - set_alarm_value(ticks + 44); - } - } else { - set_alarm_value(ticks); - } -} - -/** - * - * Pending timer list example: - * - * | Timer: | T0 | T1 | T2 | T3 | - * |-------------|----|----|----|----| - * | fire_ticks: | 10 | 20 | 30 | 40 | - * | next: | T1 | T2 | T3 | 0 | - * - * - * For example we need to add a timer that should fire at 25 ticks: - * - * | Timer: | T0 | T1 | new | T2 | T3 | - * |-------------|----|-----|-----|----|----| - * | fire_ticks: | 10 | 20 | 25 | 30 | 40 | - * | next: | T1 | new | T2 | T3 | 0 | - * - * We squeeze the timer into the list so the list will always remain sorted - * - * Note: if add the same timer twice the system halts -*/ -static void add_pending_timer(uint32_t ticks, ets_timer_t *timer) -{ - ets_timer_t *prev = 0; - ets_timer_t *curr = timer_list; - while (curr) { - if (((int32_t)ticks - (int32_t)curr->fire_ticks) < 1) { - // found a timer that should fire later - // so our timer should fire earlier - break; - } - prev = curr; - curr = curr->next; - } - - timer->next = curr; - timer->fire_ticks = ticks; - - if (prev != 0) { - prev->next = timer; - } else { - // Our timer is the first in the line to fire - timer_list = timer; - set_alarm(ticks); - } - - // This situation might happen if adding the same timer twice - if (timer == timer->next) { - // This seems like an error: %s is used for line number - // In the recent SDK Espressif fixed the format to "%s %u\n" - printf("%s %s \n", "ets_timer.c", (char*)209); - while (1); - } -} - -/** - * In the Espressif SDK 0.9.9 if try to arm already armed timer the system halts - * with error message. In the later SDK version Espressif changed the behavior. - * If the timer was previously armed it is disarmed and then armed without errors. - * This version recreates behavior of SDK 0.9.9 - */ -void sdk_ets_timer_arm_ms_us(ets_timer_t *timer, uint32_t value, - bool repeat_flag, bool value_in_ms) -{ - uint32_t ticks = 0; - - if (timer->next != ETS_TIMER_NOT_ARMED) { - // The error message doesn't tell what is wrong - printf("arm new %x %x\n", (uint32_t)timer, (uint32_t)timer->next); - while(1); // halt - } - - if (value_in_ms) { - ticks = value * 5000; - } else { - ticks = value * 5; - } - - if (repeat_flag) { - timer->period_ticks = ticks; - } - vPortEnterCritical(); - add_pending_timer(TIMER_FRC2.COUNT + ticks, timer); - vPortExitCritical(); -} - -void sdk_ets_timer_arm(ets_timer_t *timer, uint32_t milliseconds, - bool repeat_flag) -{ - sdk_ets_timer_arm_ms_us(timer, milliseconds, repeat_flag, - /*value in ms=*/true); -} - -void sdk_ets_timer_arm_us(ets_timer_t *timer, uint32_t useconds, - bool repeat_flag) -{ - sdk_ets_timer_arm_ms_us(timer, useconds, repeat_flag, - /*value in ms=*/false); -} - -/** - * Function removes a timer from the pending timers list. - */ -void sdk_ets_timer_disarm(ets_timer_t *timer) -{ - vPortEnterCritical(); - ets_timer_t *curr = timer_list; - ets_timer_t *prev = 0; - while (curr) { - if (curr == timer) { - if (prev) { - prev->next = curr->next; - } else { - timer_list = curr->next; - } - break; - } - prev = curr; - curr = curr->next; - } - timer->next = ETS_TIMER_NOT_ARMED; - timer->period_ticks = 0; - vPortExitCritical(); -} - -/** - * Check the list of pending timers for expired ones and process them. - */ -static inline void process_pending_timers() -{ - vPortEnterCritical(); - int32_t ticks = TIMER_FRC2.COUNT; - while (timer_list) { - if (((int32_t)timer_list->fire_ticks - ticks) < 1) { - ets_timer_t *timer = timer_list; - timer_list = timer->next; - timer->next = ETS_TIMER_NOT_ARMED; - - vPortExitCritical(); - timer->callback(timer->timer_arg); - vPortEnterCritical(); - - if (timer->next == ETS_TIMER_NOT_ARMED) { - if (timer->period_ticks) { - timer->fire_ticks = timer->fire_ticks + timer->period_ticks; - add_pending_timer(timer->fire_ticks, timer); - } - } - ticks = TIMER_FRC2.COUNT; - } else { - if (timer_list) { - set_alarm(timer_list->fire_ticks); - } - break; - } - } - vPortExitCritical(); -} - -/** - * .Lfunc002 - */ -static void IRAM frc2_isr(void *arg) -{ - BaseType_t task_woken = 0; - - BaseType_t result = xTaskNotifyFromISR(task_handle, 0, eNoAction, &task_woken); - if (result != pdTRUE) { - printf("TIMQ_FL:%d!!", (uint32_t)result); - } - - portEND_SWITCHING_ISR(task_woken); -} - -/** - * .Lfunc007 - * - * Timer task - */ -static void timer_task(void* param) -{ - while (true) { - if (xTaskNotifyWait(0, 0, NULL, portMAX_DELAY) == pdTRUE) { - process_pending_timers(); - } - } -} - -void sdk_ets_timer_init() -{ - timer_list = 0; - - _xt_isr_attach(INUM_TIMER_FRC2, frc2_isr, NULL); - - /* Original code calls xTaskGenericCreate: - * xTaskGenericCreate(task_handle, "rtc_timer_task", 200, 0, 12, &handle, - * NULL, NULL); - */ - xTaskCreate(timer_task, "rtc_timer_task", 200, 0, 12, &task_handle); - printf("frc2_timer_task_hdl:%p, prio:%d, stack:%d\n", task_handle, 12, 200); - - TIMER_FRC2.ALARM = 0; - TIMER_FRC2.CTRL = VAL2FIELD(TIMER_CTRL_CLKDIV, TIMER_CLKDIV_16) - | TIMER_CTRL_RUN; - TIMER_FRC2.LOAD = 0; - - DPORT.INT_ENABLE |= DPORT_INT_ENABLE_TIMER1; - - _xt_isr_unmask(BIT(INUM_TIMER_FRC2)); -} - -#endif - -#endif /* OPEN_LIBMAIN_ETS_TIMER */ diff --git a/open_esplibs/libmain/misc.c b/open_esplibs/libmain/misc.c deleted file mode 100644 index eb2e459..0000000 --- a/open_esplibs/libmain/misc.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Recreated Espressif libmain misc.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBMAIN_MISC -// The contents of this file are only built if OPEN_LIBMAIN_MISC is set to true - -#include "espressif/esp_misc.h" -#include "esp/gpio_regs.h" -#include "esp/rtc_regs.h" -#include "sdk_internal.h" -#include "xtensa_ops.h" - -static int cpu_freq = 80; - -void (*sdk__putc1)(char); - -int IRAM sdk_os_get_cpu_frequency(void) { - return cpu_freq; -} - -void sdk_os_update_cpu_frequency(int freq) { - cpu_freq = freq; -} - -void sdk_ets_update_cpu_frequency(int freq) __attribute__ (( alias ("sdk_os_update_cpu_frequency") )); - -void sdk_os_delay_us(uint16_t us) { - uint32_t start_ccount, ccount; - uint32_t delay_ccount = cpu_freq * us; - - RSR(start_ccount, ccount); - - do { - RSR(ccount, ccount); - } while (ccount - start_ccount < delay_ccount); -} - -void sdk_ets_delay_us(uint16_t us) __attribute__ (( alias ("sdk_os_delay_us") )); - -void sdk_os_install_putc1(void (*p)(char)) { - sdk__putc1 = p; -} - -void sdk_os_putc(char c) { - sdk__putc1(c); -} - -void sdk_gpio_output_set(uint32_t set_mask, uint32_t clear_mask, uint32_t enable_mask, uint32_t disable_mask) { - GPIO.OUT_SET = set_mask; - GPIO.OUT_CLEAR = clear_mask; - GPIO.ENABLE_OUT_SET = enable_mask; - GPIO.ENABLE_OUT_CLEAR = disable_mask; -} - -uint8_t sdk_rtc_get_reset_reason(void) { - uint8_t reason; - - reason = FIELD2VAL(RTC_RESET_REASON1_CODE, RTC.RESET_REASON1); - if (reason == 5) { - if (FIELD2VAL(RTC_RESET_REASON2_CODE, RTC.RESET_REASON2) == 1) { - reason = 6; - } else { - if (FIELD2VAL(RTC_RESET_REASON2_CODE, RTC.RESET_REASON2) != 8) { - reason = 0; - } - } - } - RTC.RESET_REASON0 &= ~RTC_RESET_REASON0_BIT21; - return reason; -} - -#endif /* OPEN_LIBMAIN_MISC */ diff --git a/open_esplibs/libmain/os_cpu_a.c b/open_esplibs/libmain/os_cpu_a.c deleted file mode 100644 index fdabb56..0000000 --- a/open_esplibs/libmain/os_cpu_a.c +++ /dev/null @@ -1,132 +0,0 @@ -/* Recreated Espressif libmain os_cpu_o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBMAIN_OS_CPU_A -// The contents of this file are only built if OPEN_LIBMAIN_OS_CPU_A is set to true - -#include "esp/types.h" -#include "FreeRTOS.h" -#include "task.h" -#include "xtensa_ops.h" -#include "common_macros.h" -#include "esplibs/libmain.h" - -// xPortSysTickHandle is defined in FreeRTOS/Source/portable/esp8266/port.c but -// does not exist in any header files. -void xPortSysTickHandle(void); - -/* The following "functions" manipulate the stack at a low level and thus cannot be coded directly in C */ - -void IRAM vPortYield(void) { - asm(" wsr a0, excsave1 \n\ - addi sp, sp, -80 \n\ - s32i a0, sp, 4 \n\ - addi a0, sp, 80 \n\ - s32i a0, sp, 16 \n\ - rsr a0, ps \n\ - s32i a0, sp, 8 \n\ - rsr a0, excsave1 \n\ - s32i a0, sp, 12 \n\ - movi a0, _xt_user_exit \n\ - s32i a0, sp, 0 \n\ - call0 sdk__xt_int_enter \n\ - call0 vPortEnterCritical \n\ - call0 vTaskSwitchContext \n\ - call0 vPortExitCritical \n\ - call0 sdk__xt_int_exit \n\ - "); -} - -void IRAM sdk__xt_int_enter(void) { - asm(" s32i a12, sp, 60 \n\ - s32i a13, sp, 64 \n\ - mov a12, a0 \n\ - call0 sdk__xt_context_save \n\ - movi a0, pxCurrentTCB \n\ - l32i a0, a0, 0 \n\ - s32i sp, a0, 0 \n\ - mov a0, a12 \n\ - "); -} - -void IRAM sdk__xt_int_exit(void) { - asm(" s32i a14, sp, 68 \n\ - s32i a15, sp, 72 \n\ - movi sp, pxCurrentTCB \n\ - l32i sp, sp, 0 \n\ - l32i sp, sp, 0 \n\ - movi a14, pxCurrentTCB \n\ - l32i a14, a14, 0 \n\ - addi a15, sp, 80 \n\ - s32i a15, a14, 0 \n\ - call0 sdk__xt_context_restore \n\ - l32i a14, sp, 68 \n\ - l32i a15, sp, 72 \n\ - l32i a0, sp, 0 \n\ - "); -} - -void IRAM sdk__xt_timer_int(void *arg) { - uint32_t trigger_ccount; - uint32_t current_ccount; - uint32_t ccount_interval = portTICK_PERIOD_MS * sdk_os_get_cpu_frequency() * 1000; - - do { - RSR(trigger_ccount, ccompare0); - WSR(trigger_ccount + ccount_interval, ccompare0); - ESYNC(); - xPortSysTickHandle(); - ESYNC(); - RSR(current_ccount, ccount); - } while (current_ccount - trigger_ccount > ccount_interval); -} - -void IRAM sdk__xt_timer_int1(void) { - vTaskSwitchContext(); -} - -#define INTENABLE_CCOMPARE BIT(6) - -void IRAM sdk__xt_tick_timer_init(void) { - uint32_t ints_enabled; - uint32_t current_ccount; - uint32_t ccount_interval = portTICK_PERIOD_MS * sdk_os_get_cpu_frequency() * 1000; - - RSR(current_ccount, ccount); - WSR(current_ccount + ccount_interval, ccompare0); - ints_enabled = 0; - XSR(ints_enabled, intenable); - WSR(ints_enabled | INTENABLE_CCOMPARE, intenable); -} - -void IRAM sdk__xt_isr_unmask(uint32_t mask) { - uint32_t ints_enabled; - - ints_enabled = 0; - XSR(ints_enabled, intenable); - WSR(ints_enabled | mask, intenable); -} - -void IRAM sdk__xt_isr_mask(uint32_t mask) { - uint32_t ints_enabled; - - ints_enabled = 0; - XSR(ints_enabled, intenable); - WSR(ints_enabled & mask, intenable); -} - -uint32_t IRAM sdk__xt_read_ints(void) { - uint32_t ints_enabled; - - RSR(ints_enabled, intenable); - return ints_enabled; -} - -void IRAM sdk__xt_clear_ints(uint32_t mask) { - WSR(mask, intclear); -} - -#endif /* OPEN_LIBMAIN_OS_CPU_A */ diff --git a/open_esplibs/libmain/spi_flash.c b/open_esplibs/libmain/spi_flash.c deleted file mode 100644 index 91ee829..0000000 --- a/open_esplibs/libmain/spi_flash.c +++ /dev/null @@ -1,193 +0,0 @@ -/* Recreated Espressif libmain os_cpu_o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBMAIN_SPI_FLASH -// The contents of this file are only built if OPEN_LIBMAIN_SPI_FLASH is set to true - -#include "FreeRTOS.h" -#include "common_macros.h" -#include "esp/spi_regs.h" -#include "esp/rom.h" -#include "sdk_internal.h" -#include "espressif/spi_flash.h" - -sdk_flashchip_t sdk_flashchip = { - 0x001640ef, // device_id - 4 * 1024 * 1024, // chip_size - 65536, // block_size - 4096, // sector_size - 256, // page_size - 0x0000ffff, // status_mask -}; - -// NOTE: This routine appears to be completely unused in the SDK - -int IRAM sdk_SPIReadModeCnfig(uint32_t mode) { - uint32_t ctrl_bits; - - SPI(0).CTRL0 &= ~(SPI_CTRL0_FASTRD_MODE | SPI_CTRL0_DOUT_MODE | SPI_CTRL0_QOUT_MODE | SPI_CTRL0_DIO_MODE | SPI_CTRL0_QIO_MODE); - if (mode == 0) { - ctrl_bits = SPI_CTRL0_FASTRD_MODE | SPI_CTRL0_QIO_MODE; - } else if (mode == 1) { - ctrl_bits = SPI_CTRL0_FASTRD_MODE | SPI_CTRL0_QOUT_MODE; - } else if (mode == 2) { - ctrl_bits = SPI_CTRL0_FASTRD_MODE | SPI_CTRL0_DIO_MODE; - } else if (mode == 3) { - ctrl_bits = SPI_CTRL0_FASTRD_MODE | SPI_CTRL0_DOUT_MODE; - } else if (mode == 4) { - ctrl_bits = SPI_CTRL0_FASTRD_MODE; - } else { - ctrl_bits = 0; - } - if (mode == 0 || mode == 1) { - Enable_QMode(&sdk_flashchip); - } else { - Disable_QMode(&sdk_flashchip); - } - SPI(0).CTRL0 |= ctrl_bits; - return 0; -} - -sdk_SpiFlashOpResult IRAM sdk_SPIWrite(uint32_t des_addr, uint32_t *src_addr, uint32_t size) { - uint32_t first_page_portion; - uint32_t pos; - uint32_t full_pages; - uint32_t bytes_remaining; - - if (des_addr + size <= sdk_flashchip.chip_size) { - first_page_portion = sdk_flashchip.page_size - (des_addr % sdk_flashchip.page_size); - if (size < first_page_portion) { - if (SPI_page_program(&sdk_flashchip, des_addr, src_addr, size)) { - return SPI_FLASH_RESULT_ERR; - } else { - return SPI_FLASH_RESULT_OK; - } - } - } else { - return SPI_FLASH_RESULT_ERR; - } - if (SPI_page_program(&sdk_flashchip, des_addr, src_addr, first_page_portion)) { - return SPI_FLASH_RESULT_ERR; - } - pos = first_page_portion; - bytes_remaining = size - first_page_portion; - full_pages = bytes_remaining / sdk_flashchip.page_size; - if (full_pages) { - for (int i = 0; i != full_pages; i++) { - if (SPI_page_program(&sdk_flashchip, des_addr + pos, src_addr + (pos / 4), sdk_flashchip.page_size)) { - return SPI_FLASH_RESULT_ERR; - } - pos += sdk_flashchip.page_size; - } - bytes_remaining = size - pos; - } - if (SPI_page_program(&sdk_flashchip, des_addr + pos, src_addr + (pos / 4), bytes_remaining)) { - return SPI_FLASH_RESULT_ERR; - } - return SPI_FLASH_RESULT_OK; -} - -sdk_SpiFlashOpResult IRAM sdk_SPIRead(uint32_t src_addr, uint32_t *des_addr, uint32_t size) { - if (SPI_read_data(&sdk_flashchip, src_addr, des_addr, size)) { - return SPI_FLASH_RESULT_ERR; - } else { - return SPI_FLASH_RESULT_OK; - } -} - -sdk_SpiFlashOpResult IRAM sdk_SPIEraseSector(uint16_t sec) { - if (sec >= sdk_flashchip.chip_size / sdk_flashchip.sector_size) { - return SPI_FLASH_RESULT_ERR; - } - if (SPI_write_enable(&sdk_flashchip)) { - return SPI_FLASH_RESULT_ERR; - } - if (SPI_sector_erase(&sdk_flashchip, sdk_flashchip.sector_size * sec)) { - return SPI_FLASH_RESULT_ERR; - } - return SPI_FLASH_RESULT_OK; -} - -uint32_t IRAM sdk_spi_flash_get_id(void) { - uint32_t result; - - portENTER_CRITICAL(); - Cache_Read_Disable(); - Wait_SPI_Idle(&sdk_flashchip); - SPI(0).W[0] = 0; - SPI(0).CMD = SPI_CMD_READ_ID; - while (SPI(0).CMD != 0) {} - result = SPI(0).W[0] & 0x00ffffff; - Cache_Read_Enable(0, 0, 1); - portEXIT_CRITICAL(); - return result; -} - -sdk_SpiFlashOpResult IRAM sdk_spi_flash_read_status(uint32_t *status) { - sdk_SpiFlashOpResult result; - - portENTER_CRITICAL(); - Cache_Read_Disable(); - result = SPI_read_status(&sdk_flashchip, status); - Cache_Read_Enable(0, 0, 1); - portEXIT_CRITICAL(); - return result; -} - -sdk_SpiFlashOpResult IRAM sdk_spi_flash_write_status(uint32_t status) { - sdk_SpiFlashOpResult result; - - portENTER_CRITICAL(); - Cache_Read_Disable(); - result = SPI_write_status(&sdk_flashchip, status); - Cache_Read_Enable(0, 0, 1); - portEXIT_CRITICAL(); - return result; -} - -sdk_SpiFlashOpResult IRAM sdk_spi_flash_erase_sector(uint16_t sec) { - sdk_SpiFlashOpResult result; - - portENTER_CRITICAL(); - Cache_Read_Disable(); - result = sdk_SPIEraseSector(sec); - Cache_Read_Enable(0, 0, 1); - portEXIT_CRITICAL(); - return result; -} - -sdk_SpiFlashOpResult IRAM sdk_spi_flash_write(uint32_t des_addr, uint32_t *src_addr, uint32_t size) { - sdk_SpiFlashOpResult result; - - if (!src_addr) { - return SPI_FLASH_RESULT_ERR; - } - if (size & 3) { - size = (size & ~3) + 4; - } - portENTER_CRITICAL(); - Cache_Read_Disable(); - result = sdk_SPIWrite(des_addr, src_addr, size); - Cache_Read_Enable(0, 0, 1); - portEXIT_CRITICAL(); - return result; -} - -sdk_SpiFlashOpResult IRAM sdk_spi_flash_read(uint32_t src_addr, uint32_t *des_addr, uint32_t size) { - sdk_SpiFlashOpResult result; - - if (!des_addr) { - return SPI_FLASH_RESULT_ERR; - } - portENTER_CRITICAL(); - Cache_Read_Disable(); - result = sdk_SPIRead(src_addr, des_addr, size); - Cache_Read_Enable(0, 0, 1); - portEXIT_CRITICAL(); - return result; -} - -#endif /* OPEN_LIBMAIN_SPI_FLASH */ diff --git a/open_esplibs/libmain/timers.c b/open_esplibs/libmain/timers.c deleted file mode 100644 index 42a6767..0000000 --- a/open_esplibs/libmain/timers.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Recreated Espressif libmain timers.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBMAIN_TIMERS -// The contents of this file are only built if OPEN_LIBMAIN_TIMERS is set to true - -#include "etstimer.h" -#include "stdio.h" - -struct timer_list_st { - struct timer_list_st *next; - ETSTimer *timer; -}; - -static struct timer_list_st *timer_list; -static uint8_t armed_timer_count; - -void sdk_os_timer_setfn(ETSTimer *ptimer, ETSTimerFunc *pfunction, void *parg) { - struct timer_list_st *entry = 0; - struct timer_list_st *new_entry; - struct timer_list_st **tailptr; - - if (timer_list) { - for (entry = timer_list; ; entry = entry->next) { - if (entry->timer == ptimer) { - if (ptimer->timer_arg == parg && ptimer->timer_func == pfunction) { - return; - } - if (ptimer->timer_handle) { - if (!xTimerDelete(ptimer->timer_handle, 50)) { - printf("Timer Delete Failed\n"); - } - armed_timer_count--; - } - ptimer->timer_func = pfunction; - ptimer->timer_arg = parg; - ptimer->timer_handle = 0; - ptimer->timer_ms = 0; - return; - } - if (!entry->next) { - break; - } - } - } - ptimer->timer_func = pfunction; - ptimer->timer_arg = parg; - ptimer->timer_handle = 0; - ptimer->timer_ms = 0; - new_entry = (struct timer_list_st *)pvPortMalloc(8); - new_entry->timer = ptimer; - new_entry->next = 0; - tailptr = &entry->next; - if (!timer_list) { - tailptr = &timer_list; - } - *tailptr = new_entry; -} - -static void timer_tramp(TimerHandle_t xTimer) -{ - ETSTimer *ptimer = pvTimerGetTimerID(xTimer); - ptimer->timer_func(ptimer->timer_arg); -} - -void sdk_os_timer_arm(ETSTimer *ptimer, uint32_t milliseconds, bool repeat_flag) { - if (!ptimer->timer_handle) { - ptimer->timer_repeat = repeat_flag; - ptimer->timer_ms = milliseconds; - ptimer->timer_handle = xTimerCreate(0, milliseconds/10, repeat_flag, ptimer, timer_tramp); - armed_timer_count++; - if (!ptimer->timer_handle) { - //FIXME: should print an error? (original code doesn't) - return; - } - } - if (ptimer->timer_repeat != repeat_flag) { - ptimer->timer_repeat = repeat_flag; - // FIXME: This is wrong. The original code is directly modifying - // internal FreeRTOS structures to try to change the uxAutoReload of an - // existing timer. The correct way to do this is probably to use - // xTimerDelete and then xTimerCreate to recreate the timer with a - // different uxAutoReload setting. - ((uint32_t *)ptimer->timer_handle)[7] = repeat_flag; - } - if (ptimer->timer_ms != milliseconds) { - ptimer->timer_ms = milliseconds; - xTimerChangePeriod(ptimer->timer_handle, milliseconds/10, 10); - } - if (!xTimerStart(ptimer->timer_handle, 50)) { - printf("Timer Start Failed\n"); - } -} - -void sdk_os_timer_disarm(ETSTimer *ptimer) { - if (ptimer->timer_handle) { - if (!xTimerStop(ptimer->timer_handle, 50)) { - printf("Timer Stop Failed\n"); - } - } -} - -#endif /* OPEN_LIBMAIN_TIMERS */ diff --git a/open_esplibs/libmain/uart.c b/open_esplibs/libmain/uart.c deleted file mode 100644 index b93d681..0000000 --- a/open_esplibs/libmain/uart.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Recreated Espressif libmain uart.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBMAIN_UART -// The contents of this file are only built if OPEN_LIBMAIN_UART is set to true - -#include "espressif/sdk_private.h" -#include "esp/uart_regs.h" - -void sdk_uart_buff_switch(void) { - /* No-Op */ -} - -void sdk_uart_div_modify(uint32_t uart_no, uint32_t new_divisor) { - UART(uart_no).CLOCK_DIVIDER = new_divisor; - UART(uart_no).CONF0 |= (UART_CONF0_TXFIFO_RESET | UART_CONF0_RXFIFO_RESET); - UART(uart_no).CONF0 &= ~(UART_CONF0_TXFIFO_RESET | UART_CONF0_RXFIFO_RESET); -} - -void sdk_Uart_Init(void) { - /* No-Op */ -} - -#endif /* OPEN_LIBMAIN_UART */ diff --git a/open_esplibs/libmain/user_interface.c b/open_esplibs/libmain/user_interface.c deleted file mode 100644 index cc0ffbe..0000000 --- a/open_esplibs/libmain/user_interface.c +++ /dev/null @@ -1,778 +0,0 @@ -/* Recreated Espressif libmain user_interface.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ - -#include "FreeRTOS.h" -#include "task.h" -#include "string.h" - -#include "lwip/dhcp.h" - -#include "esp/types.h" -#include "esp/rom.h" -#include "esp/dport_regs.h" -#include "esp/rtcmem_regs.h" -#include "esp/iomux_regs.h" -#include "esp/sar_regs.h" -#include "esp/wdev_regs.h" -#include "esp/uart.h" -#include "esp/rtc_regs.h" -#include "esp/iomux.h" - -#include "etstimer.h" -#include "espressif/sdk_private.h" -#include "espressif/esp_system.h" -#include "espressif/esp_wifi.h" -#include "espressif/esp_sta.h" -#include "espressif/esp_softap.h" -#include "espressif/esp_misc.h" -#include "espressif/osapi.h" -#include "espressif/user_interface.h" - -#include "esplibs/libmain.h" -#include "esplibs/libpp.h" -#include "esplibs/libphy.h" -#include "esplibs/libnet80211.h" - -// Structure for the data contained in the last sector of Flash which contains -// meta-info about the saved wifi param sectors. -struct param_dir_st { - uint8_t current_sector; // 0x00 - uint32_t cksum_magic; // 0x04 - uint32_t save_count; // 0x08 - uint32_t cksum_len[2]; // 0x0c - uint32_t cksum_value[2]; // 0x14 -}; -_Static_assert(sizeof(struct param_dir_st) == 28, "param_dir_st is the wrong size"); - -enum sdk_dhcp_status sdk_dhcpc_flag = DHCP_STARTED; -bool sdk_cpu_overclock; -struct sdk_rst_info sdk_rst_if; -sdk_wifi_promiscuous_cb_t sdk_promiscuous_cb; - -static uint8_t _system_upgrade_flag; // Ldata009 - -// Timer to execute a second phase of switching to a deep sleep -static ETSTimer deep_sleep_timer; - -// Prototypes for static functions -static bool _check_boot_version(void); -static void _deep_sleep_phase2(void *timer_arg); -static struct netif *_get_netif(uint32_t mode); - -// Linker-created values used by sdk_system_print_meminfo -extern uint8_t _data_start[], _data_end[]; -extern uint8_t _rodata_start[], _rodata_end[]; -extern uint8_t _bss_start[], _bss_end[]; -extern uint8_t _heap_start[]; - -#define _rom_reset_vector ((void (*)(void))0x40000080) - -void IRAM sdk_system_restart_in_nmi(void) { - uint32_t buf[8]; - - sdk_system_rtc_mem_read(0, buf, 32); - if (buf[0] != 2) { - memset(buf, 0, 32); - buf[0] = 3; - sdk_system_rtc_mem_write(0, buf, 32); - } - - uart_flush_txfifo(0); - uart_flush_txfifo(1); - - if (!sdk_NMIIrqIsOn) { - portENTER_CRITICAL(); - do { - DPORT.DPORT0 = SET_FIELD(DPORT.DPORT0, DPORT_DPORT0_FIELD0, 0); - } while (DPORT.DPORT0 & 1); - } - - ESPSAR.UNKNOWN_48 |= 3; - DPORT.CLOCKGATE_WATCHDOG |= DPORT_CLOCKGATE_WATCHDOG_UNKNOWN_8; - ESPSAR.UNKNOWN_48 &= ~3; - DPORT.CLOCKGATE_WATCHDOG &= ~DPORT_CLOCKGATE_WATCHDOG_UNKNOWN_8; - - Wait_SPI_Idle(&sdk_flashchip); - Cache_Read_Disable(); - DPORT.SPI_CACHE_RAM &= ~(DPORT_SPI_CACHE_RAM_BANK0 | DPORT_SPI_CACHE_RAM_BANK1); - // This calls directly to 0x40000080, the "reset" exception vector address. - _rom_reset_vector(); -} - -bool IRAM sdk_system_rtc_mem_write(uint32_t des_addr, void *src_addr, uint16_t save_size) { - uint32_t volatile *src_buf = (uint32_t *)src_addr; - - if (des_addr > 191) { - return false; - } - if ((intptr_t)src_addr & 3) { - return false; - } - if ((768 - (des_addr * 4)) < save_size) { - return false; - } - if ((save_size & 3) != 0) { - save_size = (save_size & ~3) + 4; - } - for (uint8_t i = 0; i < (save_size >> 2); i++) { - RTCMEM_SYSTEM[des_addr + i] = src_buf[i]; - } - return true; -} - -bool IRAM sdk_system_rtc_mem_read(uint32_t src_addr, void *des_addr, uint16_t save_size) { - uint32_t *dest_buf = (uint32_t *)des_addr; - - if (src_addr > 191) { - return false; - } - if ((intptr_t)des_addr & 3) { - return false; - } - if ((768 - (src_addr * 4)) < save_size) { - return false; - } - if ((save_size & 3) != 0) { - save_size = (save_size & ~3) + 4; - } - for (uint8_t i = 0; i < (save_size >> 2); i++) { - dest_buf[i] = RTCMEM_SYSTEM[src_addr + i]; - } - return true; -} - -void sdk_system_pp_recycle_rx_pkt(struct esf_buf *esf_buf) { - sdk_ppRecycleRxPkt(esf_buf); -} - -uint16_t sdk_system_adc_read(void) { - return sdk_test_tout(false); -} - -void sdk_system_restart(void) { - if (sdk_wifi_get_opmode() != 2) { - sdk_wifi_station_stop(); - } - if (sdk_wifi_get_opmode() != 1) { - sdk_wifi_softap_stop(); - } - vTaskDelay(6); - IOMUX_GPIO12 |= IOMUX_PIN_PULLUP; - sdk_wDev_MacTim1SetFunc(sdk_system_restart_in_nmi); - sdk_wDev_MacTim1Arm(3); -} - -void sdk_system_restore(void) { - struct sdk_g_ic_saved_st *buf; - - buf = malloc(sizeof(struct sdk_g_ic_saved_st)); - memset(buf, 0xff, sizeof(struct sdk_g_ic_saved_st)); - memcpy(buf, &sdk_g_ic.s, 8); - sdk_wifi_param_save_protect(buf); - free(buf); -} - -uint8_t sdk_system_get_boot_version(void) { - return sdk_g_ic.s.boot_info & 0x1f; -} - -static bool _check_boot_version(void) { - uint8_t ver = sdk_system_get_boot_version(); - if (ver < 3 || ver == 31) { - printf("failed: need boot >= 1.3\n"); - return false; - } - return true; -} - -int sdk_system_get_test_result(void) { - if (_check_boot_version()) { - return (sdk_g_ic.s.boot_info >> 5) & 1; - } else { - return -1; - } -} - -uint32_t sdk_system_get_userbin_addr(void) { - uint8_t buf[8]; - uint16_t unknown_var = 0; //FIXME: read but never written? - uint32_t addr; - uint32_t flash_size_code; - - if (!(sdk_g_ic.s.boot_info >> 7)) { - if (sdk_g_ic.s._unknown1d8 & 0x4) { - addr = sdk_g_ic.s.user1_addr[0] | (sdk_g_ic.s.user1_addr[1] << 8) | -(sdk_g_ic.s.user1_addr[2] << 16); - } else { - addr = sdk_g_ic.s.user0_addr[0] | (sdk_g_ic.s.user0_addr[1] << 8) | (sdk_g_ic.s.user0_addr[2] << 16); - } - } else { - if (!sdk_system_upgrade_userbin_check()) { - addr = 0x00001000; - } else { - sdk_spi_flash_read(0, (uint32_t *)buf, 8); - flash_size_code = buf[3] >> 4; - if (flash_size_code >= 2 && flash_size_code < 5) { - flash_size_code = 0x81; - } else if (flash_size_code == 1) { - flash_size_code = 0x41; - } else { - // FIXME: In the original code, this loads from a local stack - // variable, which is never actually assigned to anywhere. - // It's unclear what this value is actually supposed to be. - flash_size_code = unknown_var; - } - addr = flash_size_code << 12; - } - } - return addr; -} - -uint8_t sdk_system_get_boot_mode(void) { - int boot_version = sdk_g_ic.s.boot_info & 0x1f; - if (boot_version < 3 || boot_version == 0x1f) { - return 1; - } - return sdk_g_ic.s.boot_info >> 7; -} - -bool sdk_system_restart_enhance(uint8_t bin_type, uint32_t bin_addr) { - uint32_t current_addr; - - if (!_check_boot_version()) { - return false; - } - if (bin_type == 0) { - current_addr = sdk_system_get_userbin_addr(); - printf("restart to use user bin @ %x\n", bin_addr); - sdk_g_ic.s.user1_addr[0] = bin_addr; - sdk_g_ic.s.user1_addr[1] = bin_addr >> 8; - sdk_g_ic.s.user1_addr[2] = bin_addr >> 16; - sdk_g_ic.s.user0_addr[0] = current_addr; - sdk_g_ic.s.user0_addr[1] = current_addr >> 8; - sdk_g_ic.s.user0_addr[2] = current_addr >> 16; - sdk_g_ic.s._unknown1d8 = (sdk_g_ic.s._unknown1d8 & 0xfb) | 0x04; - sdk_g_ic.s.boot_info &= 0x7f; - sdk_wifi_param_save_protect(&sdk_g_ic.s); - sdk_system_restart(); - return true; - } else { - if (bin_type != 1) { - printf("don't supported type.\n"); - return false; - } - if (!sdk_system_get_test_result()) { - printf("test already passed.\n"); - return false; - } - - printf("reboot to use test bin @ %x\n", bin_addr); - sdk_g_ic.s.user0_addr[0] = bin_addr; - sdk_g_ic.s.user0_addr[1] = bin_addr >> 8; - sdk_g_ic.s.user0_addr[2] = bin_addr >> 16; - sdk_g_ic.s.boot_info &= 0xbf; - sdk_wifi_param_save_protect(&sdk_g_ic.s); - sdk_system_restart(); - - return true; - } -} - -bool sdk_system_upgrade_userbin_set(uint8_t userbin) { - uint8_t userbin_val, userbin_mask; - uint8_t boot_ver = sdk_system_get_boot_version(); - - if (userbin >= 2) { - return false; - } else { - if (boot_ver == 2 || boot_ver == 0x1f) { - userbin_val = userbin & 0x0f; - userbin_mask = 0xf0; - } else { - userbin_val = userbin & 0x03; - userbin_mask = 0xfc; - } - sdk_g_ic.s._unknown1d8 = (sdk_g_ic.s._unknown1d8 & userbin_mask) | userbin_val; - return true; - } -} - -uint8_t sdk_system_upgrade_userbin_check(void) { - uint8_t boot_ver = sdk_system_get_boot_version(); - if (boot_ver != 0x1f && boot_ver != 2) { - if ((sdk_g_ic.s._unknown1d8 & 0x03) == 1) { - if (sdk_g_ic.s._unknown1d8 & 0x4) { - return 1; - } else { - return 0; - } - } else { - if (sdk_g_ic.s._unknown1d8 & 0x4) { - return 0; - } else { - return 1; - } - } - } else { - if ((sdk_g_ic.s._unknown1d8 & 0x0f) == 1) { - return 1; - } else { - return 0; - } - } -} - -bool sdk_system_upgrade_flag_set(uint8_t flag) { - if (flag < 3) { - _system_upgrade_flag = flag; - return true; - } - return false; -} - -uint8_t sdk_system_upgrade_flag_check(void) { - return _system_upgrade_flag; -} - -bool sdk_system_upgrade_reboot(void) { - uint8_t boot_ver = sdk_system_get_boot_version(); - uint8_t new__unknown1d8; - - if (_system_upgrade_flag != 2) { - return false; - } - printf("reboot to use"); - if (boot_ver != 2 && boot_ver != 0x1f) { - sdk_g_ic.s.boot_info = (sdk_g_ic.s.boot_info & 0x7f) | 0x80; - sdk_g_ic.s._unknown1d8 = (sdk_g_ic.s._unknown1d8 & 0xfb) | 0x04; - if ((sdk_g_ic.s._unknown1d8 & 0x03) == 1) { - printf("1\n"); - new__unknown1d8 = sdk_g_ic.s._unknown1d8 & 0xfc; - } else { - printf("2\n"); - new__unknown1d8 = (sdk_g_ic.s._unknown1d8 & 0xfc) | 0x01; - } - } else { - if ((sdk_g_ic.s._unknown1d8 & 0x0f) == 1) { - printf("1\n"); - new__unknown1d8 = sdk_g_ic.s._unknown1d8 & 0xf0; - } else { - printf("2\n"); - new__unknown1d8 = (sdk_g_ic.s._unknown1d8 & 0xf0) | 0x01; - } - } - sdk_g_ic.s._unknown1d8 = new__unknown1d8; - sdk_wifi_param_save_protect(&sdk_g_ic.s); - sdk_system_restart(); - return true; -} - -static void _deep_sleep_phase2(void *timer_arg) { - uint32_t time_in_us = (uint32_t)timer_arg; - - printf("deep sleep %ds\n\n", time_in_us / 1000000); - while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(0).STATUS)) {} - while (FIELD2VAL(UART_STATUS_TXFIFO_COUNT, UART(1).STATUS)) {} - RTC.CTRL0 = 0; - RTC.CTRL0 &= 0xffffbfff; - RTC.CTRL0 |= 0x00000030; - RTC._unknown44 = 0x00000004; - RTC._unknownc = 0x00010010; - RTC._unknown48 = (RTC._unknown48 & 0xffff01ff) | 0x0000fc00; - RTC._unknown48 = (RTC._unknown48 & 0xfffffe00) | 0x00000080; - RTC.COUNTER_ALARM = RTC.COUNTER + 136; - RTC.RESET_REASON2 = 0x00000008; - RTC.RESET_REASON0 = 0x00100000; - sdk_os_delay_us(200); - RTC.GPIO_CFG[2] = 0x00000011; - RTC.GPIO_CFG[3] = 0x00000003; - RTC._unknownc = 0x000640c8; - RTC.CTRL0 &= 0xffffffcf; - sdk_pm_rtc_clock_cali_proc(); - sdk_pm_set_sleep_time(time_in_us); - RTC.GPIO_CFG[2] = 0x00000011; - RTC.GPIO_CFG[3] = 0x00000003; - DPORT.INT_ENABLE &= ~(DPORT_INT_ENABLE_WDT); - _xt_isr_mask(1 << ETS_WDT_INUM); - RTC._unknown40 = 0xffffffff; - RTC._unknown44 = 0x00000020; - RTC._unknown10 = 0x00000000; - if (time_in_us == 0) { - RTC.RESET_REASON2 = 0x00000000; - } else { - RTC.RESET_REASON2 = 0x00000008; - } - RTC.RESET_REASON0 = 0x00100000; -} - -void sdk_system_deep_sleep(uint32_t time_in_us) { - if (sdk_wifi_get_opmode() != 2) { - sdk_wifi_station_stop(); - } - if (sdk_wifi_get_opmode() != 1) { - sdk_wifi_softap_stop(); - } - sdk_os_timer_disarm(&sdk_sta_con_timer); - - // Originally deep sleep function reused sdk_sta_con_timer - // but we can't mix functions sdk_ets_timer_ with sdk_os_timer_ for the - // same timer. So now deep sleep function uses a separate timer. - sdk_ets_timer_disarm(&deep_sleep_timer); - sdk_ets_timer_setfn(&deep_sleep_timer, _deep_sleep_phase2, (void *)time_in_us); - sdk_ets_timer_arm(&deep_sleep_timer, 100, 0); -} - -bool sdk_system_update_cpu_freq(uint8_t freq) { - if (freq == 80) { - DPORT.CPU_CLOCK &= ~(DPORT_CPU_CLOCK_X2); - sdk_os_update_cpu_frequency(80); - } else if (freq == 160) { - DPORT.CPU_CLOCK |= DPORT_CPU_CLOCK_X2; - sdk_os_update_cpu_frequency(160); - } else { - return false; - } - return true; -} - -uint8_t sdk_system_get_cpu_freq(void) { - return sdk_os_get_cpu_frequency(); -} - -bool sdk_system_overclock(void) { - if (sdk_system_get_cpu_freq() == 80) { - sdk_cpu_overclock = true; - sdk_system_update_cpu_freq(160); - return true; - } - return false; -} - -bool sdk_system_restoreclock(void) { - if (sdk_system_get_cpu_freq() == 160 && sdk_cpu_overclock) { - sdk_cpu_overclock = false; - sdk_system_update_cpu_freq(80); - return true; - } - return false; -} - -uint32_t sdk_system_get_time(void) { - return WDEV.SYS_TIME + sdk_WdevTimOffSet; -} - -uint32_t sdk_system_relative_time(uint32_t reltime) { - return WDEV.SYS_TIME - reltime; -} - -void sdk_system_station_got_ip_set(struct ip4_addr *ip, struct ip4_addr *mask, struct ip4_addr *gw) { - uint8_t *ip_bytes = (uint8_t *)&ip->addr; - uint8_t *mask_bytes = (uint8_t *)&mask->addr; - uint8_t *gw_bytes = (uint8_t *)&gw->addr; - uint32_t gpio_mask; - - sdk_g_ic.v.station_netif_info->connect_status = STATION_GOT_IP; - printf("ip:%d.%d.%d.%d,mask:%d.%d.%d.%d,gw:%d.%d.%d.%d", ip_bytes[0], ip_bytes[1], ip_bytes[2], ip_bytes[3], mask_bytes[0], mask_bytes[1], mask_bytes[2], mask_bytes[3], gw_bytes[0], gw_bytes[1], gw_bytes[2], gw_bytes[3]); - printf("\n"); - if ((sdk_g_ic.s.wifi_led_enable == 1) && (sdk_g_ic.s.wifi_mode == 1)) { - sdk_os_timer_disarm(&sdk_sta_con_timer); - gpio_mask = 1 << sdk_g_ic.s.wifi_led_gpio; - sdk_gpio_output_set(0, gpio_mask, gpio_mask, 0); - } -} - -extern void *xPortSupervisorStackPointer; - -void sdk_system_print_meminfo(void) { - uint8_t *heap_end = xPortSupervisorStackPointer; - printf("%s: %p ~ %p, len: %d\n", "data ", _data_start, _data_end, _data_end - _data_start); - printf("%s: %p ~ %p, len: %d\n", "rodata", _rodata_start, _rodata_end, _rodata_end - _rodata_start); - printf("%s: %p ~ %p, len: %d\n", "bss ", _bss_start, _bss_end, _bss_end - _bss_start); - printf("%s: %p ~ %p, len: %d\n", "heap ", _heap_start, heap_end, heap_end - _heap_start); -} - -uint32_t sdk_system_get_free_heap_size(void) { - return xPortGetFreeHeapSize(); -} - -uint32_t sdk_system_get_chip_id(void) { - uint32_t mac0 = DPORT.OTP_MAC0 & 0xff000000; - uint32_t mac1 = DPORT.OTP_MAC1 & 0x00ffffff; - return (mac1 << 8) | (mac0 >> 24); -} - -uint32_t sdk_system_rtc_clock_cali_proc(void) { - return sdk_pm_rtc_clock_cali_proc(); -} - -uint32_t sdk_system_get_rtc_time(void) { - return RTC.COUNTER; -} - -struct sdk_rst_info *sdk_system_get_rst_info(void) { - return &sdk_rst_if; -} - -struct netif *sdk_system_get_netif(uint32_t mode) { - return _get_netif(mode); -} - -static struct netif *_get_netif(uint32_t mode) { - struct sdk_g_ic_netif_info *info; - - if (mode >= 2) { - return NULL; - } - if (mode == 0) { - info = sdk_g_ic.v.station_netif_info; - } else { - info = sdk_g_ic.v.softap_netif_info; - } - if (info) { - return info->netif; - } - return NULL; -} - -bool sdk_wifi_station_dhcpc_start(void) { - struct netif *netif = _get_netif(0); - if (sdk_wifi_get_opmode() == 2) { - return false; - } - if (netif && sdk_dhcpc_flag == DHCP_STOPPED) { - sdk_info.sta_ipaddr.addr = 0; - sdk_info.sta_netmask.addr = 0; - sdk_info.sta_gw.addr = 0; - LOCK_TCPIP_CORE(); - netif_set_addr(netif, &sdk_info.sta_ipaddr, &sdk_info.sta_netmask, &sdk_info.sta_gw); - if (dhcp_start(netif)) { - UNLOCK_TCPIP_CORE(); - return false; - } - UNLOCK_TCPIP_CORE(); - } - sdk_dhcpc_flag = DHCP_STARTED; - return true; -} - -bool sdk_wifi_station_dhcpc_stop(void) { - struct netif *netif = _get_netif(0); - if (sdk_wifi_get_opmode() == 2) { - return false; - } - LOCK_TCPIP_CORE(); - if (netif && sdk_dhcpc_flag == DHCP_STARTED) { - dhcp_stop(netif); - } - sdk_dhcpc_flag = DHCP_STOPPED; - UNLOCK_TCPIP_CORE(); - return true; -} - -enum sdk_dhcp_status sdk_wifi_station_dhcpc_status(void) { - return sdk_dhcpc_flag; -} - - -#ifndef WIFI_PARAM_SAVE -#define WIFI_PARAM_SAVE 1 -#endif - -#if WIFI_PARAM_SAVE -static void wifi_save_protect(uint32_t sector, uint32_t sector_size, uint32_t *arg2, size_t size) { - uint32_t *buffer = malloc(size); - uint32_t offset = sector * sector_size; - - do { - sdk_spi_flash_erase_sector(sector); - sdk_spi_flash_write(offset, arg2, size); - sdk_spi_flash_read(offset, buffer, size); - if (memcmp(buffer, arg2, size) == 0) { - break; - } - printf("[W]sec %d error\n", sector); - } while (1); - - free(buffer); -} -#endif - -void sdk_wifi_param_save_protect(struct sdk_g_ic_saved_st *params) { -#if WIFI_PARAM_SAVE - uint32_t sector_size = sdk_flashchip.sector_size; - uint32_t sectors = sdk_flashchip.chip_size / sector_size; - - uint32_t dir_sector = sectors - 1; - struct param_dir_st dir; - sdk_spi_flash_read(dir_sector * sector_size, (uint32_t *)&dir, sizeof(dir)); - uint8_t current_sector = dir.current_sector ? 1 : 0; - dir.current_sector = current_sector; - - uint32_t param_sector_start = sectors - 3; - wifi_save_protect(param_sector_start + current_sector, sector_size, - (uint32_t *)params, sizeof(struct sdk_g_ic_saved_st)); - - dir.cksum_magic = 0x55AA55AA; - uint32_t save_count = dir.save_count + 1; - dir.save_count = (save_count) ? save_count : 1; - dir.cksum_len[current_sector] = sizeof(dir); - uint32_t checksum = sdk_system_get_checksum((uint8_t *)params, sizeof(dir)); - dir.cksum_value[current_sector] = checksum; - wifi_save_protect(dir_sector, sector_size, (uint32_t *)&dir, sizeof(dir)); -#endif -} - - -uint8_t sdk_wifi_station_get_connect_status() { - if (sdk_wifi_get_opmode() == 2) // ESPCONN_AP - return 0xff; - - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.station_netif_info; - if (!netif_info) - return 0xff; - - return netif_info->connect_status; -} - -bool sdk_wifi_get_ip_info(uint8_t if_index, struct ip_info *info) { - if (if_index >= 2) return false; - if (!info) return false; - struct netif *netif = _get_netif(if_index); - if (netif) { - ip4_addr_set(&info->ip, ip_2_ip4(&netif->ip_addr)); - ip4_addr_set(&info->netmask, ip_2_ip4(&netif->netmask)); - ip4_addr_set(&info->gw, ip_2_ip4(&netif->gw)); - return true; - } - - info->ip.addr = 0; - info->netmask.addr = 0; - info->gw.addr = 0; - return false; -} - -bool sdk_wifi_set_ip_info(uint8_t if_index, struct ip_info *info) { - if (if_index >= 2) return false; - if (!info) return false; - - if (if_index != 0) { - sdk_info.softap_ipaddr = info->ip; - sdk_info.softap_netmask = info->netmask; - sdk_info.softap_gw = info->gw; - } else { - if (sdk_dhcpc_flag == 1 && sdk_user_init_flag == 1) - return false; - sdk_info.sta_ipaddr = info->ip; - sdk_info.sta_netmask = info->netmask; - sdk_info.sta_gw = info->gw; - } - - struct netif *netif = _get_netif(if_index); - if (netif) { - LOCK_TCPIP_CORE(); - netif_set_addr(netif, &info->ip, &info->netmask, &info->gw); - UNLOCK_TCPIP_CORE(); - } - - return true; -} - -bool sdk_wifi_get_macaddr(uint8_t if_index, uint8_t *macaddr) { - if (if_index >= 2) return false; - if (!macaddr) return false; - - struct netif *netif = _get_netif(if_index); - if (!netif) { - if (if_index != 0) { - memcpy(macaddr, sdk_info.softap_mac_addr, 6); - return true; - } - memcpy(macaddr, sdk_info.sta_mac_addr, 6); - return true; - } - memcpy(macaddr, netif->hwaddr, 6); - return true; -} - -bool sdk_wifi_set_macaddr(uint8_t if_index, uint8_t *macaddr) { - if (if_index >= 2) return false; - if (!macaddr) return false; - - struct netif *netif = _get_netif(if_index); - uint8_t mode = sdk_wifi_get_opmode(); - - if (if_index == 0) { - if (mode == STATION_MODE) return false; - if (memcmp(sdk_info.softap_mac_addr, macaddr, 6)) { - memcpy(sdk_info.softap_mac_addr, macaddr, 6); - if (netif) { - memcpy(netif->hwaddr, macaddr, 6); - sdk_wifi_softap_stop(); - sdk_wifi_softap_start(); - } - } - return true; - } - - if (mode == SOFTAP_MODE) return false; - if (memcmp(sdk_info.sta_mac_addr, macaddr, 6)) { - memcpy(sdk_info.sta_mac_addr, macaddr, 6); - if (netif) { - memcpy(netif->hwaddr, macaddr, 6); - sdk_wifi_station_stop(); - sdk_wifi_station_start(); - sdk_wifi_station_connect(); - } - } - - return true; -} - -void sdk_system_uart_swap() -{ - uart_flush_txfifo(0); - uart_flush_txfifo(1); - - /* Disable pullup IO_MUX_MTDO, Alt TX. GPIO15. */ - iomux_set_pullup_flags(3, 0); - /* IO_MUX_MTDO to function UART0_RTS. */ - iomux_set_function(3, IOMUX_GPIO15_FUNC_UART0_RTS); - /* Enable pullup MUX_MTCK. Alt RX. GPIO13. */ - iomux_set_pullup_flags(1, IOMUX_PIN_PULLUP); - /* IO_MUX_MTCK to function UART0_CTS. */ - iomux_set_function(1, IOMUX_GPIO13_FUNC_UART0_CTS); - - DPORT.PERI_IO |= DPORT_PERI_IO_SWAP_UART0_PINS; -} - -void sdk_system_uart_de_swap() -{ - uart_flush_txfifo(0); - uart_flush_txfifo(1); - - /* Disable pullup IO_MUX_U0TXD, TX. GPIO 1. */ - iomux_set_pullup_flags(5, 0); - /* IO_MUX_U0TXD to function UART0_TXD. */ - iomux_set_function(5, IOMUX_GPIO1_FUNC_UART0_TXD); - /* Enable pullup IO_MUX_U0RXD. RX. GPIO 3. */ - iomux_set_pullup_flags(4, IOMUX_PIN_PULLUP); - /* IO_MUX_U0RXD to function UART0_RXD. */ - iomux_set_function(4, IOMUX_GPIO3_FUNC_UART0_RXD); - - DPORT.PERI_IO &= ~DPORT_PERI_IO_SWAP_UART0_PINS; -} - -enum sdk_sleep_type sdk_wifi_get_sleep_type() -{ - return sdk_pm_get_sleep_type(); -} - -bool sdk_wifi_set_sleep_type(enum sdk_sleep_type type) -{ - if (type > WIFI_SLEEP_MODEM) return false; - sdk_pm_set_sleep_type_from_upper(type); - return true; -} diff --git a/open_esplibs/libmain/xtensa_context.S b/open_esplibs/libmain/xtensa_context.S deleted file mode 100644 index 9e94cfd..0000000 --- a/open_esplibs/libmain/xtensa_context.S +++ /dev/null @@ -1,51 +0,0 @@ -/* Recreated Espressif libmain xtensa_context.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBMAIN_XTENSA_CONTEXT -// The contents of this file are only built if OPEN_LIBMAIN_XTENSA_CONTEXT is set to true - - .section .iram1.text, "ax", @progbits - - .balign 4 - .global sdk__xt_context_save - .type sdk__xt_context_save, @function -sdk__xt_context_save: - - s32i a2, sp, 20 - s32i a3, sp, 24 - s32i a4, sp, 28 - s32i a5, sp, 32 - s32i a6, sp, 36 - s32i a7, sp, 40 - s32i a8, sp, 44 - s32i a9, sp, 48 - s32i a10, sp, 52 - s32i a11, sp, 56 - rsr a3, sar - s32i a3, sp, 76 - ret - - .balign 4 - .global sdk__xt_context_restore - .type sdk__xt_context_restore, @function -sdk__xt_context_restore: - l32i a3, sp, 76 - l32i a2, sp, 20 - wsr a3, sar - l32i a3, sp, 24 - l32i a4, sp, 28 - l32i a5, sp, 32 - l32i a6, sp, 36 - l32i a7, sp, 40 - l32i a8, sp, 44 - l32i a9, sp, 48 - l32i a10, sp, 52 - l32i a11, sp, 56 - l32i a12, sp, 60 - l32i a13, sp, 64 - ret - -#endif /* OPEN_LIBMAIN_XTENSA_CONTEXT */ diff --git a/open_esplibs/libnet80211/ieee80211_ets.c b/open_esplibs/libnet80211/ieee80211_ets.c deleted file mode 100644 index 7d0620d..0000000 --- a/open_esplibs/libnet80211/ieee80211_ets.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Recreated Espressif libnet80211 ieee80211_ets.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBNET80211_ETS -// The contents of this file are only built if OPEN_LIBNET80211_ETS is set to true - -#endif /* OPEN_LIBNET80211_ETS */ diff --git a/open_esplibs/libnet80211/ieee80211_hostap.c b/open_esplibs/libnet80211/ieee80211_hostap.c deleted file mode 100644 index fec4801..0000000 --- a/open_esplibs/libnet80211/ieee80211_hostap.c +++ /dev/null @@ -1,314 +0,0 @@ -/* Recreated Espressif libnet80211 ieee80211_hostap.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ - -#include -#include "tcpip.h" -#include "espressif/esp_wifi.h" -#include "espressif/esp_misc.h" -#include "etstimer.h" -#include "esplibs/libmain.h" -#include "esplibs/libnet80211.h" -#include "esplibs/libpp.h" -#include "esplibs/libwpa.h" - -static uint8_t hostap_flags = 0; -static ETSTimer hostap_timer; -static struct esf_buf *hostap_timer_parg = NULL; - -void IRAM *zalloc(size_t nbytes); - -static void IRAM hostap_timer_func(struct esf_buf *esf_buf) { - struct sdk_cnx_node *cnx_node = sdk_g_ic.v.softap_netif_info->cnx_nodes[0]; - int32_t mode = sdk_wifi_get_phy_mode(); - uint8_t *frame = esf_buf->frame; - *(uint16_t *)(frame + 22) = (cnx_node->_unknown9c - 1) << 4; - - cnx_node->_unknown9c += 1; - - if (sdk_g_ic.s.wifi_led_enable) { - uint32_t gpio = sdk_g_ic.s.wifi_led_gpio; - uint32_t state = sdk_g_ic.s.wifi_led_state; - sdk_gpio_output_set(state << gpio, (((state & 1) == 0) ? 1 : 0) << gpio, - 1 << gpio, 0); - sdk_g_ic.s.wifi_led_state = (state & 1) ? 0 : 1; - } - - uint8_t *frame2 = frame + sdk_g_ic.s._unknown288 + (mode == 1 ? 23 : 27) ; - memcpy(frame2 + 29, &sdk_g_ic.v._unknown1d2, 1); - - uint32_t v1 = frame2[26]; - if (v1 == 0) { - v1 = frame2[27]; - } - frame2[26] = v1 - 1; - - uint32_t v2 = sdk_ieee80211_chan2ieee(sdk_g_ic.v._unknown14c); - frame2[23] = v2; - sdk_g_ic.s._unknown30d = v2; - - int32_t v3 = *((volatile int32_t *)0x3ff20c00); // mactime - *(uint32_t *)(esf_buf->extra + 16) = v3; - *(uint32_t *)(frame + 24) = v3; - *(uint32_t *)(frame + 28) = 0; - - if (sdk_chm_check_same_channel()) { - hostap_flags |= 1; - sdk_ppTxPkt(esf_buf); - return; - } - sdk_ets_timer_disarm(&hostap_timer); - sdk_ets_timer_arm(&hostap_timer, sdk_wDev_Get_Next_TBTT(), 0); -} - -static void IRAM hostap_tx_callback() { - uint32_t flags = hostap_flags & 0xfe; - - if (sdk_TmpSTAAPCloseAP == 0) { - hostap_flags = flags; - sdk_ets_timer_disarm(&hostap_timer); - sdk_ets_timer_arm(&hostap_timer, sdk_wDev_Get_Next_TBTT(), 0); - return; - } - - sdk_PendFreeBcnEb = 1; - - if (flags & 2) { - hostap_flags = flags & 0xfd; - sdk_wifi_softap_start(); - return; - } - - hostap_flags = flags; -} - -static void hostap_attach_misc() { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.softap_netif_info; - - struct _unknown_softap1 *ptr1 = zalloc(28); // 0x1c - netif_info->_unknownb4 = ptr1; - - struct _unknown_softap2 *ptr2 = zalloc(204); // 0xcc - ptr1->_unknown04 = ptr2; - - struct _unknown_wpa1 *ptr3 = zalloc(76); // 0x4c - - uint32_t v1 = sdk_g_ic.s._unknown30e; - if (v1 == 2) { - ptr3->_unknown00 = 1; - } else if (v1 == 3) { - ptr3->_unknown00 = 2; - } else if (v1 == 4) { - ptr3->_unknown00 = 3; - } - - ptr3->_unknown28 = 2; - ptr3->_unknown04 = 2; - ptr3->_unknown0c = 2; - ptr3->_unknown08 = 10; - ptr3->_unknown20 = 10; - - int s1 = (sdk_g_ic.s._unknown28a << 16) | sdk_g_ic.s._unknown288; - memcpy(&ptr2->_unknown10, &sdk_g_ic.s._unknown28c, s1); - ptr2->_unknown30 = s1; - - uint8_t *ptr4 = zalloc(64); // 0x40 - ptr2->_unknown3c = ptr4; - - char *str1 = sdk_g_ic.s._unknown2ac; - memcpy(ptr4, str1, strlen(str1)); - - struct sdk_cnx_node *cnx_node = netif_info->cnx_nodes[0]; - - ptr2->_unknownb4 = 300; - - netif_info->_unknown4c = 3; - netif_info->_unknown48 |= 16; - - cnx_node->_unknown08 |= 1; - - sdk_hostapd_setup_wpa_psk(ptr2); - - struct netif *netif = netif_info->netif; - - ptr1->_unknown18 = sdk_wpa_init(&netif->hwaddr, ptr3, 0); - - free(ptr3); -} - -static void softap_stop_free() { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.softap_netif_info; - netif_info->_unknown4c = 0; - netif_info->_unknown48 &= 0xffffffef; - netif_info->cnx_nodes[0]->_unknown08 = 0; - - struct _unknown_softap1 *unkb4 = netif_info->_unknownb4; - if (!unkb4) return; - - uint32_t *unk18 = unkb4->_unknown18; - if (unk18) { - uint32_t *ptr1 = ((uint32_t **)unk18)[20]; - if (ptr1) - free(ptr1); - - uint32_t *ptr2 = *(uint32_t **)unk18; - if (ptr2) - free(ptr2); - - free(unk18); - } - - struct _unknown_softap2 *unk04 = unkb4->_unknown04; - if (unk04) { - uint32_t *unk38 = unk04->_unknown38; - if (unk38) - free(unk38); - - uint8_t *unk3c = unk04->_unknown3c; - if (unk3c) - free(unk3c); - - free(unk04); - } - - free(unkb4); - netif_info->_unknownb4 = NULL; -} - -void sdk_ieee80211_hostap_attach(struct sdk_g_ic_st *ic) { - uint32_t scratch[12]; // ?? - struct sdk_g_ic_netif_info *netif_info = ic->v.softap_netif_info; - - uint32_t v1 = ic->s._unknown30e; - if (v1 >= 2 && v1 < 5) - hostap_attach_misc(); - - struct netif *netif = netif_info->netif; - sdk_ic_bss_info_update(1, &netif->hwaddr, 2, 100); - - ic->v._unknown1d0 = 0; - netif_info->_unknown3c = 5; - - sdk_ppRegisterTxCallback(hostap_tx_callback, 4); - - hostap_timer_parg = sdk_ieee80211_beacon_alloc(netif_info, scratch); - sdk_ets_timer_disarm(&hostap_timer); - sdk_ets_timer_setfn(&hostap_timer, (ETSTimerFunc *)hostap_timer_func, hostap_timer_parg); - sdk_wDev_Reset_TBTT(); - sdk_ets_timer_arm(&hostap_timer, sdk_wDev_Get_Next_TBTT(), 0); -} - -bool sdk_wifi_softap_start() { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.softap_netif_info; - if (!netif_info) return 0; - if (netif_info->started) return 1; - - uint8_t flags = hostap_flags; - if (flags & 1) { - hostap_flags = flags | 2; - return 1; - } - - uint8_t (*mac_addr)[6] = &sdk_info.softap_mac_addr; - if (!netif_info->netif) { - struct netif *netif = (struct netif *)malloc(sizeof(struct netif)); - netif_info->netif = netif; - memcpy(&netif->hwaddr, mac_addr, 6); - LOCK_TCPIP_CORE(); - netif_add(netif, &sdk_info.softap_ipaddr, &sdk_info.softap_netmask, - &sdk_info.softap_gw, netif_info, ethernetif_init, tcpip_input); - UNLOCK_TCPIP_CORE(); - } - - sdk_ic_set_vif(1, 1, mac_addr, 1, 0); - - LOCK_TCPIP_CORE(); - netif_set_up(netif_info->netif); - UNLOCK_TCPIP_CORE(); - - if (sdk_wifi_get_opmode() != 3 || - !sdk_g_ic.v.station_netif_info || - sdk_g_ic.v.station_netif_info->_unknown3c < 2) { - - uint32_t i1 = (sdk_g_ic.s._unknown30d - 1) & 0xff; - - int nmi_on = sdk_NMIIrqIsOn; - if (!nmi_on) { - vPortEnterCritical(); - - do { - DPORT.DPORT0 = DPORT.DPORT0 & 0xffffffe0; - } while (DPORT.DPORT0 & 1); - } - - // current channel? - uint32_t *chan = &sdk_g_ic.v._unknown84[i1 * 3]; - sdk_g_ic.v._unknown14c = chan; - - if (!nmi_on) { - DPORT.DPORT0 = (DPORT.DPORT0 & 0xffffffe0) | 1; - vPortExitCritical(); - } - - sdk_chm_set_current_channel(chan); - } - - sdk_ieee80211_hostap_attach(&sdk_g_ic); - sdk_TmpSTAAPCloseAP = 0; - netif_info->started = 1; - return 1; -} - -bool sdk_wifi_softap_stop() { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.softap_netif_info; - - if (!netif_info) - return 0; - - if (!netif_info->started) - return 1; - - uint32_t end = sdk_g_ic.s._unknown310 + 2; - uint32_t count = 1; - - // Note this defensive test seems dead code, the value is loaded - // as a uint8_t value so adding 2 ensures this test always passes. - if (end >= 2) { - do { - struct sdk_cnx_node *cnx_node = netif_info->cnx_nodes[count]; - if (cnx_node) { - struct sdk_cnx_node *cnx_node2 = netif_info->_unknown88; - netif_info->_unknown88 = cnx_node; - - sdk_ieee80211_send_mgmt(netif_info, 160, 4); - sdk_ieee80211_send_mgmt(netif_info, 192, 2); - - netif_info->_unknown88 = cnx_node2; - - sdk_cnx_node_leave(netif_info, netif_info->cnx_nodes[count]); - - // Number of entries might have changed, perhaps - // should have if one was removed above? - end = sdk_g_ic.s._unknown310 + 2; - } - count++; - } while (count < end); - } - - LOCK_TCPIP_CORE(); - netif_set_down(netif_info->netif); - UNLOCK_TCPIP_CORE(); - sdk_TmpSTAAPCloseAP = 1; - sdk_ets_timer_disarm(&hostap_timer); - sdk_ic_bss_info_update(1, &sdk_info.softap_mac_addr, 2, 0); - sdk_ic_set_vif(1, 0, NULL, 1, 0); - softap_stop_free(); - - if ((hostap_flags & 1) == 0) - sdk_esf_buf_recycle(hostap_timer_parg, 4); - - netif_info->started = 0; - return 1; -} diff --git a/open_esplibs/libnet80211/ieee80211_input.c b/open_esplibs/libnet80211/ieee80211_input.c deleted file mode 100644 index 583dba9..0000000 --- a/open_esplibs/libnet80211/ieee80211_input.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Recreated Espressif libnet80211 ieee80211_input.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ - -#include "esplibs/libpp.h" - -void IRAM sdk_ieee80211_deliver_data(struct sdk_g_ic_netif_info *netif_info, struct esf_buf *esf_buf) { - struct netif *netif = netif_info->netif; - - if (netif->flags & NETIF_FLAG_LINK_UP) { - uint16_t length = esf_buf->length; - struct pbuf *pbuf = pbuf_alloc_reference(esf_buf->pbuf2->payload, length, PBUF_ALLOC_FLAG_RX | PBUF_TYPE_ALLOC_SRC_MASK_ESP_RX); - esf_buf->pbuf1 = pbuf; - pbuf->esf_buf = (void *)esf_buf; - ethernetif_input(netif, pbuf); - return; - } - - if (esf_buf) - sdk_ppRecycleRxPkt(esf_buf); - - return; -} diff --git a/open_esplibs/libnet80211/ieee80211_sta.c b/open_esplibs/libnet80211/ieee80211_sta.c deleted file mode 100644 index 7c405cb..0000000 --- a/open_esplibs/libnet80211/ieee80211_sta.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Recreated Espressif libnet80211 ieee80211_sta.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ - -#include -#include "esplibs/libmain.h" -#include "esplibs/libnet80211.h" -#include "esplibs/libpp.h" -#include "esplibs/libwpa.h" -#include "tcpip.h" -#include "espressif/esp_sta.h" - - -void sdk_sta_status_set(int status) { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.station_netif_info; - uint32_t statusb8 = netif_info->statusb8; - - if (statusb8 == 1 || statusb8 == status) { - uint32_t statusb9 = netif_info->statusb9 + 1; - netif_info->statusb9 = statusb9; - if (statusb9 == 3) - netif_info->connect_status = status; - } else { - netif_info->statusb9 = 0; - netif_info->connect_status = 1; - } - - netif_info->statusb8 = status; - - return; -} - -bool sdk_wifi_station_start() { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.station_netif_info; - if (!netif_info) - return 0; - - if (!netif_info->started) { - if (!netif_info->netif) { - struct netif *netif = (struct netif *)malloc(sizeof(struct netif)); - netif_info->netif = netif; - memcpy(&netif->hwaddr, &sdk_info.sta_mac_addr, 6); - LOCK_TCPIP_CORE(); - netif_add(netif, &sdk_info.sta_ipaddr, &sdk_info.sta_netmask, - &sdk_info.sta_gw, netif_info, ethernetif_init, tcpip_input); - UNLOCK_TCPIP_CORE(); - sdk_wpa_attach(&sdk_g_ic); - } - sdk_ic_set_vif(0, 1, &sdk_info.sta_mac_addr, 0, 0); - netif_info->statusb8 = 0; - netif_info->statusb9 = 0; - netif_info->started = 1; - } - - return 1; -} - -bool sdk_wifi_station_stop() { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.station_netif_info; - if (!netif_info) - return 0; - - if (netif_info->started) { - netif_info->statusb8 = 0; - netif_info->statusb9 = 0; - sdk_wifi_station_disconnect(); - sdk_ic_set_vif(0, 0, NULL, 0, 0); - netif_info->started = 0; - } - - return 1; -} diff --git a/open_esplibs/libnet80211/wl_cnx.c b/open_esplibs/libnet80211/wl_cnx.c deleted file mode 100644 index bb5ec12..0000000 --- a/open_esplibs/libnet80211/wl_cnx.c +++ /dev/null @@ -1,215 +0,0 @@ -/* Recreated Espressif libnet80211 wl_cnx.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ - -#include "espressif/esp_misc.h" -#include "esplibs/libnet80211.h" -#include "esplibs/libpp.h" -#include "esplibs/libwpa.h" -#include -#include "lwip/dhcp.h" - -/* Need to use the sdk versions of these for now as there are reference to them - * relative to other data structres. */ -extern ETSTimer sdk_sta_con_timer; -extern void *sdk_g_cnx_probe_rc_list_cb; - -/* - * Called from the ESP sdk_cnx_sta_leave function. Split out via a hack to the - * binary library to allow modification to track changes to lwip, for example - * changes to the offset of the netif->flags removal of the NETIF_FLAG_DHCP flag - * lwip v2 etc. - */ -void dhcp_if_down(struct netif *netif) -{ - LOCK_TCPIP_CORE(); - dhcp_release_and_stop(netif); - netif_set_down(netif); - UNLOCK_TCPIP_CORE(); -} - -struct sdk_cnx_node *sdk_cnx_rc_search(uint8_t *hwaddr) { - size_t len = *(uint8_t *)(sdk_g_ic.v._unknown0 + 0x689); - struct sdk_cnx_node **table = (struct sdk_cnx_node **)(sdk_g_ic.v._unknown0 + 0x670); - size_t i; - - for (i = 0; i < len; i++) { - struct sdk_cnx_node *cnx_node = table[i]; - if (cnx_node && memcmp(cnx_node->mac_addr, hwaddr, 6) == 0) { - return cnx_node; - } - } - - return NULL; -} - -int sdk_cnx_add_rc(struct sdk_cnx_node *cnx_node) { - size_t len = *(uint8_t *)(sdk_g_ic.v._unknown0 + 0x689); - struct sdk_cnx_node **table = (struct sdk_cnx_node **)(sdk_g_ic.v._unknown0 + 0x670); - - if (len >= 6) { - return -1; - } - - if (len < 2) { - table[len] = cnx_node; - } else { - struct wl_channel *channel = cnx_node->channel; - size_t found; - for (found = 0; found < len; found++) { - if (table[found]->channel == channel) { - break; - } - } - - if (found >= len) { - /* Add to the end. */ - table[len] = cnx_node; - } else { - /* Make room. */ - size_t next = found + 1; - size_t i; - for (i = len; i > next; i--) { - table[i] = table[i - 1];; - } - table[next] = cnx_node; - } - } - - *(uint8_t *)(sdk_g_ic.v._unknown0 + 0x689) += 1; - return 0; -} - -void sdk_cnx_remove_rc(struct sdk_cnx_node *cnx_node) { - size_t len = *(uint8_t *)(sdk_g_ic.v._unknown0 + 0x689); - struct sdk_cnx_node **table = (struct sdk_cnx_node **)(sdk_g_ic.v._unknown0 + 0x670); - size_t i; - - for (i = 0; i < len; i++) { - if (table[i] == cnx_node) { - bzero(cnx_node, 0x110); - table[i] = NULL; - len -= 1; - *(uint8_t *)(sdk_g_ic.v._unknown0 + 0x689) = len; - break; - } - } - - /* Fill the hole */ - for (; i < len; i++) { - table[i] = table[i + 1]; - } -} - -#if 0 - -// Most of the code in this file assesses static data so it will be all or none. -static uint32_t Ldata001; -static uint8_t Ldata003; -static uint8_t Ldata004; -static uint32_t Ldata006; -static void *Ldate007; - -void sdk_cnx_sta_leave(struct sdk_g_ic_netif_info *netif_info, void *arg1) { - struct netif *netif = netif_info->netif; - - uint32_t phy_type = sdk_ieee80211_phy_type_get(); - uint16_t v1 = *(uint16_t *)(arg1 + 0x1a) & 0xfff; - sdk_ic_set_sta(0, 0, arg1, 0, v1, phy_type, 0, 0); - - // Note the SDK binary was modified here as it made use of the - // netif flags which changed in lwip v2. - dhcp_if_down(netif); - - uint32_t v2 = *(uint8_t *)(arg1 + 0xe8); - free(sdk_g_ic.v._unknown190[v2]); - sdk_g_ic.v._unknown190[v2] = NULL; - - if (sdk_g_ic.v._unknown190[0]) { - free(sdk_g_ic.v._unknown190[0]); - sdk_g_ic.v._unknown190[0] = NULL; - } - - if (sdk_g_ic.v._unknown190[1]) { - free(sdk_g_ic.v._unknown190[1]); - sdk_g_ic.v._unknown190[1] = NULL; - } - - sdk_scan_cancel(); - - sdk_wDev_SetRxPolicy(0, 0, 0); - - Ldata001 = 2; - - uint8_t v3 = *(uint8_t *)(arg1 + 0x6); - if (v3 & 2) { - *(uint8_t *)(arg1 + 0x6) = v3 & 0xfd; - sdk_cnx_rc_update_state_metric(arg1, -7, 1); - Ldate007 = arg1; - } - - sdk_cnx_remove_rc(arg1); - - Ldata006 = 0; - *(uint32_t *)(arg1 + 0x8) &= 0xfffffffe; - netif_info->_unknown88 = NULL; - - return; -} -#endif - -void sdk_cnx_node_remove(struct sdk_cnx_node *cnx_node) { - const uint32_t num = sdk_g_ic.s._unknown310 + 2; - if ((int32_t)num < (int32_t)2) { - return; - } - - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.softap_netif_info; - uint32_t i = 1; - do { - if (netif_info->cnx_nodes[i] == cnx_node) { - uint32_t v2 = cnx_node->_unknowne8; - sdk_ic_remove_key(v2 + 2); - sdk_wpa_auth_sta_deinit(cnx_node->_unknowne4); - free(sdk_g_ic.v._unknown190[v2]); - sdk_g_ic.v._unknown190[v2] = NULL; - free(cnx_node); - netif_info->cnx_nodes[i] = NULL; - return; - } - i += 1; - } while (i < num); -} - -struct sdk_cnx_node *sdk_cnx_node_search(uint8_t mac[6]) -{ - int end = sdk_g_ic.s._unknown310 + 2; - - // Note this defensive test seems dead code, the value is loaded - // as a uint8_t value so adding 2 ensures this test never passes. - if (end < 1) - return NULL; - - struct sdk_cnx_node **cnx_nodes = sdk_g_ic.v.softap_netif_info->cnx_nodes; - - /* Multicast addresses */ - if (mac[0] & 0x01) { - return cnx_nodes[0]; - } - - int i = 0; - do { - struct sdk_cnx_node *cnx_node = cnx_nodes[i]; - - if (cnx_node) { - if (memcmp(mac, cnx_node->mac_addr, 6) == 0) { - return cnx_node; - } - } - i++; - } while (i < end); - - return NULL; -} diff --git a/open_esplibs/libphy/phy.c b/open_esplibs/libphy/phy.c deleted file mode 100644 index 4e27fdb..0000000 --- a/open_esplibs/libphy/phy.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Recreated Espressif libphy phy.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBNET80211_WL_CNX -// The contents of this file are only built if OPEN_LIBPHY_PHY is set to true - - -#endif /* OPEN_LIBPHY_PHY */ diff --git a/open_esplibs/libphy/phy_chip_v6.c b/open_esplibs/libphy/phy_chip_v6.c deleted file mode 100644 index 096258d..0000000 --- a/open_esplibs/libphy/phy_chip_v6.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Recreated Espressif libphy phy_chip_v6.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBNET80211_WL_CNX -// The contents of this file are only built if OPEN_LIBPHY_PHY_CHIP_V6 is set to true - - -#endif /* OPEN_LIBPHY_PHY_CHIP_V6 */ diff --git a/open_esplibs/libphy/phy_sleep.c b/open_esplibs/libphy/phy_sleep.c deleted file mode 100644 index db10250..0000000 --- a/open_esplibs/libphy/phy_sleep.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Recreated Espressif libphy phy_chip_sleep.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBNET80211_WL_CNX -// The contents of this file are only built if OPEN_LIBPHY_PHY_CHIP_SLEEP is set to true - - -#endif /* OPEN_LIBPHY_PHY_CHIP_SLEEP */ diff --git a/open_esplibs/libpp/esf_buf.c b/open_esplibs/libpp/esf_buf.c deleted file mode 100644 index f6d0bc9..0000000 --- a/open_esplibs/libpp/esf_buf.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Recreated Espressif libpp esf_buf.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBPP_ESF_BUF -// The contents of this file are only built if OPEN_LIBPHY_PHY_CHIP_SLEEP is set to true - - -#endif /* OPEN_LIBPP_ESF_BUF */ diff --git a/open_esplibs/libpp/if_hwctrl.c b/open_esplibs/libpp/if_hwctrl.c deleted file mode 100644 index c023a4e..0000000 --- a/open_esplibs/libpp/if_hwctrl.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Recreated Espressif libpp if_hwctrl.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBPP_IF_HWCTRL -// The contents of this file are only built if OPEN_LIBPHY_PHY_CHIP_SLEEP is set to true - - -#endif /* OPEN_LIBPP_IF_HWCTRL */ diff --git a/open_esplibs/libpp/lmac.c b/open_esplibs/libpp/lmac.c deleted file mode 100644 index d80d560..0000000 --- a/open_esplibs/libpp/lmac.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Recreated Espressif libpp lmac.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBPP_LMAC -// The contents of this file are only built if OPEN_LIBPHY_PHY_CHIP_SLEEP is set to true - - -#endif /* OPEN_LIBPP_LMAC */ diff --git a/open_esplibs/libpp/pm.c b/open_esplibs/libpp/pm.c deleted file mode 100644 index 232b248..0000000 --- a/open_esplibs/libpp/pm.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Recreated Espressif libpp pm.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBPP_PM -// The contents of this file are only built if OPEN_LIBPHY_PHY_CHIP_SLEEP is set to true - - -#endif /* OPEN_LIBPP_PM */ diff --git a/open_esplibs/libpp/pp.c b/open_esplibs/libpp/pp.c deleted file mode 100644 index 4439c5a..0000000 --- a/open_esplibs/libpp/pp.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Recreated Espressif libpp pp.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#include "stdlib.h" -#include "stdint.h" - -/* - * This replaces a dynamic allocation, a call to zalloc(), from within a - * critical section in the ppTask. The allocation aquired the malloc lock and - * doing so withing a critical section is not safe because it might preempt - * another task which is not possible from within a critical section. The data - * is written to the rtc memory, and was then freed. The freeing has been - * patched to be a nop. - */ -static const uint32_t pp_zeros[8]; -void *_ppz20(size_t n) -{ - return &pp_zeros; -} - -#if OPEN_LIBPP_PP -// The contents of this file are only built if OPEN_LIBPHY_PHY_CHIP_SLEEP is set to true - - -#endif /* OPEN_LIBPP_PP */ diff --git a/open_esplibs/libpp/wdev.c b/open_esplibs/libpp/wdev.c deleted file mode 100644 index 902b3dc..0000000 --- a/open_esplibs/libpp/wdev.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Recreated Espressif libpp wdev.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBPP_WDEV -// The contents of this file are only built if OPEN_LIBPP_WDEV is set to true - -// Note the SDK allocated 8000 bytes for TX buffers that appears to be -// unused. Rather TX buffers appear to be allocated by upper layers. The -// location of this areas is at wDevCtrl + 0x2190. The SDK has been modified -// to allocate only one word (4 bytes) per buffer on initialization and even -// these seem unused but to be sure avoid the first 20 bytes. So there are -// 7980 bytes free starting at wDevCtrl + 0x21a4. - -#endif /* OPEN_LIBPP_WDEV */ diff --git a/open_esplibs/libwpa/os_xtensa.c b/open_esplibs/libwpa/os_xtensa.c deleted file mode 100644 index a5beba6..0000000 --- a/open_esplibs/libwpa/os_xtensa.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Recreated Espressif libwpa is_xtensa.s contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ -#include "open_esplibs.h" -#if OPEN_LIBWPA_OS_XTENSA -// The contents of this file are only built if OPEN_LIBWPA_WPA_MAIN is set to true - -#include -#include -#include -#include - -// Used by wpa_get_ntp_timestamp. -int IRAM sdk_os_get_time(uint32_t time[]) { - return 0; -} - -uint32_t IRAM sdk_os_random() { - return rand(); -} - -int IRAM sdk_os_get_random(uint8_t *dst, uint32_t size) { - uint32_t end = size >> 2; - if (end > 0) { - uint32_t i = 0; - do { - uint32_t n = rand(); - memcpy(dst, &n, sizeof(n)); - dst += 4; - i++; - } while (i < end); - } - return 0; -} - -#endif /* OPEN_LIBWPA_OS_XTENSA */ diff --git a/open_esplibs/libwpa/wpa_main.c b/open_esplibs/libwpa/wpa_main.c deleted file mode 100644 index 1c5646e..0000000 --- a/open_esplibs/libwpa/wpa_main.c +++ /dev/null @@ -1,131 +0,0 @@ -/* Recreated Espressif libwpa wpa_main.o contents. - - Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. - BSD Licensed as described in the file LICENSE -*/ - -#include -#include -#include "espressif/user_interface.h" -#include "etstimer.h" -#include "espressif/osapi.h" -#include "espressif/esp_sta.h" -#include "esplibs/libnet80211.h" -#include "esplibs/libmain.h" -#include "esplibs/libwpa.h" -#include "esplibs/libpp.h" -#include "lwip/dhcp.h" -#include "esp/rtcmem_regs.h" - -static void wpa_callback1(struct pbuf* pb) { - struct netif *netif = sdk_g_ic.v.station_netif_info->netif; - sdk_ieee80211_output_pbuf(netif, pb); -} - -static void wpa_callback2(int arg0) { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.station_netif_info; - sdk_ieee80211_send_mgmt(netif_info, 192, arg0); - sdk_ieee80211_sta_new_state(&sdk_g_ic, 2, (arg0 << 8) | 192); -} - -void sdk_wpa_config_profile(struct sdk_g_ic_st *g_ic) { - uint8_t v = g_ic->s._unknown209; - - if (v == 2 || v == 3 || v == 6) { - sdk_wpa_set_profile(1); - return; - } - - if (v == 4 || v == 5 || v == 7) - sdk_wpa_set_profile(2); -} - -void sdk_wpa_config_bss(struct sdk_g_ic_st *g_ic, uint8_t (* hwaddr2)[6]) { - struct sdk_g_ic_netif_info *netif_info = g_ic->v.station_netif_info; - struct netif *netif = netif_info->netif; - sdk_wpa_set_bss(netif->hwaddr, hwaddr2, g_ic->s._unknown20a, g_ic->s._unknown20c, - g_ic->s.sta_password, g_ic->s.sta_ssid.ssid, - g_ic->s.sta_ssid.ssid_length); -} - -void sdk_wpa_config_assoc_ie(int arg0, int16_t *arg1, int32_t arg2) { - if (arg0 != 1) - sdk_g_ic.v._unknown178 = arg1; - else - sdk_g_ic.v._unknown174 = arg1; - - *arg1 = arg2; -} - -void sdk_dhcp_bind_check(void *parg) { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.station_netif_info; - uint8_t connect_status = netif_info->connect_status; - uint8_t unknown20a = sdk_g_ic.s._unknown20a; - - if (connect_status != STATION_GOT_IP) { - if (unknown20a == 7 || unknown20a == 8) { - netif_info->connect_status = STATION_CONNECTING; - } - } -} - -void sdk_eagle_auth_done() { - struct sdk_g_ic_netif_info *netif_info = sdk_g_ic.v.station_netif_info; - struct netif *netif = netif_info->netif; - struct sdk_cnx_node *cnx_node = netif_info->_unknown88; - - if (cnx_node->_unknown08 & 1) - return; - - uint32_t channel = cnx_node->channel->num; - char *ssid = (char *)sdk_g_ic.s.sta_ssid.ssid; - printf("\nconnected with %s, channel %d\n", ssid, channel); - - RTCMEM_SYSTEM[61] = 0x00010000 | channel; - - ETSTimer *timer = &netif_info->timer; - sdk_os_timer_disarm(timer); - sdk_os_timer_setfn(timer, sdk_dhcp_bind_check, 0); - sdk_os_timer_arm(timer, 15000, 0); - - netif_info->statusb9 = 0; - cnx_node->_unknown18 = 0; - cnx_node->_unknown08 |= 1; - - if (dhcp_supplied_address(netif)) - return; - - if (sdk_dhcpc_flag != DHCP_STOPPED) { - printf("dhcp client start...\n"); - LOCK_TCPIP_CORE(); - netif_set_up(netif); - dhcp_start(netif); - UNLOCK_TCPIP_CORE(); - return; - } - - if (ip4_addr_isany_val(sdk_info.sta_ipaddr)) { - printf("expected a static ip address?\n"); - return; - } - - LOCK_TCPIP_CORE(); - netif_set_addr(netif, &sdk_info.sta_ipaddr, &sdk_info.sta_netmask, &sdk_info.sta_gw); - netif_set_up(netif); - UNLOCK_TCPIP_CORE(); - sdk_system_station_got_ip_set(ip_2_ip4(&netif->ip_addr), - ip_2_ip4(&netif->netmask), - ip_2_ip4(&netif->gw)); -} - -void sdk_wpa_neg_complete() { - sdk_eagle_auth_done(); -} - -void sdk_wpa_attach(struct sdk_g_ic_st *g_ic) { - g_ic->v._unknown180 = NULL; - g_ic->v._unknown184 = &(g_ic->v._unknown180); - sdk_wpa_register(0, wpa_callback1, sdk_wpa_config_assoc_ie, sdk_ppInstallKey, - wpa_callback2, sdk_wpa_neg_complete); - sdk_ppRegisterTxCallback(sdk_eapol_txcb, 3); -} diff --git a/parameters.mk b/parameters.mk index d133ef5..e750e83 100644 --- a/parameters.mk +++ b/parameters.mk @@ -60,13 +60,13 @@ OBJDUMP = $(CROSS)objdump # Source components to compile and link. Each of these are subdirectories # of the root, with a 'component.mk' file. -COMPONENTS ?= $(EXTRA_COMPONENTS) FreeRTOS lwip core open_esplibs +COMPONENTS ?= $(EXTRA_COMPONENTS) FreeRTOS lwip core # binary esp-iot-rtos SDK libraries to link. These are pre-processed prior to linking. SDK_LIBS ?= main net80211 phy pp wpa # open source libraries linked in -LIBS ?= hal +LIBS ?= hal gcc c # set to 0 if you want to use the toolchain libc instead of esp-open-rtos newlib OWN_LIBC ?= 1 @@ -90,7 +90,7 @@ C_CXX_FLAGS ?= -Wall -Wl,-EL -nostdlib $(EXTRA_C_CXX_FLAGS) # Flags for C only CFLAGS ?= $(C_CXX_FLAGS) -std=gnu99 $(EXTRA_CFLAGS) # Flags for C++ only -CXXFLAGS ?= $(C_CXX_FLAGS) -std=c++0x -fno-exceptions -fno-rtti $(EXTRA_CXXFLAGS) +CXXFLAGS ?= $(C_CXX_FLAGS) -fno-exceptions -fno-rtti $(EXTRA_CXXFLAGS) # these aren't all technically preprocesor args, but used by all 3 of C, C++, assembler CPPFLAGS += -mlongcalls -mtext-section-literals @@ -114,7 +114,7 @@ else ifeq ($(FLAVOR),sdklike) # the output of the compiler used to build the SDK libs (for comparison of # disassemblies when coding replacement routines). It is not normally # intended to be used otherwise. - CFLAGS += -O2 -Os -fno-inline -fno-ipa-cp -fno-toplevel-reorder -fno-caller-saves -fconserve-stack + CFLAGS += -O2 -Os -fno-inline -fno-ipa-cp -fno-toplevel-reorder LDFLAGS += -O2 else C_CXX_FLAGS += -g -O2 @@ -130,7 +130,6 @@ CPPFLAGS += -DGITSHORTREV=$(GITSHORTREV) LINKER_SCRIPTS += $(ROOT)ld/program.ld $(ROOT)ld/rom.ld # rboot firmware binary paths for flashing -RBOOT_ARGS ?= 0x0 $(RBOOT_BIN) 0x1000 $(RBOOT_CONF) RBOOT_BIN = $(ROOT)bootloader/firmware/rboot.bin RBOOT_PREBUILT_BIN = $(ROOT)bootloader/firmware_prebuilt/rboot.bin RBOOT_CONF = $(ROOT)bootloader/firmware_prebuilt/blank_config.bin diff --git a/tests/Makefile b/tests/Makefile deleted file mode 100644 index 9f0fc41..0000000 --- a/tests/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -PROGRAM=tests - -EXTRA_COMPONENTS=extras/dhcpserver extras/spiffs - -PROGRAM_SRC_DIR = . ./cases - -FLASH_SIZE = 32 - -# spiffs configuration -SPIFFS_BASE_ADDR = 0x200000 -SPIFFS_SIZE = 0x100000 - -# Add unity test framework headers & core source file -PROGRAM_INC_DIR = ./unity/src ./fs-test -PROGRAM_EXTRA_SRC_FILES = ./unity/src/unity.c ./fs-test/fs_test.c - -TESTCASE_SRC_FILES = $(wildcard $(PROGRAM_DIR)cases/*.c) - -# Link every object in the 'program' archive, to pick up constructor functions for test cases -PROGRAM_WHOLE_ARCHIVE = yes - -include ../common.mk diff --git a/tests/README.md b/tests/README.md deleted file mode 100644 index 90b08a8..0000000 --- a/tests/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# esp-open-rtos tests - -Testing is based on [Unity](https://github.com/ThrowTheSwitch/Unity) -C testing framework. - -## Features - -* Single device test case. -* Dual devices test cases. Run test case on two ESP8266 modules simultaneously. -* Run only specified test cases. -* List available test cases on a device. - -## Usage - -There's a test runner script `test_runner.py` written in Python3 that runs -test cases on ESP8266 connected to a host. - -### Requirements and dependencies - -* Python3 version > 3.4 `sudo apt-get install python3 python3-pip` -* pyserial `sudo pip3 install pyserial` -* ESP8266 board with reset to boot mode support -* Two ESP8266 for dual mode test cases - -Test runner is heavily relying on device reset using DTR and RTS signals. -Popular ESP8266 boards such as **NodeMcu** and **Wemos D1** support device -reset into flash mode. - -### Options - -`--type` or `-t` - Type of test case to run. Can be 'solo' or 'dual'. -If not specified 'solo' test will be run. - -`--aport` or `-a` - Serial port for device A. -If not specified device `/dev/ttyUSB0` is used. - -`--bport` or `-b` - Serial port for device B. -If not specified device `/dev/ttyUSB1` is used. - -`--no-flash` or `-n` - Do not flash the test firmware before running tests. - -`--list` or `-l` - Display list of the available test cases on the device. - -### Example - -Build test firmware, flash it using serial device `/dev/tty.wchusbserial1410` -and run only *solo* test cases: - -`./test_runner.py -a /dev/tty.wchusbserial1410` - -Build test firmware. Flash both devices as `-t dual` is specified. And run both -*solo* and *dual* test cases: - -`./test_runner.py -a /dev/tty.wchusbserial1410 -b /dev/tty.wchusbserial1420 -t dual` - -Do not flash the firmware, only display available test cases on the device: - -`./test_runner.py -a /dev/tty.wchusbserial1410 -n -l` - -Do not flash the firmware and run only 2 and 4 test cases: - -`./test_runner.py -a /dev/tty.wchusbserial1410 -n 2 4` - -## References - -[Unity](https://github.com/ThrowTheSwitch/Unity) - Simple Unit Testing for C diff --git a/tests/cases/01_scheduler.c b/tests/cases/01_scheduler.c deleted file mode 100644 index aa9b1c0..0000000 --- a/tests/cases/01_scheduler.c +++ /dev/null @@ -1,71 +0,0 @@ -#include "testcase.h" -#include -#include -#include - -/* Basic test cases to validate the FreeRTOS scheduler works */ - -DEFINE_SOLO_TESTCASE(01_scheduler_basic) -DEFINE_SOLO_TESTCASE(01_scheduler_priorities) - -void set_variable(void *pvParameters) -{ - bool *as_bool = (bool *)pvParameters; - *as_bool = true; - /* deliberately a busywait at the end, not vTaskSuspend, to test priorities */ - while(1) { } -} - -/* Really simple - do created tasks run? */ -static void a_01_scheduler_basic() -{ - volatile bool a = false, b = false, c = false; - printf("top of scheduler...\n"); - uart_flush_txfifo(0); - - xTaskCreate(set_variable, "set_a", 128, (void *)&a, tskIDLE_PRIORITY, NULL); - xTaskCreate(set_variable, "set_b", 128, (void *)&b, tskIDLE_PRIORITY, NULL); - xTaskCreate(set_variable, "set_c", 128, (void *)&c, tskIDLE_PRIORITY, NULL); - - TEST_ASSERT_FALSE_MESSAGE(a, "task set_a shouldn't run yet"); - TEST_ASSERT_FALSE_MESSAGE(b, "task set_b shouldn't run yet"); - TEST_ASSERT_FALSE_MESSAGE(c, "task set_c shouldn't run yet"); - - vTaskDelay(5); - - TEST_ASSERT_TRUE_MESSAGE(a, "task set_a should have run"); - TEST_ASSERT_TRUE_MESSAGE(b, "task set_b should have run"); - TEST_ASSERT_TRUE_MESSAGE(c, "task set_c should have run"); - TEST_PASS(); -} - -/* Verify that a high-priority task will starve a lower priority task */ -static void a_01_scheduler_priorities() -{ - /* Increase priority of the init task to make sure it always takes priority */ - vTaskPrioritySet(xTaskGetCurrentTaskHandle(), tskIDLE_PRIORITY+4); - - bool lower = false, higher = false; - TaskHandle_t task_lower, task_higher; - - xTaskCreate(set_variable, "high_prio", 128, (void *)&higher, tskIDLE_PRIORITY+1, &task_higher); - xTaskCreate(set_variable, "low_prio", 128, (void *)&lower, tskIDLE_PRIORITY, &task_lower); - - TEST_ASSERT_FALSE_MESSAGE(higher, "higher prio task should not have run yet"); - TEST_ASSERT_FALSE_MESSAGE(lower, "lower prio task should not have run yet"); - - vTaskDelay(2); - - TEST_ASSERT_TRUE_MESSAGE(higher, "higher prio task should have run"); - TEST_ASSERT_FALSE_MESSAGE(lower, "lower prio task should not have run"); - - /* Bump lower priority task over higher priority task */ - vTaskPrioritySet(task_lower, tskIDLE_PRIORITY+2); - - TEST_ASSERT_FALSE_MESSAGE(lower, "lower prio task should still not have run yet"); - - vTaskDelay(1); - - TEST_ASSERT_TRUE_MESSAGE(lower, "lower prio task should have run"); - TEST_PASS(); -} diff --git a/tests/cases/02_heap.c b/tests/cases/02_heap.c deleted file mode 100644 index 54bb5e3..0000000 --- a/tests/cases/02_heap.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "testcase.h" -#include -#include -#include - -DEFINE_SOLO_TESTCASE(02_heap_simple) -DEFINE_SOLO_TESTCASE(02_heap_full) - -/* Simple heap accounting tests */ -static void a_02_heap_simple() -{ - struct mallinfo info = mallinfo(); - printf("'arena' allocation size %d bytes\n", info.arena); - /* This is really a sanity check, if the "arena" size shrinks then - this is a good thing and we can update the test. If it grows - then we can also update the test, but we need a good reason. */ - TEST_ASSERT_INT_WITHIN_MESSAGE(1000, 15000, info.arena, "Initial allocated heap should be approximately 15kB. SEE COMMENT."); - - uint32_t freeheap = xPortGetFreeHeapSize(); - printf("xPortGetFreeHeapSize = %d bytes\n", freeheap); - TEST_ASSERT_TRUE_MESSAGE(freeheap > 20000, "Should be at least 20kB free."); - - uint8_t *buf = malloc(8192); - /* <-- have to do something with buf or gcc helpfully optimises it out! */ - memset(buf, 0xEE, 8192); - uint32_t after = xPortGetFreeHeapSize(); - struct mallinfo after_info = mallinfo(); - printf("after arena size = %d bytes\n", after_info.arena); - printf("after xPortGetFreeHeapSize = %d bytes\n", after); - TEST_ASSERT_UINT32_WITHIN_MESSAGE(100, info.arena+8192, after_info.arena, "Allocated heap 'after' size should be 8kB more than before"); - TEST_ASSERT_UINT32_WITHIN_MESSAGE(100, freeheap-8192, after, "Free heap size should be 8kB less than before"); - - free(buf); - after = xPortGetFreeHeapSize(); - printf("after freeing xPortGetFreeHeapSize = %d bytes\n", after); - TEST_ASSERT_UINT32_WITHIN_MESSAGE(100, freeheap, after, "Free heap size after freeing buffer should be close to initial"); - TEST_PASS(); -} - -/* Ensure malloc behaves when out of memory */ -static void a_02_heap_full() -{ - void *x = malloc(65536); - TEST_ASSERT_NULL_MESSAGE(x, "Allocating 64kB should fail and return null"); - - void *y = malloc(32768); - TEST_ASSERT_NOT_NULL_MESSAGE(y, "Allocating 32kB should succeed"); - - void *z = malloc(32768); - TEST_ASSERT_NULL_MESSAGE(z, "Allocating second 32kB should fail"); - - free(y); - z = malloc(32768); - TEST_ASSERT_NOT_NULL_MESSAGE(z, "Allocating 32kB should succeed after first block freed"); - TEST_PASS(); -} diff --git a/tests/cases/03_byte_load_flash.c b/tests/cases/03_byte_load_flash.c deleted file mode 100644 index ccbe50e..0000000 --- a/tests/cases/03_byte_load_flash.c +++ /dev/null @@ -1,481 +0,0 @@ -/** - * Unit tests to verify the "unaligned load handler" in core/exception_vectors.S - * that allows us to complete byte loads from unaligned memory, etc. - * - * Adapted from a test program in 'experiments' that did this. - */ -#include "testcase.h" -#include "esp/rom.h" -#include "esp/timer.h" -#include "esp/uart.h" -#include "espressif/esp_common.h" -#include "xtensa_ops.h" -#include "FreeRTOS.h" -#include "task.h" -#include "queue.h" - -#include "string.h" -#include "strings.h" - -#include - -#define TESTSTRING "O hai there! %d %d %d" - -static char dramtest[] = TESTSTRING; - -static const __attribute__((section(".iram1.notrodata"))) - char iramtest[] = TESTSTRING; - -static const __attribute__((section(".text.notrodata"))) - char iromtest[] = TESTSTRING; - -static const volatile __attribute__((section(".iram1.notliterals"))) - int16_t unsigned_shorts[] = { -3, -4, -5, -32767, 44 }; - -static const __attribute__((section(".iram1.notrodata"))) - char sanity_test_data[] = { - 0x01, 0x55, 0x7e, 0x2a, 0x81, 0xd5, 0xfe, 0xaa - }; - -DEFINE_SOLO_TESTCASE(03_byte_load_verify_sections) - -#define PTR_IN_REGION(PTR, START, LEN) \ - ((START <= (intptr_t)(PTR)) && ((intptr_t)(PTR) < (START+LEN))) - -/* Sanity check, ensure the addresses of the various test strings - * are in the correct address space regions. */ -static void a_03_byte_load_verify_sections() -{ - printf("dramtest addr %p\n", dramtest); - TEST_ASSERT_MESSAGE(PTR_IN_REGION(dramtest, 0x3FFE8000, 0x14000), - "dramtest should be in DRAM region"); - - printf("iramtest addr %p\n", iramtest); - TEST_ASSERT_MESSAGE(PTR_IN_REGION(iramtest, 0x40100000, 0x8000), - "iramtest should be in IRAM region"); - - printf("iromtest addr %p\n", iromtest); - TEST_ASSERT_MESSAGE(PTR_IN_REGION(iromtest, 0x40202010, (0x100000 - 0x2010)), - "iromtest sohuld be in IROM region"); - - printf("unsigned_shorts addr %p\n", unsigned_shorts); - TEST_ASSERT_MESSAGE(PTR_IN_REGION(unsigned_shorts, 0x40100000, 0x8000), - "unsigned_shorts should be in IRAM region"); - - printf("sanity_test_data addr %p\n", sanity_test_data); - TEST_ASSERT_MESSAGE(PTR_IN_REGION(sanity_test_data, 0x40100000, 0x8000), - "sanity_test_data should be in IRAM region"); - - TEST_PASS(); -} - - -/* test utility functions used for '03_byte_load_test_strings' - - returns the expected string result */ -typedef const char *(* test_with_fn_t)(const char *string); - -static char buf[64]; - -static const char * test_memcpy_aligned(const char *string) -{ - memcpy(buf, string, 16); - return "O hai there! %d "; -} - -static const char * test_memcpy_unaligned(const char *string) -{ - memcpy(buf, string, 15); - return "O hai there! %d"; -} - - -static const char * test_memcpy_unaligned2(const char *string) -{ - memcpy(buf, string+1, 15); - return " hai there! %d "; -} - -static const char * test_strcpy(const char *string) -{ - strcpy(buf, string); - return dramtest; -} - -static const char * test_sprintf(const char *string) -{ - sprintf(buf, string, 1, 2, 3); - return "O hai there! 1 2 3"; -} - -static const char * test_sprintf_arg(const char *string) -{ - sprintf(buf, "%s", string); - return dramtest; -} - -static const char * test_naive_strcpy(const char *string) -{ - char *to = buf; - while((*to++ = *string++)) - ; - return dramtest; -} - -static const char * test_naive_strcpy_a0(const char *string) -{ - asm volatile ( -" mov a8, %0 \n" -" mov a9, %1 \n" -"tns_loop%=: l8ui a0, a9, 0 \n" -" addi.n a9, a9, 1 \n" -" s8i a0, a8, 0 \n" -" addi.n a8, a8, 1 \n" -" bnez a0, tns_loop%=\n" - : : "r" (buf), "r" (string) : "a0", "a8", "a9"); - return dramtest; -} - -static const char * test_naive_strcpy_a2(const char *string) -{ - asm volatile ( -" mov a8, %0 \n" -" mov a9, %1 \n" -"tns_loop%=: l8ui a2, a9, 0 \n" -" addi.n a9, a9, 1 \n" -" s8i a2, a8, 0 \n" -" addi.n a8, a8, 1 \n" -" bnez a2, tns_loop%=\n" - : : "r" (buf), "r" (string) : "a2", "a8", "a9"); - return dramtest; -} - -static const char * test_naive_strcpy_a3(const char *string) -{ - asm volatile ( -" mov a8, %0 \n" -" mov a9, %1 \n" -"tns_loop%=: l8ui a3, a9, 0 \n" -" addi.n a9, a9, 1 \n" -" s8i a3, a8, 0 \n" -" addi.n a8, a8, 1 \n" -" bnez a3, tns_loop%=\n" - : : "r" (buf), "r" (string) : "a3", "a8", "a9"); - return TESTSTRING; -} - -static const char * test_naive_strcpy_a4(const char *string) -{ - asm volatile ( -" mov a8, %0 \n" -" mov a9, %1 \n" -"tns_loop%=: l8ui a4, a9, 0 \n" -" addi.n a9, a9, 1 \n" -" s8i a4, a8, 0 \n" -" addi.n a8, a8, 1 \n" -" bnez a4, tns_loop%=\n" - : : "r" (buf), "r" (string) : "a4", "a8", "a9"); - return TESTSTRING; -} - -static const char * test_naive_strcpy_a5(const char *string) -{ - asm volatile ( -" mov a8, %0 \n" -" mov a9, %1 \n" -"tns_loop%=: l8ui a5, a9, 0 \n" -" addi.n a9, a9, 1 \n" -" s8i a5, a8, 0 \n" -" addi.n a8, a8, 1 \n" -" bnez a5, tns_loop%=\n" - : : "r" (buf), "r" (string) : "a5", "a8", "a9"); - return TESTSTRING; -} - -static const char * test_naive_strcpy_a6(const char *string) -{ - asm volatile ( -" mov a8, %0 \n" -" mov a9, %1 \n" -"tns_loop%=: l8ui a6, a9, 0 \n" -" addi.n a9, a9, 1 \n" -" s8i a6, a8, 0 \n" -" addi.n a8, a8, 1 \n" -" bnez a6, tns_loop%=\n" - : : "r" (buf), "r" (string) : "a6", "a8", "a9"); - return TESTSTRING; -} - -static const char * test_noop(const char *string) -{ - buf[0] = 0; - return ""; -} - -static uint32_t IRAM inner_string_test(const char *string, test_with_fn_t testfn, const char *testfn_label, uint32_t nullvalue, bool evict_cache) -{ - printf(" .. against %30s: ", testfn_label); - vPortEnterCritical(); - uint32_t before; - RSR(before, CCOUNT); - const int TEST_REPEATS = 1000; - for(int i = 0; i < TEST_REPEATS; i++) { - memset(buf, 0, sizeof(buf)); - const char *expected = testfn(string); - TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, buf, testfn_label); - if(evict_cache) { - Cache_Read_Disable(); - Cache_Read_Enable(0,0,1); - } - } - uint32_t after; - RSR(after, CCOUNT); - vPortExitCritical(); - uint32_t instructions = (after-before)/TEST_REPEATS - nullvalue; - printf("%5d instructions\r\n", instructions); - return instructions; -} - -static void string_test(const char *string, char *label, bool evict_cache) -{ - printf("Testing %s (%p) '%s'\r\n", label, string, string); - printf("Formats as: '"); - printf(string, 1, 2, 3); - printf("'\r\n"); - uint32_t nullvalue = inner_string_test(string, test_noop, "null op", 0, evict_cache); - inner_string_test(string, test_memcpy_aligned, "memcpy - aligned len", nullvalue, evict_cache); - inner_string_test(string, test_memcpy_unaligned, "memcpy - unaligned len", nullvalue, evict_cache); - inner_string_test(string, test_memcpy_unaligned2, "memcpy - unaligned start&len", nullvalue, evict_cache); - inner_string_test(string, test_strcpy, "strcpy", nullvalue, evict_cache); - inner_string_test(string, test_naive_strcpy, "naive strcpy", nullvalue, evict_cache); - inner_string_test(string, test_naive_strcpy_a0, "naive strcpy (a0)", nullvalue, evict_cache); - inner_string_test(string, test_naive_strcpy_a2, "naive strcpy (a2)", nullvalue, evict_cache); - inner_string_test(string, test_naive_strcpy_a3, "naive strcpy (a3)", nullvalue, evict_cache); - inner_string_test(string, test_naive_strcpy_a4, "naive strcpy (a4)", nullvalue, evict_cache); - inner_string_test(string, test_naive_strcpy_a5, "naive strcpy (a5)", nullvalue, evict_cache); - inner_string_test(string, test_naive_strcpy_a6, "naive strcpy (a6)", nullvalue, evict_cache); - inner_string_test(string, test_sprintf, "sprintf", nullvalue, evict_cache); - inner_string_test(string, test_sprintf_arg, "sprintf format arg", nullvalue, evict_cache); -} - -DEFINE_SOLO_TESTCASE(03_byte_load_test_strings) - -/* Test various operations on strings in various regions */ -static void a_03_byte_load_test_strings() -{ - string_test(dramtest, "DRAM", 0); - string_test(iramtest, "IRAM", 0); - string_test(iromtest, "Cached flash", 0); - string_test(iromtest, "'Uncached' flash", 1); - TEST_PASS(); -} - -static volatile bool frc1_ran; -static volatile bool frc1_finished; -static volatile char frc1_buf[80]; - -DEFINE_SOLO_TESTCASE(03_byte_load_test_isr) - -static void frc1_interrupt_handler(void) -{ - frc1_ran = true; - timer_set_run(FRC1, false); - strcpy((char *)frc1_buf, iramtest); - frc1_finished = true; -} - -/* Verify that the unaligned loader can run inside an ISR */ -static void a_03_byte_load_test_isr() -{ - printf("Testing behaviour inside ISRs...\r\n"); - timer_set_interrupts(FRC1, false); - timer_set_run(FRC1, false); - _xt_isr_attach(INUM_TIMER_FRC1, frc1_interrupt_handler, NULL); - timer_set_frequency(FRC1, 1000); - timer_set_interrupts(FRC1, true); - timer_set_run(FRC1, true); - sdk_os_delay_us(2000); - - if(!frc1_ran) - TEST_FAIL_MESSAGE("ERROR: FRC1 timer exception never fired.\r\n"); - else if(!frc1_finished) - TEST_FAIL_MESSAGE("ERROR: FRC1 timer exception never finished.\r\n"); - else if(strcmp((char *)frc1_buf, iramtest)) - TEST_FAIL_MESSAGE("ERROR: FRC1 strcpy from IRAM failed.\r\n"); - else - TEST_PASS(); -} - -DEFINE_SOLO_TESTCASE(03_byte_load_test_sign_extension) - -static void a_03_byte_load_test_sign_extension() -{ - /* this step seems to be necessary so the compiler will actually generate l16si */ - int16_t *shorts_p = (int16_t *)unsigned_shorts; - if(shorts_p[0] == -3 && shorts_p[1] == -4 && shorts_p[2] == -5 && shorts_p[3] == -32767 && shorts_p[4] == 44) - { - TEST_PASS(); - } else { - sprintf(buf, "l16si sign extension failed. Got values %d %d %d %d %d\r\n", shorts_p[0], shorts_p[1], shorts_p[2], shorts_p[3], shorts_p[4]); - TEST_FAIL_MESSAGE(buf); - } -} - - -/* test that running unaligned loads in a running FreeRTOS system doesn't break things - - The following tests run inside a FreeRTOS task, after everything else. -*/ -DEFINE_SOLO_TESTCASE(03_byte_load_test_system_interaction); - -static void task_load_test_system_interaction() -{ - uint32_t start = xTaskGetTickCount(); - printf("Starting system/timer interaction test (takes approx 1 second)...\n"); - for(int i = 0; i < 5000; i++) { - test_naive_strcpy_a0(iromtest); - test_naive_strcpy_a2(iromtest); - test_naive_strcpy_a3(iromtest); - test_naive_strcpy_a4(iromtest); - test_naive_strcpy_a5(iromtest); - test_naive_strcpy_a6(iromtest); - /* - const volatile char *string = iromtest; - volatile char *to = dest; - while((*to++ = *string++)) - ; - */ - } - uint32_t ticks = xTaskGetTickCount() - start; - printf("Timer interaction test PASSED after %d ticks.\n", ticks); - TEST_PASS(); -} - -static void a_03_byte_load_test_system_interaction() -{ - xTaskCreate(task_load_test_system_interaction, "interactionTask", 256, NULL, 2, NULL); - while(1) { - vTaskDelay(100); - } -} - -/* The following "sanity tests" are designed to try to execute every code path - * of the LoadStoreError handler, with a variety of offsets and data values - * designed to catch any mask/shift errors, sign-extension bugs, etc */ -DEFINE_SOLO_TESTCASE(03_byte_load_test_sanity) - -/* (Contrary to expectations, 'mov a15, a15' in Xtensa is not technically a - * no-op, but is officially "undefined and reserved for future use", so we need - * a special case in the case where reg == "a15" so we don't end up generating - * those opcodes. GCC is smart enough to optimize away the whole conditional - * and just insert the correct asm block, since `reg` is a static argument.) */ -#define LOAD_VIA_REG(op, reg, addr, var) \ - if (strcmp(reg, "a15")) { \ - asm volatile ( \ - "mov a15, " reg "\n\t" \ - op " " reg ", %1, 0\n\t" \ - "mov %0, " reg "\n\t" \ - "mov " reg ", a15\n\t" \ - : "=r" (var) : "r" (addr) : "a15" ); \ - } else { \ - asm volatile ( \ - op " " reg ", %1, 0\n\t" \ - "mov %0, " reg "\n\t" \ - : "=r" (var) : "r" (addr) : "a15" ); \ - } - -#define TEST_LOAD(op, reg, addr, value) \ - { \ - int32_t result; \ - LOAD_VIA_REG(op, reg, addr, result); \ - if (result != value) sanity_test_failed(op, reg, addr, value, result); \ - } - -static void sanity_test_failed(const char *testname, const char *reg, const void *addr, int32_t value, int32_t result) { - uint32_t actual_data = *(uint32_t *)((uint32_t)addr & 0xfffffffc); - sprintf(buf, "%s %s from %p (32-bit value: 0x%x): Expected 0x%08x (%d), got 0x%08x (%d)\n", testname, reg, addr, actual_data, value, value, result, result); - TEST_FAIL_MESSAGE(buf); -} - -static void sanity_test_l8ui(const void *addr, int32_t value) { - TEST_LOAD("l8ui", "a0", addr, value); - TEST_LOAD("l8ui", "a1", addr, value); - TEST_LOAD("l8ui", "a2", addr, value); - TEST_LOAD("l8ui", "a3", addr, value); - TEST_LOAD("l8ui", "a4", addr, value); - TEST_LOAD("l8ui", "a5", addr, value); - TEST_LOAD("l8ui", "a6", addr, value); - TEST_LOAD("l8ui", "a7", addr, value); - TEST_LOAD("l8ui", "a8", addr, value); - TEST_LOAD("l8ui", "a9", addr, value); - TEST_LOAD("l8ui", "a10", addr, value); - TEST_LOAD("l8ui", "a11", addr, value); - TEST_LOAD("l8ui", "a12", addr, value); - TEST_LOAD("l8ui", "a13", addr, value); - TEST_LOAD("l8ui", "a14", addr, value); - TEST_LOAD("l8ui", "a15", addr, value); -} - -static void sanity_test_l16ui(const void *addr, int32_t value) { - TEST_LOAD("l16ui", "a0", addr, value); - TEST_LOAD("l16ui", "a1", addr, value); - TEST_LOAD("l16ui", "a2", addr, value); - TEST_LOAD("l16ui", "a3", addr, value); - TEST_LOAD("l16ui", "a4", addr, value); - TEST_LOAD("l16ui", "a5", addr, value); - TEST_LOAD("l16ui", "a6", addr, value); - TEST_LOAD("l16ui", "a7", addr, value); - TEST_LOAD("l16ui", "a8", addr, value); - TEST_LOAD("l16ui", "a9", addr, value); - TEST_LOAD("l16ui", "a10", addr, value); - TEST_LOAD("l16ui", "a11", addr, value); - TEST_LOAD("l16ui", "a12", addr, value); - TEST_LOAD("l16ui", "a13", addr, value); - TEST_LOAD("l16ui", "a14", addr, value); - TEST_LOAD("l16ui", "a15", addr, value); -} - -static void sanity_test_l16si(const void *addr, int32_t value) { - TEST_LOAD("l16si", "a0", addr, value); - TEST_LOAD("l16si", "a1", addr, value); - TEST_LOAD("l16si", "a2", addr, value); - TEST_LOAD("l16si", "a3", addr, value); - TEST_LOAD("l16si", "a4", addr, value); - TEST_LOAD("l16si", "a5", addr, value); - TEST_LOAD("l16si", "a6", addr, value); - TEST_LOAD("l16si", "a7", addr, value); - TEST_LOAD("l16si", "a8", addr, value); - TEST_LOAD("l16si", "a9", addr, value); - TEST_LOAD("l16si", "a10", addr, value); - TEST_LOAD("l16si", "a11", addr, value); - TEST_LOAD("l16si", "a12", addr, value); - TEST_LOAD("l16si", "a13", addr, value); - TEST_LOAD("l16si", "a14", addr, value); - TEST_LOAD("l16si", "a15", addr, value); -} - -static void a_03_byte_load_test_sanity(void) { - printf("== Performing sanity tests (sanity_test_data @ %p)...\n", sanity_test_data); - - sanity_test_l8ui(sanity_test_data + 0, 0x01); - sanity_test_l8ui(sanity_test_data + 1, 0x55); - sanity_test_l8ui(sanity_test_data + 2, 0x7e); - sanity_test_l8ui(sanity_test_data + 3, 0x2a); - sanity_test_l8ui(sanity_test_data + 4, 0x81); - sanity_test_l8ui(sanity_test_data + 5, 0xd5); - sanity_test_l8ui(sanity_test_data + 6, 0xfe); - sanity_test_l8ui(sanity_test_data + 7, 0xaa); - - sanity_test_l16ui(sanity_test_data + 0, 0x5501); - sanity_test_l16ui(sanity_test_data + 2, 0x2a7e); - sanity_test_l16ui(sanity_test_data + 4, 0xd581); - sanity_test_l16ui(sanity_test_data + 6, 0xaafe); - - sanity_test_l16si(sanity_test_data + 0, 0x5501); - sanity_test_l16si(sanity_test_data + 2, 0x2a7e); - sanity_test_l16si(sanity_test_data + 4, -10879); - sanity_test_l16si(sanity_test_data + 6, -21762); - - printf("== Sanity tests completed.\n"); - TEST_PASS(); -} diff --git a/tests/cases/04_wifi_basic.c b/tests/cases/04_wifi_basic.c deleted file mode 100644 index 8deef3e..0000000 --- a/tests/cases/04_wifi_basic.c +++ /dev/null @@ -1,182 +0,0 @@ -/** - * This test verifies basic WiFi communication. - * - * Device A creates a WiFi access point and listens on port 23 for incomming - * connection. When incomming connection occurs it sends a string and waits - * for the response. - * - * Device B connects to a WiFi access point and opens TCP connection to - * device A on port 23. Then it receives a string and sends it back. - */ -#include - -#include -#include - -#include -#include "sdk_internal.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "testcase.h" - -#define AP_SSID "esp-open-rtos-ap" -#define AP_PSK "esp-open-rtos" -#define SERVER "172.16.0.1" -#define PORT 23 -#define BUF_SIZE 128 - -DEFINE_TESTCASE(04_wifi_basic, DUAL) - -/********************************************************* - * WiFi AP part - *********************************************************/ - -static void server_task(void *pvParameters) -{ - - ip_addr_t first_client_ip; - IP4_ADDR(&first_client_ip, 172, 16, 0, 2); - dhcpserver_start(&first_client_ip, 4); - - char buf[BUF_SIZE]; - struct netconn *nc = netconn_new(NETCONN_TCP); - TEST_ASSERT_TRUE_MESSAGE(nc != 0, "Failed to allocate socket"); - - netconn_bind(nc, IP_ADDR_ANY, PORT); - netconn_listen(nc); - - struct netconn *client = NULL; - err_t err = netconn_accept(nc, &client); - TEST_ASSERT_TRUE_MESSAGE(err == ERR_OK, "Error accepting connection"); - - ip_addr_t client_addr; - uint16_t port_ignore; - netconn_peer(client, &client_addr, &port_ignore); - - snprintf(buf, sizeof(buf), "test ping\r\n"); - printf("Device A: send data: %s\n", buf); - netconn_write(client, buf, strlen(buf), NETCONN_COPY); - - struct pbuf *pb; - for (int i = 0; i < 10; i++) { - TEST_ASSERT_EQUAL_INT_MESSAGE(ERR_OK, netconn_recv_tcp_pbuf(client, &pb), - "Failed to receive data"); - if (pb->len > 0) { - memcpy(buf, pb->payload, pb->len); - buf[pb->len] = 0; - break; - } - vTaskDelay(100 / portTICK_PERIOD_MS); - } - TEST_ASSERT_TRUE_MESSAGE(pb->len > 0, "No data received"); - printf("Device A: received data: %s\n", buf); - TEST_ASSERT_FALSE_MESSAGE(strcmp((const char*)buf, "test pong\r\n"), - "Received wrong data"); - - netconn_delete(client); - - TEST_PASS(); -} - -static void a_04_wifi_basic(void) -{ - printf("Device A started\n"); - sdk_wifi_set_opmode(SOFTAP_MODE); - - struct ip_info ap_ip; - IP4_ADDR(&ap_ip.ip, 172, 16, 0, 1); - IP4_ADDR(&ap_ip.gw, 0, 0, 0, 0); - IP4_ADDR(&ap_ip.netmask, 255, 255, 0, 0); - sdk_wifi_set_ip_info(1, &ap_ip); - - struct sdk_softap_config ap_config = { - .ssid = AP_SSID, - .ssid_hidden = 0, - .channel = 3, - .ssid_len = strlen(AP_SSID), - .authmode = AUTH_WPA_WPA2_PSK, - .password = AP_PSK, - .max_connection = 3, - .beacon_interval = 100, - }; - sdk_wifi_softap_set_config(&ap_config); - - xTaskCreate(server_task, "setver_task", 1024, NULL, 2, NULL); -} - - -/********************************************************* - * WiFi client part - *********************************************************/ - -static void connect_task(void *pvParameters) -{ - struct sockaddr_in serv_addr; - char buf[BUF_SIZE]; - - // wait for wifi connection - while (sdk_wifi_station_get_connect_status() != STATION_GOT_IP) { - vTaskDelay(1000 / portTICK_PERIOD_MS); - printf("Waiting for connection to AP\n"); - } - - int s = socket(AF_INET, SOCK_STREAM, 0); - TEST_ASSERT_TRUE_MESSAGE(s >= 0, "Failed to allocate a socket"); - - bzero(&serv_addr, sizeof(serv_addr)); - serv_addr.sin_port = htons(PORT); - serv_addr.sin_family = AF_INET; - - TEST_ASSERT_TRUE_MESSAGE(inet_aton(SERVER, &serv_addr.sin_addr.s_addr), - "Failed to set IP address"); - - TEST_ASSERT_TRUE_MESSAGE( - connect(s, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == 0, - "Socket connection failed"); - - bzero(buf, BUF_SIZE); - - int r = 0; - for (int i = 0; i < 10; i++) { - r = read(s, buf, BUF_SIZE); - if (r > 0) { - break; - } - vTaskDelay(100 / portTICK_PERIOD_MS); - } - TEST_ASSERT_TRUE_MESSAGE(r > 0, "No data received"); - - printf("Device B: received data: %s\n", buf); - TEST_ASSERT_FALSE_MESSAGE(strcmp((const char*)buf, "test ping\r\n"), - "Received wrong data"); - - snprintf(buf, sizeof(buf), "test pong\r\n"); - printf("Device B: send data: %s\n", buf); - TEST_ASSERT_EQUAL_INT_MESSAGE(strlen(buf), write(s, buf, strlen(buf)), - "Error socket writing"); - - close(s); - - TEST_PASS(); -} - -static void b_04_wifi_basic(void) -{ - printf("Device B started\n"); - struct sdk_station_config config = { - .ssid = AP_SSID, - .password = AP_PSK, - }; - - sdk_wifi_set_opmode(STATION_MODE); - sdk_wifi_station_set_config(&config); - - xTaskCreate(&connect_task, "connect_task", 1024, NULL, 2, NULL); -} diff --git a/tests/cases/05_spiffs.c b/tests/cases/05_spiffs.c deleted file mode 100644 index c3bf30b..0000000 --- a/tests/cases/05_spiffs.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "espressif/esp_common.h" -#include "esp/uart.h" -#include "esp/timer.h" -#include "FreeRTOS.h" -#include "task.h" -#include "esp8266.h" -#include - -#include "esp_spiffs.h" -#include "spiffs.h" - -#include "fs_test.h" - -#include "testcase.h" - -DEFINE_SOLO_TESTCASE(05_spiffs) - -static fs_time_t get_current_time() -{ - return timer_get_count(FRC2) / 5000; // to get roughly 1ms resolution -} - -static void test_task(void *pvParameters) -{ - esp_spiffs_init(); - esp_spiffs_mount(); - SPIFFS_unmount(&fs); // FS must be unmounted before formating - if (SPIFFS_format(&fs) == SPIFFS_OK) { - printf("Format complete\n"); - } else { - printf("Format failed\n"); - } - esp_spiffs_mount(); - - TEST_ASSERT_TRUE_MESSAGE(fs_load_test_run(100), "Load test failed"); - - float write_rate, read_rate; - if (fs_speed_test_run(get_current_time, &write_rate, &read_rate)) { - printf("Read speed: %.0f bytes/s\n", read_rate * 1000); - printf("Write speed: %.0f bytes/s\n", write_rate * 1000); - } else { - TEST_FAIL(); - } - TEST_PASS(); -} - -static void a_05_spiffs(void) -{ - xTaskCreate(test_task, "test_task", 1024, NULL, 2, NULL); -} diff --git a/tests/cases/06_timers.c b/tests/cases/06_timers.c deleted file mode 100644 index 91efb00..0000000 --- a/tests/cases/06_timers.c +++ /dev/null @@ -1,86 +0,0 @@ -#include -#include -#include "FreeRTOS.h" -#include "task.h" -#include "etstimer.h" - -#include "testcase.h" - -DEFINE_SOLO_TESTCASE(06_ets_timers); - -typedef struct { - ETSTimer handle; - uint32_t start_time; - uint32_t fire_count; -} test_timer_t; - -#define TEST_TIMERS_NUMBER 2 -static test_timer_t timers[TEST_TIMERS_NUMBER]; - -static uint32_t get_current_time() -{ - return timer_get_count(FRC2) / 5000; // to get roughly 1ms resolution -} - -static void timer_0_cb(void *arg) -{ - uint32_t v = (uint32_t)arg; - uint32_t delay = get_current_time() - timers[0].start_time; - timers[0].fire_count++; - - TEST_ASSERT_EQUAL_UINT32_MESSAGE(0xAA, v, "Timer 0 argument invalid"); - TEST_ASSERT_EQUAL_INT_MESSAGE(1, timers[0].fire_count, "Timer 0 repeat error"); - - printf("Timer 0 delay: %d\n", delay); - // Timer should fire in 100ms - TEST_ASSERT_INT_WITHIN_MESSAGE(5, 100, delay, "Timer 0 time wrong"); -} - -static void timer_1_cb(void *arg) -{ - uint32_t v = (uint32_t)arg; - uint32_t delay = get_current_time() - timers[1].start_time; - - timers[1].start_time = get_current_time(); - timers[1].fire_count++; - - TEST_ASSERT_EQUAL_UINT32_MESSAGE(0xBB, v, "Timer 1 argument invalid"); - TEST_ASSERT_TRUE_MESSAGE(timers[1].fire_count < 6, - "Timer 1 repeats after disarming"); - - printf("Timer 1 delay: %d\n", delay); - // Timer should fire in 100ms - TEST_ASSERT_INT_WITHIN_MESSAGE(5, 50, delay, "Timer 1 time wrong"); - - if (timers[1].fire_count == 5) { - sdk_ets_timer_disarm(&timers[1].handle); - } -} - -static void test_task(void *pvParameters) -{ - sdk_ets_timer_disarm(&timers[0].handle); - sdk_ets_timer_setfn(&timers[0].handle, timer_0_cb, (void*)0xAA); - timers[0].start_time = get_current_time(); - sdk_ets_timer_arm(&timers[0].handle, 100, false); - - sdk_ets_timer_disarm(&timers[1].handle); - sdk_ets_timer_setfn(&timers[1].handle, timer_1_cb, (void*)0xBB); - timers[1].start_time = get_current_time(); - sdk_ets_timer_arm(&timers[1].handle, 50, true); // repeating timer - - vTaskDelay(500 / portTICK_PERIOD_MS); - - TEST_ASSERT_EQUAL_INT_MESSAGE(1, timers[0].fire_count, - "Timer hasn't fired"); - - TEST_ASSERT_EQUAL_INT_MESSAGE(5, timers[1].fire_count, - "Timer fire count isn't correct"); - - TEST_PASS(); -} - -static void a_06_ets_timers(void) -{ - xTaskCreate(test_task, "test_task", 256, NULL, 2, NULL); -} diff --git a/tests/cases/07_sysparam.c b/tests/cases/07_sysparam.c deleted file mode 100644 index c1a4697..0000000 --- a/tests/cases/07_sysparam.c +++ /dev/null @@ -1,403 +0,0 @@ - -#include -#include - -#include -#include - -#include - -#include - -// #define DEBUG - -#ifdef DEBUG -#include -#define debug(fmt, ...) printf("%s" fmt, "test: ", ## __VA_ARGS__); -#else -#define debug(fmt, ...) -#endif - -DEFINE_SOLO_TESTCASE(07_sysparam_basic_test); -DEFINE_SOLO_TESTCASE(07_sysparam_load_test); -DEFINE_SOLO_TESTCASE(07_sysparam_bool_test); - -#define TEST_ITERATIONS 10 -#define KEY_BUF_SIZE 32 -#define TEST_STRING_BUF_SIZE 64 -#define NUMBER_OF_TEST_DATA 20 - -typedef struct { - uint32_t start_key_index; - uint32_t key_index; -} test_data_t; - -typedef enum { - VALUE_STRING = 0, - VALUE_INT32, - VALUE_INT8, - VALUE_BOOL, - VALUE_ENUM_END -} value_type_t; - - -static uint32_t get_current_time() -{ - return timer_get_count(FRC2) / 5000; // to get roughly 1ms resolution -} - -/** - * Recreate sysparam area - */ -static inline void init_sysparam() -{ - sysparam_status_t status; - uint32_t base_addr, num_sectors; - - status = sysparam_get_info(&base_addr, &num_sectors); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - status = sysparam_create_area(base_addr, num_sectors, /*force=*/true); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - status = sysparam_init(base_addr, 0); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - debug("sysparam initialized at addr=%x, sectors=%d\n", - base_addr, num_sectors); -} - -/** - * Initialize test data with random seed. - */ -static void test_data_init(test_data_t *data) -{ - debug("test_data_init\n"); - data->start_key_index = data->key_index = rand() % 100; -} - -/** - * Reset test data to the initial seed. - */ -static void test_data_reset(test_data_t *data) -{ - debug("test_data_reset\n"); - data->key_index = data->start_key_index; -} - -/** - * Get key string for the current data. - */ -static void test_data_get_key(test_data_t *data, char *key_buf) -{ - sprintf(key_buf, "key_%d", data->key_index); - debug("test_data_get_key: key=%s\n", key_buf); -} - -/** - * Generate test string for the current data. - */ -static void test_data_get_string(test_data_t *data, char *str_buf) -{ - srand(data->key_index); - for (int i = 0; i < TEST_STRING_BUF_SIZE - 1; ++i) { - str_buf[i] = '0' + rand() % 74; // generate a char 0-9,a-z,A-Z and other - } - str_buf[TEST_STRING_BUF_SIZE-1] = 0; // terminate string with zero - debug("test_data_get_string: str=%s\n", str_buf); -} - -/** - * Generate test int32 value for the current data. - */ -static int32_t test_data_get_int32(test_data_t *data) -{ - srand(data->key_index); - int32_t v = rand(); - debug("test_data_get_int32: value=%d\n", v); - return v; -} - -/** - * Generate test int8 value for the current data. - */ -int8_t test_data_get_int8(test_data_t *data) -{ - srand(data->key_index); - int8_t v = rand() % 256; - debug("test_data_get_int8: value=%d\n", v); - return v; -} - -/** - * Generate test bool value for the current data. - */ -bool test_data_get_bool(test_data_t *data) -{ - srand(data->key_index); - bool v = rand() % 2; - debug("test_data_get_bool, value=%s\n", v ? "true" : "false"); - return v; -} - -/** - * Get type of the current data. - */ -value_type_t test_data_get_type(test_data_t *data) -{ - srand(data->key_index); - value_type_t t = rand() % VALUE_ENUM_END; - debug("test_data_get_type: type=%d\n", t); - return t; -} - -/** - * Generate next data. - */ -void test_data_next(test_data_t *data) -{ - data->key_index++; - debug("test_data_next: key_index=%d\n", data->key_index); -} - -static void write_test_values(test_data_t *data) -{ - sysparam_status_t status = SYSPARAM_ERR_BADVALUE; - char key_buf[KEY_BUF_SIZE]; - char str_buf[TEST_STRING_BUF_SIZE]; - - for (int i = 0; i < NUMBER_OF_TEST_DATA; ++i) { - test_data_get_key(data, key_buf); - switch (test_data_get_type(data)) { - case VALUE_STRING: - test_data_get_string(data, str_buf); - status = sysparam_set_string(key_buf, str_buf); - break; - case VALUE_INT32: - status = sysparam_set_int32(key_buf, test_data_get_int32(data)); - break; - case VALUE_INT8: - status = sysparam_set_int8(key_buf, test_data_get_int8(data)); - break; - case VALUE_BOOL: - status = sysparam_set_bool(key_buf, test_data_get_bool(data)); - break; - case VALUE_ENUM_END: - default: - break; - } - - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - test_data_next(data); - } -} - -static void verify_test_values(test_data_t *data) -{ - sysparam_status_t status = SYSPARAM_ERR_BADVALUE; - char key_buf[KEY_BUF_SIZE]; - char expected_str_buf[TEST_STRING_BUF_SIZE]; - char *actual_str; - int32_t actual_int32; - int8_t actual_int8; - bool actual_bool; - - for (int i = 0; i < NUMBER_OF_TEST_DATA; ++i) { - test_data_get_key(data, key_buf); - switch (test_data_get_type(data)) { - case VALUE_STRING: - test_data_get_string(data, expected_str_buf); - status = sysparam_get_string(key_buf, &actual_str); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_EQUAL_STRING(expected_str_buf, actual_str); - free(actual_str); - break; - case VALUE_INT32: - status = sysparam_get_int32(key_buf, &actual_int32); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_EQUAL_INT(test_data_get_int32(data), actual_int32); - break; - case VALUE_INT8: - status = sysparam_get_int8(key_buf, &actual_int8); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_EQUAL_INT(test_data_get_int8(data), actual_int8); - break; - case VALUE_BOOL: - status = sysparam_get_bool(key_buf, &actual_bool); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_TRUE(test_data_get_bool(data) == actual_bool); - break; - case VALUE_ENUM_END: - default: - break; - } - - test_data_next(data); - } -} - -static void clear_test_values(test_data_t *data) -{ - char key_buf[KEY_BUF_SIZE]; - sysparam_status_t status = SYSPARAM_ERR_BADVALUE; - - for (int i = 0; i < NUMBER_OF_TEST_DATA; ++i) { - test_data_get_key(data, key_buf); - status = sysparam_set_data(key_buf, NULL, 0, false); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - test_data_next(data); - } -} - - -static void a_07_sysparam_load_test(void) -{ - test_data_t test_data; - init_sysparam(); - uint32_t start_time = get_current_time(); - uint32_t free_heap_at_start = xPortGetFreeHeapSize(); - - for (int i = 0; i < TEST_ITERATIONS; ++i) { - test_data_init(&test_data); - write_test_values(&test_data); - test_data_reset(&test_data); - verify_test_values(&test_data); - test_data_reset(&test_data); - clear_test_values(&test_data); - } - - TEST_ASSERT_EQUAL_INT_MESSAGE(free_heap_at_start, xPortGetFreeHeapSize(), - "Free heap size is less than at test start. Possible memory leak."); - - printf("Test took %d ms\n", get_current_time() - start_time); - - TEST_PASS(); -} - -static void a_07_sysparam_basic_test(void) -{ - sysparam_status_t status; - int32_t int32_val = 0; - int8_t int8_val = 0; - char *str; - bool bool_val; - - init_sysparam(); - - status = sysparam_set_int32("int_1", -123); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - status = sysparam_get_int32("int_1", &int32_val); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_EQUAL_INT(-123, int32_val); - - status = sysparam_set_int8("int_2", -34); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - status = sysparam_get_int8("int_2", &int8_val); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_EQUAL_INT(-34, int8_val); - - status = sysparam_set_string("str_1", "test string"); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - status = sysparam_get_string("str_1", &str); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_EQUAL_STRING("test string", str); - free(str); - - status = sysparam_set_bool("bool_true", true); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - status = sysparam_get_bool("bool_true", &bool_val); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_TRUE(bool_val); - - status = sysparam_set_bool("bool_false", false); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - status = sysparam_get_bool("bool_false", &bool_val); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_FALSE(bool_val); - - TEST_PASS(); -} - -typedef struct { - const char *key; - const char *str; - bool value; -} bool_test_data_t; - -const static bool_test_data_t bool_data[] = { - {"str_true", "true", true}, - {"str_True", "True", true}, - {"str_TRUE", "TRUE", true}, - {"str_t", "t", true}, - {"str_T", "T", true}, - {"str_y", "y", true}, - {"str_Y", "Y", true}, - {"str_yes", "yes", true}, - {"str_Yes", "Yes", true}, - {"str_YES", "YES", true}, - {"str_1", "1", true}, - - {"str_false", "false", false}, - {"str_False", "False", false}, - {"str_FALSE", "FALSE", false}, - {"str_f", "f", false}, - {"str_F", "F", false}, - {"str_n", "n", false}, - {"str_N", "N", false}, - {"str_no", "no", false}, - {"str_No", "No", false}, - {"str_NO", "NO", false}, - {"str_0", "0", false}, -}; - -static void a_07_sysparam_bool_test(void) -{ - sysparam_status_t status; - bool value; - - init_sysparam(); - - for (int i = 0; i < sizeof(bool_data) / sizeof(bool_data[0]); ++i) { - status = sysparam_set_string(bool_data[i].key, bool_data[i].str); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - } - - status = sysparam_set_int8("int8_0", 0); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - status = sysparam_set_int8("int8_1", 1); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - status = sysparam_set_int32("int32_0", 0); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - status = sysparam_set_int32("int32_1", 1); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - - for (int i = 0; i < sizeof(bool_data) / sizeof(bool_data[0]); ++i) { - debug("Getting bool key=%s\n", bool_data[i].key); - status = sysparam_get_bool(bool_data[i].key, &value); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_TRUE(bool_data[i].value == value); - } - - status = sysparam_get_bool("int8_0", &value); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_FALSE(value); - - status = sysparam_get_bool("int8_1", &value); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_TRUE(value); - - status = sysparam_get_bool("int32_0", &value); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_FALSE(value); - - status = sysparam_get_bool("int32_1", &value); - TEST_ASSERT_EQUAL_INT(SYSPARAM_OK, status); - TEST_ASSERT_TRUE(value); - - TEST_PASS(); -} diff --git a/tests/cases/08_spiflash.c b/tests/cases/08_spiflash.c deleted file mode 100644 index 67b2783..0000000 --- a/tests/cases/08_spiflash.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -DEFINE_SOLO_TESTCASE(08_spiflash_unaligned) - -/** - * Test unaligned access to spi flash. - */ -static void a_08_spiflash_unaligned(void) -{ - const int test_addr = 0x100000 - (4096 * 8); - const char test_str[] = "test_string"; - const int buf_size = 256; - uint8_t buf[buf_size]; - - TEST_ASSERT_TRUE(spiflash_erase_sector(test_addr)); - TEST_ASSERT_TRUE(spiflash_erase_sector(test_addr + 4096)); - - TEST_ASSERT_TRUE( - spiflash_write(test_addr, (uint8_t*)test_str, sizeof(test_str))); - - TEST_ASSERT_TRUE(spiflash_read(test_addr, buf, buf_size)); - - TEST_ASSERT_EQUAL_STRING(test_str, buf); - - TEST_ASSERT_TRUE( - spiflash_write(test_addr + 31, (uint8_t*)test_str, sizeof(test_str))); - TEST_ASSERT_TRUE(spiflash_read(test_addr + 31, buf, buf_size)); - TEST_ASSERT_EQUAL_STRING(test_str, buf); - - TEST_ASSERT_TRUE( - spiflash_write(test_addr + 101, (uint8_t*)test_str, sizeof(test_str))); - TEST_ASSERT_TRUE(spiflash_read(test_addr + 101, buf + 1, buf_size - 1)); - TEST_ASSERT_EQUAL_STRING(test_str, buf + 1); - - TEST_ASSERT_TRUE( - spiflash_write(test_addr + 201, (uint8_t*)test_str + 1, sizeof(test_str) - 1)); - TEST_ASSERT_TRUE(spiflash_read(test_addr + 201, buf + 1, buf_size - 1)); - TEST_ASSERT_EQUAL_STRING(test_str + 1, buf + 1); - - TEST_PASS(); -} diff --git a/tests/fs-test b/tests/fs-test deleted file mode 160000 index e531bc0..0000000 --- a/tests/fs-test +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e531bc0d4f75887e5f0e081aae3efbf4a50e2f54 diff --git a/tests/include/testcase.h b/tests/include/testcase.h deleted file mode 100644 index 11f59a4..0000000 --- a/tests/include/testcase.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef _TESTCASE_H -#define _TESTCASE_H -#include -#include -#include "esp/uart.h" - -/* Unity is the framework with test assertions, etc. */ -#include "unity.h" - -/* Need to explicitly flag once a test has completed successfully. */ -#undef TEST_PASS -#define TEST_PASS() do { UnityConcludeTest(); while(1) { } } while (0) - -/* Types of test, defined by hardware requirements */ -typedef enum { - SOLO, /* Test require "ESP A" only, no other connections */ - DUAL, /* Test requires "ESP A" and "ESP "B", basic interconnections between them */ - EYORE_TEST, /* Test requires an eyore-test board with onboard STM32F0 */ -} testcase_type_t; - -typedef void (testcase_fn_t)(void); - -typedef struct { - const char *name; - const char *file; - int line; - testcase_type_t type; - testcase_fn_t *a_fn; - testcase_fn_t *b_fn; -} testcase_t; - -void testcase_register(const testcase_t *testcase); - -/* Register a test case using these macros. Use DEFINE_SOLO_TESTCASE for single-MCU tests, - and DEFINE_TESTCASE for all other test types. -*/ -#define DEFINE_SOLO_TESTCASE(NAME) \ - static testcase_fn_t a_##NAME; \ - _DEFINE_TESTCASE_COMMON(NAME, SOLO, a_##NAME, 0) - -#define DEFINE_TESTCASE(NAME, TYPE) \ - static testcase_fn_t a_##NAME; \ - static testcase_fn_t b_##NAME; \ - _DEFINE_TESTCASE_COMMON(NAME, TYPE, a_##NAME, b_##NAME) - - -#define _DEFINE_TESTCASE_COMMON(NAME, TYPE, A_FN, B_FN) \ - void __attribute__((constructor)) testcase_ctor_##NAME() { \ - const testcase_t testcase = { .name = #NAME, \ - .file = __FILE__, \ - .line = __LINE__, \ - .type = TYPE, \ - .a_fn = A_FN, \ - .b_fn = B_FN, \ - }; \ - testcase_register(&testcase); \ - } - -#endif diff --git a/tests/test_main.c b/tests/test_main.c deleted file mode 100644 index efc61b1..0000000 --- a/tests/test_main.c +++ /dev/null @@ -1,122 +0,0 @@ -#include "testcase.h" -#include -#include -#include -#include -#include -#include - -/* Convert requirement enum to a string we can print */ -static const char *get_requirements_name(const testcase_type_t arg) { - switch(arg) { - case SOLO: - return "SOLO"; - case DUAL: - return "DUAL"; - case EYORE_TEST: - return "EYORE_TEST"; - default: - return "UNKNOWN"; - } -} - -static testcase_t *testcases; -static uint32_t testcases_count; -static uint32_t testcases_alloc; - -void testcase_register(const testcase_t *testcase) -{ - /* Grow the testcases buffer to fit the new test case, - this buffer will be freed before the test runs. - */ - if(testcases_count == testcases_alloc) { - testcases_alloc += 1; - testcases = realloc(testcases, testcases_alloc * sizeof(testcase_t)); - if(!testcases) { - printf("Failed to reallocate test case register length %d\n", - testcases_alloc); - testcases_count = 0; - testcases_alloc = 0; - } - } - memcpy(&testcases[testcases_count++], testcase, sizeof(testcase_t)); -} - -void user_init(void) -{ - uart_set_baud(0, 115200); - sdk_wifi_set_opmode(NULL_MODE); - printf("esp-open-rtos test runner.\n"); - printf("%d test cases are defined:\n\n", testcases_count); - for(int i = 0; i < testcases_count; i++) { - printf("CASE %d = %s %s\n", i, testcases[i].name, - get_requirements_name(testcases[i].type)); - } - - printf("Enter A or B then number of test case to run, ie A0.\n"); - int case_idx = -1; - char type; - do { - printf("> "); - uart_rxfifo_wait(0,1); - type = uart_getc(0); - if(type != 'a' && type != 'A' && type != 'b' && type != 'B') { - printf("Type must be A or B.\n"); - continue; - } - - char idx_buf[6]; - for(int c = 0; c < sizeof(idx_buf); c++) { - uart_rxfifo_wait(0,1); - idx_buf[c] = uart_getc(0); - if(idx_buf[c] == ' ') { /* Ignore spaces */ - c--; - continue; - } - if(idx_buf[c] == '\r' || idx_buf[c] == '\n') { - idx_buf[c] = 0; - case_idx = atoi(idx_buf); - break; - } - else if(idx_buf[c] < '0' || idx_buf[c] > '9') { - break; - } - } - - if(case_idx == -1) { - printf("Invalid case index"); - } - else if(case_idx < 0 || case_idx >= testcases_count) { - printf("Test case index out of range.\n"); - } - else if((type == 'b' || type =='B') && testcases[case_idx].type == SOLO) { - printf("No ESP type B for 'SOLO' test cases.\n"); - } else { - break; - } - } while(1); - if(type =='a') - type = 'A'; - else if (type == 'b') - type = 'B'; - testcase_t testcase; - memcpy(&testcase, &testcases[case_idx], sizeof(testcase_t)); - /* Free the register of test cases now we have the one we're running */ - free(testcases); - testcases_alloc = 0; - testcases_count = 0; - - printf("\nRunning test case %d (%s %s) as instance %c " - "\nDefinition at %s:%d\n***\n", case_idx, - testcase.name, get_requirements_name(testcase.type), type, - testcase.file, testcase.line); - - Unity.CurrentTestName = testcase.name; - Unity.TestFile = testcase.file; - Unity.CurrentTestLineNumber = testcase.line; - Unity.NumberOfTests = 1; - if(type=='A') - testcase.a_fn(); - else - testcase.b_fn(); -} diff --git a/tests/test_runner.py b/tests/test_runner.py deleted file mode 100755 index 347fd9b..0000000 --- a/tests/test_runner.py +++ /dev/null @@ -1,389 +0,0 @@ -#!/usr/bin/env python3 -import sys -import argparse -import subprocess -import os -import serial -import threading -import re -import time - - -SHORT_OUTPUT_TIMEOUT = 0.25 # timeout for resetting and/or waiting for more lines of output -TESTCASE_TIMEOUT = 60 -TESTRUNNER_BANNER = "esp-open-rtos test runner." -RESET_RETRIES = 10 # retries to receive test runner banner after reset - - -def run(env_a, env_b, cases): - counts = dict((status, 0) for status in TestResult.STATUS_NAMES.keys()) - failures = False - for test in cases: - if test.case_type == 'dual': - if env_b is None: - res = TestResult(TestResult.SKIPPED, 'Dual test case skipped') - else: - res = test.run(env_a, env_b) - else: - res = test.run(env_a) - counts[res.status] += 1 - failures = failures or res.is_failure() - - print("%20s: %d" % ("Total tests", sum(c for c in counts.values()))) - print() - # print status counts for tests - for c in sorted(counts.keys()): - print("%20s: %d" % (TestResult.STATUS_NAMES[c], counts[c])) - - return failures == 0 - - -def main(): - global verbose - args = parse_args() - verbose = args.verbose - - if not args.no_flash: - flash_image(args.aport) - if args.type != 'solo': - flash_image(args.bport) - - env = TestEnvironment(args.aport, TestEnvironment.A) - env_b = None - cases = env.get_testlist() - if args.type != 'solo': - env_b = TestEnvironment(args.bport, TestEnvironment.B) - cases_b = env_b.get_testlist() - if cases != cases_b: - raise TestRunnerError("Test cases on units A & B don't match") - - if args.list: # if list option is specified, do not run test cases - print("List of test cases:") - for test in cases: - print(test) - sys.exit(0) - - if args.testcases: # if testcases is specified run only those cases - cases = [c for c in cases if str(c.index) in args.testcases] - - sys.exit(0 if run(env, env_b, cases) else 1) - - -class TestCase(object): - def __init__(self, index, name, case_type): - self.name = name - self.index = index - self.case_type = case_type - - def __repr__(self): - return "#%d: %s (%s)" % (self.index, self.name, self.case_type) - - def __eq__(self, other): - return (self.index == other.index and - self.name == other.name and - self.case_type == other.case_type) - - def run(self, env_a, env_b=None): - """ - Run the test represented by this instance, against the environment(s) passed in. - - Returns a TestResult - """ - sys.stdout.write("Running test case '%s'...%s" % (self.name, "\n" if verbose else " "*(40-len(self.name)))) - mon_a = env_a.start_testcase(self) - mon_b = env_b.start_testcase(self) if env_b else None - while True: - if mon_a.get_result() and (mon_b is None or mon_b.get_result()): - break # all running test environments have finished - - # or, in the case both are running, stop as soon as either environemnt shows a failure - try: - if mon_a.get_result().is_failure(): - mon_b.cancel() - break - except AttributeError: - pass - try: - if mon_b.get_result().is_failure(): - mon_a.cancel() - break - except AttributeError: - pass - time.sleep(0.1) - - if mon_b is not None: - # return whichever result is more severe - res = max(mon_a.get_result(), mon_b.get_result()) - else: - res = mon_a.get_result() - if not verbose: # finish the line after the ... - print(TestResult.STATUS_NAMES[res.status]) - if res.is_failure(): - message = res.message - if "/" in res.message: # cut anything before the file name in the failure - message = message[message.index("/"):] - print("FAILURE MESSAGE:\n%s\n" % message) - return res - - -class TestResult(object): - """ Class to wrap a test result code and a message """ - # Test status flags, higher = more severe - CANCELLED = 0 - SKIPPED = 1 - PASSED = 2 - FAILED = 3 - ERROR = 4 - - STATUS_NAMES = { - CANCELLED: "Cancelled", - SKIPPED: "Skipped", - PASSED: "Passed", - FAILED: "Failed", - ERROR: "Error" - } - - def __init__(self, status, message): - self.status = status - self.message = message - - def is_failure(self): - return self.status >= TestResult.FAILED - - def __qe__(self, other): - if other is None: - return False - else: - return self.status == other.status - - def __lt__(self, other): - if other is None: - return False - else: - return self.status < other.status - - -class TestMonitor(object): - """ Class to monitor a running test case in a separate thread, defer reporting of the result until it's done. - - Can poll for completion by calling is_done(), read a TestResult via .get_result() - """ - def __init__(self, port, instance): - super(TestMonitor, self).__init__() - self._thread = threading.Thread(target=self._monitorThread) - self._port = port - self._instance = instance - self._result = None - self._cancelled = False - self.output = "" - self._thread.start() - - def cancel(self): - self._cancelled = True - - def is_done(self): - return self._result is not None - - def get_result(self): - return self._result - - def _monitorThread(self): - self.output = "" - start_time = time.time() - self._port.timeout = SHORT_OUTPUT_TIMEOUT - try: - while not self._cancelled and time.time() < start_time + TESTCASE_TIMEOUT: - line = self._port.readline().decode("utf-8", "ignore") - if line == "": - continue # timed out - self.output += "%s+%4.2fs %s" % (self._instance, time.time()-start_time, line) - verbose_print(line.strip()) - if line.endswith(":PASS\r\n"): - self._result = TestResult(TestResult.PASSED, "Test passed.") - return - elif ":FAIL:" in line: - self._result = TestResult(TestResult.FAILED, line) - return - elif line == TESTRUNNER_BANNER: - self._result = TestResult(TestResult.ERROR, "Test caused crash and reset.") - return - if not self._cancelled: - self._result = TestResult(TestResult.CANCELLED, "Cancelled") - else: - self._result = TestResult(TestResult.ERROR, "Test timed out") - - finally: - self._port.timeout = None - - -class TestEnvironment(object): - A = "A" - B = "B" - - def __init__(self, port, instance): - self._name = port - self._port = TestSerialPort(port, baudrate=115200) - self._instance = instance - - def reset(self): - """ Resets the test board, and waits for the test runner program to start up """ - for i in range(RESET_RETRIES): - self._port.setDTR(False) - self._port.setRTS(True) - time.sleep(0.05) - self._port.flushInput() - self._port.setRTS(False) - verbose_print("Waiting for test runner startup...") - if self._port.wait_line(lambda line: line == TESTRUNNER_BANNER): - return - else: - verbose_print("Retrying to reset the test board, attempt=%d" % - (i + 1)) - continue - raise TestRunnerError("Port %s failed to start test runner" % self._port) - - def get_testlist(self): - """ Resets the test board and returns the enumerated list of all supported tests """ - self.reset() - tests = [] - verbose_print("Enumerating tests...") - - def collect_testcases(line): - if line.startswith(">"): - return True # prompt means list of test cases is done, success - m = re.match(r"CASE (\d+) = (.+?) ([A-Z]+)", line) - if m is not None: - t = TestCase(int(m.group(1)), m.group(2), m.group(3).lower()) - verbose_print(t) - tests.append(t) - if not self._port.wait_line(collect_testcases): - raise TestRunnerError("Port %s failed to read test list" % self._port) - verbose_print("Port %s found %d test cases" % (self._name, len(tests))) - return tests - - def start_testcase(self, case): - """ Starts the specified test instance and returns a TestMonitor reader thread instance - to monitor the output - """ - # synchronously start the test case - self.reset() - if not self._port.wait_line(lambda line: line.startswith(">")): - raise TestRunnerError("Failed to read test runnner prompt") - command = "%s%d\r\n" % (self._instance, case.index) - self._port.write(command.encode("utf-8")) - return TestMonitor(self._port, self._instance) - - -def get_testdir(): - """ - Return the 'tests' directory in the source tree - (assuming the test_runner.py script is in that directory. - """ - res = os.path.dirname(__name__) - return "." if res == "" else res - - -def flash_image(serial_port): - # Bit hacky: rather than calling esptool directly, - # just use the Makefile flash target with the correct ESPPORT argument - env = dict(os.environ) - env["ESPPORT"] = serial_port - verbose_print("Building and flashing test image to %s..." % serial_port) - try: - stdout = sys.stdout if verbose else None - subprocess.check_call(["make", "flash"], cwd=get_testdir(), - stdout=stdout, stderr=subprocess.STDOUT, env=env) - except subprocess.CalledProcessError as e: - raise TestRunnerError("'make flash EPPORT=%s' failed with exit code %d" % - (serial_port, e.returncode)) - verbose_print("Flashing successful.") - - -def parse_args(): - parser = argparse.ArgumentParser(description='esp-open-rtos testrunner', prog='test_runner') - - parser.add_argument( - '--type', '-t', - help='Type of test hardware attached to serial ports A & (optionally) B', - choices=['solo', 'dual', 'eyore_test'], default='solo') - - parser.add_argument( - '--aport', '-a', - help='Serial port for device A', - default='/dev/ttyUSB0') - - parser.add_argument( - '--bport', '-b', - help='Serial port for device B (ignored if type is \'solo\')', - default='/dev/ttyUSB1') - - parser.add_argument( - '--no-flash', '-n', - help='Don\'t flash the test binary image before running tests', - action='store_true', - default=False) - - parser.add_argument( - '--list', '-l', - help='Display list of available test cases on a device', - action='store_true', - default=False) - - parser.add_argument( - '--verbose', '-v', - help='Verbose test runner debugging output', - action='store_true', - default=False) - - parser.add_argument('testcases', nargs='*', - help='Optional list of test case numbers to run. ' - 'By default, all tests are run.') - - return parser.parse_args() - - -class TestRunnerError(RuntimeError): - def __init__(self, message): - RuntimeError.__init__(self, message) - - -class TestSerialPort(serial.Serial): - def __init__(self, *args, **kwargs): - super(TestSerialPort, self).__init__(*args, **kwargs) - - def wait_line(self, callback, timeout=SHORT_OUTPUT_TIMEOUT): - """ Wait for the port to output a particular piece of line content, as judged by callback - - Callback called as 'callback(line)' and returns not-True if non-match otherwise can return any value. - - Returns first non-False result from the callback, or None if it timed out waiting for a new line. - - Note that a serial port spewing legitimate lines of output may block this function forever, if callback - doesn't detect this is happening. - """ - self.timeout = timeout - try: - res = None - while not res: - line = self.readline() - if line == b"": - break # timed out - line = line.decode("utf-8", "ignore").rstrip() - res = callback(line) - return res - finally: - self.timeout = None - -verbose = False - - -def verbose_print(msg): - if verbose: - print(msg) - -if __name__ == '__main__': - try: - main() - except TestRunnerError as e: - print(e) - sys.exit(2) diff --git a/tests/unity b/tests/unity deleted file mode 160000 index bbf2fe3..0000000 --- a/tests/unity +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bbf2fe3a934f96cd00693841247a689e57a17b0d